zoukankan      html  css  js  c++  java
  • 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 机器数量的增加,也会加剧延迟 ;

  • 相关阅读:
    Java代码实现WORD转PDF
    用Java实现在【520,1314】之间生成随机整数的故事
    solr 6.5.1 linux 环境安装
    并发编程学习笔记(15)----Executor框架的使用
    并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
    并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
    并发编程学习笔记(12)----Fork/Join框架
    并发编程学习笔记(11)----FutureTask的使用及实现
    并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
    服务器被植入木马,CPU飙升200%
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665616.html
Copyright © 2011-2022 走看看