zoukankan      html  css  js  c++  java
  • 【Redis】使用Redis Sentinel实现Redis HA

    阅读目录


    简单介绍

    使用Redis Sentinel实现Redis HA。
    阅读此文前,先阅读文章:《【Redis】配置redis主从复制》http://www.cnblogs.com/ssslinppp/p/5661419.html 
    作者:ssslinppp

    配置redis主从IP和port:
    master and slaveipport
    master127.0.0.16379
    slave1127.0.0.1
    6380
    slave2127.0.0.1
    6381

    一、配置Sentinel.conf

    上文中已经创建的主从设备,截图如下:

    如上图所示:
    • master:6379
    • slave1:6380
    • slave2:6380

    sentinel配置文件如下:
    1. #sentinel monitor <master-name> <ip> <redis-port> <quorum>
    2. sentinel monitor mymaster 127.0.0.1 6379 1
    3. sentinel down-after-milliseconds mymaster 30000
    4. sentinel failover-timeout mymaster 18000
    5. sentinel parallel-syncs mymaster 1

    解释说明如下:
    >>> sentinel monitor mymaster 127.0.0.1 6379 1
    • mymaster :为master redis的名称;
    • ip和port指定了6379端口的Redis为master;
    • quorum:一般情况下会启动多个redis sentinel作为分布式使用,当master挂掉之后,需要从若干个slave中推选出1个slave作为新的master,并将其他slave的slaveof设置指向这个新的master。而判断master redis是否挂掉,需要sentinel 说了算,只有不少于quorum个sentinel认为master redis挂掉,才会进行failover。因为这里只启动了一个sentinel,所以配置quorum为1,若是启动了多个sentinel用于分布式,可以将quorum设置>1。
    >>> sentinel down-after-milliseconds mymaster 30000
    表示当master redis 30s 没有应答时,就可以断定master挂掉了,但需要结合上面配置的quorum一起。
    >>> sentinel failover-timeout mymaster 18000
    若sentinel在该配置时间内没有完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
    >>> sentinel parallel-syncs mymaster 1
    指定在failover过程中,同时被sentinel reconfigure的最大slave实例数。由于reconfigure过程中,对应的slave会中断响应客户的请求,故为避免所有的slave同时不可用,该值需适当配小。

    二、启动Redis Sentinel

    1. ./src/redis-sentinel sentinel.conf

    从上可以看出,master redis 为6379,而slave又两个,分别为:6380和6381.
    此时在去观察sentinel.conf,会发现sentinel.conf发生了变化,如下所示:

    三、关闭master redis,测试failover


    大约过去半分钟,后会看到如下:
    • slave 6380的日志记录:
    • 再看看sentinel的提示信息:

    • 再来观察sentinel.conf

    可以对比最初的sentinel.conf

    此时再分别看看6379/6380/6381的redis.conf:
    • 6379的redis.conf
    分2种情况
    情况1:当6379(原先的master redis)关闭后,还未重启,此时的redis.conf文件内没有slaveof的配置;
    情况2:当6379服务启动后,会在redis.conf的最后添加slaveof的配置,如下:

    同时可以看到sentinel输出如下信息:
    e
    此时看看6379的日志信息:


    • 6380的redis.conf


    • 6381的redis.conf

    已经将slaveof自动修改为:6380(新的master)

    测试新的同步信息:

    从上面的输出结果可以看出,redis 主从复制依然有效。

    四、重新切换为最初的master

    前面我们看到了当master挂掉时,sentinel会自动的从slave中挑选出一个作为master,并重新配置各redis实例的配置文件。
    当之前挂掉的master又重启后,如果希望还是还原到原先的主从配置,可以通过如下操作来进行:

    登录到sentinel,使用命令:
    1. redis-cli -h 127.0.0.1 -p 26379 #26379为sentinel的端口
    执行语句:
    1. sentinel failover mymaster

    接下来我们来看看是否还原到之前的主从配置:
    • 先看看sentinel的输出信息:


    查看sentinel的配置文件:


    接下来看看3个redis.conf是否自动变化了(reconfigure)
    • 6379的redis.conf
    全文搜索slaveof,没有此配置选项,说明已经发生了变化,因为6379此时就是master redis。
    • 6380的redis.conf

    在最后添加了:slaveof 127.0.0.1 6379;
    说明6380已经从master重新变化为slave了。
    • 6381的redis.conf


    还可以通过如下方式进行说明:




    五、参考链接

    《【Redis】配置redis主从复制》http://www.cnblogs.com/ssslinppp/p/5661419.html 
    《Redis Sentinel Documentation》 http://redis.io/topics/sentinel 
    《Windows下Redis Sentinel部署》http://bbs.redis.cn/forum.php?mod=viewthread&tid=715 






  • 相关阅读:
    折腾了好久的输入法显示已禁用
    文件下载上传小工具
    隐藏进程命令行参数,例如输入密码等高危操作
    创建并使用https证书
    编译lua可执行程序
    使用msys2在window下构建和使用Linux的软件
    golang遍历时修改被遍历对象
    使用shell发送邮件,方便快捷
    关于golang的time包总结
    获取Win和Linux系统启动时间,类似uptime功能,用于判断是否修改过系统时间
  • 原文地址:https://www.cnblogs.com/ssslinppp/p/5663788.html
Copyright © 2011-2022 走看看