Redis主从复制

目录

简介

主从复制演示

 特点

        一主二仆

        薪火相传

         反客为主

 主从复制原理

哨兵模式

         演示

         复制延时

        总结哨兵如何选出主机


简介

  • 是什么

        在redis服务器中分主机和从机,主机数据更新后根据配置和策略自动同步到从机中。主机只进行写操作,从机只进行读操作。

Redis主从复制_第1张图片

  •  优点
  1. 读写分离。主机只进行写操作,从机只进行读操作。
  2. 容灾的快速恢复。当一台从服务器宕机时,客户端读不到数据,redis会根据策略快速切换到另外一台服务器上进行读取。

当主服务器宕机怎么办?

        主从复制的结构一般时一主多从或者一主一从。没有多主的情况。因为当在多主的情况下,当两个主服务器修改同一个键值时,不知道使用哪个数据了。        

        当主服务器宕机,一般采用集群的方式解决。

Redis主从复制_第2张图片

主从复制演示

  • 新建文件夹来保存新的配置文件。
  • 复制redis.conf配置文件到新建的文件夹中。
  • 配置一主两从,创建3个配置文件。(启动redis时需要使用不同的端口)。

Redis主从复制_第3张图片

  •  在新建的配置文件中写入内容。需要使用include命令来引入redis.conf。注意:需要将redis.conf的AOF进行关闭。

Redis主从复制_第4张图片

Redis主从复制_第5张图片

Redis主从复制_第6张图片

  •  启动3个redis服务,注意现在3个redis服务之间并没有主从关系。
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf

  •  分别连上3台服务器,使用命令info replication查看redis的主从关系信息。

Redis主从复制_第7张图片

Redis主从复制_第8张图片

Redis主从复制_第9张图片

  •  在从机上配置使用slaveof 命令配置自己的主机。将端口号为6380和6381的redis服务作为端口号为6379的从机,端口号为6379的redis服务作为主机。

Redis主从复制_第10张图片

Redis主从复制_第11张图片

  •  查看主机信息

Redis主从复制_第12张图片

  •  主从复制。在主服务器中进行写数据,再查看从服务器是否有主服务器的数据。

Redis主从复制_第13张图片

  •  在从机中进行写操作,会报错。

 特点

        一主二仆

  • 当一台从服务器宕机,在连接,查看该服务器的状态。

        当前一端口6380和6381启动的服务器是以6379端口启动redis的从服务器,以端口6379端口启动的redis是主服务器。

        将6381宕机,查看主服务器主从信息。

Redis主从复制_第14张图片

         在主服务器中加入数据,查看以6380端口启动的redis中的数据。

Redis主从复制_第15张图片

         重新以6381端口启动redis服务器,查看主从状态。

Redis主从复制_第16张图片

         将以端口6381启动的redis服务器,重新设为6379的从服务器。

Redis主从复制_第17张图片

总结:当从服务器宕机,不再是主服务器的从服务器。宕机服务器重新启动后,不再是谁的从服务器,变成了主服务器。重新变成从服务器器后,会将主服务器的数据重新复制。 

  •  当主服务器宕机,查看服务器的状态。

Redis主从复制_第18张图片

Redis主从复制_第19张图片

  总结:主服务器宕机后,从服务器还是原来主服务器的从服务器。

        薪火相传

        特点:一台主服务器下面挂多台从服务器,该主服务器的从服务器下面还可以挂多台从服务器。这样主服务器只要将数据同步到它挂的从服务器中,然后从服务器再将数据同步到对应挂的从服务器中。作用是为了减轻主服务器的写压力。

        缺点是:当中一台从服务器宕机,该从服务器下面的从服务器的数据得不到同步,因为主服务器不能直接同步到从服务器的从服务器。当主服务器挂了,从机还是从机,就无法写数据了。

Redis主从复制_第20张图片

         数据同步的现象和一主二仆一样。

   演示:

        将端口号为6381的服务器的主服务器换为端口号为6380的服务器。

Redis主从复制_第21张图片

         查看以6379端口启动和6380启动的redis服务器的主从关系

Redis主从复制_第22张图片

Redis主从复制_第23张图片

         反客为主

        当主服务器宕机,从服务器还是从服务器,不会变成主服务器。但是使用slaveof no one 可以将从机变成主机。

        缺点需要手动完成。使用哨兵模式可以实现自动完成。

演示:

Redis主从复制_第24张图片

 主从复制原理

  1. 当从服务器连接上主服务器后,从服务器会向主服务器发送数据同步的消息。
  2. 当主服务器接收到从服务器的同步消息,主服务器会将数据进行持久化,形成rdb文件。把rdb文件发送给从服务器,从服务器拿到rdb文件后,进行读取。
  3. 每次主服务器进行写操作后,会和从服务器进行数据同步。这个操作是主服务器主动进行的。

哨兵模式

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

Redis主从复制_第25张图片

         演示

  • 首先建立一主二仆模型。以端口6379启动的redis作为主服务器,以端口6380和6381端口启动的redis作为6379的从服务器。

Redis主从复制_第26张图片

  •  新建sentinel.conf文件,名字绝对不能错。在里面配置哨兵,填写内容。
# mymaster为监控对象起的服务器名称,监控主机的名称
# 在主机挂掉后,哨兵需要投票从从机中选出主机,1表示至少需要一个哨兵投票才能变成主机
# 127.0.0.1 6379监控主机的ip
sentinel monitor mymaster 127.0.0.1 6379 1
  • 启动哨兵

        使用redis-sentinel来启动哨兵。

Redis主从复制_第27张图片

  •  当主机宕机后,查看哨兵和从机状态

        主机宕机

Redis主从复制_第28张图片

        哨兵监控出来后,选出主机 

Redis主从复制_第29张图片

        6381端口的redis变成了主机 

Redis主从复制_第30张图片

         6380端口的redis变成了6381的从机

Redis主从复制_第31张图片

         重新启动6379端口的redis后,查看状态,也变成了6381的从机。

Redis主从复制_第32张图片

         复制延时

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

        总结哨兵如何选出主机

  1. 从下线的主服务器的所有从服务器里面挑选一个从服务器作为主服务器。选择条件。
    1. 选择优先级靠前的。通过redis.conf配置中的slave-priority 100,该值越小,优先级越大
    2. 选择偏移量最大的。偏移量是指获得主服务器数据最全的。
    3. 选择runid最小的从服务器。每一个redis实例启动后都会随机生成一个40位的runid.
  2. 选出新的主服务器后,哨兵会向原主服务器的从服务器发送slaveof 新主服务器的命令,作为新主服务器的从机。
  3. 当已下线的服务重新上线时,哨兵会向其发送slaveof命令,作为新主的从机。

                

 

 

你可能感兴趣的:(Redis,redis,缓存,数据库)