Maple's Blog.

redis 集群

字数统计: 1k阅读时长: 3 min
2020/09/05

redis 3.0 引入的新功能。

然后去看了下现在 redis 已经是 6.x 了

逻辑

根据 CRC16 把 key 值分到 16383 个槽内。然后把若干个节点设置分别维护若干个槽。实现节点分布式。

缺点

  1. 不支持多 key 值操作(因为不同 key 值可能属于若干个节点)。
  2. 事务只支持单 key 事务
  3. 支持 0 库

集群搭建

三节点主从库。

只记录,未测试

0. redis.conf 相关 cluster 参数

  1. cluster-enabled: 如果想在特定的Redis实例中启用Redis群集支持就设置为yes。 否则,实例通常作为独立实例启动。

  2. cluster-config-file: 请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够 在启动时重新读取它。 该文件列出了群集中其他节点,它们的状态,持久变量等等。 由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。

  3. cluster-node-timeout: Redis群集节点可以不可用的最长时间,而不会将其视为失败。 如果主节点超过指定的时间不可达,它将由其从属设备进行故障切换。 此参数控制Redis群集中的其他重要事项。 值得注意的是,每个无法在指定时间内到达大多数主节点的节点将停止接受查询。

  4. cluster-slave-validity-factor :如果设置为0,无论主设备和从设备之间的链路保持断开连接的时间长短,从设备都将尝试故障切换主设备。 如果该值为正值,则计算最大断开时间作为节点超时值乘以此选项提供的系数,如果该节点是从节点,则在主链路断开连接的时间超过指定的超时值时,它不会尝试启动故障切换。 例如,如果节点超时设置为5秒,并且有效因子设置为10,则与主设备断开连接超过50秒的从设备将不会尝试对其主设备进行故障切换。 请注意,如果没有从服务器节点能够对其进行故障转移,则任何非零值都可能导致Redis群集在主服务器出现故障后不可用。 在这种情况下,只有原始主节点重新加入集群时,集群才会返回可用。

  5. cluster-migration-barrier:主设备将保持连接的最小从设备数量,以便另一个从设备迁移到不受任何从设备覆盖的主设备。有关更多信息,请参阅本教程中有关副本迁移的相应部分。

  6. cluster-require-full-coverage:如果将其设置为yes,则默认情况下,如果key的空间的某个百分比未被任何节点覆盖,则集群停止接受写入。 如果该选项设置为no,则即使只处理关于keys子集的请求,群集仍将提供查询。

1. 子节点配置范例

1
2
3
4
port 6379                      //节点端口
cluster-enabled yes //开启集群模式
cluster-node-timeout 15000 //节点超时时间(接收pong消息回复的时间)
cluster-config-file /usr/localbin/cluster/data/nodes-6379.conf 集群内部配置文件

2. 启动服务

略略略略😛

3. 各节点握手

登录其中一个节点,然后meet 所有节点

1
2
cluster meet  192.168.2.123:6378
...

在操作完所有节点之后,可以通过 cluster nodes 获取所有节点信息

默认节点握手之后,是禁止读写

可以通过 cluster info 查看状态

4. 分配槽

1
2
3
4
5
redis-cli -h 192.168.152.128 -p 6379 cluster addslots {0...5461}

redis-cli -h 192.168.152.128 -p 6380 cluster addslots {5641...10922}

redis-cli -h 192.168.152.128 -p 6381 cluster addslots {10923...16383}

0 - 16383 个槽分配给三个节点

再次查看 cluster info

集群自动分配槽

https://www.cnblogs.com/leeSmall/p/8414687.html

参考

CATALOG
  1. 1. 逻辑
  2. 2. 缺点
  3. 3. 集群搭建
    1. 3.1. 0. redis.conf 相关 cluster 参数
    2. 3.2. 1. 子节点配置范例
    3. 3.3. 2. 启动服务
    4. 3.4. 3. 各节点握手
    5. 3.5. 4. 分配槽
  4. 4. 集群自动分配槽
  5. 5. 参考