redis 主从复制
主从复制
主机数据更新后,根据配置和策略,自动同步到备机,一种 master/slaver
机制,Master
以写为主,Slave
以读为主 ;
作用
- 读写分离
- 容灾备份
不要只以为为了读写分离,也可以进行容灾备份的 ;
配置文件的细节
配从不配主 ,只配置从机,不用配置主机;
slaveof masterIp materDatabasePort
利用上面的命令进行配置的,每次从机与主机断开之后,都需要重新连接 ;我们可以自 redis
的配置文件里面进行配置,这样就不需要重连 ;
- 开启守护进程
daemonize yes
- 修改管道文件
pid
文件名字 - 指定端口
- log文件的名字
- dump文件的名字
常见的三种配置
一主二仆
info replication
打印信息,看 redis
是主机还是从机 ;
一般是一个 Master
两个 Slave
;
其中 master
相当于中心;
特点:
-
只要建立了主从关系,则
slave
会将master
内存中的 现有数据都进行备份到自己的内存中,而不是只备份建立主从关系之后的数据 ; -
如果
master
挂掉,则slave
原地待命,数据可以正常读取,等到master
好了以后,会自动的建立主从关系 ; -
如果
slave
挂掉,不影响剩下的slave
和master
,slave
好了以后,需要重新建立主从关系 ,除非在配置文件里面进行配置; -
slave
只能进行读操作 ;
薪火相传
主要是为了 去中心化,表现为一条链子 ,数据从master
传到第一个 slave
,然后第一个 slave
将数据传到第二个 slave
;
减轻了 master
的压力,但是有信息延迟的缺陷 ;
反客为主
跟 一主两仆 差不多,只不过是当 master
挂掉以后,我们其中的一个 slave
执行一条命令 slaveof no one
,变为新的 master
,然后剩下的那个 slave
自动跟新的 Master
建立主从关系;
此时它们两个构建为一个新的主从关系,当原来的 master
恢复以后,也不会破坏现有的主从关系 ;
主从复制的原理
slave
启动成功以后,连接到master
,slave
会发送一个sync
同步请求;master
收到请求以后,在后台启动存盘进程,同时收集所有用于修改数据集的命令;- 当该后台进程执行完毕以后,
master
将整个数据文件,传送到slave
,完成一次完全同步
; slave
收到数据集文件以后,将其存盘并加载到内存中;(全量复制)master
将继续将新的所有收集到的修改命令依次传给slave
完成同步 ;(增量复制)- 如果
slave
断开连接,然后重新连接到master
,则必定进行一次全量复制 ;
哨兵模式
可以简单的理解为,就是 反客为主 模式的 自动版 ;
能够监控后台主机是否发生异常,如果发生异常,则根据投票数选出新的主机 ;
具体操作:
-
在
redis
的安装目录下面新建一个sentinel.conf
配置文件,名字必须是这个 ; -
配置哨兵,在刚刚新建的配置文件里面进行配置 :
sentinel· monitor 被监控数据库名字 被监控主机的IP 端口号 1
;最后的 1 ,表示主机挂掉以后,让
slave
进行投票,谁得票多,谁变为新的master
; -
启动哨兵,
redis-sentinel 配置文件的路径
,加载配置文件;
当被监视的 master
挂掉以后,哨兵会监视到,然后自动根据配置文件的规则,进行投票选出新的 master
,不需要我们人为进行干预 ;
如果以前的 master
恢复了,则哨兵也会监视到,因为 哨兵可以同时监控多个 master
,让其加入到现有的主从体系中,跟着新的 master
;
缺点
复制的延迟 ;
master
复制到 slave
会有一定的延迟,当系统繁忙的时候,延迟问题会更加严重;
其中 slave
机器数量的增加,也会加剧延迟 ;