(004)Redis 哨兵模式(sentinel)

哨兵模式(sentinel)是用于监控redis集群中 Master 状态的工具,即当某个 master 服务宕机时可以自动将该 master 下的某个slave 服务升级为 master 服务替代已下线的master服务继续处理请求。

实现

1 . 新建 redis 7000 端口的配置文件

vim redis-7000.conf

port 7000
daemonize yes
pidfile /var/run/redis_7000.pid
logfile "7000.log"
dir "/opt/redis-5.0.5/data"

 2 . 再分别新建 redis 7001、7002 端口的配置文件

sed "s/7000/7001/g" redis-7000.conf >redis-7001.conf
sed "s/7000/7002/g" redis-7000.conf >redis-7002.conf
echo "slaveof 127.0.0.1 7000" >> redis-7001.conf
echo "slaveof 127.0.0.1 7000" >> redis-7002.conf

3 . 启动此三个 Redis 服务:

redis-server config/redis-7000.conf
redis-server config/redis-7001.conf
redis-server config/redis-7002.conf

4 . 查看启动状态:

ps -ef | grep redis | grep 700

root     32376     1  0 15:40 ?        00:00:00 redis-server *:7000
root     32381     1  0 15:40 ?        00:00:00 redis-server *:7001
root     32387     1  0 15:40 ?        00:00:00 redis-server *:7002

5 . 查看主从关系:

redis-cli -p 7000 info replication

# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=7001,state=online,offset=84,lag=1
slave1:ip=127.0.0.1,port=7002,state=online,offset=84,lag=0
master_replid:0ebbf9e66bd01c4de2c2a30b658a60b36731ae67
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84

可见,7000 端口开启的 redis 服务被作为 master 节点,其下 slave 节点有两个,分别是 7001 、7002 端口;

安装配置 sentinel 

找到 redis 目录下的默认配置文件 sentinel.conf,复制一份到自定义配置文件夹 config 下:

cp sentinel.conf config/

新建一个端口为 26379 的 sentinel 配置文件:

cat sentinel.conf | grep -v "#" | grep -v "^$" > redis-sentinel-26379.conf
# -v "#" 删掉 # 开头的行
# -v "^$" 删掉空行

修改默认配置:

port 26380
daemonize yes
pidfile /var/run/redis-sentinel-26380.pid
logfile "26380.log"
dir /opt/redis-5.0.5/data
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

 配置文件解释:

# 默认 2 个 sentinel 主观认为 masters 下线时,此 mater 才客观下线
sentinel monitor mymaster 127.0.0.1 6379 2
# 每隔 30 秒发送一次心跳PING来确认master是否存活
sentinel down-after-milliseconds mymaster 30000
# 在发生 failover 主备切换时,指定最多可以有多少个 slave 同时对新的master进行同步
sentinel parallel-syncs mymaster 1
# 当 failover 开始后,在此时间内仍然没有触发任何 failover 操作
# 当前 sentinel 将会认为此次 failoer 失败。默认180秒,即3分钟。
sentinel failover-timeout mymaster 180000
# ?
sentinel deny-scripts-reconfig yes

创建另外两个配置文件:

sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf 
sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf 

分别启动 sentinel 服务

redis-sentinel redis-sentinel-26379.conf
redis-sentinel redis-sentinel-26380.conf
redis-sentinel redis-sentinel-26381.conf

查看是否启动

ps -ef | grep redis-sentinel

root     13509     1  0 17:00 ?        00:00:02 redis-server *:7000
root     13511     1  0 17:00 ?        00:00:01 redis-server *:7001
root     13520     1  0 17:00 ?        00:00:02 redis-server *:7002
root     14017     1  0 17:25 ?        00:00:00 redis-sentinel *:26379 [sentinel]
root     14023     1  0 17:25 ?        00:00:00 redis-sentinel *:26380 [sentinel]
root     14028     1  0 17:25 ?        00:00:00 redis-sentinel *:26381 [sentinel]
root     14113 12940  0 17:29 pts/1    00:00:00 grep --color=auto redis

可见启动成功,利用redis-cli 对服务进行连接:

redis-cli -p 26379

查看节点信息:

127.0.0.1:26379> info

#  .. 其它的一些信息 ..

# Sentinel

master0:name=mymaster,status=ok,address=127.0.0.1:7000,slaves=2,sentinels=3 # 表示有 3 个 sentinel 

如果显示你的 sentinels 数量只有 1 个而不是3个,反思一下是否在创建 redis-sentinel-26380.conf、redis-sentinel-26381.conf 两个配置文件时,复制的是已启动过的 redis-sentinel-26379.conf 。因为原配置文件在启动之后会被重写,再次查看配置文件:

 cat redis-sentinel-26379.conf 

port 26379
daemonize yes
pidfile "/var/run/redis-sentinel-26379.pid"
logfile "26379.log"
dir "/opt/redis-5.0.5/data"
sentinel myid 4adc628037b80fff424be83571e1c231dcfc8fc7
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel config-epoch mymaster 0
# Generated by CONFIG REWRITE
protected-mode no
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 127.0.0.1 7001
sentinel known-replica mymaster 127.0.0.1 7002
sentinel current-epoch 0

可见,配置文件已经发生了改变。

测试一下是否生效,我们可以 kill 掉7000的进程

ps -ef | grep redis |grep  7000

root     13509     1  0 17:00 ?        00:00:02 redis-server *:7000

kill 13509

稍等之后,再次查看服务:

redis-cli -p 26379 info

#  .. 其它的一些信息 ..

# Sentinel

master0:name=mymaster,status=ok,address=127.0.0.1:7001,slaves=2,sentinels=3 

可见在没有手动操作的情况下, 7001 变成了 master,并且再次启动 7000 端口的服务时,7000变成了7001的从节点。(此时应该查询日志,可以分析投票选举的情况)

发布了46 篇原创文章 · 获赞 42 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Phplayers/article/details/94996635