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
posted @   立勋  阅读(24)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示