Redis学习笔记——复制(Master/Slave)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012525096/article/details/82868255

概念

也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master和slaver机制,Mater以写为主,Slave以读为主。

作用

(1)读写分离
(2)容灾恢复

使用

(1)配从(库)不配主(库):主机不配置,从机才去配置。
(2)从库的配置:slaveof主库IP主库端口
1)每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件。
2)Info replication
(3)修改配置文件细节操作:
1)port 端口号
2)dbnamefile RDB备份文件
3)logfile 日志文件
4)pidfile 守护进程pid

常用三招

一主二仆

配置三个redis.conf,分别为redis6379.conf、redis6380.conf、redis6381.conf,分别在三个终端(机器)启动,使用客户端连入,输入Info replication,显示如下:
在这里插入图片描述
信息显示,三者角色都是master。
演示过程:
(1)6379:set k1 v1, set k2 v2, set k3 v3
(2)6380/6381:SLAVEOF 127.0.0.1 6379
(3)6379:set k4 v4
(4)6380/6381:get k4,得到v4
(4)6379/6380/6381:info replication,显示如下:
在这里插入图片描述

小总结

(1)只要客户端使用slaveof host port,就将从头到尾复制Master的数据到本地。
(2)客户端使用slaveof host port后,将开启只读模式,无法进行值的设置。
在这里插入图片描述
(3)master死掉(shutdown),另外的slave原地待命,并不会上位成为master,只是连接状态是DOWN。
在这里插入图片描述
(4)master死掉后,再次重启,slave会接着自动进行主从复制的操作。
(5)从机每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件。
(6)若从机原来有数据,执行slaveof host port后,数据将会清空,复制master的所有数据。

薪火相传

上一个Slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该salve作为了链条中下一个master,可以有效减轻master的写压力。
中途变更转向:会清除之前的数据,重新建立拷贝最新的。
salveof新主库IP新主库端口。
在这里插入图片描述
相当于了链表,一个头master,而后面的slave下面可以接着挂slave。

反客为主

使用slaveof no one,使当前数据库停止与其他数据库的同步,转成主数据库,也就是停止主从复制的链接关系,但是数据还在。
其他未操作的slave还是按兵不动,有两种选择:一种是按兵不动等待原来的master,另一种是使用slaveof newHost newPort与别的主机进行主从复制(数据清除,重新复制)。

复制原理

(1)Slave启动成功连接到master后会发送一个sync命令。
(2)Master接到命令启动后台的存盘进城,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
首次-全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
后面-增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
注:但是只要是重新连接到master,一次完全同步(全量复制)将被自动执行。

哨兵模式

概念

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

使用

(1)创建一个哨兵配置文件(sentinel.conf),名字不能错。
(2)配置哨兵,填写内容,sentinel monitor 数据库的名字(自己随便起) host port 票数,票数表示主机挂掉后slave投票后看谁接替成为主机,得票数多少后成为主机
(3)启动哨兵,进入/usr/local/bin/,执行redis-sentinel /myredis/sentinel.conf,既可以启动哨兵服务。
(4)流程:
1)主机挂了
2)哨兵开始从slave中投票选举
3)选出master后,重新主从复制
4)原master启动后,被哨兵监控到后转成新master的slave。
注:一组sentinel能同时监控多个master。

复制延时

由于所有的写操作都是现在Master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。

猜你喜欢

转载自blog.csdn.net/u012525096/article/details/82868255