三十、Redis Cluster原生安装

版权声明:本文为博主原创文章,未经博主允许欢迎转载,请注明原文链接。一起交流,共同进步。 https://blog.csdn.net/newbie_907486852/article/details/81873508

                    Redis Cluster原生安装

1、配置开启节点

配置六个节点:7000.conf-7005.conf

其他五个配置项一样,相应的端口记日志文件改为对应的端口号就可以。

#redis基本配置
port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
dir /opt/module/redis-cluster/data
logfile "7000.log"
dbfilename "dump-7000.rdb"


//集群开关,默认是不开启集群模式。
cluster-enabled yes

//集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。
//这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,
//请确保与实例运行的系统中配置文件名称不冲突
cluster-config-file nodes-7000.conf

//默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。
//不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。
//就是有一个节点挂了这个集群还能使用
cluster-require-full-coverage no

2、启动

启动redis:

redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf

查看集群节点信息:

redis-cli -p 7000 cluster nodes

结果:

429f5d9ddfb3d75c4a296eb4e83b13d88c093376 :7000@17000 myself,master - 0 0 0 connected

查看集群信息:

redis-cli -p 7000 cluster info

结果:

cluster_state:fail            #集群状态
cluster_slots_assigned:0      #被分配的槽位数
cluster_slots_ok:0            #正确分配的槽位 
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1         #当前集群下的所有节点,包括主从节点
cluster_size:0                #当前集群下的有槽位分配的节点,即主节点
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0

3、配置节点互联互通(meet)

执行meet操作:

redis-cli -p 7000 cluster meet 127.0.0.1 7001
redis-cli -p 7000 cluster meet 127.0.0.1 7002
redis-cli -p 7000 cluster meet 127.0.0.1 7003
redis-cli -p 7000 cluster meet 127.0.0.1 7004
redis-cli -p 7000 cluster meet 127.0.0.1 7005

查看节点信息:

redis-cli -p 7000 cluster nodes

结果:

429f5d9ddfb3d75c4a296eb4e83b13d88c093376 127.0.0.1:7000@17000 myself,master - 0 1534756225000 1 connected
8c90d36a1b17307282ef7951e8b3016d2562c874 127.0.0.1:7003@17003 master - 0 1534756225088 4 connected
3ac66412b05d469d128a02402d2e938c6ac77898 127.0.0.1:7005@17005 master - 0 1534756224083 5 connected
09f4e49af7a422aa6ad88f8e90ba1632337088f8 127.0.0.1:7001@17001 master - 0 1534756227101 3 connected
f671ff63a0ba450a20b94baba5d0ab8a3b09ed76 127.0.0.1:7004@17004 master - 0 1534756226094 0 connected
a4de6e0ced28b525d0196f1d938f2e48b1f65343 127.0.0.1:7002@17002 master - 0 1534756226000 2 connected

查看集群状态:

redis-cli -p 7000 cluster info
cluster_state:fail                #失败状态
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:138
cluster_stats_messages_pong_sent:160
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:303
cluster_stats_messages_ping_received:160
cluster_stats_messages_pong_received:143
cluster_stats_messages_received:303
[root@data2 data]# redis-cli -p 7000 


4、为集群节点分配哈希槽

为7000 节点分配槽操作:

 redis-cli -p 7000 cluster addslots 0

分配槽脚本:

start=$1
end=$2
port=$3
for slot in `seq $1 $2`  
do  
    echo "slot:${slot}"
    redis-cli -p ${port} cluster addslots ${slot}
done

执行脚本:

sh addslots.sh 0 5461 7000

查看分配后的槽点:

redis-cli -p 7000 cluster info

结果:

cluster_state:ok
cluster_slots_assigned:5462
cluster_slots_ok:5462
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:1
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:880
cluster_stats_messages_pong_sent:245
cluster_stats_messages_sent:1125
cluster_stats_messages_ping_received:245
cluster_stats_messages_pong_received:242
cluster_stats_messages_received:487

查询集群节点:

redis-cli -p 7000 cluster nodes

结果:

429f5d9ddfb3d75c4a296eb4e83b13d88c093376 127.0.0.1:7000@17000 myself,master - 0 1534772654000 1 connected 0-5461
09f4e49af7a422aa6ad88f8e90ba1632337088f8 127.0.0.1:7001@17001 master - 0 1534772657000 3 connected
f671ff63a0ba450a20b94baba5d0ab8a3b09ed76 127.0.0.1:7004@17004 master - 0 1534772654000 0 connected
3ac66412b05d469d128a02402d2e938c6ac77898 127.0.0.1:7005@17005 master - 0 1534772657234 5 connected
8c90d36a1b17307282ef7951e8b3016d2562c874 127.0.0.1:7003@17003 master - 0 1534772654219 4 connected
a4de6e0ced28b525d0196f1d938f2e48b1f65343 127.0.0.1:7002@17002 master - 0 1534772656228 2 connected

分别为7000、7001节点分别槽操作:

sh addslots.sh 5462 10922 7001
sh addslots.sh 10923 16383 7002


5、主从节点分配

[root@data2 config]# redis-cli -p 7003 cluster replicate 429f5d9ddfb3d75c4a296eb4e83b13d88c093376
OK
[root@data2 config]# redis-cli -p 7004 cluster replicate 09f4e49af7a422aa6ad88f8e90ba1632337088f8
OK
[root@data2 config]# redis-cli -p 7005 cluster replicate a4de6e0ced28b525d0196f1d938f2e48b1f65343
OK

主从关系:

主:7000  ---->7003
主:7001  ---->7004
主:7002  ---->7005

*replicate 后是主节点ID,通过redis-cli -p 7000 cluster nodes查询。

查看结果:

[root@data2 config]# redis-cli -p 7000 cluster nodes
429f5d9ddfb3d75c4a296eb4e83b13d88c093376 127.0.0.1:7000@17000 myself,master - 0 1534774006000 1 connected 0-5461
09f4e49af7a422aa6ad88f8e90ba1632337088f8 127.0.0.1:7001@17001 master - 0 1534774009000 3 connected 5462-10922
f671ff63a0ba450a20b94baba5d0ab8a3b09ed76 127.0.0.1:7004@17004 slave 09f4e49af7a422aa6ad88f8e90ba1632337088f8 0 1534774010000 3 connected
3ac66412b05d469d128a02402d2e938c6ac77898 127.0.0.1:7005@17005 slave a4de6e0ced28b525d0196f1d938f2e48b1f65343 0 1534774010559 5 connected
8c90d36a1b17307282ef7951e8b3016d2562c874 127.0.0.1:7003@17003 slave 429f5d9ddfb3d75c4a296eb4e83b13d88c093376 0 1534774009555 4 connected
a4de6e0ced28b525d0196f1d938f2e48b1f65343 127.0.0.1:7002@17002 master - 0 1534774011567 2 connected 10923-16383
[root@data2 config]# redis-cli -p 7000 cluster slots

1) 1) (integer) 0
   2) (integer) 5461
   3) 1) "127.0.0.1"
      2) (integer) 7000
      3) "429f5d9ddfb3d75c4a296eb4e83b13d88c093376"
   4) 1) "127.0.0.1"
      2) (integer) 7003
      3) "8c90d36a1b17307282ef7951e8b3016d2562c874"
2) 1) (integer) 5462
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 7001
      3) "09f4e49af7a422aa6ad88f8e90ba1632337088f8"
   4) 1) "127.0.0.1"
      2) (integer) 7004
      3) "f671ff63a0ba450a20b94baba5d0ab8a3b09ed76"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 7002
      3) "a4de6e0ced28b525d0196f1d938f2e48b1f65343"
   4) 1) "127.0.0.1"
      2) (integer) 7005
      3) "3ac66412b05d469d128a02402d2e938c6ac77898"

7、为redis节点赋值

[root@data2 config]# redis-cli -c -p 7000 
127.0.0.1:7000> set hello world
OK


8、cluster信息查询

CLUSTER info:打印集群的信息。
CLUSTER nodes:列出集群当前已知的所有节点(node)的相关信息。
CLUSTER meet <ip> <port>:将ip和port所指定的节点添加到集群当中。
CLUSTER addslots <slot> [slot ...]:将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER delslots <slot> [slot ...]:移除一个或多个槽对当前节点的指派。
CLUSTER slots:列出槽位、节点信息。
CLUSTER slaves <node_id>:列出指定节点下面的从节点信息。
CLUSTER replicate <node_id>:将当前节点设置为指定节点的从节点。
CLUSTER saveconfig:手动执行命令保存保存集群的配置文件,集群默认在配置修改的时候会自动保存配置文件。
CLUSTER keyslot <key>:列出key被放置在哪个槽上。
CLUSTER flushslots:移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER countkeysinslot <slot>:返回槽目前包含的键值对数量。
CLUSTER getkeysinslot <slot> <count>:返回count个槽中的键。

CLUSTER setslot <slot> node <node_id> 将槽指派给指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。  
CLUSTER setslot <slot> migrating <node_id> 将本节点的槽迁移到指定的节点中。  
CLUSTER setslot <slot> importing <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。  
CLUSTER setslot <slot> stable 取消对槽 slot 的导入(import)或者迁移(migrate)。 

CLUSTER failover:手动进行故障转移。
CLUSTER forget <node_id>:从集群中移除指定的节点,这样就无法完成握手,过期时为60s,60s后两节点又会继续完成握手。
CLUSTER reset [HARD|SOFT]:重置集群信息,soft是清空其他节点的信息,但不修改自己的id,hard还会修改自己的id,不传该参数则使用soft方式。

CLUSTER count-failure-reports <node_id>:列出某个节点的故障报告的长度。
CLUSTER SET-CONFIG-EPOCH:设置节点epoch,只有在节点加入集群前才能设置。

猜你喜欢

转载自blog.csdn.net/newbie_907486852/article/details/81873508