前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 哨兵模式

Redis 哨兵模式

作者头像
用户10384376
发布2023-02-26 13:02:37
5360
发布2023-02-26 13:02:37
举报
文章被收录于专栏:码出code码出code

哨兵模式

当主数据库挂了之后,需要手动设置新的主数据库,其他从数据库都需要重新设置新的主数据。手动切换的成本比较大,还会导致一段时间的服务不可用。这就需要讲上面的手动设置改成自动设置,也就是使用哨兵来配置。

哨兵Redis的高可用解决方案,哨兵监控Redis主服务器和绑定的从服务器,如果主服务器宕机了,自动将某个从服务器升级为新的服务器,然后发送通知给其他从服务器。

哨兵基本原理

哨兵是一个独立的进程,和Redis一样,它也运行一个实例。主要有三个任务:

  • 监控: 周期给所有的主从数据库发送PING命令,检查主从数据库运行是否正常,在设置down-after-milliseconds毫秒,没有服务响应,就会标记主观下线,当其他哨兵也判断主观下线,判断主观下线的数量达到设置的值后,哨兵之间会进行投票,投票同意后,进行数据库升级。
  • 自动切换主从数据库:当上面的投票同意后,会根据一定的规则选取一个从服务器升级成主服务器。更新redis.conf配置文件。
  • 通知:完成主服务器升级之后,哨兵通过发布订阅会把新主数据库的连接信息发送给其他从数据库,修改对应配置文件的replicaof命令,和新数据库建立连接,并进行数据复制。

哨兵服务搭建

在上面的主从模式的基础上添加哨兵,首先从解压文件夹复制sentinel.confusr/local/redis文件夹中:

代码语言:javascript
复制
cp sentinel.conf /usr/local/redis/

修改sentinel.conf文件,需要修改的部分:

  • daemonize no 改成 daemonize yes
  • logfile "" 改成 logfile "redis_26379.log"
  • 添加 sentinel monitor <master-name> <ip> <redis-port> <quorum>,设置成 sentinel monitor mymaster 127.0.0.1 6382 1
    • ip 主数据库IP
    • redis-port 主数据库端口
    • quorum 主从切换需要达到主动下线个数
  • 如果数据库有密码,添加 sentinel auth-pass mymaster 123456,表示验证密码
    • mymaster 哨兵的名称,需要唯一
    • 123456 数据库密码,所有主从数据库密码需要设置成一致。

启动服务器:

代码语言:javascript
复制
[root@instance-3 redis]# bin/redis-sentinel sentinel.conf 

查看logfile启动日志:

看最后标记的三行,表明哨兵分别监控了主数据库6380、两个从数据库63816382。有上面的日志输出表明哨兵已经成功启动。

模拟主从切换

使用SHUTDOWN命令关闭6380主数据库服务:

代码语言:javascript
复制
[root@instance-3 redis]# bin/redis-cli -p 6380
127.0.0.1:6380> shutdown
(error) NOAUTH Authentication required.
127.0.0.1:6380> a
[root@instance-3 redis]# bin/redis-cli -p 6380
127.0.0.1:6380> auth xxx
OK
127.0.0.1:6380> SHUTDOWN

通过ps -ef |grep redis查看6380已经关闭:

代码语言:javascript
复制
[root@instance-3 redis]# ps -ef |grep redis
root      8822     1  0 Nov21 ?        00:00:58 /usr/local/redis/bin/redis-server *:6379
root     24707     1  0 10:35 ?        00:00:02 bin/redis-server *:6381
root     27500     1  0 10:47 ?        00:00:01 bin/redis-server *:6382
root     29247     1  0 10:54 ?        00:00:03 bin/redis-sentinel *:26379 [sentinel]
root     34131 17210  0 11:16 pts/1    00:00:00 grep --color=auto redis

查看哨兵日志logfile

表明主服务器从6380成功切换到了6382sentinel.conf配置文件也修改了主从数据库配置。如果没有切换成功,日志报错-failover-abort-no-good-slave,可能是没有设置验证密码sentinel auth-pass

哨兵模式的优缺点

  • 优点
    • 哨兵模式是基于主从模式,主从模式的优点,哨兵模式都有。
    • 哨兵模式使用独立进程监控服务,自动切换宕机数据库,保障服务的高可用。
  • 缺点
    • 受限于单个服务器,很难实现单节点在线扩容。
    • 每个服务器都保存相同的信息,比较浪费内存。

总结

  • 哨兵模式:
    • 根据主从模式无法自动切换问题,就有了哨兵模式。
    • 哨兵是一个独立的进程,它主要有三个功能:监控数据库,发现主数据库宕机了,首先标记主观下线,当主观下线数量达到设置的数量时,就会进行投票,通过之后就执行切换主数据库,将一个从数据库升级成主数据库。并通知给其他数据库修改主数据库配置。
    • 哨兵模式实现自动切换主数据库,实现了服务的高可用。
    • 哨兵模式和主从模式一样,所有数据库都存放相同的数据,比较浪费内存,而且受限于单机数据库,很难实现在线扩容。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 哨兵模式
    • 哨兵基本原理
      • 哨兵服务搭建
        • 模拟主从切换
          • 哨兵模式的优缺点
          • 总结
          相关产品与服务
          云数据库 Redis
          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档