暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis-cluster 集群搭建

老码农空杯修行记 2020-09-11
270

机器资源准备

     # 机器 1
    10.120.13.202:6379
     10.120.13.202:6380 
     
     # 机器 2
     10.120.13.207:6379 
     10.120.13.207:6380 
     
     # 机器 3
     10.120.13.209:6379 
     10.120.13.209:6380
    配置准备
    先看看几个相关集群的配置
    • cluster-enabledyes/no, redis模式,yes为集群模式,否则为普通模式
    • cluster-config-file: 集群配置文件,存储集群节点列表,用户不用编辑,redis 自动生成
      # 节点ID  ip:port@tcp_bus_port master/slave/myself 节点对应主节点id/- ping_ts pong_ts 节点配置版本 连接状态 槽位信息
      d16e227af18daf265d5bbd5183a227b754ca7812 10.120.13.207:6380@16380 slave 3e816f1768d6388fbff2c7e72035251c0408d6ae 0 1599648012641 4 connected
      57a26110c251688de48641853a9761336c576811 10.120.13.207:6379@16379 master - 0 1599648010634 3 connected 5461-10922
      bdf749bb3d39421c806fd6e8a666d068ec9351c4 10.120.13.209:6380@16380 slave 57a26110c251688de48641853a9761336c576811 0 1599648010000 6 connected
      35a188ae062bd6f8706f0b65674a234c6fde2752 10.120.13.202:6380@16380 slave 06ea3111d88082cb1d2b6959a4de730f7e6940cf 0 1599648011638 5 connected
      06ea3111d88082cb1d2b6959a4de730f7e6940cf 10.120.13.209:6379@16379 master - 0 1599648012000 5 connected 10923-16383
      3e816f1768d6388fbff2c7e72035251c0408d6ae 10.120.13.202:6379@16379 myself,master - 0 1599648009000 1 connected 0-5460
      vars currentEpoch 6 lastVoteEpoch 0
      • cluster-node-timeout:毫秒,节点不可用最大时长,超过此时间将故障转移处理,从节点竞选为主
      所有节点配置大致相同,拷贝修改端口,ip,磁盘文件名即可。不用使用slaveof 命令指定谁从谁主,集群会自动配置
        bind 10.120.13.202
        port 6380
        daemonize yes


        # 进程号和log存储位置
        pidfile "/var/run/redis/redis-server-6380.pid"
        logfile "/var/log/redis/redis-server-6380.log"


        # 快照配置
        save 3600 1
        stop-writes-on-bgsave-error yes
        rdbcompression yes
        rdbchecksum yes
        dbfilename "dump-6380.rdb"


        # 持久化文件,node列表存储目录
        dir "/var/lib/redis"


        # 集群模式开启
        cluster-enabled yes


        # 集群节点列表信息,默认 var/lib/redis
        cluster-config-file nodes-6380.conf


        cluster-node-timeout 5000


        安装 redis-cli 工具

        此步非必须,检查redis 版本若在5.0以上就不需要这一步。对于低于5.0的,redis-cli 不支持创建集群功能,所以这里编译一个 redis-cli 工具

          #  下载 5.0.9 版本
          root@lacr_r1: ~/# wget http://download.redis.io/releases/redis-5.0.9.tar.gz
          # 解压和编译
          root@lacr_r1: ~/# tar xf redis-5.0.9.tar.gz
          root@lacr_r1: ~/# cd ~/redis-5.0.9
          root@lacr_r1:~/redis-5.0.9# make
          启动 redis 节点
            $: scp redis-6379.conf root@10.120.13.202:/etc/redis/
            $: scp redis-6380.conf root@10.120.13.202:/etc/redis/
            $: ssh root@10.120.13.202
            $: (redis-server etc/redis/redis-6379.conf &)
            $: (redis-server /etc/redis/redis-6380.conf &)
            $: exit


            # 修改配置中的端口,ip
            $: scp redis-6379.conf root@10.120.13.207:/etc/redis/
            $: scp redis-6380.conf root@10.120.13.207:/etc/redis/
            $: ssh root@10.120.13.207
            $: (redis-server etc/redis/redis-6379.conf &)
            $: (redis-server etc/redis/redis-6380.conf &)
            $: exit


            # 修改配置中的端口,ip
            $: scp redis-6379.conf root@10.120.13.209:/etc/redis/
            $: scp redis-6380.conf root@10.120.13.209:/etc/redis/
            $: ssh root@10.120.13.209
            $: (redis-server /etc/redis/redis-6379.conf &)
            $: (redis-server /etc/redis/redis-6380.conf &)
            $: exit
            创建集群

            令很简单,只需要指定节点列表和从节点数即可,如下:

              # 若不指定从节点数,默认会将所有的节点设置为主节点
              redis-cli --cluster create ip1:port1 ip2:port2 ... --cluster-replicas 从节点数
              创建集群
                root@lacr_r1:~/redis-5.0.9/src# ./redis-cli --cluster create 10.120.13.202:6379 10.120.13.202:6380 10.120.13.207:6379 10.120.13.207:6380 10.120.13.209:6379 10.120.13.209:6380 --cluster-replicas 1
                >>> Performing hash slots allocation on 6 nodes...
                Master[0] -> Slots 0 - 5460
                Master[1] -> Slots 5461 - 10922
                Master[2] -> Slots 10923 - 16383
                Adding replica 10.120.13.207:6380 to 10.120.13.202:6379
                Adding replica 10.120.13.209:6380 to 10.120.13.207:6379
                Adding replica 10.120.13.202:6380 to 10.120.13.209:6379
                M: 3e816f1768d6388fbff2c7e72035251c0408d6ae 10.120.13.202:6379
                slots:[0-5460] (5461 slots) master
                S: 35a188ae062bd6f8706f0b65674a234c6fde2752 10.120.13.202:6380
                replicates 06ea3111d88082cb1d2b6959a4de730f7e6940cf
                M: 57a26110c251688de48641853a9761336c576811 10.120.13.207:6379
                slots:[5461-10922] (5462 slots) master
                S: d16e227af18daf265d5bbd5183a227b754ca7812 10.120.13.207:6380
                replicates 3e816f1768d6388fbff2c7e72035251c0408d6ae
                M: 06ea3111d88082cb1d2b6959a4de730f7e6940cf 10.120.13.209:6379
                slots:[10923-16383] (5461 slots) master
                S: bdf749bb3d39421c806fd6e8a666d068ec9351c4 10.120.13.209:6380
                replicates 57a26110c251688de48641853a9761336c576811
                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 10.120.13.202:6379)
                M: 3e816f1768d6388fbff2c7e72035251c0408d6ae 10.120.13.202:6379
                slots:[0-5460] (5461 slots) master
                1 additional replica(s)
                S: d16e227af18daf265d5bbd5183a227b754ca7812 10.120.13.207:6380
                slots: (0 slots) slave
                replicates 3e816f1768d6388fbff2c7e72035251c0408d6ae
                M: 57a26110c251688de48641853a9761336c576811 10.120.13.207:6379
                slots:[5461-10922] (5462 slots) master
                1 additional replica(s)
                S: bdf749bb3d39421c806fd6e8a666d068ec9351c4 10.120.13.209:6380
                slots: (0 slots) slave
                replicates 57a26110c251688de48641853a9761336c576811
                S: 35a188ae062bd6f8706f0b65674a234c6fde2752 10.120.13.202:6380
                slots: (0 slots) slave
                replicates 06ea3111d88082cb1d2b6959a4de730f7e6940cf
                M: 06ea3111d88082cb1d2b6959a4de730f7e6940cf 10.120.13.209:6379
                slots:[10923-16383] (5461 slots) master
                1 additional replica(s)
                [OK] All nodes agree about slots configuration.
                >>> Check for open slots...
                >>> Check slots coverage...
                [OK] All 16384 slots covered.
                集群信息查看
                  root@lacr_r1:~/redis-5.0.9/src# redis-cli -h lacr_r1
                  lacr_r1:6379> 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:88
                  cluster_stats_messages_pong_sent:97
                  cluster_stats_messages_sent:185
                  cluster_stats_messages_ping_received:92
                  cluster_stats_messages_pong_received:88
                  cluster_stats_messages_meet_received:5
                  cluster_stats_messages_received:185
                  集群槽位信息查看
                    lacr_r1:6379> CLUSTER SLOTS
                    1) 1) (integer) 5461          # 节点1,槽位范围
                       2) (integer) 10922         #  [5461, 10922]         
                    3) 1) "10.120.13.207" # 主节点
                    2) (integer) 6379
                    3) "57a26110c251688de48641853a9761336c576811"
                       4) 1) "10.120.13.209"      # 从节点
                    2) (integer) 6380
                    3) "bdf749bb3d39421c806fd6e8a666d068ec9351c4"
                    2) 1) (integer) 10923
                    2) (integer) 16383
                    3) 1) "10.120.13.209"
                    2) (integer) 6379
                    3) "06ea3111d88082cb1d2b6959a4de730f7e6940cf"
                    4) 1) "10.120.13.202"
                    2) (integer) 6380
                    3) "35a188ae062bd6f8706f0b65674a234c6fde2752"
                    3) 1) (integer) 0
                    2) (integer) 5460
                    3) 1) "10.120.13.202"
                    2) (integer) 6379
                    3) "3e816f1768d6388fbff2c7e72035251c0408d6ae"
                    4) 1) "10.120.13.207"
                    2) (integer) 6380
                    3) "d16e227af18daf265d5bbd5183a227b754ca7812"
                    lacr_r1:6379>
                    集群创建脚本
                      https://github.com/dingkegithub/redis-cluster
                      文章转载自老码农空杯修行记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论