redis 主从复制


主从复制

主机数据更新后,根据配置和策略,自动同步到备机,一种 master/slaver 机制,Master 以写为主,Slave 以读为主 ;


作用

  1. 读写分离
  2. 容灾备份

不要只以为为了读写分离,也可以进行容灾备份的 ;


配置文件的细节

配从不配主 ,只配置从机,不用配置主机;

slaveof masterIp materDatabasePort

利用上面的命令进行配置的,每次从机与主机断开之后,都需要重新连接 ;我们可以自 redis 的配置文件里面进行配置,这样就不需要重连 ;

  1. 开启守护进程 daemonize yes
  2. 修改管道文件 pid 文件名字
  3. 指定端口
  4. log文件的名字
  5. dump文件的名字

常见的三种配置

        一主二仆

info replication 打印信息,看 redis 是主机还是从机 ;

一般是一个 Master 两个 Slave ;

其中 master 相当于中心;

特点:

  1. 只要建立了主从关系,则 slave 会将 master 内存中的 现有数据都进行备份到自己的内存中,而不是只备份建立主从关系之后的数据 ;

  2. 如果 master 挂掉,则 slave 原地待命,数据可以正常读取,等到 master 好了以后,会自动的建立主从关系 ;

  3. 如果 slave 挂掉,不影响剩下的 slavemasterslave 好了以后,需要重新建立主从关系 ,除非在配置文件里面进行配置;

  4. slave 只能进行读操作 ;


        薪火相传

主要是为了 去中心化,表现为一条链子 ,数据从master 传到第一个 slave ,然后第一个 slave 将数据传到第二个 slave

减轻了 master 的压力,但是有信息延迟的缺陷 ;


        反客为主

一主两仆 差不多,只不过是当 master 挂掉以后,我们其中的一个 slave 执行一条命令 slaveof no one,变为新的 master ,然后剩下的那个 slave 自动跟新的 Master 建立主从关系;

此时它们两个构建为一个新的主从关系,当原来的 master 恢复以后,也不会破坏现有的主从关系 ;


主从复制的原理

  1. slave 启动成功以后,连接到 masterslave 会发送一个 sync 同步请求;
  2. master 收到请求以后,在后台启动存盘进程,同时收集所有用于修改数据集的命令;
  3. 当该后台进程执行完毕以后,master将整个数据文件,传送到 slave ,完成一次 完全同步
  4. slave 收到数据集文件以后,将其存盘并加载到内存中;(全量复制
  5. master 将继续将新的所有收集到的修改命令依次传给 slave 完成同步 ;(增量复制
  6. 如果 slave 断开连接,然后重新连接到 master ,则必定进行一次全量复制 ;

哨兵模式

可以简单的理解为,就是 反客为主 模式的 自动版

能够监控后台主机是否发生异常,如果发生异常,则根据投票数选出新的主机 ;

具体操作:

  1. redis 的安装目录下面新建一个 sentinel.conf 配置文件,名字必须是这个 ;

  2. 配置哨兵,在刚刚新建的配置文件里面进行配置 : sentinel· monitor 被监控数据库名字 被监控主机的IP 端口号 1 ;

    最后的 1 ,表示主机挂掉以后,让 slave 进行投票,谁得票多,谁变为新的 master

  3. 启动哨兵,redis-sentinel 配置文件的路径 ,加载配置文件;

当被监视的 master 挂掉以后,哨兵会监视到,然后自动根据配置文件的规则,进行投票选出新的 master ,不需要我们人为进行干预 ;

如果以前的 master 恢复了,则哨兵也会监视到,因为 哨兵可以同时监控多个 master,让其加入到现有的主从体系中,跟着新的 master


缺点

复制的延迟 ;

master 复制到 slave 会有一定的延迟,当系统繁忙的时候,延迟问题会更加严重;

其中 slave 机器数量的增加,也会加剧延迟 ;

原文地址:https://www.cnblogs.com/young-youth/p/11665616.html