Redis 学习
2021-05-31 15:29:27 14 举报
redis 详细内容
作者其他创作
大纲/内容
AE_READABLE
如果lost的服务器重新上线通知复制新的主服务器
clusterNode
命中指向
连接服务器列表中所有服务器
哨兵初始化步骤
leader1001
主runid:000服务器lost
从
2、根据配置文件创建数据结构
拿队头
此时为主观下线
1、发现lost
2、发送Socket连接
0
Redis子进程
runid:002offset:1000ip:xxx.xx.xx.xport:xxxx
ping
哨兵runid1002
哨兵选举
全量同步
Channle
槽可以理解为是一个数组下标
Redis 从服务器信息
主runid:002offset:1000
哨兵runid1001
1、指派001处理0-5000
从offset:900runid:003
RunID:003127.0.3.1:100010000-16384
4、身份验证
从runid:002offset:1000
dump.rdb
client-...
6、同步rdb文件
集群
...
初始化sentinelState结构
还没ping过来
主从哨兵机制
根据保存地址创建网络连接
3、001发送MEET指令申请向002创建集群
6、PING表示001收到了002的PONG
从runid:001offset:900
1、初始化哨兵服务器
老主runid:000offset:1000
连接应答处理器
runid =003不在表中
RunID:001127.0.1.1:1000
命令请求处理器
runid:002offset和主服务器有差异进行部分复制数据同步从offset1000-1100所有数据
3、设置leader为1001
runid:003offset:1000ip:xxx.xx.xx.xport:xxxx
此处只展示001 ,其他clusterNode结构相似
1、保存主节点信息
排序规则1) Redis 根据优先级排列 优先级源于slave-priority 配置中2) 如果优先级相同的从服务器有多数个根据offset排序 越大的优先级越高(越大数据越新)3)如果offset 一样runid 小的优先级越高
此时002 也应该为集群模式 如果不是会返回异常信息
RunIDList001002
从runid:003offset1000
3、ping
3、节点收到其他节点的通知会把槽区间写入
1、读取配置文件开启集群模式
故障转移流程
3、排序以后获取最优(第一个)redis 服务器地址
主服务器维护所有从服务器的 runidoffset和ip端口
6、通过info命令获取从服务器主服务器runid和主服务器信息10s/次
runid:001offset:900ip:xxx.xx.xx.xport:xxxx
leader1003
检查申请同步的runid是否在list中
集群客户端
5、BGSAVE
6、收到MOVED命令移动到正确的redis实例上获取参数
命令回复处理器
哨兵runid1003
RunID:003127.0.3.1:1000指派:10000-16384
1、删除redis从服务器列表中断线从服务器
4、设置失败因为leader 只能写入一次布不可被修改
槽
1、1001发现主服务器lost
主offset:1100runid:000
Leader为1001
RunID:001127.0.1.1:1000指派:0-5000
Redis集群
4、根据MEET命令带来的信息创建001的数据结构
发送PSYNC
命令传播
集群上线
IO 多路复用程序
主
2、最近五秒内没有回复过领头Sentinel的INFO命令的从服务器
输入缓冲区
通知001复制002
10000
单机情况下收到MOVED 会直接打印
排序前
主服务器故障
5、设置失败
获取
BackLog
3、初始化哨兵状态
获取优先级最高的从服务器info
ACK
6、leader设置为1003失败
完成后001与002在一个集群中
Redis 连接表
此时已为客观下线
5、判断\"key\"是否在槽中在:返回value不在:返回MOVED
从offset:1000runid:002
故障转移分为:1、哨兵选举: 选举由哪台哨兵服务器进行对主服务器的故障转移2、主服务器选举: 选举出从服务器替代主服务器 3、故障转移:下线的主服务器重新上线后成为新的从服务器
文件事务处理器
Redis2.8后主从复制PSYNC
主runid:000offset:1000
2、通知其他节点纪录001指派的槽
client-002
16384
RunID:002127.0.2.1:1000
有响应就添加
4、此时向001发送请求get key
7、命令传播
RunID:002127.0.2.1:10005000-10000
client-001
4、让002成为主
cluster-enabled=yes
5、同时发送: 命令连接、订阅连接
Redis2.8前主从复制SYNC
发送sync
5000
RunID:002127.0.2.1:1000指派:5000-10000
集群上线是为集群中的所有Redis 实例指定处理的槽(最多16384个槽)
2、询问其他哨兵主服务器是否下线如果其他判断主服务器客观下线进行故障转移
2、使用哨兵专用cmd 表
主从复制流程
主服务器网络连接
2、发现lost
所有节点都被指派槽后完成上线
主服务器连接流程
排序前过滤流程
5、PONG表示002已经收到MEET命令
保存主服务器地址
请求
(需开启)主从复制中子进程生成的dump.rdb文件不落盘
复制
从offset:1100runid:001
4、创建主服务器网络连接
收藏
0 条评论
下一页