zoukankan      html  css  js  c++  java
  • 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存在

  • 相关阅读:
    liunx centos下tomcat启动 Cannot find ./catalina.sh
    ls -bash: ls: command not found
    Linux CentOS下安装JDK1.7
    查看Linux Centos 系统信息 内核 CPU 系统版本 磁盘 分区 网络配置 进程 命令
    PHP自动捕捉监控致命错误(500错误) error_get_last() 获取最后一次发生错误信息 register_shutdown_function()在脚本停止执行时注册一个回调函数
    CI CodeIgniter 添加公共函数 全局函数 自定义函数
    express框架封装前戏
    怎奈风云多变换,骚完一波还一波,记PHP mongodb驱动的2019年11月用法
    linux ps sample
    利用python pika库实现rabbitmq客户端
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14554347.html
Copyright © 2011-2022 走看看