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

【Redis】Redis Sentinel

作者头像
用户5522200
发布2019-06-02 15:36:51
9260
发布2019-06-02 15:36:51
举报
文章被收录于专栏:lindalinda

IP:192.168.225.128、192.168.225.129 环境:centos7 版本:redis-3.2.10

一、Redis sentinel

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。 虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 –sentinel 选项来启动 Redis Sentinel 。

二、配置redis主从

详细配置见文章redis主从配置 128/129上面安装路径:/usr/local/redis 数据路径:/data/redis6379、/data/redis6380

配置环境:

代码语言:javascript
复制
Master:192.168.225.128:6379
Slave1:192.168.225.129:6380
Slave2:192.168.225.129:6381

确认redis节点是否启动

代码语言:javascript
复制
[root@vm-test1 redis]# redis-cli -h 192.168.225.128 -p 6379 ping
PONG

主redis的info replication信息

代码语言:javascript
复制
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.225.129,port=6380,state=online,offset=44477,lag=1
slave1:ip=192.168.225.129,port=6381,state=online,offset=44477,lag=1
master_repl_offset:44477
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:44476

三、配置启动sentinel

步骤 1、修改配置文件

代码语言:javascript
复制
# cd /usr/local/redis
# cp sentinel.conf sentinel-1.conf
# vim sentinel-1.conf 修改为
sentinel monitor mymaster 192.168.225.128 6379 2

说明:mymaster不需要是主机名,可自己定义,只需要前后保持一致 Sentinel-1节点需要监控192.168.225.128:6379这个主节点,2代表判断主节点失败至少需要2个sentinel节点同意,mymaster是主节点别名。 2这个值定义为几的标准:一般建议将其设置为sentinel节点的一半加1

步骤 2、启动

代码语言:javascript
复制
方法1:
# cd /usr/local/redis/
# bin/redis-server sentinel-1.conf --sentinel
方法2:
# cd /usr/local/redis/
# bin/redis-sentinel sentinel-1.conf

两种方式原则上一样

代码语言:javascript
复制
[root@bogon redis]# bin/redis-sentinel sentinel-1.conf &
[1] 7187
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.10 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 7187
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

7187:X 28 Aug 12:21:29.456 # Sentinel ID is 589d622f9a149e71a49d04431988bc1d726fc87a
7187:X 28 Aug 12:21:29.456 # +monitor master mymaster 192.168.225.128 6379 quorum 2
7187:X 28 Aug 12:21:29.457 * +slave slave 192.168.225.129:6380 192.168.225.129 6380 @ mymaster 192.168.225.128 6379
7187:X 28 Aug 12:21:29.461 * +slave slave 192.168.225.129:6381 192.168.225.129 6381 @ mymaster 192.168.225.128 6379
[root@bogon redis]# ps -ef |grep sentinel
root       7187   3100  0 12:21 pts/0    00:00:00 bin/redis-sentinel *:26379 [sentinel]
root       7222   3100  0 12:21 pts/0    00:00:00 grep --color sentinel

步骤 3、Sentinel-2和sentinel-3的启动方式同上一致

步骤 4、确认

启动一个sentinel后(启动3个sentinel后sentinels=3)

代码语言:javascript
复制
[root@vm-test1 redis]# redis-cli -p 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=192.168.225.128:6379,slaves=2,sentinels=1

步骤 5、说明:

3个sentinel启动后,查看sentinel-1.conf,发生了变化,体现在: 1.sentinel节点自动发现了从节点、其余sentinel节点 2.去掉了默认配置,例如:parallel-syncs、failover-timeout参数 3.添加了配置纪元相关参数

代码语言:javascript
复制
port 26379
dir "/data/sentinel-1"
sentinel myid 79d2238ec1b78bbc87c63c831628bd075b874c06
sentinel monitor mymaster 192.168.225.128 6379 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
#发现2个slave节点
sentinel known-slave mymaster 192.168.225.129 6380
sentinel known-slave mymaster 192.168.225.129 6381
# 发现2个sentinel节点
sentinel known-sentinel mymaster 192.168.225.128 26381 92e43ffca6742b68f8937b8ae69abdfd3390b56d
sentinel known-sentinel mymaster 192.168.225.128 26380 4c9cf1849b1bd7c6d4f5a5b30f986dbac2cc3f99
sentinel current-epoch 0

步骤 6、测试是否可实现故障转移

1.将主reids 129:6379关闭(主129:6379,从128:6380) 2.查看sentinel日志如下:

步骤 7、日志中常见的命令

代码语言:javascript
复制
<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>
+reset-master :主服务器已被重置。
+slave :一个新的从服务器已经被 Sentinel 识别并关联。
+failover-state-reconf-slaves :故障转移状态切换到了 reconf-slaves 状态。
+failover-detected :另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。
+slave-reconf-sent :领头(leader)的 Sentinel 向实例发送了 [SLAVEOF](/commands/slaveof.html) 命令,为实例设置新的主服务器。
+slave-reconf-inprog :实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。
+slave-reconf-done :从服务器已经成功完成对新主服务器的同步。
-dup-sentinel :对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种情况。
+sentinel :一个监视给定主服务器的新 Sentinel 已经被识别并添加。
+sdown :给定的实例现在处于主观下线状态。
-sdown :给定的实例已经不再处于主观下线状态。
+odown :给定的实例现在处于客观下线状态。
-odown :给定的实例已经不再处于客观下线状态。
+new-epoch :当前的纪元(epoch)已经被更新。
+try-failover :一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。
+elected-leader :赢得指定纪元的选举,可以进行故障迁移操作了。
+failover-state-select-slave :故障转移操作现在处于 select-slave 状态 —— Sentinel 正在寻找可以升级为主服务器的从服务器。
no-good-slave :Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。
selected-slave :Sentinel 顺利找到适合进行升级的从服务器。
failover-state-send-slaveof-noone :Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。
failover-end-for-timeout :故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。
failover-end :故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。
+switch-master :配置变更,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。
+tilt :进入 tilt 模式。
-tilt :退出 tilt 模式。

四、配置优化

代码语言:javascript
复制
port 26379
dir "/data/sentinel-1"
sentinel monitor mymaster 192.168.225.128 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# sentinel auth-pass <master-name> <password>
# sentinel notification-script <master-name> <script-path>
# sentinel client-reconfig-script <master-name> <script-path>

1、Port和dir

Port和dir分别代表sentinel节点的端口和工作目录

2、Sentinel monitor

Sentinel monitor <master-name> <ip><port> <quorum> sentinel节点会定期监控主节点, <master-name> sentinel要监控的主节点的名称 IP地址和端口为<ip><port>的主节点 <quorum>代表要判定主节点最终不可达所需要的票数

3、sentinel down-after-milliseconds

每个sentinel节点都要通过定期发送ping命令来判断redis数据节点和其余sentinel节点是否可达,如果超过了该时间,则判定节点不可达。单位:毫秒

4、sentinel parallel-syncs <master-name> <numslaves>

Sentinel领导者节点做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点的个数。 parallel-syncs=3 3个从节点同时发起复制 parallel-syncs=1 一次只有一个从节点复制,从节点会轮询发起复制

5、Sentinel failover-timeout

故障转移超时时间,作用于各个阶段。 A) 选出合适从节点 B) 晋升选出的从节点为主节点 C) 命令其余从节点复制新的主节点 D) 等待原主节点恢复后命令它去复制新的主节点

6、Sentinel auth-pass <master-name> <password>

如果sentinel监控的主节点设置了密码,sentinel通过以上命令添加主节点的密码

五、API

Sentinel节点是一个特殊的redis,有自己专属的api

1. redis-cli -p 26379

进入api客户端

2. sentinel masters

展示所有被监控的主节点状态以及相关统计信息 127.0.0.1:26379> sentinel masters

3. sentinel master <master name>

展示指定<master name>的主节点的状态以及相关统计信息

4. sentinel slaves <master name>

展示指定<master name>的从节点的状态以及相关统计信息

5. sentinel sentinels <master name>

展示指定<master name>的sentinel节点集合(不包含当前sentinel节点)

6. sentinel get-master-addr-by-name <master name>

返回指定<master name>主节点的ip和端口 127.0.0.1:26379> sentinel get-master-addr-by-name mymaster 1) "192.168.225.128" 2) "6379"

7. sentinel reset <pattern>

当前sentinel对符合pattern(通配符风格)主节点进行重置,包含清除主节点的相关状态(例如故障转移),重新发现重节点和sentinel节点 eg:sentinel reset mymaster # sentinel-1节点对mymaster节点重置状态

8. sentinel failover <master name>

对指定<master name>主节点进行强制故障转移(没有和其他sentinel节点协商)故障转移完成后,其他的sentinel节点按照故障转移的结果更新自身配置(该命令在日常运维中非常有用)

9. sentinel ckquorum <master name>

检测当前可达的sentinel节点总数是否达到quorum的个数

10. sentinel remove <master name>

取消当前sentinel节点对于指定master name主节点的监控

11. sentinel monitor <master name> <ip> <port> <quorum>

如:sentinel monitor mymaster-1 192.168.225.128 6379 2 和配置文件中该行命令的作用相同

12. sentinel set <master name>

可动态调整一些参数

代码语言:javascript
复制
quorum
down-after-nilliseconds
failover-timeout
parallel-syncs
notification-script
client-reconfig-script
auth-pass

13. Sentinel is-master-down-by-addr

Sentinel节点之间用来交换对主节点是否下线的判断

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Redis sentinel
  • 二、配置redis主从
  • 三、配置启动sentinel
    • 步骤 1、修改配置文件
      • 步骤 2、启动
        • 步骤 3、Sentinel-2和sentinel-3的启动方式同上一致
          • 步骤 4、确认
            • 步骤 5、说明:
              • 步骤 6、测试是否可实现故障转移
                • 步骤 7、日志中常见的命令
                • 四、配置优化
                  • 1、Port和dir
                    • 2、Sentinel monitor
                      • 3、sentinel down-after-milliseconds
                        • 4、sentinel parallel-syncs <master-name> <numslaves>
                          • 5、Sentinel failover-timeout
                            • 6、Sentinel auth-pass <master-name> <password>
                            • 五、API
                              • 1. redis-cli -p 26379
                                • 2. sentinel masters
                                  • 3. sentinel master <master name>
                                    • 4. sentinel slaves <master name>
                                      • 5. sentinel sentinels <master name>
                                        • 6. sentinel get-master-addr-by-name <master name>
                                          • 7. sentinel reset <pattern>
                                            • 8. sentinel failover <master name>
                                              • 9. sentinel ckquorum <master name>
                                                • 10. sentinel remove <master name>
                                                  • 11. sentinel monitor <master name> <ip> <port> <quorum>
                                                    • 12. sentinel set <master name>
                                                      • 13. Sentinel is-master-down-by-addr
                                                      相关产品与服务
                                                      云数据库 Redis
                                                      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                                                      领券
                                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档