Redis Cluster搭建手册--手动搭建

Redis Cluster搭建手册–手动搭建

实验环境

操作系统: Ubuntu 18.04.1 LTS
redis版本: redis 5.0.2

准备节点

Redis cluster一般要求至少拥有6个节点才能保证其完整的高可用性。需要准备conf,data,log存放路径,建议使用统一目录。

配置conf:

准备conf存放路径

root@sbc-VirtualBox:/etc/redis# mkdir -p /etc/redis/conf

创建conf文件:

root@sbc-VirtualBox:/etc/redis# vim /etc/redis/conf/redis-6379.conf

port 6379
daemonize yes
logfile "6379.log"
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file "nodes-6379.conf"

其中:

  • port:表示节点端口
  • daemonize:表示后台启动
  • cluster-enabled:表示开启集群模式
  • cluster-node-timeout:表示节点超时时间,单位为毫秒
  • cluster-config-file:表示集群内部配置文件

以同样的方式配置6380,6381,6382,6383,6384节点

启动所有节点

按顺序启动节点:

root@sbc-VirtualBox:/etc/redis/conf# redis-server /etc/redis/conf/redis-6379.conf 
4574:C 26 Dec 2018 16:01:55.891 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4574:C 26 Dec 2018 16:01:55.892 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=4574, just started
4574:C 26 Dec 2018 16:01:55.892 # Configuration loaded

查看各个机器集群节点信息:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster nodes
977a8e55f87bf5347984f2bf1cbe0b47fca36172 :6379@16379 myself,master - 0 0 0 connected

每个节点目前只能识别出自己的节点信息。我们启动6个节点,但每个节点彼此并不知道对方的存在。

节点握手

节点握手是指一批运行在集群模式下的节点通过Gossip协议彼此通信,达到感知对方的过程。

在6379端执行与6380端的握手指令:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster meet 127.0.0.1 6380
OK

再次查看6379端的集群节点信息:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster nodes
f5ddfe386de185424d94045cfb0c010339f222d3 127.0.0.1:6380@16380 master - 0 1545812320154 0 connected
977a8e55f87bf5347984f2bf1cbe0b47fca36172 127.0.0.1:6379@16379 myself,master - 0 0 1 connected

6379节点已感知到6380节点的存在,并加入集群。同样的6380节点也感知到了6379节点。

握手流程:

  • 1.节点6379本地创建6380节点信息对象,并发送meet消息。
  • 2.节点6380接受到meet消息后,保存6379节点信息并回复pong消息。
  • 3.之后节点6379和6380彼此定期通过ping/pong消息进行正常的节点通信。

同理将其他节点加入集群:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster meet 127.0.0.1 6381
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster meet 127.0.0.1 6382
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster meet 127.0.0.1 6383
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster meet 127.0.0.1 6384
OK

再次检查集群node状况:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster nodes
f5ddfe386de185424d94045cfb0c010339f222d3 127.0.0.1:6380@16380 master - 0 1545812582000 0 connected
2a24f3daf6f63c9bc6dfd9f16fb4b7724ec22e0e 127.0.0.1:6381@16381 master - 0 1545812581000 2 connected
3b8d52fd5bcb858ca3531c4aa7c8864617d42339 127.0.0.1:6382@16382 master - 0 1545812582863 4 connected
3da74794fc1b7ec64100ebedbb62370865488409 127.0.0.1:6383@16383 master - 0 1545812583868 3 connected
977a8e55f87bf5347984f2bf1cbe0b47fca36172 127.0.0.1:6379@16379 myself,master - 0 1545812582000 1 connected
12aa479a4c3dca8ee6f9239590830b36d028d9bf 127.0.0.1:6384@16384 master - 0 1545812583000 5 connected

六个节点已经组成一个集群组,握手成功。

分配槽

redis cluster使用的是基于虚拟槽hash分区模式,他将所有数据映射到0~16383这16384个槽中。当没有分配槽的时候,集群是无法使用的:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 set abc a
(error) CLUSTERDOWN Hash slot not served

查看集群状态为fail:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 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:404
cluster_stats_messages_pong_sent:413
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:822
cluster_stats_messages_ping_received:413
cluster_stats_messages_pong_received:409
cluster_stats_messages_received:822

只有当节点分配了槽,才能响应相关命令。

分配槽给主节点

将槽平均分给三个主节点:6379,6380,6381

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0..5461}
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -h 127.0.0.1 -p 6380 cluster addslots {5462..10922}
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -h 127.0.0.1 -p 6381 cluster addslots {10923..16383}
OK

再次查看集群状态:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 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:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1032
cluster_stats_messages_pong_sent:1061
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:2098
cluster_stats_messages_ping_received:1061
cluster_stats_messages_pong_received:1037
cluster_stats_messages_received:2098

集群状态已经变为ok,正常的槽点也是16384个

为每个主节点分别配置从节点

作为一个完整的集群,每个负责处理槽的节点应该具有从节点,保证当它出现故障时可以自动进行故障转移。

确定各个节点状态:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster nodes
f5ddfe386de185424d94045cfb0c010339f222d3 127.0.0.1:6380@16380 master - 0 1545813356705 0 connected 5462-10922
2a24f3daf6f63c9bc6dfd9f16fb4b7724ec22e0e 127.0.0.1:6381@16381 master - 0 1545813357707 2 connected 10923-16383
3b8d52fd5bcb858ca3531c4aa7c8864617d42339 127.0.0.1:6382@16382 master - 0 1545813357000 4 connected
3da74794fc1b7ec64100ebedbb62370865488409 127.0.0.1:6383@16383 master - 0 1545813356000 3 connected
977a8e55f87bf5347984f2bf1cbe0b47fca36172 127.0.0.1:6379@16379 myself,master - 0 1545813357000 1 connected 0-5461
12aa479a4c3dca8ee6f9239590830b36d028d9bf 127.0.0.1:6384@16384 master - 0 1545813355000 5 connected

分别为每个主节点添加从节点:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6382 cluster replicate 977a8e55f87bf5347984f2bf1cbe0b47fca36172
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6383 cluster replicate f5ddfe386de185424d94045cfb0c010339f222d3
OK
root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6384 cluster replicate 2a24f3daf6f63c9bc6dfd9f16fb4b7724ec22e0e
OK

再次查看集群各节点状态:

root@sbc-VirtualBox:/etc/redis/conf# redis-cli -p 6379 cluster nodes
f5ddfe386de185424d94045cfb0c010339f222d3 127.0.0.1:6380@16380 master - 0 1545813625690 0 connected 5462-10922
2a24f3daf6f63c9bc6dfd9f16fb4b7724ec22e0e 127.0.0.1:6381@16381 master - 0 1545813624686 2 connected 10923-16383
3b8d52fd5bcb858ca3531c4aa7c8864617d42339 127.0.0.1:6382@16382 slave 977a8e55f87bf5347984f2bf1cbe0b47fca36172 0 1545813625000 4 connected
3da74794fc1b7ec64100ebedbb62370865488409 127.0.0.1:6383@16383 slave f5ddfe386de185424d94045cfb0c010339f222d3 0 1545813623000 3 connected
977a8e55f87bf5347984f2bf1cbe0b47fca36172 127.0.0.1:6379@16379 myself,master - 0 1545813624000 1 connected 0-5461
12aa479a4c3dca8ee6f9239590830b36d028d9bf 127.0.0.1:6384@16384 slave 2a24f3daf6f63c9bc6dfd9f16fb4b7724ec22e0e 0 1545813624000 5 connected

如此,集群搭建完成

猜你喜欢

转载自blog.csdn.net/sunbocong/article/details/85264725