• Redis 主从复制


    一、简介

    官网介绍

    行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。

    二、准备工作

    准备三个服务器配置文件,以6379、6380、6381三个端口为例。

    步骤1:拷贝多个redis.conf文件

    步骤2:开启daemonize yes

    步骤3:pidfile文件名字

    步骤4:指定端口

    步骤5:log文件名字

    步骤6:dump.rdb名字

    配置完以后启动三个redis实例,此时三个实例地位相同,都是master

    三、一主双从配置

    可以使用SLAVEOF命令将该实例设置为从机

    将6380、6381都设置为从机后,再看主机的情况

    • Slave会在启动后完全复制Master的数据。
    • Slave只能读不能写
    • Master宕机后,Slave原地待命,不会自动变成Master,Master重启后,如果写入数据,Slave依然会复制。

    注意:SLAVEOF命令是一次性的,如果Slave宕机后,重启后会变成Master,除非将slaveof命令写入配置文件。

    四、薪火相传

    • 上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力
    • 中途变更转向会清除之前的数据,重新建立拷贝最新的
    • slaveof 新主库IP 新主库端口

     

     

    五、反客为主

    SLAVEOF no one

    使当前slave停止与其他实例的同步,转成master

    六、复制原理

    • slave启动成功连接到master后会发送一个sync命令
    • Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
    • 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
    • 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
    • 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

    七、哨兵模式(sentinel)

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

    步骤1:调整结构6379带着6380、6381

    步骤2:自定义的/opt/myredis目录下新建sentinel.conf文件,名字绝不能错

    步骤3:配置哨兵,填写内容

    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel down-after-milliseconds mymaster 60000
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1
    • 第一行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
    • 不过要注意, 无论你设置要多少个 Sentinel 同意才能判断一个服务器失效, 一个 Sentinel 都需要获得系统中多数(majority) Sentinel 的支持, 才能发起一次自动故障迁移, 并预留一个给定的配置纪元 (configuration Epoch ,一个配置纪元就是一个新主服务器配置的版本号)。
    • 换句话说, 在只有少数(minority) Sentinel 进程正常运作的情况下, Sentinel 是不能执行自动故障迁移的。

    其他选项的基本格式如下:

    sentinel <选项的名字> <主服务器的名字> <选项的值>

    步骤4:启动哨兵

    redis-sentinel /opt/myredis/sentinel.conf

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

    步骤5:测试

    主动将6379停掉,sentinel开始选举新的master,最终6380被选为新的master,6381为slave

    注意sentinel不仅将存活的6381选为slave,6379如果重启也会作为slave存在

  • 相关阅读:
    [LeetCode] Reverse Linked List II 解题报告
    [LeetCode] Search for a Range 解题报告
    Git教程
    今天使用VS2012遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
    套接字的域和地址族
    套接口和I/O通信
    2010年第82届奥斯卡金像奖获奖影片名单
    恩信ERP7.10安装、定制和二次开发 (2)
    从 Google 代码库找到的好东西 [转]
    更自然的人机交互——2010微软技术节现场速递
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14554347.html
Copyright © 2020-2023  润新知