1.哨兵模式和集群模式有什么不一样
高可用:故障的时候哨兵无法提供服务,集群如果参数配置可以服务的话只有坏掉的主节点的槽无法提供服务
当redis.conf的配置cluster-require-full-coverage为no
负载均衡:集群可以方便的扩容1000个主
2.集群底层存储原理
16384个槽被多个主分配置
key值通过hash后和16384-1做与运算计算出槽的位置做存储
3.集群节点通讯
默认使用集群端口号加10000做端口通讯,使用gossip协议
4.网络抖动
网络抖动会导致集群发生重新选举,超时时间一般设置长点
redis.conf中设置5000
cluster-node-timeout
# Cluster node timeout is the amount of milliseconds a node must be unreachable
# for it to be considered in failure state.
当超过15秒后node节点认为master挂了
# Most other internal time limits are multiple of the node timeout.
#
# cluster-node-timeout 15000
5.集群选取原理
使用gossIp协议
比如a是主有两个从b、c 还有d和e两个主
第一轮选举
1.b、和c延时一定时间后向d和e发起选择请求
500 + random(500ms) + rank*1000
2.d和e收到请求后只响应第一请求
3.b或者c如果收到大于集群个数一半的请求的话就认为自己选举成功
4.向其他主节点发送meet信号表示选举结束
6.集群脑裂问题怎么避免
脑裂是网络问题出现了两个主,如果网络恢复后会丢失数据
可以设置参数,至少再写一个节点才认为写成功
min-slaves-to-write 1
9.集群怎么做批量操作
加上{}可以把keyhash到同一个槽中,比如
{user}:111:name
{user}:111:age