Redis Cluster 集群的高可用配置在工程应用中必须重视起来,下面浅浅的聊聊。
Redis 集群相关概念:
- cluster-enabled:普通的 Redis 实例是不能成为集群的一员,想要将该节点加入 Redis Cluster,需要设置 cluster-enabled yes;
- cluster-config-file:cluster-config-file nodes-6379.conf 指定集群中的每个节点文件;
- cluster-node-timeout:设置集群节点不可用的最大超时时间,节点失效检测;默认配置是 cluster-node-timeout 15000,单位是毫秒数;
集群中当一个节点向另一个节点发送PING命令,但是目标节点未在给定的时限内返回PING命令的回复时,那么发送命令的节点会将目标节点标记为PFAIL;如果master 节点超过这个时间还是无响应,则用它的从节点将启动故障迁移,升级成主节点。 - cluster-port:该端口是集群总线监听 TCP 连接的端口,默认配置为 cluster-port 0;
- cluster-replica-validity-factor:该配置用于决定当 Redis Cluster 集群中,一个 master 宕机后,如何选择一个 slave 节点完成故障转移自动恢复(failover)。如果设置为 0 ,则不管 slave 与 master 之间断开多久,都认为自己有资格成为 master;
- cluster-replica-no-failover:默认配置为 no,当配置成 yes,在master 宕机时,slave 不会做故障转移升为 master;
Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
Redis 集群搭建实例
6个节点,如192.168.1.1、192.168.1.2、192.168.1.3、192.168.1.4、192.168.1.5、192.168.1.6
删除6个节点中的aof、rdb文件,如rm -rf *.rdb *.aof
1、修改6个节点中的redis.conf
修改内容如下
...
#打开集群模式
cluster-enabled yes
...
#设定节点配置文件名
cluster-config-file nodes-6379.conf
...
#设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换
cluster-node-timeout 15000
...
2、启动6个节点的redis
启动成功后会生成nodes-6379.conf文件,通过ps -ef | grep redis查看redis是否启动成功。
3、创建集群
用redis-cli 创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)。
如
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379 --cluster-replicas 1
其中,cluster-replicas 表示复制因子 1表示 一主一从。
4、测试集群
连接任意一个客户端即可,如redis-cli -c -h 192.168.1.1 -p 6379
登录进入之后,可以通过cluster info查看集群信息,通过cluster nodes查看节点列表。
后续若有修改或补充会进行更新。