Redis06-主从同步、哨兵模式
主从复制结构模式
一主一从、一主多从、主从从
主从复制过程说明:
1.slave连接master,发送sync命令
2.master收到sync命令后,开始执行bgsave命令生成RDB文件并使用缓冲区来记录此后执行的所有写命令
3.masterbgsave执行完毕后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令
4.slave收到快照文件后丢弃所有旧数据,载入收到的快照
5.master快照发送完毕后开始向从服务器发送缓冲区中的写命令
6.slave完成对快照的载入后,开始接收命令请求,并执行来自主服务器缓冲区的写命令
此后master每执行一个写命令,就向slave发送相同的写命令
如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。
Redis主从同步策略
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步
主从复制特点
1.采用异步复制;
2.master可以有多个slave;
3.每个slave可以接收来自其他slave连接;
4.主从复制不阻塞master;
5.主从复制不阻塞slave,这意味着,主从复制过程中slave仍可以返回查询请求,返回的数据可能是旧的,如果你不想这样,那么在启动redis时,可以在配置文件中进行设置,那么slave在主从同步过程中接收的查询请求将返回错误给客户端;
6.slave从master同步最新数据后,写入内存的过程中有阻塞
7.可以配置让master不将数据持久化到本地磁盘,而是持久化到一台slave的磁盘上,可以减轻master的磁盘压力,不过这样会存在一个问题,master服务器一旦重启,master的数据被清空,通过主从同步可能导致slave上的数据也被清空;
redis2.8之前使用sync[runId][offset]同步命令,redis2.8之后使用psync[runId][offset]命令。两者不同在于,sync命令仅支持全量复制过程,psync支持全量和部分复制。
runId:每个redis节点启动都会生成唯一的uuid,每次redis重启后,runId都会发生变化。
offset:主节点和从节点都各自维护自己的主从复制偏移量offset,当主节点有写入命令时,offset=offset+命令的字节长度。从节点在收到主节点发送的命令后,也会增加自己的offset,并把自己的offset发送给主节点。这样,主节点同时保存自己的offset和从节点的offset,通过对比offset来判断主从节点数据是否一致。
repl_backlog_size:保存在主节点上的一个固定长度的先进先出队列,默认大小是1MB。(1)主节点发送数据给从节点过程中,主节点还会进行一些写操作,这时候的数据存储在复制缓冲区中。从节点同步主节点数据完成后,主节点将缓冲区的数据继续发送给从节点,用于部分复制。(2)主节点响应写命令时,不但会把命名发送给从节点,还会写入复制积压缓冲区,用于复制命令丢失的数据补救。
redis不支持主主复制
配置redis主从复制
只需在从库配置主机的IP地址和端口
vim /etc/redis/redis.conf
slaveof 主库IP 主库端口
masterauth <master-password> # 如果主服务器设置了requirepass,需要这样指定密码
查看主从配置信息
info replication
命令行临时修改主库
slaveof 192.168.4.51 6379
更换主服务器
AB为主从,A坏了,用C代替
向B发送SAVE命令,生产快照文件,传给C,启动C,将B的主库指向C
B
redis-cli
SAVE
scp /usr/local/redis/dump.rdb root@C:/usr/local/redis/
C
redis-server start
B
SLAVEOF C的IP 6379
哨兵模式说明
1.通过发送命令,让redis返回其运行状态,包括主从
2.当哨兵检测到master宕机后,自动将slave切换成master,并通知其他slave修改配置文件切换主机
3.可以配置多个哨兵来进行监控
4.哨兵程序可以部署在一台单独的服务器,也可以部署在主或从服务器上
配置哨兵模式
修改主库配置文件
vim /etc/sentinel.conf
port 26379
dir /tmp #指定工作目录
bind 0.0.0.0
sentinel auth-pass redis51 密码 #设置连接主库的密码,若主库有密码加上这一行
#sentinel monitor 被监控的名称 IP 端口号 2表示sentinel集群中至少2台认为master宕机,就failover
sentinel monitor mymaster 192.168.14.101 6379 2
sentinel auth-pass mymaster
sentinel down-after-milliseconds mymaster 30000 #30秒ping不通主节点的信息,主观认为master宕机
sentinel failover-timeout mymaster 180000 #故障转移开始,三分钟内没有完成,则认为转移失败
sentinel parallel-syncs mymaster 1 #故障转移后重新主从复制,1表示串行,>1并行
主观下线与客观下线
主观指的是单台哨兵服务器检测到master宕机
客观指检测到master宕机的哨兵达到一定数量后,执行failover
配置带验证的主从复制
主库设置密码
vim /etc/redis/redis.conf
requirepass 123456
配置从库
vim /etc/redis/redis.conf
slaveof 192.168.4.51 6379
masterauth 123456
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)