Redis主从复制

概念:执行数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主。

主要用于读写分离、容灾恢复。

配从(库)不配主(库)
从库的配置:slaveof 主库ip 主库端口
每次与master断开之后,都需要重新连接,除非配置进redis.conf文件。

配置:

  • 拷贝多个redis.conf文件,形成多个客户端
  • 开启daemonize yes
  • 修改端口
  • 修改log名
  • 修改dump.rdb的名称

修改这几个配置主要是为了区分开不同的客户端。

一、一台主机,两台从机

一个传给多个

1.info repllication:查看当前主机角色状态(master主机/slaver从机)

  1. slaveof ip port : 指定当前主机为ip port的从机,就会开始备份

从机只能读,不能写,主机才能写

可能遇到的一些问题:

1.主机挂掉之后,从机的状态?

主机宕机之后,从机还是slaver,连接状态变为down

2.主机重新连接之后从机的状态?

当主机重新连接后,一切恢复正常

3.从机挂了,重新启动之后该机器的身份,是主机还是从机?能否续接上?

从机挂了重新启动之后的身份是master,需要重新确定与主机的关系。(可以写进配置文件自动连接上ip port)

二、薪火相传

一个接着一个,作为上一个的从机,形成一个链

上一个slaver可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效的减轻master的写压力。

中途变更转向:会清楚之前的数据,重新建立拷贝最新的。

命令:slaveof 新主机ip 新主机端口

链中间的客户端身份还是slave

三、反客为主

使当前数据库停止与其他数据库的同步,转成主数据库。

命令:slaveof no one

复制原理

slave启动成功连接到master后会发送一个sync同步命令。

master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:master继续将新的所有收集到的修改命令一次传给slave,完成同步,但是只要式重新连接master,一次完全同步(全量复制)将被自动执行。

缺点:复制延时

首次是全量复制,之后是增量复制


哨兵模式

可以理解为自动的反客为主,主机挂了之后会在从机中投票选出一个作为新主机。

使用步骤:

  1. 在启动的redis.conf同级目录下新建sentinel.conf文件
  2. 配置sentinel.conf:sentinel monitor 被监控数据库名 ip port 1 :1 的意思是主机挂掉之后从机的票数多余1票就选出作为新主机。
  3. 启动哨兵:redis-sentinel sentinel.conf

当之前挂掉的主机重新启动之后,会变为从机,连接到哨兵选出来的新master上,作为该主机的从机。


持续更新~~

原文地址:https://www.cnblogs.com/mrjkl/p/13174415.html