zoukankan      html  css  js  c++  java
  • 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;  

    七、故障恢复

        

  • 相关阅读:
    关系型数据库和非关系型数据库的区别
    总结篇3-python数据结构和算法
    总结篇2-python进阶
    总结篇1-python基础
    测试sql星级判定函数
    1、Anyproxy简介
    Python内置logging模块-- 日志
    python+ selenium 绕过浏览器检测
    python-selenium,解决 遇到阿里无痕登录验证
    seldom
  • 原文地址:https://www.cnblogs.com/niujifei/p/15813032.html
Copyright © 2011-2022 走看看