redis哨兵模式单节点部署和分布式集群部署,主要功能如下
redis-sentinel sentinel.conf
redis-server sentinel.conf --sentinel
这里使用redis-sentinel
启动
3409:X 03 Mar 2021 14:14:27.938 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3409:X 03 Mar 2021 14:14:27.938 # Redis version=6.0.10, bits=64, commit=00000000, modified=0, pid=3409, just started
3409:X 03 Mar 2021 14:14:27.938 # Configuration loaded
3409:X 03 Mar 2021 14:14:27.939 * Increased maximum number of open files to 10032 (it was originally set to 2560).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.10 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 3409
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
3409:X 03 Mar 2021 14:14:27.942 # Sentinel ID is 4f2331e824e2b5bcc26c5a9d21781fee13c6f7a5
3409:X 03 Mar 2021 14:14:27.942 # +monitor master mymaster 127.0.0.1 6379 quorum 2
可以看到我们使用默认配置启动了,没有修改配置的话,默认监控 127.0.0.1 6379
sentinel.conf
# 绑定固定IP
bind 127.0.0.1
# 是否开启保护模式
protected-mode no
# 哨兵的数据交互端口
port 26379
# 是否后台运行
daemonize no
# pid文件配置
pidfile /var/run/redis-sentinel.pid
# 日志配置
logfile ""
# 指定实例可访问IP和端口
# 当配置以下地址后,该实例将在集群内广播此信息,其他实例将使用此地址访问该实例
sentinel announce-ip 10.0.0.1
sentinel announce-port 8080
# 工作文件夹
dir /tmp
# 配置哨兵监控的集群,<quorum>个哨兵同意后,才可将主节点置为D_DOWN状态
sentinel monitor <master-name> <ip> <redis-port> <quorum>
# 配置监控集群密码及用户
sentinel auth-pass <master-name> <password>
sentinel auth-user <master-name> <username>
# 配置超时时间后节点状态置为S_DOWN状态
sentinel down-after-milliseconds <master-name> <milliseconds>
# 哨兵访问密码,哨兵集群中如配置了密码,则需要配置相同的密码,哨兵实例会使用同一个密码访问其他实例
requirepass <password>
# 配置故障转移期间,哨兵可以配置多少个副本同时指向新节点
sentinel parallel-syncs <master-name> <numreplicas>
# 配置故障转移超时时间
sentinel failover-timeout <master-name> <milliseconds>
# 配置发生故障转移时,用于通知的脚本
sentinel notification-script <master-name> <script-path>
# 配置发生故障转移时,用户刷新客户端配置的脚本
sentinel client-reconfig-script <master-name> <script-path>
# 配置脚本是否可热更改
sentinel deny-scripts-reconfig yes
# 命令重命名
SENTINEL rename-command mymaster CONFIG CONFIG
一个完整的Redis高可用集群,首先需要一个redis集群和和一个哨兵集群,redis集群这里就不细说搭建了,感兴趣的小伙伴可以去翻我以前文章,这里我们重点介绍一下哨兵集群
port 5001
sentinel monitor mastera 127.0.0.1 7001 2
sentinel down-after-milliseconds mastera 5000
sentinel failover-timeout mastera 60000
sentinel parallel-syncs mastera 1
sentinel monitor masterb 127.0.0.1 7002 2
sentinel down-after-milliseconds masterb 5000
sentinel failover-timeout masterb 60000
sentinel parallel-syncs masterb 1
sentinel monitor masterc 127.0.0.1 7003 2
sentinel down-after-milliseconds masterc 5000
sentinel failover-timeout masterc 60000
sentinel parallel-syncs masterc 1
sentinel monitor masterd 127.0.0.1 7008 2
sentinel down-after-milliseconds masterd 5000
sentinel failover-timeout masterd 60000
sentinel parallel-syncs masterd 1
这里需要配置主机节点信息,可在redis集群中使用命令查看
redis-cli -p 7001 cluster nodes | grep master
如需在同一台机器上启动,则需要修改端口号
# 启动命令
redis-sentinel sentinel.conf
一个完整的进程如下
# ps -ef | grep redis
501 3352 1 0 2:12下午 ?? 0:28.53 redis-server *:7001 [cluster]
501 3354 1 0 2:12下午 ?? 0:28.61 redis-server *:7002 [cluster]
501 3356 1 0 2:12下午 ?? 0:28.32 redis-server *:7003 [cluster]
501 3358 1 0 2:12下午 ?? 0:28.43 redis-server *:7004 [cluster]
501 3360 1 0 2:12下午 ?? 0:29.96 redis-server *:7005 [cluster]
501 3362 1 0 2:12下午 ?? 0:28.33 redis-server *:7006 [cluster]
501 4397 1 0 3:14下午 ?? 0:02.93 redis-server *:7008 [cluster]
501 4467 1 0 3:15下午 ?? 0:01.80 redis-server *:7007 [cluster]
501 4322 3336 0 3:10下午 ttys000 0:02.99 redis-sentinel *:5001 [sentinel]
501 4338 4113 0 3:11下午 ttys001 0:02.86 redis-sentinel *:5002 [sentinel]
501 4376 4343 0 3:13下午 ttys002 0:02.42 redis-sentinel *:5003 [sentinel]
501 4565 4383 0 3:21下午 ttys003 0:00.00 grep redis
集群信息如下
# redis-cli -p 7001 cluster nodes
6aaaff204289440db6dbe0be589fb46522ba015c 127.0.0.1:7001@17001 myself,master - 0 1614756186000 1 connected 666-5460
8bc190edfeafc9bdd71d68faca062e1f491b83ed 127.0.0.1:7004@17004 slave faf57276fcd0e44c09472beb13ed64a972db3d79 0 1614756187441 3 connected
299403c911514294d69cae39dc621c08bf1af184 127.0.0.1:7002@17002 master - 0 1614756188453 2 connected 6128-10922
c4dc9e656c66c870836686e455244f742d300911 127.0.0.1:7007@17007 slave 6aaaff204289440db6dbe0be589fb46522ba015c 0 1614756188555 1 connected
faf57276fcd0e44c09472beb13ed64a972db3d79 127.0.0.1:7003@17003 master - 0 1614756187000 3 connected 11589-16383
68323fc50d406d860467bf40c1f26ed39d5f9410 127.0.0.1:7005@17005 slave 3f3abba12b3acbea3eb2e45e8ca3ec1493f864a0 0 1614756187000 7 connected
3f3abba12b3acbea3eb2e45e8ca3ec1493f864a0 127.0.0.1:7008@17008 master - 0 1614756188555 7 connected 0-665 5461-6127 10923-11588
bdf81d7c75edfd7d7778af82573f36990adc13e5 127.0.0.1:7006@17006 slave 299403c911514294d69cae39dc621c08bf1af184 0 1614756188000 2 connected
4322:X 03 Mar 2021 15:10:43.059 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4322:X 03 Mar 2021 15:10:43.059 # Redis version=6.0.10, bits=64, commit=00000000, modified=0, pid=4322, just started
4322:X 03 Mar 2021 15:10:43.059 # Configuration loaded
4322:X 03 Mar 2021 15:10:43.060 * Increased maximum number of open files to 10032 (it was originally set to 2560).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.10 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 5001
| `-._ `._ / _.-' | PID: 4322
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
4322:X 03 Mar 2021 15:10:43.063 # Sentinel ID is 2c0687b9adb5186b93435fc02e2a8f13c3d5d122
4322:X 03 Mar 2021 15:10:43.063 # +monitor master masterc 127.0.0.1 7003 quorum 2
4322:X 03 Mar 2021 15:10:43.063 # +monitor master masterb 127.0.0.1 7002 quorum 2
4322:X 03 Mar 2021 15:10:43.063 # +monitor master masterd 127.0.0.1 7008 quorum 2
4322:X 03 Mar 2021 15:10:43.063 # +monitor master mastera 127.0.0.1 7001 quorum 2
4322:X 03 Mar 2021 15:10:43.065 * +slave slave 127.0.0.1:7006 127.0.0.1 7006 @ masterb 127.0.0.1 7002
4322:X 03 Mar 2021 15:10:43.066 * +slave slave 127.0.0.1:7004 127.0.0.1 7004 @ masterc 127.0.0.1 7003
4322:X 03 Mar 2021 15:10:48.101 # +sdown master masterd 127.0.0.1 7008
4322:X 03 Mar 2021 15:11:28.963 * +sentinel sentinel 38c0b7911e511107dd2cb7bd5c65a6046cfb6746 127.0.0.1 5002 @ masterb 127.0.0.1 7002
4322:X 03 Mar 2021 15:11:28.966 * +sentinel sentinel 38c0b7911e511107dd2cb7bd5c65a6046cfb6746 127.0.0.1 5002 @ mastera 127.0.0.1 7001
4322:X 03 Mar 2021 15:11:28.968 * +sentinel sentinel 38c0b7911e511107dd2cb7bd5c65a6046cfb6746 127.0.0.1 5002 @ masterc 127.0.0.1 7003
4322:X 03 Mar 2021 15:13:36.063 * +sentinel sentinel 28383fa71f6783f803f00bef078c4b992269b848 127.0.0.1 5003 @ masterb 127.0.0.1 7002
4322:X 03 Mar 2021 15:13:36.067 * +sentinel sentinel 28383fa71f6783f803f00bef078c4b992269b848 127.0.0.1 5003 @ masterc 127.0.0.1 7003
4322:X 03 Mar 2021 15:13:36.069 * +sentinel sentinel 28383fa71f6783f803f00bef078c4b992269b848 127.0.0.1 5003 @ mastera 127.0.0.1 7001
4322:X 03 Mar 2021 15:14:05.747 # -sdown master masterd 127.0.0.1 7008
4322:X 03 Mar 2021 15:14:06.106 * +sentinel sentinel 28383fa71f6783f803f00bef078c4b992269b848 127.0.0.1 5003 @ masterd 127.0.0.1 7008
4322:X 03 Mar 2021 15:14:06.391 * +sentinel sentinel 38c0b7911e511107dd2cb7bd5c65a6046cfb6746 127.0.0.1 5002 @ masterd 127.0.0.1 7008
4322:X 03 Mar 2021 15:14:15.690 * +slave slave 127.0.0.1:7005 127.0.0.1 7005 @ masterd 127.0.0.1 7008
4322:X 03 Mar 2021 15:20:35.503 * +slave slave 127.0.0.1:7007 127.0.0.1 7007 @ mastera 127.0.0.1 7001
4322:X 03 Mar 2021 15:28:55.885 # +sdown master mastera 127.0.0.1 7001
4322:X 03 Mar 2021 15:28:55.970 # +new-epoch 1
4322:X 03 Mar 2021 15:28:55.971 # +vote-for-leader 28383fa71f6783f803f00bef078c4b992269b848 1
4322:X 03 Mar 2021 15:28:55.990 # +odown master mastera 127.0.0.1 7001 #quorum 2/2
4322:X 03 Mar 2021 15:28:55.991 # Next failover delay: I will not start a failover before Wed Mar 3 15:30:56 2021
4322:X 03 Mar 2021 15:28:59.202 # +config-update-from sentinel 28383fa71f6783f803f00bef078c4b992269b848 127.0.0.1 5003 @ mastera 127.0.0.1 7001
4322:X 03 Mar 2021 15:28:59.202 # +switch-master mastera 127.0.0.1 7001 127.0.0.1 7007
4322:X 03 Mar 2021 15:28:59.202 * +slave slave 127.0.0.1:7001 127.0.0.1 7001 @ mastera 127.0.0.1 7007
4322:X 03 Mar 2021 15:29:04.249 # +sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ mastera 127.0.0.1 7007
4322:X 03 Mar 2021 15:31:22.858 # -sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ mastera 127.0.0.1 7007
可以看到一个哨兵监控了4个主节点mastera、masterb、masterb、masterc,因为masterd我没有启动,出现了+sdown master masterd 127.0.0.1 7008
,启动了masterd后-sdown master masterd 127.0.0.1 7008
,从哨兵日志可以清楚了解redis集群的节点变动情况
Redis哨兵模式,跟想象中的有差别,学习之后逐渐明白
https://redis.io/topics/sentinel