11、Redis集群(cluster)【面试重点】

发布时间 2023-11-25 00:50:04作者: "贼*.猫"贼*.帅`

*提示

目前一般比较少用复制+哨兵模式,一般都是直接上集群
image

一、是什么

image
image
image
image
image

二、能干嘛

image

三、集群算法-分片-槽位slot【高频考点】

image

1、官网出处

image

2、redis集群的槽位slot

image
image

3、redis集群的分片

image
image

4、他两的优势

image
image

5、slot槽位映射,一般业界有3中解决方案

image

5.1 哈希取余分区

image
image
image

5.2 一致性哈希算法分区

image

5.2.1 是什么

image

5.2.2 能干嘛

image

5.2.3 3大步骤【重点!!!】

image
(1)算法构建一致性哈希环
image
image
(2)redis服务器IP节点映射
image
image
(3)key落到服务器的落键规则
image
image

5.2.4 优点

image
image
image
image

5.2.5 缺点

image

5.2.6 小总结

image

5.3 哈希槽分区

image

5.3.1 是什么

image
image
image

5.3.2 哈希槽计算

image

6、经典面试题:为什么redis群的最大槽数是16384个?【绝对高频】

image

6.1 为什么是16384个

image

6.2 说明1

image
image

6.3 说明2

image
image

6.4 计算结论

image

7、redis集群不保证强一致性,这意味着在特定的条件下,redis集群可能会丢掉一些被系统收到的写入请求命令

image

四、集群环境案例步骤

image
redis集群(3主3从配置案例)-设计图
image
image
redis集群初始(3主3从配置案例-实际分配情况)-设计图
image

1、3主3从redis集群配置

image

1.1 找3台真实虚拟机,各自新建

1.2 新建6个独立的redis实例服务

image
(1)配置文件的配置
image
image
image
(2)启动6台redis主机实例
image
image

1.3 通过redis-cli命令为6台机器构建集群关系

image
image
image
image

1.4 链接进入6381作为切入点,查看并检验集群状态

image
image
image
image
image
至此,已完成以下红框部分的集群构建!!!
image

2、3主3从redis集群读写

image

2.1 对6381新增两个key,发生报错

image

2.2 为什么报错

image

2.3 如何解决

image
image
image
image

2.4 查看集群信息

image

2.5 查看某个key该属于对应的槽位值:CLUSTER KEYSLOT 键名称

image

3、主从容错切换迁移案例

image
redis集群主从切换(6381宕机,6384号上位)-设计图
image

3.1 容错切换迁移

image
(1)主机6381和从机切换,先停止主机6381
image
(2)查看集群信息,本次6381主6384从【未停止6381前查看】
image
(3)停止主机6381,再次查看集群信息
image
(4)加入,6381原来的主机回来了,是否会上位?
image
image

3.2 集群不暴增数据一致性100%OK,一定会有数据丢失情况

image

3.3 手动故障转移 or 节点从属调整改如何处理

image
image

4、主从扩容案例

image
3主3从redis集群扩容-4主4从(新增主机6387无槽号)-设计图
image
(1)新建6387、6388两个服务实例配置文件+新建后启动
image
image
image
(2)启动87/88两个新的节点实例,此时他们自己都是master
image
image
(3)将新增的6387节点(空槽号)作为master节点加入原集群
image
image
(4)检查集群情况第1次
image
redis集群扩容重新分派槽号(reshard)-设计图
image
(5)重新分配槽号(reshard)
image
image
(6)检查集群情况第2次
image
image
(7)为主节点6387分配从节点6388
image
image
(8)检查集群情况第3次
image

5、主从缩容案例

image
以上4步已实现的设计图:4主4从,6388挂载在6387下成为新从节点
image
redis集群缩容,删除6387和6388,恢复3主3从-设计图
image
(1)目的:6387和6388下线
(2)检查集群情况第1次,先获得从节点6388的节点ID
image
(3)从集群中将4号从节点6388删除
image
(4)将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
image
image
(5)检查集群情况第2次
image
(6)将6387主节点删除
image
(7)检查集群情况第3次,6387/6388被彻底祛除
image

五、集群常用操作命令和CRC16算法分析

image
image
image
image
image

1、常用命令

image
image
image
image