zoukankan      html  css  js  c++  java
  • redis主从复制

    Redis复制(Master/Slave)

    是什么?

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

    能干嘛?

    一半多用于读写分离,容灾恢复

    怎么玩?

    1、配从(库)不配主(库)

    2、从库配置:

    slaveof 主库IP 主库端口:每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件

    3、修改配置文件细节操作:

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

    剩下的操作都以redis6380.conf 为例

     (2)开启daemonize yes

     (3)pid文件名字

     (4)指定端口

     (5)Log文件名字

     (6)Dump.rdb名字

    我们可以看到我们已经模拟出三台机器来进行主从复制:

     第一个命令 info replication,我们可以看到三台机器都是master

     我们将6379作为主机,先输入两个key,剩下两台机器先不动:

     然后我们使剩下的两台机器做从机:

     然后我们在6379这边再键入一个key,可以看到两台从机都可以获得主机所写入的key:

     那么在它们做从机之前主机写入的数据能不能拿得到?答案是能:

     由此我们可以知道,在做从机的那一瞬间,它就已经把主机上的所有数据都备份了一遍

    这时候我们再看它们的信息:

     那么从机能否写入key呢?答案是不能,只有主机能写,从机只能进行读操作:

     那主机挂掉了,从机会怎么办?会有一个趁机翻身变成主机还是老老实实的待命?

    答案是老老实实待命:

     而且就算主机挂掉,你从机也不能进行写操作,只要你的身份是slave,你就不能做读以外的任何操作:

     主机恢复了,从机就会跟主机自动建立连接:

     如果从机挂掉了又恢复了,那它还是从机吗?答:不是

    我们可以看到6380这台机器挂掉了,这时候6379写入了一个key:

     然后6380又恢复了,这时它的身份已经不是slave了,而且主机在这期间写入的数据它也拿不到:

     这就是之前我们提到的只要从机断开连接,每次重新启动的时候都要重新建立主从关系,除非把它配置到redis.conf文件里面。

    那么如果6379由主机突然变成从机了,6380和6381会如何应答?

     我们可以看到,三台机器全部都变成slave了。而且没有一台机器能够写入数据。

    这时候我们手动把6381从slave切换到master,可以看到6381是主机,6379是6381的从机,而6380又是6379的从机。。。:

     上面这种情况就是薪火相传:

    上一个Slave可以是下一个slave的Master,Slave同坐可以接受其他salves的连接和同步请求,那么该slave作为了链条中下一个master,可以有效减轻master的压力

    中途变更转向:会清除之前的数据,重新建立拷贝最新的

    slaveof 新主库IP 新主库端口

    手动切换master:slaveof no one

    主从复制的原理:

    Slave 启动成功连接到master后会发送一个sync命令

    Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步

    全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

    增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

    接下来说一下最重要的主从复制模式:哨兵模式(sentinel)

    是什么?能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

    怎么玩?

    1、先建立一个一主多仆的主从复制,这里方便举例说明我们就使6379为主,6380,6381为从

    2、安装目录下新建sentinel.conf文件,名字绝对不能错(我这里的安装目录就是/myredis)

    3、配置哨兵,填写内容:

    sentinel monitor 被监控主机名字(自己起名字)127.0.0.1 6379 1

    上面最后一个数字1,表示主机挂掉后slave投票看让谁接替成为主机,得票数多少后成为主机

    如图:

     

    4、启动哨兵:Redis-sentinel /myredis/sentinel.conf

    上述目录依照各自的实际情况配置,可能目录不同

     

     现在我们让6379挂掉,然后看看80,81的状态:

     可以看到他俩还是slave,但是别着急,sentinel正在进行投票选择,这需要一定的时间,我们切到哨兵的那个窗口,可以看到现在已经选出来master了:

     

     然后我们再让6379启动,这时候会发现它刚开始还是master,过了一会就被sentinel自动配置成slave了:

     然后我们再看6381,就会发现它有两台slave:

     最后提一嘴,一组sentinel能够同时监控多个Master

    复制的缺点:复制延迟

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

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/wanghaoyu666/p/12264601.html
Copyright © 2011-2022 走看看