【Redis】哨兵机制搭建(详细步骤)

阅读须知:

本文主要内容为 Redis 哨兵机制搭建的详细步骤(以三哨兵为例)
想要了解如何安装 Redis 的同学可以前往:【Redis】基于Docker安装Redis(详细步骤)
想要了解如何搭建 Redis 主从的同学可以前往:【Redis】基于Docker搭建Redis主从(详细步骤)
本文在前两文的基础上,进一步搭建起 Redis 的哨兵机制。

操作步骤

1. 创建配置文件

  1. /usr/local/software/redis/6379/sentinel 目录下创建配置文件 sentinel.conf
  2. 由于是三哨兵机制,因此在 /usr/local/software/redis/6380/sentinel/usr/local/software/redis/6380/sentinel 目录下,均要建立对应的配置文件 sentinel.conf

演示图例如下:

创建配置文件sentinel.conf

2. 编辑配置文件

  1. 通过 vim 编辑器编辑配置文件内容,同样三个配置文件均需要分别编辑
  2. 按下 i ,进入输入模式,粘贴如下内容
  3. 按下:,输入wq,保存并退出

哨兵1:跟踪 Redis(主)

# 所以无需担心端口重复使用
# 如果需要在单机
port 26379

# 设定密码认证
# requirepass 123456

# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor redis_6379 172.18.12.10 6379 2

# 连接主节点的密码
# 格式:sentinel auth-pass <master-name> <password>
# sentinel auth-pass local-master 123456

# master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds redis_6379 30000

哨兵2:跟踪 Redis(从1)

# 所以无需担心端口重复使用
# 如果需要在单机
port 26380

# 设定密码认证
# requirepass 123456

# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor redis_6379 172.18.12.10 6379 2

# 连接主节点的密码
# 格式:sentinel auth-pass <master-name> <password>
# sentinel auth-pass local-master 123456

# master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds redis_6379 30000

哨兵3:跟踪 Redis(从2)

# 所以无需担心端口重复使用
# 如果需要在单机
port 26381

# 设定密码认证
# requirepass 123456

# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor redis_6379 172.18.12.10 6379 2

# 连接主节点的密码
# 格式:sentinel auth-pass <master-name> <password>
# sentinel auth-pass local-master 123456

# master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds redis_6379 30000

演示图例如下:

编辑配置文件

3. 创建容器

输入对应指令,创建运行哨兵的容器。

创建第一个哨兵(26379):

docker run -it \
--name sentinel_26379 \
--privileged \
--network my_docker_net \
--ip 172.18.12.20 \
-p 26379:26379 \
-v /usr/local/software/redis/6379/sentinel/sentinel.conf:/data/redis-sentinel.conf \
-d redis \
redis-sentinel redis-sentinel.conf

创建第二个哨兵(26380):

docker run -it \
--name sentinel_26380 \
--privileged \
--network my_docker_net \
--ip 172.18.12.21 \
-p 26380:26380 \
-v /usr/local/software/redis/6380/sentinel/sentinel.conf:/data/redis-sentinel.conf \
-d redis \
redis-sentinel redis-sentinel.conf

创建第三个哨兵(26381):

docker run -it \
--name sentinel_26381 \
--privileged \
--network my_docker_net \
--ip 172.18.12.22 \
-p 26381:26381 \
-v /usr/local/software/redis/6381/sentinel/sentinel.conf:/data/redis-sentinel.conf \
-d redis \
redis-sentinel redis-sentinel.conf

演示图例如下:

创建容器

4. 测试哨兵机制

a. 启动容器

  1. 输入 docker ps -a,查看容器创建情况
  2. 输入docker start 容器名/容器id,启动对应容器

演示图例如下:

启动容器

b. 查看对应哨兵状态

依次进入6379、6380、6381容器,查看对应哨兵状态

演示图例如下:

进入redis_6379:
查看6379
进入redis_6380:
查看6380

进入redis_6381:
查看6381

c. 关闭 master

输入 docker stop redis_6379,关闭主机,模拟主机宕机的情况

演示图例如下:

关闭主机

d. 查看从机状态

等待一会后,依次进入两个从机查看对应从机状态

演示图例如下:

进入redis_6380:
查看6380
进入redis_6381:
查看6381
从演示图例中可以看到,本该为从机的6381成为了主机,由此可以看出哨兵机制已经搭建成功!