• Redis主从复制


    一、什么是主从复制?

      为当主机性能更新后,根据配置和策略,自动同步到备份机的机制。其中主机处理写操作,从机处理读操作。

      

      这样做使得读写分离,大大提高了性能,也有容灾快速恢复的优点。

      此时开启了多个Redis服务器,但是相对于主机来说,从机的配置文件是不完全相同的,因此需要拷贝多个redis.conf文件,并且修改其中的配置。

      我们坚持配从不配主的原则,根据不同的需求对从机对应的配置文件做相应的修改。

    二、配从不配主

      1)拷贝多个redis.conf 文件include

      2)开启daemonize yes

      3)Pid文件名字pidfile

      4)指定端口号port。不能相同

      5)Log日志文件名字不能相同

      6)dump.rdb的名字不能相同dbfilename

      7)Appendonly,关掉AOF或者换AOF备份文件的名字。

      建议主机的配置文件设置: appendonly yes,从机设置为no,当然也可以根据情况而定。


       简单的“一主二仆”模式

      首先:我启动了三个窗口用于测试:

      

      由启动Redis服务的命令:redis-server 配置文件路径  可以知道:redis服务是根据配置文件的内容进行启动的,也就是说,配置文件不同,启动的redis服务也不同。

      可以通过执行表多个: redis-server 配置文件路径1  redis-server 配置文件路径2  redis-server 配置文件路径3.......启动多个redis服务。

      并且配置文件可以使用include来进行依赖,不相同的配置单独制定进行覆盖,没必要将初始redis.conf完全拷贝。但实际建议作为主机的配置文件可以选择完全拷贝。

      我这里选择了拷贝一份作为主机的配置文件:

      

      修改了作为主机的配置文件的内容

      

      

      

      创建从机的配置文件并修改对应配置:

      

      顺带一提:如果将appendonly设置为no ,那么对应的APPendfilename  文件就不会创建,你不妨测试一下。

       配置完成后,启动三台Redis服务器,注意启动前先关闭所有redis-Server进程,我这里设置了redisMaster和初始redis占用统一端口号,更加需要检查并且关闭原来那个redis-server。

      

      info replication:查看主从关系

      slaveof   ip  port:建立主从关系 

      

      值得注意的是:当一台Redis服务器被设置为从机后,他就不能使用set命令了,但是被设置成主机,他不仅可以set,亦可以get。

      当把主机shutdown以后,从机依旧认之前设置的主机为老大,并且可以获取到主机设置的值:实际上,这些值并不是从主机获取的,而是在本机获取的,主机设值以后给从机备份了一份。但是当小弟shutdown以后,再次重启就不会认之前的主子了,这也好理解,毕竟上次认主子的时候,是在上次主机开启后的命令,和这次没有关系。

      

      如果想设置永久的主从关系,就得在配置文件中进行配置:

      

      配置以后重启,从机就默认配置锁指向的进程为自己的主机。

      顺带一提:几台服务器没有建立主从关系之前,一台机器set了key-value对,当他成为主机后,这部分值依旧会被复制到从机中。


    三、复制原理

      每次从机连通后,都会给主机发送sync指令,主机收到指令后进行持久化操作,将数据存入RDB文件,持久化完成以后,主机把此RDB文件发送给从机。从机接收到RDB文件后,进行全盘加载。再此之后每次的主机写操作,都会立刻把指令发送给从机,从机执行相同的命令。

      以上面一主二仆的模式为例,如果一台主机的从机过多,势必会给主机造成IO压力。你可能已经想到了,那能不能给从机再设置从机呢?问题就是这么解决的。

      Master  --->  Slave1 --> Slave2

      当然,如果节点太多,你也可以设计成树状结构。

      同样,你可以在命令行中临时指定,也可以在配置文件中永久指定。这里不再赘述。

      这样做很多好处:

        1)当主机宕机后,其直接从机可以通过指令:slaveof  no  one,成为主机,之前提过,作为主机时,不能使用set,但是他大哥死了,他做了老大就可以set了。如果此时他的大哥复活了,就会发现老虎不在山猴子称大王,他曾经的小弟已经接替他掌管门派了,除非小弟重启,或在再次通过命令称他他哥,否则它是做不会大哥的。

        2)上面是认为的在主机宕机后制定从机为主机,但是在日常生产中,通常都是有后台监控主机是否发生故障,如果发生故障就根据投票数自动的将从机转换为主机。我们称这种机制为哨兵模式。

          

          

        3)哨兵模式

          测试模板:一主二仆模式

          问:在配置哨兵的情况下主机挂掉以后,两个同级的从机谁做老大?----指定优先级

         配置哨兵模式:

          ①、在主机配置文件同级目录下创建文件sentinel.conf

            文件内容为:sentinel monitor mymaster 192.168.188.100 6379  1      ,mymaster是给主机气的别名。这个1 的意思为,当有一台从机ping主机时没有返回PONG就

                                                                                                                                                   认为主机宕机了,需要根据规则提升某一从机为主机

                  daemonize yes                   指定后台运行,其这里没有指定,因为要做测试看他把谁提升为主机的细节。

          

          ②、不指定优先级:由该进程早主机中的run_id决定,由于每次启动run_id不同,所以可以算是随机提升一个从机当主机。

          

          

          并且让之前的同级变成了他的从机

          

          这种改变时永久性的,你可以打开他们的配置文件看一看,已经被改写:

          

          并且此时哨兵的配置文件也发生了改动

          你可以手动的改回去。

          ③、指定优先级:有两种方式

            测试前提,把哨兵模式工作时改动的配置文件改为之前的一主二仆模式

            a)选择偏移量大的做主机:就是说谁那里存有原来主机的数据最多,谁就被提升为主机,这基本决定于那一台主机最早做主机的从机

              参与赋值的主从机都会维护吱声赋值偏移量。主机在处理完写入命令后,命令的字节长度做leijiajil,tongji在信息info replication的master_erpl_offset指标中。

              从机每秒钟上报自身的赋值偏移量给主机,因此主机也会保存从机的赋值偏移量。从机再接收主机发送的命令后,也会累加记录自身的偏移量,统计在info

              replication中的slave_repl_offset指标中。

            b)选择优先级最靠前的做主机:在从机的配置文件中可以指定 slave-priorty  n,n越小,优先级越高。

          

  • 相关阅读:
    【Android】11.2 通过重写对应的方法保存和恢复实例的状态
    【Android】11.1 Activity的生命周期和管理
    【Android】11.0 第11章 活动和片段--本章示例主界面
    【Android】10.5 滚动视图(RecyclerView)
    【Android】10.4 卡片视图
    【Android】10.3 网格视图(GridView)
    【Android】10.2 使用Android Support Library增强组件功能
    【Android】10.1 扩展组件库和其他视图--本章示例主界面
    【Android】9.3 自定义列表视图的外观
    【Android】9.2 内置行视图的分类和呈现效果
  • 原文地址:https://www.cnblogs.com/superlsj/p/11621960.html
Copyright © 2020-2023  润新知