美文网首页
Redis哨兵

Redis哨兵

作者: Js_Gavin | 来源:发表于2021-12-30 13:19 被阅读0次

    什么是哨兵

    顾名思义,哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。
    (1)监控主数据库和从数据库是否正常运行。
    (2)主数据库出现故障时自动将从数据库转换为主数据库。

    哨兵是一个独立的进程,使用哨兵的一个典型架构如图8-3所示。

    image.png

    在一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健,如图8-4所示。注意,此时不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会互相监控。

    image.png

    以图8-3所示架构进行模拟

    redis环境:

      192.168.1.102:6302(master)
    
      192.168.1.103:6380(slave)
    
      192.168.1.104:6381(slave)
    

    首先启动三个redis数据库,然后将两个从库连接至主库(很简单,自行百度)

    查看主库

    image.png

    可见其连接了两个从库,配置正确,然后用同样的方法查看两个从库配置:

    image.png image.png

    当出现的信息如上时,即表示一主多从的复制配置已经成功了。

    接下来开始配置哨兵,建立一个配置文件sentinel.conf:

    vim /etc/sentinel.conf
    
    # 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.1.102代表监控的主服务器,6303代表端口,1代表只有一个或一个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
    sentinel monitor mymaster 192.168.1.102 6302 1
    
    #如果主库设置了密码需要加上
    sentinel auth-pass mymaster Rd123456..
    

    启动sentinel进程

    /bin/redis-sentinel /etc/sentinel.conf > /var/log/redis/sentinel.log &
    
    tail -f /var/log/redis/sentinel.log
    
    image.png

    其中+slave表示新发现了从数据库,可见哨兵成功地发现了两个从数据库。现在哨兵已经在监控这3个Redis实例了,这时我们将主数据库(即运行在6302端口上的Redis实例)关闭(杀死进程或使用SHUTDOWN命令),等待指定时间后(可以配置,默认为30秒),哨兵会输出如下内容:

    image.png

    +try-failover表示哨兵开始进行故障恢复,+failover-end表示哨兵完成故障恢复,期间涉及的内容比较复杂,包括领头哨兵的选举、备选从数据库的选择等,放到后面介绍,此处只需要关注最后3条输出。+switch-master表示主数据库从6302端口迁移到6381端口,即6381端口的从数据库被升格为主数据库,同时两个+slave则列出了新的主数据库的两个从数据库,端口分别为6380和6302。其中6302就是之前停止服务的主数据库,可见哨兵并没有彻底清除停止服务的实例的信息,这是因为停止服务的实例有可能会在之后的某个时间恢复服务,这时哨兵会让其重新加入进来,所以当实例停止服务后,哨兵会更新该实例的信息,使得当其重新加入后可以按照当前信息继续对外提供服务。此例中6302端口的主数据库实例停止服务了,而6381端口的从数据库已经升格为主数据库,当6302端口的实例恢复服务后,会转变为6381端口实例的从数据库来运行,所以哨兵将6302端口实例的信息修改成了6381端口实例的从数据库。

    注意事项:

    1、 如果系统中使用了redis 哨兵,由于在切换master的时候,原本的master可能变成slave,故也需要在原本主库redis /etc/redis.conf 上配置masterauth:password

    2、将redis.conf中bind配置注释掉,以便所有服务器都可以连接

    3、需要将所有服务器的主从redis端口开放

    4、每台服务器上的主从redis密码必须相同,否则在切换到新的master的时候,会认证失败

    5、当SELinux启动时,如果修改了redis默认端口,在进行主从连接时,可能出现权限错误等异常,这是因为SELinux对端口做了限制

    解决方案(推荐第一种方案)

    1、添加新的redis端口到SELinux认证中

    semanage port -a -t redis_port_t -p tcp 6302
    

    2、将SELinux设为宽容模式,修改/etc/sysconfig/selinux,将SELINUX修改为permissive

    相关文章

      网友评论

          本文标题:Redis哨兵

          本文链接:https://www.haomeiwen.com/subject/xxsiqrtx.html