• 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机器数量的增加也会使这个问题更加严重。

  • 相关阅读:
    HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)
    HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)
    邮件推广工具
    aix-syslog
    能量点
    知识picture
    C中运算符
    stdio.h头文件中申明的基本函数
    字符串
    指针字符串
  • 原文地址:https://www.cnblogs.com/wanghaoyu666/p/12264601.html
Copyright © 2020-2023  润新知