主从复制

Redis主从复制

  • 一主二从
  • 层层链路
原理

通过执行slaveof命令或设置slaveof选项,让一个服务器去复制另一个服务器的数据。主数据库可以进
行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而从数据库一般是只读的,并接
受主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数
据库。
全量复制:
(1)主节点通过bgsave命令fork子进程进行RDB持久化,该过程是非常消耗CPU、内存(页表复制)、硬盘IO的
(2)主节点通过网络将RDB文件发送给从节点,对主从节点的带宽都会带来很大的消耗
(3)从节点清空老数据、载入新RDB文件的过程是阻塞的,无法响应客户端的命令;如果从节点执行bgrewriteaof,也会带来额外的消耗
部分复制:

  1. 复制偏移量:执行复制的双方,主从节点,分别会维护一个复制偏移量offset
  2. 复制积压缓冲区:主节点内部维护了一个固定长度的、先进先出(FIFO)队列 作为复制积压缓冲区,当主从节点offset的差距过大超过缓冲区长度时,将无法执行部分复制,只能执行全量复制。
  3. 服务器运行ID(runid):每个Redis节点,都有其运行ID,运行ID由节点在启动时自动生成,主节点会将自己的运行ID发送给从节点,从节点会将主节点的运行ID存起来。 从节点Redis断开重连的时候,就是根据运行ID来判断同步的进度:
    • 如果从节点保存的runid与主节点现在的runid相同,说明主从节点之前同步过,主节点会继续尝试使用部分复制(到底能不能部分复制还要看offset和复制积压缓冲区的情况);
    • 如果从节点保存的runid与主节点现在的runid不同,说明从节点在断线前同步的Redis节点并不是当前的主节点,只能进行全量复制。
概念

数据复制是单向的,只能从主节点(master)向从节点(slave),Master以写为主,Slave以读为主

主从复制,读写分离!80%情况都是读操作!减缓服务器压力。一主二从

作用
  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
  • 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
  • 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量
  • 高可用基石:主从复制还是哨兵和集群能够实施的基础。
环境配置

只配置从库,不用配置主库

#查看当前库配置信息
127.0.0.1:6379> info replication
# Replication
role:master #角色 master
connected_slaves:0 #没有从机
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

启动多个服务,需多个配置文件,每个配置文件要修改的地方:

  • 端口:port
  • pid文件名:pidfile windows版不用
  • 日志文件名: logfile
  • dump文件名:dbfilename

然后用每一个配置文件启动一个redis服务

#启动服务
redis-server conf/conf6379.conf
redis-server conf/conf6380.conf
redis-server conf/conf6381.conf

#查看进程
ps -ef | grep redis
一主二从配置

默认情况下,每台redis服务都是主节点,我们只配置从机.

认老大。一主(79)二从(80,81)

启动客户端,连接每一个服务端后

slaveof 127.0.0.1 6379 #为当前redis配置主机,认谁当主机

info replication #查看信息,role变为slave

真实的主从配置应该是在配置文件中配置,这样才是永久的,用命令的话,是暂时的

配置文件中

slaveof <masterip> <masterport> #配置主机ip,端口
masterauth <master-password> #如果主机有密码,就要配置密码

主机可以写和读,从机只能读不能写。

测试:主机断开后,从机依旧连接到主机,但没有写操作,主机回来后,从机依旧可以读到主机写的信息。

如果使用命令行配置主从,从机重启后就会变会主机。只要变会从机,数据立马就会从主机中同步过来。

层层链路

79 80 81

Master------Slave Master--------Slave

中间的80 是79的从,是81的 主,实际上还是从,只能读

数据可以从79同步到80,再从80同步到81

主机挂了,没有哨兵模式前,手动配置!谋朝篡位

命令:slaveof no one 使自己变为主机,其他从机就可以认它为主机

posted @   jpy  阅读(35)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示