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

那每次都要人工干预?(需要无人值守——哨兵)

posted @   浮笙芸芸  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示