redis-sentinel 环境部署

温馨提醒

环境

  • sentinel 节点

    节点名称IP 地址
    sentinel-01192.168.1.54
    sentinel-02192.168.1.58
    sentinel-03192.168.1.94
  • redis 主从节点1

    节点名称IP 地址
    redis-01192.168.1.116
    redis-02192.168.1.240
  • redis 主从节点2

    节点名称IP 地址
    redis-03192.168.1.67
    redis-04192.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"

停掉要删除的节点服务

1
systemctl stop redis

在每个 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