docker部署redis哨兵模式
本文记录本人在一台设备上部署redis配置Sentinel模式
一、哨兵模式简介
哨兵是Redis的一种运行模式,它专注于对Redis实例(主节点、从节点)运行状态的监控,并能够在主节点发生故障时通过一系列的机制实现选主及主从切换,实现故障转移,确保整个Redis系统的可用性。
二、搭建环境
- 操作系统:Debian11;
- Docker版本:23.0.1;
三、安装配置步骤
- 检索可以垃取的redis镜像
root@cs-888888:~# docker search redis
- 拉取redis镜像
root@cs-888888:~# docker pull redis
- 获取redis配置文件样本
root@cs-888888:~# wget -c http://download.redis.io/redis-stable/redis.conf
获取配置文件后复制出三份
root@cs-888888:~# cp redis.conf redis6370.conf
root@cs-888888:~# cp redis.conf redis6371.conf
root@cs-888888:~# mv redis.conf redis6372.conf
- 修改主要参数设置
以下为基础属性设置根据实际情况配置多实例,本文以主服务做的示例:
- port 设置redis服务运行的端口(防止占用)
port 6370
- 注释只监听本地选项,可以远程连接。#bind 127.0.0.1
- 关闭保护模式 protected-mode no
- logfile 设置日志文件路径
"/var/tmp/redis_6370.log"
- pidfile 设置pid文件路径
/var/run/redis_6370.pid
- requirepass 设定密码(可选,如果这里开启了密码要求,slave的配置里就要加这个密码 )
requirepass redis@6370
以下为主从复制配置参数(一主:6370,二从:6371、2372):
- replicaof从机需要设置该参数 (redis6371.conf和redis6372.conf需要将masterip设置为容器运行的内部ip,port为上面设置的6370), 注意该参数在redis5.0之前是slaveof
- masterauth 当我们的主机redis有设置密码的时候,它就是设置主机连接密码。
注释:使用docker inspect redis-6370查看一下容器运行的基本信息"IPAddress": "172.17.0.3"即为内部IP在配置masterip的时候使用此ip即可。
启动redis实例验证配置:
- 实例1
docker run -p 6370:6370 --name redis-6370 -v /home/docker-data/redis/redis-conf/redis6370.conf:/etc/redis/redis.conf -v /home/docker-data/redis/data-6370:/data -d redis redis-server /etc/redis/redis.conf
- 实例2
docker run -p 6371:6371 --name redis-6371 -v /home/docker-data/redis/redis-conf/redis6371.conf:/etc/redis/redis.conf -v /home/docker-data/redis/data-6371:/data -d redis redis-server /etc/redis/redis.conf
- 实例3
docker run -p 6372:6372 --name redis-6372 -v /home/docker-data/redis/redis-conf/redis6372.conf:/etc/redis/redis.conf -v /home/docker-data/redis/data-6372:/data -d redis redis-server /etc/redis/redis.conf
对以上命令简单解释:
- 参数-p 6370:6370,冒号前的表示宿主机端口,冒号后的表示容器实例端口,意思是将容器实例端口映射到宿主机端口。
- 参数--name redis-6370,给容器实例命名。
- 参数-v /home/docker-data/redis/redis-conf/redis6370.conf:/etc/redis/redis.conf,冒号前是宿主机配置文件路径,冒号后是容器的配置文件路径,意思是将容器实例的配置路径映射到宿主机的路径。
- 参数-v /home/docker-data/redis/data-6370:/data,如上面意思相同。
- 选项-d表示以后台形式运行实例。
- 参数redis-server /etc/redis/redis.conf表示执行redis-server命令, /etc/redis/redis.conf表示以该配置文件启动redis实例,注意配置文件必须为redis-server命令的第一个参数。
检测主从配置
docker exec -it redis-6370 redis-cli -p 6370 -a password 127.0.0.1:6370> info
查看到如下内容则表示主从配置成功
数据测试
配置哨兵模式
哨兵集群模式工作原理
单个哨兵容易导致误判主节点下线,比如主节点正常,只是在与哨兵之间通讯出现短暂异常,如果是单个哨兵,在指定的时间间隔没有通讯就认为主节点下线了,但其实没有;如果哨兵集群,可以询> 问多个哨兵指定的主节点是否下线,这样就显得更有保障;假如主哨兵死亡,也会进行选举新的哨兵为领导者;本文仅使用两个哨兵来做演示。
下载哨兵模式配置文件,并复制两份;操作同redis配置文件获取
wget http://download.redis.io/redis-stable/sentinel.conf
cp sentinel.conf sentinel-6370.conf
cp sentinel.conf sentinel-6371.conf
修改哨兵配置文件参数说明
- 哨兵的端口号
因为各个哨兵节点会运行在单独的Docker容器中
所以无需担心端口重复使用
port 26370- 配置哨兵的监控参数
格式:sentinel monitor
master-name是为这个被监控的master起的名字
ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
redis-port是被监控节点所监听的端口号
quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor local-master 172.17.0.3 6370 2- master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
格式:sentinel down-after-milliseconds
sentinel down-after-milliseconds local-master 30000
启动哨兵
docker run -p 26370:26370 --name sentinel1 -v /home/docker-data/redis/sentinel/sentinel-26370.conf:/etc/redis/sentinel.conf -v /home/docker-data/redis/sentinel/data1:/data -d redis redis-sentinel /etc/redis/sentinel.conf
docker run -p 26371:26371 --name sentinel2 -v /home/docker-data/redis/sentinel/sentinel-26371.conf:/etc/redis/sentinel.conf -v /home/docker-data/redis/sentinel/data2:/data -d redis redis-sentinel /etc/redis/sentinel.conf
进入哨兵容器查看状态
进入哨兵容器
docker exec -it sentinel1 redis-cli -p 26370
查看信息
info sentinel