redis学习十九:redis主从复制
定义:
主从复制,master以写为主,slave以读为主
当master数据变化的时候,自动将新的数据异步同步到其他slave数据库
作用:
1.读写分离
2.容灾备份
3.数据备份
4.水平扩容支撑高并发
如何实现:
配从库不配主库
权限细节:master如果配置了requirepass参数,需要密码登录
那么slave就需要配置masterauth来设置校验密码,否则的话master会拒绝slave的访问请求
基本操作:
info replication :可以查看复制节点的主从关系和配置信息
replicaof 主库ip 主库端口 :一般写入redis.conf配置文件中
slaveof 主库ip 主库端口 :(手动指令)每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和
原主数据库的同步关系转而和新的主数据库同步(换了个master)
slaveof no one:使当前数据库停止与其他数据库的同步,转成主数据库,自立为王
案例演示:
架构说明:一个master两个slave——三台虚拟机
三边网络能够相互ping通
三大命令:
主从复制 : replicaof 主库ip 主库端口(配从库不配主库)
改换门庭:slaveof 新主库ip 新主库端口
自立为王:slaveof no one
修改配置文件:
1.开启daemonize yes开启后台运行
2.注释掉bind 127.0.0.1
3.protected-mode no
4.指定端口
5.指定当前工作目录,dir
6.pid文件名字,pidfile
7.log文件名字,logfile
8.requirepass
9.dump.rdb名字
10.aof文件
11.从机访问主机的通行密码masterauth(从机需要配置,主机不需要)
常用三招:
一主二仆:
方案1:
配置文件固定写死:(1)配置文件执行
(2)配从库不配主库
(3)先master后两台slave依次启动,从机要指定端口,不然默认6379配置文件6380会报错
要记得关防火墙不然可能连不上:systemctl stop firewalld.service
(4)主从关系查看:
主机日志:
从机日志:
命令查看:info replication图中可以看到身份是master,有两个从机
验证:在主机6379上进行写操作
在从机6380上也能够读到
主从问题演示:
1.从机可以执行写命令吗?
从机只能读取不可以写(读写分离)
2.从机切入点问题。
首次从头开始复制(一锅端),后续跟随,master写,slave跟。
3.主机shutdown后,从机会上位吗?
从机不动,原地待命,从机数据可以正常使用,等待主机重启动归来。
4.主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?
在且能顺利复制。
5.某台从机down后,master继续,从机启动后他还能跟上大部队吗?
能够。
方案2:
命令操作手动指定:replicaof ip 端口号(需要一定的时间)slave单次生效,重启后就没有了
薪火相传
(1)上一个slave可以是下一个slave的master,slave同样可以接收其他slave的连接和同步请求,
那么该slave作为链条中下一个的master,可以有效减轻主master的写压力(虽然作为81的master,但本身还是slave身份,无法进行写操作)
(2)中途变更转向:会清除之前的数据,重新建立拷贝最新的
(3)slaveof 新主库ip 新主库端口
反客为主
slaveof no one自己当家做主!
复制原理和工作流程:
1.slave启动,同步初请
slave启动成功连接到master后会发送一个sync(同步)命令
slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有的数据会被master数据覆盖清除
2.首次连续,全量复制
master节点收到sync命令后会开始在后台保存快照(即rdb持久化,主从复制时会触发rdb),同时收集所有接收到的用于
修改数据集命令缓存起来,master节点执行rdb持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以
完成一次同步
而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
3.心跳持续,保持通信
默认master每十秒发ping包
4.进入平稳,增量复制
master继续将新的所有收集到的修改命令自动依次传给slave,完成同步
5.从机下线,重连续传
master会检查backlong里的offset,master和slave都会保存一个复制的offset还有一个masterid,
offset是保存在backlog中的,master只会把已复制的offset后面的数据复制给slave,类似断点续传
复制的缺点
1.复制演示,信号衰减
由于所有写操作都是现在master上操作,然后同步更新到slave上,
所以master同步到slave机器有一定的延迟,当系统很繁忙的时候,
延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
2.master挂了咋办
默认情况下,不会在slave节点中自动重选一个master
那每次都要人工干预?(需要无人值守——哨兵)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」