redis-cluster架构图
1)所有的redis节点彼此互联(PING-PONG),内部使用二进制协议优化传输速度和带宽。
2)节点的fail是通过集群中超过半数的节点检测有效时整个集群才生效。
3)客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群所有节点,连接集群中任何一个节点即可。
4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->value
Redis集群中内置了16384 个哈希槽,当需要在 Redis 集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点
示例如下:
redis-cluster 投票:容错
心跳机制
1)集群中所有master参与投票,如果半数以上master节点与其中一个master节点通信超过(cluster-node-timeout),认为该master节点挂掉。
2)什么时候整个集群不可用(cluster_state:fail)?
如果集群任意master挂掉,且当前master没有slave,则集群进入fail状态。也可以理解成集群的[0-16383]slot映射不完全时进入fail状态。
如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态。
标注地方要随端口号依次更改 7001对应7001端口
修改 appendonly yes
当我们采用yes时,redis会在后台运行,此时redis将一直运行,除非手动kill该进程。同时将进程pid号写入至redis.conf选项pidfile设置的文件中,默认会生成在/var/run/redis.pid,也可以通过pidfile来指定pid文件生成的位置
cluster-enable 是否支持集群
redis-cli --cluster create ip:port ip:port --cluster-replicas 1
复制
./redis-cli --cluster create 192.168.199.128:7001 192.168.199.128:7002 192.168.199.128:7003 192.168.199.128:7004 192.168.199.128:7005 192.168.199.128:7006 --cluster-replicas 1
复制
[root@localhost 7001]# ./bin/redis-cli -h 127.0.0.1 -p 7001 -c
复制
cluster info
复制
cluster nodes
复制