三台 Centos7.9 中 Docker 部署 Redis 哨兵模式

devtools/2025/1/20 5:23:40/

三台 Centos7.9 中 Docker 部署 Redis 哨兵模式

  • 1. 环境规划
  • 2. 配置 Docker Compose
  • 3. 配置 Redis 密码和持久化
  • 4. 配置哨兵
  • 5. 启动服务
  • 6. 验证 Redis 哨兵模式
  • 7. 注意事项

1. 环境规划

三台服务器的角色分配如下:

IP Address容器端口角色
192.168.15.128redis-master6379主节点
192.168.15.129redis-slave16379从节点
192.168.15.130redis-slave26379从节点
192.168.15.128sentinel126379哨兵节点
192.168.15.129sentinel226379哨兵节点
192.168.15.130sentinel326379哨兵节点

Redis 主节点和哨兵将在同一台服务器上运行。

mkdir ~/redis-clusterr
# 这一步自选,想放哪里放哪里

2. 配置 Docker Compose

在每台服务器上创建自己的 docker-compose.yml 文件。

192.168.15.128 - docker-compose.yml

version: '3.9'
services:redis-master:image: redis:6.0container_name: redis-masterrestart: alwaysports:- "6379:6379"volumes:- ./data:/data- ./redis.conf:/usr/local/etc/redis/redis.confcommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]networks:- redis-networksentinel1:image: redis:6.0container_name: redis-sentinel1restart: alwaysports:- "26379:26379"networks:- redis-networkvolumes:- ./sentinel1.conf:/usr/local/etc/sentinel.confcommand: ["redis-sentinel", "/usr/local/etc/sentinel.conf"]networks:redis-network:driver: bridge

192.168.15.129 - docker-compose.yml

version: '3.9'
services:redis-slave1:image: redis:6.0container_name: redis-slave1restart: alwaysports:- "6379:6379"volumes:- ./data:/data- ./redis.conf:/usr/local/etc/redis/redis.confcommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]networks:- redis-networksentinel2:image: redis:6.0container_name: redis-sentinel2restart: alwaysports:- "26379:26379"networks:- redis-networkvolumes:- ./sentinel2.conf:/usr/local/etc/sentinel.confcommand: ["redis-sentinel", "/usr/local/etc/sentinel.conf"]networks:redis-network:driver: bridge

192.168.15.130 - docker-compose.yml

version: '3.9'
services:redis-slave2:image: redis:6.0container_name: redis-slave2restart: alwaysports:- "6379:6379"volumes:- ./data:/data- ./redis.conf:/usr/local/etc/redis/redis.confcommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]networks:- redis-networksentinel3:image: redis:6.0container_name: redis-sentinel3restart: alwaysports:- "26379:26379"networks:- redis-networkvolumes:- ./sentinel3.conf:/usr/local/etc/sentinel.confcommand: ["redis-sentinel", "/usr/local/etc/sentinel.conf"]networks:redis-network:driver: bridge

3. 配置 Redis 密码和持久化

在每个服务器上创建 redis.conf 文件,内容如下。

redis.conf (适用于主节点)

bind 0.0.0.0
protected-mode yes
port 6379
requirepass your_master_password
masterauth your_master_password
appendonly yes
dir /data

redis.conf (适用于从节点)

bind 0.0.0.0
protected-mode yes
port 6379
requirepass your_slave_password
masterauth your_master_password
replicaof 192.168.15.128 6379
appendonly yes
dir /data

requirepass:设置访问实例的密码。
masterauth:从节点用此密码认证主节点。
appendonly:启用数据持久化。

4. 配置哨兵

更新各台服务器的 sentinelX.conf 文件,确保哨兵与 Redis 实例的密码匹配:

sentinelX.conf

port 26379
sentinel monitor mymaster 192.168.15.128 6379 2
sentinel auth-pass mymaster your_master_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

sentinel auth-pass mymaster your_master_password:为哨兵提供与 Redis 主节点通信时使用的密码。

  • 192.168.15.128: Redis 主节点的 IP 地址。
  • 2: 最少票数要求,3 个哨兵中需要至少 2 个同意切换主节点。

5. 启动服务

在每台服务器的对应目录运行:

docker-compose up -d

验证所有容器是否正常运行:

docker ps

6. 验证 Redis 哨兵模式

检查哨兵状态: 登录任意一个哨兵容器:

docker exec -it redis-sentinel1 redis-cli -p 26379

执行命令:

SENTINEL mastersSENTINEL slaves mymaster

模拟故障转移: 在主节点服务器停止主节点容器:


docker stop redis-master

查看日志确认哨兵是否选出新的主节点。

重新加入原主节点: 启动原主节点并手动设置为从节点:

docker start redis-masterdocker exec -it redis-master redis-clislaveof NEW_MASTER_IP 6379

7. 注意事项

  • 端口防火墙:确保 6379 和 26379 端口在三台服务器之间互通。
  • 哨兵数量:建议使用奇数个哨兵以避免投票僵局。

完成以上步骤后,在 192.168.15.128 - 192.168.15.130 即可完成部署 Redis 哨兵模式。


http://www.ppmy.cn/devtools/152008.html

相关文章

Leetcode - 周赛431

目录 一,3411. 最长乘积等价子数组 二,3412. 计算字符串的镜像分数 三,3413. 收集连续 K 个袋子可以获得的最多硬币数量 四,3414. 不重叠区间的最大得分 一,3411. 最长乘积等价子数组 本题数据范围小,直…

51单片机——DS18B20温度传感器

由于DS18B20数字温度传感器是单总线接口,所以需要使用51单片机的一个IO口模拟单总线时序与DS18B20通信,将检测的环境温度读取出来 1、DS18B20模块电路 传感器接口的单总线管脚接至单片机P3.7IO口上 2、DS18B20介绍 2.1 DS18B20外观实物图 管脚1为GN…

【linux命令】ip命令使用

1、设置网口IP 方法1:通过IP设置网口ip 添加静态IP: ip addr add 1.1.1.1/24 dev eth0 删除ip: ip addr del 1.1.1.1/24 dev eth0 方法2:nmtui 配置IP另外方法: nmtui 2、添加路由 添加路由: ip route add 目标网…

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置,这篇就让这两个模块绑定起来,绑定的原因是,Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定,其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…

智能网联汽车的数据脱敏

2021 年施行的数据安全法旨在规范数据处理活动,保障数据安全,促进包括自动驾驶数据在内的开发利用,保护个人、组织的合法权益,维护国家主权、安全和发展利益。同年施行的个人信息保护法则进一步细化了个人信息权益的保护&#xff…

知识图谱实体对齐工具浅析

知识图谱实体对齐工具是用于将不同知识图谱或数据源中的相同实体进行匹配和融合的技术。以下是几种常见的知识图谱实体对齐工具及其方法: 基于嵌入的方法: TransE、TransR、TransD、TransH、TransG:这些方法通过将实体和关系嵌入到低维向量空…

RV1126+FFMPEG推流项目(8)AENC音频编码模块

本节分享的是AENC音频编码模块,是负责在AI模块通道里面取出收集到的音频数据,进行编码。了解AENC模块之前,先来看一个数据结构“RV1126_AENC_CONFIG”,这个数据结构是自己封装的,里面有AENC通道号,和内部描…

JavaScript作用域

JavaScript 作用域 作用域是可访问变量的集合。 JavaScript 作用域 在 JavaScript 中, 对象和函数同样也是变量。 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 函数作用域: 作用域在函数内修改。 JavaScript 局部作用域 变量在函数内声明,变量为…