单台机器Redis Sentinel(哨兵)部署

Redis-sentinel是Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具。在一般的分布式中心节点数据库中,Redis-sentinel的作用是中心节点的工作,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性。

一、Redis Sentinel规划(一主二从)

IP 端口号 角色
172.17.0.1 6379 Redis master
172.17.0.1 6380 Redis slave1
172.17.0.1 6381 Redis slave2
172.17.0.1 26379 sentinel master
172.17.0.1 26380 sentinel slave1
172.17.0.1 26381 sentinel slave2

一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健。此时,不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会相互监控。在这里,建议大家哨兵至少部署3个,并且使用奇数个哨兵。

二、RedisSentinel部署

1、安装Redis

在服务器上安装Redis,并给Redis设置密码,在Redis的conf文件中。

requirepass "Redis-Password"

2、设置主从复制

在2个SlaveRedis的配置文件中声明所从属的主数据库。

slaveof 172.17.0.1 6379

这里需要注意一点,如果主数据库设置了密码,需要所有Redis的配置文件中设置masterauth "Redis-Password",包括主数据库。Sentinel可以切换主从数据库,主数据库可能会变成从数据库,因此也需要设置主数据库密码。

3、配置Sentinel.config

  • 创建配置文件

创建一个redis-conf目录,新建sentinel.conf文件(Redis提供了该文件的模版),下面是一个sentinel master的配置文件,sentinel slave的配置文件一样,只是运行的端口和监听的Redis conf接口不一样。配置文件内容如下:

## sentinel实例之间的通讯端口

daemonize yes

port 26379

#redis-master

sentinel monitor redis-master 172.17.0.1 6379 2

sentinel down-after-milliseconds redis-master 5000

sentinel failover-timeout redis-master 900000

sentinel parallel-syncs redis-master 2

sentinel auth-pass redis-master 123456

logfile "/home/data/logs/redis/sentinel.log"
  • 配置项说明:

1) daemonize yes

– 以后台进程模式运行

2) port 26379

– 哨兵的端口号,该端口号默认为26379。

3) logfile"/home/data/logs/redis/sentinel.log"

– log文件所在地

4) sentinel monitor redis-master 172.17.0.1 7000 2

– redis-master是主数据的别名,考虑到故障恢复后主数据库的地址和端口号会发生变化,哨兵提供了命令可以通过别名获取主数据库的地址和端口号。

– 172.17.0.1 6379为初次配置时主数据库的地址和端口号,当主数据库发生变化时,哨兵会自动更新这个配置,不需要我们去关心。

–2,该参数用来表示执行故障恢复操作前至少需要几个哨兵节点同意,一般设置为N/2+1(N为哨兵总数)。

5) sentinel down-after-milliseconds redis-master 1000

– 如果master在多少秒内无反应哨兵会开始进行master-slave间的切换,使用“选举”机制

6) sentinel failover-timeout redis-master 5000

– 如果在多少秒内没有把宕掉的那台master恢复,那哨兵认为这是一次真正的宕机,而排除该宕掉的master作为节点选取时可用的node然后等待一定的设定值的毫秒数后再来探测该节点是否恢复,如果恢复就把它作为一台slave加入哨兵监测节点群并在下一次切换时为他分配一个“选取号”。

4、Sentinel运行

  • 启动Redis和Sentinel 配置完Redis和Sentinel之后,按顺序启动各个角色。启动顺序如下: Master->Slave->Sentinel,要确保按照这个顺序依次启动。 Sentinel的启动命令和Redis类似,终端输入:
# 启动Redis
redis-server /etc/redis/redis-conf/redis.conf  # 需要自己创建,模板文件Redis已经提供。
# 启动sentinel
redis-sentinel /etc/redis/redis-conf/sentinel.conf

启动成功后可以通过redis客户端工具查看当前Sentinel的信息,终端输入:

redis-cli -p 26379 -h 172.17.0.1 INFO Sentinel
# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

master0:name=redis-master,status=ok,address=172.17.0.1:6379,slaves=2,sentinels=3
  • 查看sentinel.conf 重新打开sentinel.conf文件,发现sentinel自动生成了一些信息,记录了监控过程中的状态变化。
##sentinel实例之间的通讯端口

daemonize yes

port 26379

#redis-master

sentinel monitor redis-master 172.17.0.1 6379 2

sentinel down-after-milliseconds redis-master 5000

sentinel failover-timeout redis-master 900000

sentinel parallel-syncs redis-master 2

sentinel auth-pass redis-master 123456

logfile "/home/data/logs/redis/sentinel.log"

# Generated by CONFIG REWRITE

dir "/soft/sentinel"

sentinel config-epoch redis-master 0

sentinel leader-epoch redis-master 0

sentinel known-slave redis-master 172.17.0.1 6380

sentinel known-slave redis-master 172.17.0.1 6381

sentinel known-sentinel redis-master 172.17.0.1 26380 ef356da8dadb6a16268d25611942ecf001d5cb2e

sentinel known-sentinel redis-master 172.17.0.1 26381 188fa69f695fd17639ce1ee38592e894d8a14331

sentinel current-epoch 0

相关链接:
https://www.jianshu.com/p/42ee966f96e5