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

Redis Sentinel 学习笔记

作者头像
用户1278550
发布2020-02-20 13:53:04
6230
发布2020-02-20 13:53:04
举报
文章被收录于专栏:idbaidba

一 Redis-Sentinel简介

Redis-Sentinel是Redis官方推荐的针对主从结构的高可用性解决方案,当master不可用,sentinel能监控多个master-slave集群,发现master宕机后能进行自动切换。

,Redis-sentinel本身是一个独立运行的进程,可以监控一个或者多个主从集群。当然生产环境中如果规模比较小可以使用一对多的方式进行监控,如果是规模比较大,尽可能的独立部署监控集群。

环境准备

sentinel 节点

代码语言:javascript
复制
qabb-qa-mysql0     10.215.20.24  26379
qabb-qa-mysql1     10.215.20.19  26379
qabb-qa-mysql2     10.215.20.7   26379

搭建redis 主备节点

代码语言:javascript
复制
qabb-qa-mysql1     10.215.20.19  6379  主库
qabb-qa-mysql2     10.215.20.7   6379  从库
安装redis

yum install -y yz-redis

生成redis实例

sh /opt/isys/bin/db/init_redis.sh -p 6379 -m 1G

配置主从

slaveof 10.215.20.7 6379

二 sentinel 实践

在三台sentinel节点服务器上依次操作,创建sentinel节点

创建对应目录

mkdir -p /data/redis/sentinel/{conf,data,log}

编辑配置文件 /data/redis/sentinel/conf/sentinel-26379.conf
代码语言:javascript
复制
port 26379
daemonize yes
logfile "26379.log"
dir "/data/redis/sentinel/"
sentinel monitor mymaster 10.215.20.7  6379 2
sentinel down-after-milliseconds master 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

修改文件夹的属组权限为redis

chown -R redis:redis /data/redis/sentinel/

启动 sentinel

需要注意的是必须等redis 主从启动之后才能启动redis sentinel 。每个节点的启动方式如下,不要使用root用户直接启动,有一定的安全风险。

sudo -u redis /opt/redis/bin/redis-sentinel /data/redis/sentinel/conf/sentinel-26379.conf

启动日志 如下:

代码语言:javascript
复制
24189:X 22 Jan 2020 23:02:19.126 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24189:X 22 Jan 2020 23:02:19.126 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=24189, just started
24189:X 22 Jan 2020 23:02:19.126 # Configuration loaded
24190:X 22 Jan 2020 23:02:19.128 * Running mode=sentinel, port=26379.
24190:X 22 Jan 2020 23:02:19.128 # Sentinel ID is b57983116e92a089ab7fff22584c1aaa128d83b8
24190:X 22 Jan 2020 23:02:19.128 # +monitor master mymaster 10.215.20.24 6379 quorum 2
24190:X 22 Jan 2020 23:02:49.170 # +sdown slave 10.215.20.7:6379 10.215.20.7 6379 @ mymaster 10.215.20.24 6379
配置文件说明
代码语言:javascript
复制
Sentinel实例的端口号
port 26379
#Sentinel 实例的目录
dir /data/redis/sentinel/
#日志文件
logfile "26379.log"
#后台执行
daemonize yes
#3.2里的参数,是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问,否则最好关闭,设置为no。
protected-mode no
#格式:sentinel <option_name> <master_name> <option_value>;这一行代表sentinel监控的master的名字叫做mymaster,地址为10.215.20.7:6379,行尾最后的2代表,当集群中有2个sentinel认为master不可用时,才真正认为该master不可用。
sentinel monitor mymaster 10.215.20.7  6379 2
#sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了(subjectively down, 也简称为SDOWN)。而这个down-after-milliseconds就是用来指定这个“一定时间范围”的,默认单位是毫秒,默认30秒。
sentinel down-after-milliseconds mymaster 30000
#在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。
sentinel parallel-syncs mymaster 1
#failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。默认180秒,即3minutes.
sentinel failover-timeout mymaster 180000
#设置连master和slaves验证密码,在监控redis实例时很有用
#sentinel auth-pass mymaster xxxxxxx
#发生切换之后执行的一个自定义脚本:如发邮件、vip切换等
#sentinel notification-script <master-name> <script-path>
#发生切换之后执行的一个自定义脚本:如发邮件、vip切换等
#sentinel client-reconfig-script <master-name> /opt/redis/script/notify.py
查看sentinel的信息
代码语言:javascript
复制
# redis-cli -h 127.0.0.1 -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.215.20.24:6379,slaves=2,sentinels=3
127.0.0.1:26379>
failover 切换测试

直接关闭主库,然后观察sentinel的日志,发生切换选择10.215.20.19 6379为主库。

具体sentinel的工作机制下一篇文章具体分析。

启动老的主库之后,sentinel会将redis 添加为 10.215.20.19 6379的slave。

代码语言:javascript
复制
[root@qabb-qa-mysql0 23:37:50 /data/redis/sentinel]
# sudo -u redis  /opt/redis/bin/redis-server /data/redis/6379/conf/6379.conf
[root@qabb-qa-mysql0 23:38:21 /data/redis/sentinel]
# yzcli 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.215.20.19
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1179166458
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2e97737def093096d21d51a5f4c7e6871fda97bc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1179166458
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1179158906
repl_backlog_histlen:7553

sentinel的log

14842:X 22 Jan 2020 23:38:22.009 # -sdown slave 10.215.20.24:6379 10.215.20.24 6379 @ mymaster 10.215.20.19 6379

切换过程对主库不可用探测时间比较久,这点在生产上可以调整sentinel的配置,缩短判断不可用的时间长度,达到快速切换的目的。

三 总结

本文大概介绍Sentinel的搭建过程和redis主从failover的过程。后面再详细介绍sentinel的工作原理。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
  • 搭建redis 主备节点
    • 安装redis
      • 生成redis实例
        • 配置主从
        • 二 sentinel 实践
          • 创建对应目录
            • 编辑配置文件 /data/redis/sentinel/conf/sentinel-26379.conf
              • 启动 sentinel
                • 配置文件说明
                  • 查看sentinel的信息
                    • failover 切换测试
                    • 三 总结
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档