• 34_创建Redis集群 管理集群


    版本:4.0.8

    环境准备 准备 6台(51-56) redis服务器  以默认配置运行redis服务即可
    一.创建Redis集群
    1.启用集群功能( 51-56 都要配置)
    ]# netstat -antupl |grep :6379(要有东西)
    ]# /etc/init.d/redis_6379 stop
     
    *一一对应,以52为例*
    ]# vim /etc/redis/6379.conf
    70 bind 192.168.4.52
    93 port 6352
    815 cluster-enabled yes
    823 cluster-config-file nodes-6352.conf
    829 cluster-node-timeout 5000
    :wq
     
    ]# /etc/init.d/redis_6379 start
     
    ]# netstat -utnlp  | grep redis-server
    tcp  0  0 192.168.4.52:6352  0.0.0.0:* LISTEN      7469/redis-server 1
    tcp  0  0 192.168.4.52:16352 0.0.0.0:* LISTEN      7469/redis-server 1
     
    ]# cat /var/lib/redis/6379/nodes-6352.conf  查看集群信息文件
    47b98f4c7d16486e5f8032e7a420675a025dd090 :0@0 myself,master - 0 0 0 connected
    vars currentEpoch 0 lastVoteEpoch 0
     
    2 创建集群
    2.1 部署ruby脚本执行环境 (192.168.4.51)  
    ]# yum -y install ruby rubygems uby-devel
    ]# gem install redis-3.2.1.gem
    ]# gem install redis-3.2.1.gem
    Successfully installed redis-3.2.1
    Parsing documentation for redis-3.2.1
    Installing ri documentation for redis-3.2.1
    1 gem installed
     
    2.2 创建管理集群的ruby脚本
    ]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    ]# mkdir /root/bin
    ]# cp redis-4.0.8/src/redis-trib.rb /root/bin/
    ]# chmod +x /root/bin/redis-trib.rb
    ]# redis-trib.rb help
    Usage: redis-trib <command> <options> <arguments ...>

      create          host1:port1 ... hostN:portN
                      --replicas <arg>
      check           host:port
      info            host:port
      fix             host:port
                      --timeout <arg>
      reshard         host:port
                      --from <arg>
                      --to <arg>
                      --slots <arg>
                      --yes
                      --timeout <arg>
                      --pipeline <arg>
      rebalance       host:port
                      --weight <arg>
                      --auto-weights
                      --use-empty-masters
                      --timeout <arg>
                      --simulate
                      --pipeline <arg>
                      --threshold <arg>
      add-node        new_host:new_port existing_host:existing_port
                      --slave
                      --master-id <arg>
      del-node        host:port node_id
      set-timeout     host:port milliseconds
      call            host:port command arg arg .. arg
      import          host:port
                      --from <arg>
                      --copy
                      --replace
      help            (show this help)
     
    2.3 创建集群
    ]# redis-trib.rb create --replicas 1
    > 192.168.4.51:6351  192.168.4.52:6352
    > 192.168.4.53:6353  192.168.4.54:6354
    > 192.168.4.55:6355  192.168.4.56:6356
    ...
    Can I set the above configuration? (type 'yes' to accept): yes(输入yes)
    ...
    [OK] All 16384 slots covered.
     
    3 查看集群中主机状态信息
    ]# cat /var/lib/redis/6379/nodes-6351.conf
    ]# redis-cli -h 192.168.4.51 -p 6351
    > cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:1
    cluster_stats_messages_ping_sent:189
    cluster_stats_messages_pong_sent:175
    cluster_stats_messages_sent:364
    cluster_stats_messages_ping_received:170
    cluster_stats_messages_pong_received:189
    cluster_stats_messages_meet_received:5
    cluster_stats_messages_received:364

    > cluster nodes
    47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352@16352 master - 0 1580813019504 2 connected 5461-10922
    3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353@16353 master - 0 1580813018602 3 connected 10923-16383
    e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355@16355 slave d9e8b7d81f4dff3d3157747e92b521220774da8b 0 1580813019104 5 connected
    2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356@16356 slave 47b98f4c7d16486e5f8032e7a420675a025dd090 0 1580813019605 6 connected
    43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354@16354 slave 3680239417226f1e0cc1b744e822de5c85b84890 0 1580813019104 4 connected
    d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351@16351 myself,master - 0 1580813018000 1 connected 0-5460

    集群创建失败的解决办法
    ]# redis-cli -h x.x.x.x -p xxxx shutdown
    ]# rm -rf /var/lib/redis/6379/*
    ]# /etc/init.d/redis_6379 start
    ]# netstat -utnlp  | grep redis_server
    再次执行创建集群命令
     
    4 测试集群 在192.168.4.50 访问集群存取数据(可以连接任意一台主库的ip地址)
    ]# redis-cli -c -h 192.168.4.51 -p 6351
    192.168.4.51:6351> keys *
    (empty list or set)

    192.168.4.51:6351> set x 101
    -> Redirected to slot [16287] located at 192.168.4.53:6353
    OK

    192.168.4.53:6353> keys * (现在自动切换到6353库)
    1) "x"
     
    主库对应的从库,会自动把数据同步到本机。
    在管理主机51上 执行如下操作
    ]# redis-trib.rb info 192.168.4.51:6351  查看数据存储情况
    192.168.4.51:6351 (d9e8b7d8...) -> 0 keys | 5461 slots | 1 slaves.
    192.168.4.52:6352 (47b98f4c...) -> 0 keys | 5462 slots | 1 slaves.
    192.168.4.53:6353 (36802394...) -> 1 keys | 5461 slots | 1 slaves.
    [OK] 1 keys in 3 masters.
    0.00 keys per slot on average.
     
    ]# redis-trib.rb check 192.168.4.51:6351 查看集群信息
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    M: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    S: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots: (0 slots) slave
       replicates 47b98f4c7d16486e5f8032e7a420675a025dd090
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    主库  从库
    51 -- 55
    52 -- 56
    53 -- 54
     
    主库 宕机后,对应的从库会自动升级为主库(52宕机,56主库)
    ]# redis-cli -h 192.168.4.52 -p 6352 shutdown
    ]# redis-trib.rb check 192.168.4.51:6351
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:5461-10922 (5462 slots) master
       0 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
     
    开启52,变为56的从库
    mysql52]# /etc/init.d/redis_6379 start
    ]# redis-trib.rb check 192.168.4.51:6351
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots: (0 slots) slave
       replicates 2384a45084fec6db31e3331912c92379c45bd4bd
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    二.管理集群
     
    准备2台新的虚拟机ip 地址分别为 192.168.4.57  192.168.4.58
    运行redis服务并启用的集群配置
     
    ]# /etc/init.d/redis_6379 stop
    ]# vim /etc/redis/6379.conf(52为例子)
    70 bind 192.168.4.52
    93 port 6352
    815 cluster-enabled yes
    823 cluster-config-file nodes-6352.conf
    829 cluster-node-timeout 5000
    :wq
    ]# /etc/init.d/redis_6379 start
    ]# netstat -utnlp  | grep redis-server
     
    2.1 向集群里添加新主机
     
    2.1.1 添加master角色主机  (添加 192.168.4.57,在51操作)
    ]# redis-trib.rb add-node 192.168.4.57:6357 192.168.4.51:6351
    ]# redis-trib.rb check 192.168.4.51:6351 查看
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots: (0 slots) slave
       replicates 2384a45084fec6db31e3331912c92379c45bd4bd
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    M: 44077cd747b4b32b9026a8f8ae2c0a1a4cca7441 192.168.4.57:6357
       slots: (0 slots) master
       0 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    ]# redis-trib.rb reshard 192.168.4.51:6351 重新分片
    指定移出hash槽个数    4096
    指定接收hash槽主机ID 57主机的ID值 440...
    指定移出hash槽主机ID all
    同意这样分片 yes
     
    查看分片
    ]# redis-trib.rb check 192.168.4.51:6351
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:1365-5460 (4096 slots) master
       1 additional replica(s)
    S: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots: (0 slots) slave
       replicates 2384a45084fec6db31e3331912c92379c45bd4bd
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:12288-16383 (4096 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:6827-10922 (4096 slots) master
       1 additional replica(s)
    M: 44077cd747b4b32b9026a8f8ae2c0a1a4cca7441 192.168.4.57:6357
       slots:0-1364,5461-6826,10923-12287 (4096 slots) master
       0 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
     
    客户端连接主库57 可以存取数据
    ]# redis-cli -c -h 192.168.4.57 -p 6357
    192.168.4.57:6357> ping
    PONG
    192.168.4.57:6357> set key 111
    -> Redirected to slot [12539] located at 192.168.4.53:6353
    OK
    192.168.4.53:6353> get key
    "111"
    192.168.4.53:6353> keys *
    1) "key"
    2) "x"
     
    2.1.2 添加slave角色主机 (添加slave 192.168.4.58 51上操作)
    ]# redis-trib.rb add-node --slave 192.168.4.58:6358 192.168.4.51:6351
    ]# redis-trib.rb check 192.168.4.51:6351
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:1365-5460 (4096 slots) master
       1 additional replica(s)
    S: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots: (0 slots) slave
       replicates 2384a45084fec6db31e3331912c92379c45bd4bd
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:12288-16383 (4096 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:6827-10922 (4096 slots) master
       1 additional replica(s)
    S: a02f23b9cd8410c03d047433d48ad4b73e6dea19 192.168.4.58:6358
       slots: (0 slots) slave
       replicates 44077cd747b4b32b9026a8f8ae2c0a1a4cca7441
    M: 44077cd747b4b32b9026a8f8ae2c0a1a4cca7441 192.168.4.57:6357
       slots:0-1364,5461-6826,10923-12287 (4096 slots) master
       1 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    自动分配给57
     
    客户端连接主库58 可以查看到数据
    ]# redis-cli -c -h 192.168.4.58 -p 6358
    192.168.4.58:6358> set t2 333
    -> Redirected to slot [4748] located at 192.168.4.51:6351
    OK
    192.168.4.51:6351> keys *
    1) "t2"
    192.168.4.51:6351> set t3 444
    -> Redirected to slot [685] located at 192.168.4.57:6357
    OK
    192.168.4.57:6357> keys *
    1) "t3"
    192.168.4.57:6357> set t4 444
    -> Redirected to slot [12874] located at 192.168.4.53:6353
    OK
    192.168.4.53:6353> keys *
    1) "t4"
    2) "key"
    3) "x"
     
    2.2 从集群里移除主机
    2.2.1 移除slave角色主机  (移除192.168.4.58,51操作)
    redis-trib.rb del-node 任意主机 被移除主机ID(slave主机没有haxi槽,可直接移除)
    ]# redis-trib.rb del-node 192.168.4.51:6351 a02f23b9cd8410c03d047433d48ad4b73e6dea19
    >>> Removing node a02f23b9cd8410c03d047433d48ad4b73e6dea19 from cluster 192.168.4.51:6351
    >>> Sending CLUSTER FORGET messages to the cluster...
    >>> SHUTDOWN the node.

    ]# redis-trib.rb check 192.168.4.51:6351
    此时没有58的slave信息
     
    2.2.2 移除master角色主机  (移除 192.168.4.57 51操作)
    释放占用的hash槽
    ]# redis-trib.rb reshard 192.168.4.51:6351
        指定移出hash槽个数     4096
        指定接收hash槽主机ID  写任意一个主库ID值
       Source node #1:     写57主机的ID值
       Source node #2:     done
        同意这样分片             yes

    移除master主机
    ]# redis-trib.rb del-node 192.168.4.51:6351 44077cd747b4b32b9026a8f8ae2c0a1a4cca7441
    检测集群
    ]# redis-trib.rb check 192.168.4.51:6351
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:1365-5460 (4096 slots) master
       1 additional replica(s)
    S: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots: (0 slots) slave
       replicates 2384a45084fec6db31e3331912c92379c45bd4bd
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:12288-16383 (4096 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:0-1364,5461-12287 (8192 slots) master
       1 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
     
    重新平均分配hash槽
    ]# redis-trib.rb rebalance 192.168.4.51:6351
    ]# redis-trib.rb check 192.168.4.51:6351 查看
    >>> Performing Cluster Check (using node 192.168.4.51:6351)
    M: d9e8b7d81f4dff3d3157747e92b521220774da8b 192.168.4.51:6351
       slots:0-5461 (5462 slots) master
       1 additional replica(s)
    S: 47b98f4c7d16486e5f8032e7a420675a025dd090 192.168.4.52:6352
       slots: (0 slots) slave
       replicates 2384a45084fec6db31e3331912c92379c45bd4bd
    M: 3680239417226f1e0cc1b744e822de5c85b84890 192.168.4.53:6353
       slots:5462-6826,12288-16383 (5461 slots) master
       1 additional replica(s)
    S: e528e231af6cb62ade68202e9fee2b5b090c9025 192.168.4.55:6355
       slots: (0 slots) slave
       replicates d9e8b7d81f4dff3d3157747e92b521220774da8b
    M: 2384a45084fec6db31e3331912c92379c45bd4bd 192.168.4.56:6356
       slots:6827-12287 (5461 slots) master
       1 additional replica(s)
    S: 43eb87ced708e2845e5b58618c817e2e1535e882 192.168.4.54:6354
       slots: (0 slots) slave
       replicates 3680239417226f1e0cc1b744e822de5c85b84890
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    把redis集群里的主机 恢复为独立的redis服务器(51-58)
    ]# redis-cli -h 192.168.4.51 -p 6351 shutdown
    ]# rm -rf /var/lib/redis/6379/*
    ]# vim /etc/redis/6379.conf  (把与集群配置相关的 3项 注释)
    ]# /etc/init.d/redis_6379 start
    ]# netstat -utnlp | grep redis-server

  • 相关阅读:
    绝对定位和浮动的区别和运用
    xhtml css 漏 整理
    网站自适应设备屏幕
    CSS 媒体查询 响应式
    js/jquery判断浏览器 & 停止加载
    回调函数之同步调用、回调、异步调用
    Flash生成HTML5动画方法
    在html页面中使用js变量
    BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)
    NOI2019游记
  • 原文地址:https://www.cnblogs.com/luwei0915/p/12260729.html
Copyright © 2020-2023  润新知