docker部署redis哨兵模式

本文记录本人在一台设备上部署redis配置Sentinel模式

一、哨兵模式简介

哨兵是Redis的一种运行模式,它专注于对Redis实例(主节点、从节点)运行状态的监控,并能够在主节点发生故障时通过一系列的机制实现选主及主从切换,实现故障转移,确保整个Redis系统的可用性。

二、搭建环境

  • 操作系统:Debian11;
  • Docker版本:23.0.1;

三、安装配置步骤

  1. 检索可以垃取的redis镜像

root@cs-888888:~# docker search redis

  1. 拉取redis镜像

root@cs-888888:~# docker pull redis

  1. 获取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

  1. 修改主要参数设置

以下为基础属性设置根据实际情况配置多实例,本文以主服务做的示例:

  • 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

posted @ 2023-03-06 21:41  yantx  阅读(928)  评论(0编辑  收藏  举报