介绍
-
redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。
-
Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
结构特点
- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
- 节点的fail是通过集群中超过半数的节点检测失效时才生效。
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
- redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
- Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
(意思是,Redis-Cluster把存储的数据分开存入各个主节点,主节点间存储的数据是不一样的)
# 假如预先设置3个节点,slot大致分配方式
节点A覆盖0-5460;
节点B覆盖5461-10922;
节点C覆盖10923-16383.
# 添加一个D节点,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上
节点A覆盖1365-5460
节点B覆盖6827-10922
节点C覆盖12288-16383
节点D覆盖0-1364,5461-6826,10923-12287
准备
somaxconn参数
- 对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 连接队列上限。
- 系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128,具体信息为。
修改
# 重启后就没有了
echo 2048 > /proc/sys/net/core/somaxconn
vim /etc/sysctl.conf
# 在/etc/sysctl.conf中添加如