Redis 集群安装实验手册(二) - 哨兵模式

上一篇文章 我们介绍了搭建 Redis 主从复制的方法。主从复制虽然一定程度上提升了 Redis 水平扩展的能力,但由于不具备自动检测失败,自动切换主从等能力,维护起来还是比较麻烦的。因此, Redis 又引入了哨兵模式。

实验环境

操作系统: Ubuntu 18.04
Docker: 18.09 ( 安装可参考 在Ubuntu 18.04 中安装 Docker )
Docker-Compose: 1.8.0 (可以执行 sudo apt install docker-compose 进行安装)
Redis-Cli: 3.0.6 (可以执行 sudo apt install redis-tools 进行安装)

因为哨兵模式是主从的进化,所以需要先完成主从的搭建,参考 上一篇文章

实验目标

在主从的基础上,搭建用于监控主从的哨兵。 在本次实验中,将搭建一个具有三个哨兵的哨兵集群。每个哨兵运行于Docker 中,使用主机的不同端口(host网络模式)。

为尽量简化实验的复杂度,使用 Docker 和 Docker-Compose 进行配置,并且不配置存储,使用简单的 host 网络模式。

Sentinel-1 主机端口为: 26379
Sentinel-2 配置端口为: 26380
Sentinel-3 配置端口为: 26381

Santinel 配置文件

Redis Sentinel 实际上是一个运行在特殊模式下的 Redis Server 实例。为搭建三个哨兵,我们建立三个配置文件,内容如下:

  1. redis-sentinel-1.conf
1
2
3
4
5
6
7
8
9
bind 127.0.0.1

port 26381

sentinel monitor local-master 127.0.0.1 6379 2

sentinel auth-pass local-master redis.123

sentinel down-after-milliseconds local-master 30000

其中,sentinel monitor 用于设定监控目标
格式为:sentinel monitor

  • master-name是为这个被监控的master起的名字
  • ip是被监控的master的IP或主机名。
  • redis-port是被监控节点所监听的端口号
  • quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了

sentinel auth-pass 用于指定连接到的主节点所需的密码
格式为:sentinel auth-pass

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

  1. redis-sentinel-2.conf
1
2
3
4
5
6
7
8
9
bind 127.0.0.1

port 26380

sentinel monitor local-master 127.0.0.1 6379 2

sentinel auth-pass local-master redis.123

sentinel down-after-milliseconds local-master 30000
  1. redis-sentinel-3.conf
1
2
3
4
5
6
7
8
9
bind 127.0.0.1

port 26381

sentinel monitor local-master 127.0.0.1 6379 2

sentinel auth-pass local-master redis.123

sentinel down-after-milliseconds local-master 30000

Docker-Compose 配置文件

定义好三个 Redis sentinel 实例的配置后,现在用 Docker-Compose 把它们的运行组合起来,新建名为: docker-compose.yml 的文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '2'

services:
redis-sentinel-1:
image: redis
container_name: redis-sentinel-1
network_mode: host
volumes:
- ./redis-sentinel-1.conf:/usr/local/etc/redis/redis-sentinel.conf
command: ["redis-sentinel", "/usr/local/etc/redis/redis-sentinel.conf"]
redis-sentinel-2:
image: redis
container_name: redis-sentinel-2
network_mode: host
volumes:
- ./redis-sentinel-2.conf:/usr/local/etc/redis/redis-sentinel.conf
command: ["redis-sentinel", "/usr/local/etc/redis/redis-sentinel.conf"]
redis-sentinel-3:
image: redis
container_name: redis-sentinel-3
network_mode: host
volumes:
- ./redis-sentinel-3.conf:/usr/local/etc/redis/redis-sentinel.conf
command: ["redis-sentinel", "/usr/local/etc/redis/redis-sentinel.conf"]

注意:在本实验中,假设所有文件时在同一目录中的

启动 Redis Sentinel 集群

确保在 Redis 集群安装实验手册(一) - 主从复制 主从集群已经正常运行

在 docker-compose.yml 所在的目录执行:

1
docker-compose up -d

系统显示:

1
2
3
Creating redis-sentinel-1
Creating redis-sentinel-3
Creating redis-sentinel-2

如果使用 docker ps 命令,可以看到六个个容器被启动了。

1
2
3
4
5
6
ab2fa8669b8d        redis               "docker-entrypoint.s…"   6 seconds ago       Up 5 seconds                            redis-sentinel-2
d2d422a8bcb3 redis "docker-entrypoint.s…" 6 seconds ago Up 5 seconds redis-sentinel-3
1f9ae9ab2e11 redis "docker-entrypoint.s…" 6 seconds ago Up 5 seconds redis-sentinel-1
6027ea8a6599 redis "docker-entrypoint.s…" 30 seconds ago Up 29 seconds redis-server-slave-2
05de2a4273f5 redis "docker-entrypoint.s…" 30 seconds ago Up 29 seconds redis-server-slave-1
92c9078ac048 redis "docker-entrypoint.s…" 30 seconds ago Up 30 seconds redis-server-master

注意: PORT 列是空的,因为使用的是 host 模式,docker 直接使用的是宿主机的端口,所以在端口映射列是空的

验证集群

登录到一个哨兵节点, 执行

1
redis-cli -p 26379 -a redis.123

再在 redis-cli 命令行提示符下执行

1
info sentinel

系统将显示类似信息:

1
2
3
4
5
6
7
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=local-master,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

为观察变化,也可以使用 docker logs 命令查看相关实例日志的变化,如:

1
docker logs -f redis-sentinel-1

就可以参考监控 redis-sentinel-1 的日志输出。

下一步

下一步,我们将演示如何设定 Redis Cluster。

本文标题:Redis 集群安装实验手册(二) - 哨兵模式

文章作者:Morning Star

发布时间:2020年09月22日 - 06:09

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/redis/redis-setup-sentinel/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。