• 四 、Redis 集群的搭建


    5.1 redis-cluster 架构图
    redis-cluster 投票:容错
    架构细节:
    (1)所有的 redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带宽.
    (2)节点的 fail 是通过集群中超过半数的节点检测失效时才生效.
    (3)客户端与 redis 节点直连,不需要中间 proxy 层.客户端不需要连接集群所有节点,连接集群中任何一个可用
    节点即可
    (4)redis-cluster 把所有的物理节点映射到[0-16383]slot 上,cluster 负责维护 node<->slot<->value
    Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key
    使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在
    0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

     

    5.2 Redis 集群规划
    Redis 集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。
    Redis 集群至少需要 6 台服务器。
    搭建伪分布式。可以使用一台虚拟机运行 6 个 redis 实例。需要修改 redis 的端口号 7001-7006
    5.3 集群搭建环境
    1、使用 ruby 脚本搭建集群。需要 ruby 的运行环境。
    安装 ruby
    yum install ruby
    yum install rubygems
    2、安装 ruby 脚本运行使用的包。
    [root@localhost ~]# gem install redis-3.0.0.gem
    Successfully installed redis-3.0.0
    1 gem installed
    Installing ri documentation for redis-3.0.0...
    Installing RDoc documentation for redis-3.0.0...
    5.4 搭建步骤
    需要 6 台 redis 服务器。搭建伪分布式。
    需要 6 个 redis 实例。
    需要运行在不同的端口 7001-7006
    第一步:创建 6 个 redis 实例,每个实例运行在不同的端口。需要修改 redis.conf 配置文件。
    配置文件中还需要把 cluster-enabled yes(632 行)前的注释去掉。修改端口(45 行)
    每一台设置后台启动 daemonize yes 
    第二步:启动每个 redis 实例。
    Vi start-all.sh 
    #!/bin/bash 
    for I in {1..6} 
    do
    echo "start 700$I redis" 
    cd /usr/local/redis-cluster/700$I/bin 
    ./redis-server redis.conf 
    echo "700$I redis started" 
    done
    第三步:使用 ruby 脚本搭建集群。
    将 redis-trib.rb 复制到/usr/local/redis-cluster 下
    cp ~/redis-3.0.0/src/redis-trib.rb /usr/local/redis-cluster/
    cd /usr/local/redis-cluster/
    运行 redis-trib.rb 脚本 
    ./redis-trib.rb create --replicas 1 
    192.168.81.142:7001 192.168.81.142:7002
    192.168.81.142:7003 192.168.81.142:7004
    192.168.81.142:7005 192.168.81.142:7006
    >>> Creating cluster
    Connecting to node 192.168.81.142:7001: OK
    Connecting to node 192.168.81.142:7002: OK
    Connecting to node 192.168.81.142:7003: OK
    Connecting to node 192.168.81.142:7004: OK
    Connecting to node 192.168.81.142:7005: OK
    Connecting to node 192.168.81.142:7006: OK
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    192.168.81.142:7001
    192.168.81.142:7002
    192.168.81.142:7003
    Adding replica 192.168.81.142:7004 to 192.168.81.142:7001
    Adding replica 192.168.81.142:7005 to 192.168.81.142:7002
    Adding replica 192.168.81.142:7006 to 192.168.81.142:7003
    M: 7ca25ac01d3da5efb9f25aa7259e24cd9d16910d 192.168.81.142:7001
    slots:0-5460 (5461 slots) master
    M: 2c39ffee04aed3d1100b6b9d6640b630bcc295e1 192.168.81.142:7002
    slots:5461-10922 (5462 slots) master
    M: ab054ceb45e6c4e3d1efee645a8fb7d64abd28b5 192.168.81.142:7003
    slots:10923-16383 (5461 slots) master
    S: ad2e038493605c98f7b516877d393fe21f3fbf85 192.168.81.142:7004
    replicates 7ca25ac01d3da5efb9f25aa7259e24cd9d16910d
    S: 35859f9240701728bf93b0cd6868816e4efdbd67 192.168.81.142:7005
    replicates 2c39ffee04aed3d1100b6b9d6640b630bcc295e1
    S: 0b6c9898513c50f74ef4a690e1c07c04140cef7f 192.168.81.142:7006
    replicates ab054ceb45e6c4e3d1efee645a8fb7d64abd28b5
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join.....
    >>> Performing Cluster Check (using node 192.168.81.142:7001)M: 7ca25ac01d3da5efb9f25aa7259e24cd9d16910d 192.168.81.142:7001
    slots:0-5460 (5461 slots) master
    M: 2c39ffee04aed3d1100b6b9d6640b630bcc295e1 192.168.81.142:7002
    slots:5461-10922 (5462 slots) master
    M: ab054ceb45e6c4e3d1efee645a8fb7d64abd28b5 192.168.81.142:7003
    slots:10923-16383 (5461 slots) master
    M: ad2e038493605c98f7b516877d393fe21f3fbf85 192.168.81.142:7004
    slots: (0 slots) master
    replicates 7ca25ac01d3da5efb9f25aa7259e24cd9d16910d
    M: 35859f9240701728bf93b0cd6868816e4efdbd67 192.168.81.142:7005
    slots: (0 slots) master
    replicates 2c39ffee04aed3d1100b6b9d6640b630bcc295e1
    M: 0b6c9898513c50f74ef4a690e1c07c04140cef7f 192.168.81.142:7006
    slots: (0 slots) master
    replicates ab054ceb45e6c4e3d1efee645a8fb7d64abd28b5
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered. 
    第四步:使用集群
    随便找一台机器连接即可,但是要加-c 参数 代表连接的是集群
    7004/bin/redis-cli -h 192.168.81.142 -p 7004 -c
    第五步 :停止集群
    Vi stop-all.sh 
    #!/bin/bash 
    cd /usr/local/redis-cluster/7001/bin 
    for I in {1..6} 
    do
    echo "stop 700$I redis" 
    ./redis-cli -p 700$I shutdown 
    echo "700$I redis stoped" 
    done
     
  • 相关阅读:
    使用Nginx实现反向代理
    nginx配置
    jsonp跨域实现单点登录,跨域传递用户信息以及保存cookie注意事项
    jsonp形式的ajax请求:
    面试题
    PHP设计模式_工厂模式
    Redis限制在规定时间范围内登陆错误次数限制
    HTTP 状态码简介(对照)
    Django 进阶(分页器&中间件)
    Django 之 权限系统(组件)
  • 原文地址:https://www.cnblogs.com/JBLi/p/11375668.html
Copyright © 2020-2023  润新知