环境
sentinel 节点
| 节点名称 | IP 地址 |
|---|
| sentinel-01 | 192.168.1.54 |
| sentinel-02 | 192.168.1.58 |
| sentinel-03 | 192.168.1.94 |
redis 主从节点1
| 节点名称 | IP 地址 |
|---|
| redis-01 | 192.168.1.116 |
| redis-02 | 192.168.1.240 |
redis 主从节点2
| 节点名称 | IP 地址 |
|---|
| redis-03 | 192.168.1.67 |
| redis-04 | 192.168.1.167 |
redis 主从节点部署
主节点配置
vim /etc/redis.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| bind 0.0.0.0
daemonize yes # 启用守护模式
slave-read-only yes # slave默认就是只读的
pidfile "/var/run/redis/redis.pid"
port 6379
tcp-backlog 511
loglevel notice
logfile "/var/log/redis/redis.log"
dbfilename dump.rdb
dir "/data/redis/"
masterauth 123456 # 主从认证密码,否则主从不能同步
requirepass 123456 # 设置redis登录密码
appendonly yes
appendfilename "appendonly.aof"
protected-mode no # 是3.2之后加入的新特性,为了禁止公网访问redis cache,加强redis安全的,它启用的条件有两个,没有bind ip以及没有设置访问密码的
|
从节点配置
vim /etc/redis.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| bind 0.0.0.0
daemonize yes # 启用守护模式
slave-read-only yes # slave默认就是只读的
pidfile "/var/run/redis/redis.pid"
port 6379
tcp-backlog 511
loglevel notice
logfile "/var/log/redis/redis.log"
dbfilename dump.rdb
dir "/data/redis/"
masterauth 123456 # 主从认证密码,否则主从不能同步
requirepass 123456 # 设置redis登录密码
appendonly yes
appendfilename "appendonly.aof"
protected-mode no # 是3.2之后加入的新特性,为了禁止公网访问redis cache,加强redis安全的,它启用的条件有两个,没有bind ip以及没有设置访问密码的
slaveof 192.168.1.116 6379 # 从节点添加此行,指向主节点
|
sentinel 部署
vim /etc/redis-sentinel.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| port 26379
protected-mode no # 禁用保护模式
# 配置监听的主服务器,mymaster表示主节点的别名,可自定义,172.16.20.29表示redis主服务器,6379表示redis端口,2表示只有两个或两个以上的sentinel认为主服务器不可用的时候,才会进行failover操作
sentinel monitor mymaster 192.168.1.116 6379 2
sentinel down-after-milliseconds mymaster 10000
# 每个sentinel节点都要定期ping来判断redis节点和其余sentinel节点是否可达,如果超过10秒没有回复,则断定不可达
sentinel parallel-syncs mymaster 1
# 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel failover-timeout mymaster 60000
# 故障转移超时时间为60000毫秒
sentinel auth-pass mymaster 123456 # 如果redis配置了密码,这里必须配置认证,否则不能自动切换
# sentinel known-slave mymaster 192.168.1.240 6379 # 指定当前集群的从库IP和端口,在主从切换时该值会改变
|
启动服务查看服务状态
启动 redis 服务
1
| systemctl enable --now redis
|
启动 sentinel 服务
1
| systemctl enable --now redis-sentinel
|
查看 redis 主从状态
1
| redis-cli -a 123456 info replication
|
查看 sentinel 状态(登录任意一个sentinel节点)
1
| redis-cli -p 26379 info sentinel
|
向 sentinel 集群中手动添加 redis 主从
部署 redis 主从2,部署方式与主从1相同
登录三个 sentinel 节点,三个节点执行如下命令,动态添加 redis 主从
对于已经正在运行的集群,sentinel 会将一些信息回写到配置中,建议不要手动修改 sentinel 配置文件
1
2
| redis-cli -p 26379
127.0.0.1:26379> sentinel monitor test 192.168.1.67 6379 2
|
如果 redis 中配置了密码,也要在 sentinel 中添加密码,否则不能切换
1
| 127.0.0.1:26379> sentinel set test auth-pass 123456
|
查看 sentinel 集群状态
1
2
3
4
5
6
7
8
| 127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:2
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=test,status=ok,address=192.168.1.67:6379,slaves=1,sentinels=3
master1:name=mymaster,status=ok,address=192.168.1.116:6379,slaves=1,sentinels=3
|
从 sentinel 集群中删除一个 redis 主从
1
2
3
4
5
6
7
8
9
10
11
| # 在三个sentinel节点上执行如下命令
127.0.0.1:26379> sentinel remove test
OK
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=192.168.1.116:6379,slaves=1,sentinels=3
|
从 sentinel 集群中删除一个slave节点
查看从节点
1
2
3
4
5
| 192.168.1.10:26379> sentinel masters
192.168.1.20:26379> sentinel masters
192.168.1.30:26379> sentinel masters
29) "num-slaves"
30) "2"
|
停掉要删除的节点服务
在每个 sentinel 节点上,每隔 30s 执行如下命令
1
2
3
| 192.168.1.10:26379> sentinel reset mymaster
192.168.1.20:26379> sentinel reset mymaster
192.168.1.30:26379> sentinel reset mymaster
|
查看从节点
1
2
3
4
5
| 192.168.1.10:26379> sentinel masters
192.168.1.20:26379> sentinel masters
192.168.1.30:26379> sentinel masters
29) "num-slaves"
30) "1"
|
sentinel 常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| # 展示所有被监控的主节点状态以及相关的统计信息
sentinel masters
# 展示指定<master name>的主节点状态以及相关的统计信息
sentinel master <master name>
# 展示指定<master name>的从节点状态以及相关的统计信息
sentinel slaves <master name>
# 展示指定<master name>的Sentinel节点集合(不包含当前Sentinel节点)
sentinel sentinels <master name>
# 返回指定<master name>主节点的IP地址和端口
sentinel get-master-addr-by-name <master name>
# 对指定<master name>主节点进行强制故障转移
sentinel failover <master name>
# 检测当前可达的Sentinel配置是否合理,failover的条件是否满足,节点总数是否达到<quorum>的个数
sentinel ckquorum <master name>
# 取消当前Sentinel节点对于指定<master name>主节点的监控
sentinel remove <master name>
# 通过命令的形式来完成Sentinel节点对主节点的监控
sentinel monitor <master name> <ip> <port> <quorum>
# 强制 sentinel 重写所有配置信息到配置文件
sentinel flushconfig
# 动态修改Sentinel节点配置选项
sentinel set <master name>
# Sentinel节点之间用来交换对主节点是否下线的判断
# 根据参数的不同,还可以作为Sentinel领导者选举的通信方式
sentinel is-master-down-by-addr
|