单台机器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