在 Redis 中,一主二从三哨兵是一种典型的架构模式,用于提高系统的高可用性和容错性。这种架构包括一个主服务器(Master)和两个从服务器(Slave),以及三个哨兵(Sentinel)实例。下面是每个组件的简要介绍:
在一主二从三哨兵架构中,哨兵之间会进行通信,以便共同决定主服务器是否正常工作,并在需要时进行故障转移。这种架构可以有效地处理主服务器的故障,使系统能够在主服务器不可用时继续提供服务。
环境:CentOS7
虚拟机镜像下载链接https://vault.centos.org/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso
确保linux内核为3.10以上
nuame -r
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli
systemctl start docker
systemctl enable docker
curl -L https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
cd /usr/bin/
chmod +x /usr/bin/docker-compose
如果结果如下则显示安装成功
cd /usr/local
mkdir redis
cd redis
mkdir sentinel
cd ..
vi docker-compose.yml
ip:192.168.237.100换成自己的虚拟机ip
version: "4.1"
services:
master:
image: redis
container_name: redis-master
command: bash -c "redis-server --protected-mode no --slave-announce-ip 192.168.237.140 --slave-announce-port 6379"
ports:
- 6379:6379
slave1:
image: redis
container_name: redis-slave-1
ports:
- 6380:6379
command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.237.140 --slave-announce-port 6380"
slave2:
image: redis
container_name: redis-slave-2
ports:
- 6381:6379
command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.237.140 --slave-announce-port 6381"
在 docker-compose.yml同级目录下输入一下代码,运行结果如图
redis-default就是docker compose自动创建一个网络,命名规则上级文件夹名+_default,记住该网络名称。
使用docker ps查看启动服务,则会出现以下结果
进入redis-master容器
docker exec -it redis-master /bin/bash
redis-cli
查看状态信息 ,如果显示下图信息,则表示redis-主从连接成功
info replication
退出主容器,进入redis-slave-1,如果出现如下结果则redis主从搭建成功。
vi sentinel1.conf
protected-mode no
sentinel monitor mymaster 192.168.237.140 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
- 保护模式设置为no
- 设置监控目标的信息,其中参数分别为:Master名称、IP地址、端口号、Quorum。ip地址为宿主机地址
- 设置哨兵认为节点不可用所需的毫秒数。
- 在进行故障转移时,Sentinel将等待多长时间,以便让先前领导者尽可能恢复成为可接受筋疲力尽的服从者。
- 当Sentinel处理故障转移时,需要同步Slave上的数据,可以设置同时同步多个Slave的数量。
- 更多参数请查看
深入解读sentinel.confhttps://www.python100.com/html/106717.html
copy两份相同的配置文件
cp sentinel1.conf sentinel2.conf
cp sentinel1.conf sentinel3.conf
vi docker-compose.yml
version: "4.2"
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
ports:
- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- /usr/local/redis/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
sentinel2:
image: redis
container_name: redis-sentinel-2
ports:
- 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- /usr/local/redis/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
sentinel3:
image: redis
container_name: redis-sentinel-3
ports:
- 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- /usr/local/redis/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
default:
name: redis_default
external: true
配置文件解析
- 分别挂载三个配置文件到 /usr/local/redis/sentinel/sentinel1.conf 、sentinel2.conf 、sentinel3.conf
- networks.default.name=redis_defalut为docker network ls查看的,之前所搭建的redis网络
docker compose up -d
docker ps 查看一主二从三哨兵
进入任一哨兵节点容器,如果显示一下结果,则表示redis 一主二从三哨兵集群搭建成功
docker exec -it redis-sentinel-1 /bin/bash
redis-cli -p 26379
info Sentinel
停掉master节点
docker stop redis-master
查看日志
docker compose logs -f
查看哨兵状态,可以看到此时主节点自动更换为6381端口
重启master节点后,可以看到会6379以从节点加入到主节点中,