2019版:第八章:(1)Redis 主从复制

一、主从复制

  1、什么是主从复制

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

  2、主从复制的目的

  

   用处

  (1)读写分离,性能扩展,减少读写压力;

  (2)容灾快速恢复;

二、主从配置

  1、原则

    配从不配主(配置从服务器信息)

  2、步骤

    分别创建 6379/6380/6381三份配置文件,来创建不同的实例对象

    (1)拷贝多个 redis.conf 文件,使用 include 包含有公共设置的redis的配置文件;

    (2)开启 daemonize yes

    (3)pid 文件名字 pidfile

    (4)指定端口 port

    (5)log 文件名字

    (6)dump.rdb 名字 dbfilename

    (7)Appendonly 关掉或者换名字

    示例:

#--- 6379配置信息 ---
#使用 include 包含有公共设置的redis的配置文件
include /opt/myRedis/redis.conf

#开启 daemonize yes,在公共配置文件中已开启

#指定 pid 文件名字 pidfile
pidfile /var/run/redis6379.pid

#指定端口
port 7379

#指定 log 文件名字,这里没有指定
log ""

# RDB 的dbfilename
dbfilename dump6379.rdb

#在公共的配置中关掉了AOF:appendonly no



#--- 6380配置信息 ---
#使用 include 包含有公共设置的redis的配置文件
include /opt/myRedis/redis.conf

#开启 daemonize yes,在公共配置文件中已开启

#指定 pid 文件名字 pidfile
pidfile /var/run/redis6380.pid

#指定端口
port 7380

#指定 log 文件名字,这里没有指定
log ""

# RDB 的dbfilename
dbfilename dump6380.rdb

#在公共的配置中关掉了AOF:appendonly no



#--- 6381配置信息 ---
#使用 include 包含有公共设置的redis的配置文件
include /opt/myRedis/redis.conf

#开启 daemonize yes,在公共配置文件中已开启

#指定 pid 文件名字 pidfile
pidfile /var/run/redis6381.pid

#指定端口
port 6381

#指定 log 文件名字,这里没有指定
log ""

# RDB 的dbfilename
dbfilename dump6381.rdb

#在公共的配置中关掉了AOF:appendonly no

  3、查看信息

info replication  打印主从复制的相关信息

  

  4、配置从服务器

slaveof  <ip>  <port>  
在从服务器输入命令,成为某个实例的从服务器

  此命令可以设置从服务器要跟随的主服务器的信息。

  如果在客户端使用命令,重启之后就失效了;可以配置到redis.conf 配置文件中,永久生效。

三、一主二从模式

  1、一主二从模式

  (1)根据上面的配置文件,启动三个不同的 redis 实例

redis-server /opt/myRedis/redis6379.conf
redis-server /opt/myRedis/redis6380.conf
redis-server /opt/myRedis/redis6381.conf

  (2)使用客户端分别连接到三个实例(由于端口不同,需要指定端口来连接)

redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381

  

  (3)使用命令查看信息

info replication  查看主从复制的相关信息

    可以看到每一个实例的 role 都是 master,是一个单独的实例,三个实例之间没有任何关联关系;

  (4)配置从服务器

    在 6380/6381 的客户端中使用 slaveof 命令指定跟随的 master

slaveof  <ip>  <port>  

slaveof 127.0.0.1 6379

    这时 6379 的 role 就是 master,6380和6381的 role 就是 slave,并且 6379 下有两个 salve,就是 6380和 6381;

      注意:这里是在客户端使用命令进行配置,服务重启后就需要重新配置,可以配置进配置文件中永久生效;

     

  2、一主二从模式演示

  (1)切入点问题?slave1、slave2 是从头开始复制还是从切入点开始复制?比如从 k4 进来,那之前的 123 是否也可以复制?
    答:slave 从机将一直和 master 主机数据保持一致,无论是从什么时候开始连接的。
 
  (2)从机是否可以写?能否进行 set 操作?
    答:从机不可以进行写,自然不可以 set 操作,只是用来读取。
      主从模式是为了减轻读写压力,主机master 可写可读,从机只可以用来读取。
 
  (3)主机 shutdown 后情况如下?从机是上位还是原地待命?
    答:从机会原地待命,会等待主机上线。
 
  (4)主机又回来了,主机新增记录,从机还能否顺序复制?
    答:主机上线后,从机将连接到主机,并且保证与主机的数据一致,能够顺利复制。
 
  (5)其中一台从机 down 后情况如何?依照原有它能跟上大部分吗?
    答:从机宕机后重新上线,需要使用 slaveof 命令重新连接到主机,这时仍然能保证数据一致。
      可以把 salveof 命令配置到 Redis 的配置文件中,这样重新启动会自动连接主机。

  3、复制原理

    每次从机联通后,都会给主机发送sync指令;

    主机立刻进行存盘操作,发送RDB文件,给从机;

    从机收到RDB文件后,进行全盘加载;

    之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令;

    

四、薪火相传模式

  1、上一个 slave 可以是下一个 slave 的 Master,slave 统一可以接收其他 slaves 的连接和同步请求,那么该 slave 作为链条中下一个的 master,可以有效减轻 master 的写压力,去中心化降低风险;
  2、使用命令 slaveof  <ip>  <port>  来指定主服务器;
  3、中途变更转向:会清除之前的数据,重新建立拷贝最新的;
  4、风险是一旦某个 slave 宕机,后面的 slave 都没法备份;
  

   优点:去中心化降低风险;

   缺点:中间某个 slave 宕机,后面的 slave 都没法备份;

  

五、反客为主模式(小弟上位)

  当一个master宕机后,后面的 slave 可以立刻升为 master,其后面的slave不用做任何修改。

  用 slaveof no one 将从机变为主机。

六、哨兵模式(推荐大哥)

  1、哨兵模式(sentinel)

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

    

  2、配置哨兵

  (1)调整为一主二仆模式;

  (2)自定义的/myredis目录下新建sentinel.conf文件;

  (3)在配置文件中填写内容

sentinel  monitor  mymaster  127.0.0.1  6379  1

    其中mymaster为监控对象起的服务器名称, 1 为 至少有多少个哨兵同意迁移的数量;

  (4)启动哨兵

执行 redis-sentinel  /myredis/seninel.conf

  

  3、效果演示

  (1)当主机 master 宕机后,哨兵会监控到,然后通过投票选择的方式在从服务器 slave 中选举出来新的 master;

  (2)当原来的 master 再次上线后,会变成选择 master 的 slave;  

七、故障恢复

    

原文地址:https://www.cnblogs.com/niujifei/p/15813032.html