知道 Redis-Cluster 么?说说其中可能不可用的情况
2021-02-02 02:17
821 查看
Redis 集群模式简述
一个集群模式的官方推荐最小最佳实践方案是 6 个节点,3 个 Master 3 个 Slave 的模式,如 图00 所示。
key 分槽与转发机制
Redis 将键空间分为了 16384 个槽,通过以下算法确定每一个 key 的槽:
CRC16(key) mod 16384
由于 16384 = 2 的 14 次方,对一个 2 的 n 次方取余相当于对于它的 2 的 n 次方减一取与运算。所以优化为:
CRC16(key) & 16383
当 key 包含 hash tags 的时候(例如
key{sub}1),会以 sub tags 中指定的字符串(就是 sub )计算槽,所以key{sub}1和
key{sub}2会到同一个槽中。
客户端可以发送读取任一个槽的命令到任一个集群实例,当槽属于请求的实例的时候,就会处理,否则会告诉客户端这个槽在哪里,例如如果将下面命令发到第二个 Master:
GET key1 返回: MOVED slot ip:port(第一个Master的)
默认情况下,所有的读写命令只能发送到 Master。如果需要使用 Slave 处理读请求,需要先在客户端执行
readonly命令。
主从自动切换机制
当一个 Master 发生故障,如果有 Slave,则会切换为 Master。
如何判断 Master 发生故障了呢?Redis 集群配置中有一个配置,
cluster-node-timeout集群心跳超时时间。当集群内节点建立连接后,定时任务 clusterCron 函数(参考源码:https://github.com/redis/redis/blob/6.0/src/cluster.c)会每隔一秒随机选择一个节点发送心跳。如果在超时时间(
cluster-node-timeout)的时间内未收到心跳响应,则将这个节点标记为 pfail。
如果集群中有一半以上的 Master 标记一个节点的状态是 pfail,那么这个节点的状态就会变成 fail。
当节点变成 fail 就会触发自动主从切换。主从切换的过程,也涉及到类似的选举:
- 当某个 Master 被标记为 fail 之后,对应的 Slave 节点执行定时任务 clusterCron 函数时,选取复制偏移量,也就是主从同步进度最大、数据最新的 Slave 尝试变为主。
- 这个 Slave 设置自己的 currentEpoch += 1(正常情况下集群中所有的 currentEpoch 相同,每次选举都会加 1,并且每个 currentEpoch 只能投一次,防止多个 Slave 同时发起选举后难以获取大多数票),之后向所有的 Master 发送 failover 请求,如果得到大多数 Master 的同意则开始执行主从切换。
集群不可用情况
根据上面的描述,我们可以总结出如下不可用的情况
- 当访问一个 Master 和 Slave 节点都挂了的槽的时候,会报槽无法获取。
- 当集群 Master 节点个数小于 3 个的时候,或者集群可用节点个数为偶数的时候,基于 fail 的这种选举机制的自动主从切换过程可能会不能正常工作,一个是标记 fail 的过程,一个是选举新的 master 的过程,都有可能异常。
参考
每日一刷,轻松提升技术,斩获各种offer:
相关文章推荐
- hdu2049 不容易系列之(4)——考新郎 错排+组合 一共有N对新婚夫妇,N个新娘随机坐成一排,每个新郎只能选一个, 其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.
- 这可能是目前最全的Redis高可用技术解决方案总结
- redis 3.2 cluster高可用和数据迁移测试
- 面试一点都不难:Redis Cluster 模式分析,哈希槽,Cluster 模式高可用, 一致性,客户端 JedisPool,集群扩容
- Redis高可用-Cluster-测试
- 二、给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。
- redis 系列26 Cluster高可用 (1)
- redis演练(9) redis Cluster 集群快速部署&failover情况
- Redis Cluster多机房高可用实现--基于客户端<上篇>
- redis 系列27 Cluster高可用 (2)
- Redis Cluster搭建高可用Redis服务器集群
- Redis高可用-Cluster
- 这可能是史上最全 Redis 高可用解决方案总结
- redis高可用cluster
- 当idea上传和下载按钮不见时,其中一种情况可能是如下原因引起
- 这可能是史上最全 Redis 高可用解决方案总结
- 分布式Redis中集群中(cluster_state:fail),什么时候整个集群不可用了
- 将n个相异的球按每小组m个球进行分组,不足m个的也算一个小组。输出所有可能的分组方式;对其中的一种分组方式,都指明每个小组包含的球的情况!
- redis高可用高并发集群解决方案之cluster集群_一点课堂(多岸学院)
- 基于ubuntu搭建Redis(4.0) Cluster 高可用(HA)集群环境