Docker安装Redis哨兵架构

本文档详细介绍了如何在云服务器上搭建Redis的哨兵(Sentinel)集群,包括在主从架构基础上的哨兵配置,硬件配置信息,sentinel.conf文件内容及其注意事项。每个节点的sentinel.conf文件需设置相同的mastername,暴露通信IP和端口,以及配置一致的主从密码。哨兵的主要作用是实现主从切换和监控。通过podman启动容器并挂载配置文件,确保哨兵服务正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哨兵架构是在主从的基础上安装的,关于主从架构搭建请参考Redis主从搭建,本文搭建基于云服务器

硬件配置如下

IP描述
121.36.172.25主节点、哨兵1
122.112.237.126从节点、哨兵2
119.3.91.242从节点、哨兵3

在每台机器的conf目录下创建sentinel.conf文件,内容如下

# bind 127.0.0.1 192.168.1.1
# protected-mode no
port 26379
#daemonize yes
#pidfile /var/run/redis-sentinel.pid
logfile "sentinel.log"
sentinel monitor master001 121.36.172.25 6379 2
sentinel auth-pass master001 qwer123456
sentinel down-after-milliseconds master001 10000
sentinel parallel-syncs master001 1
sentinel failover-timeout master001 180000

sentinel announce-ip 121.36.172.25
sentinel announce-port 26379

sentinel deny-scripts-reconfig yes

需要注意的是:

1、三台机器的mastername(master001 )需要一致

2、由于在docker环境下安装,需要暴露当前节点通信ip+port

sentinel announce-ip 当前机器IP

sentinel announce-port 当前sentinel端口

3、由于哨兵模式下主从会进行故障切换,所以主从密码需要设置一样,并且在主节点redis.conf 也要配置主节点密码 masterauth qwer123456

在每台机器上启动容器,我使用的是podman,

podman run -d -p 26379:26379 --name sentinel-local --privileged=true -v /data/redis/conf/sentinel.conf:/etc/redis/sentinel.conf -v /data/redis/data:/data f1b6973564e9 redis-sentinel /etc/redis/sentinel.conf

启动成功后每台机器的sentinel.log下

哨兵全部启动后如下

 

 

### 使用 Docker Compose 部署 Redis 哨兵架构Docker Compose 中配置 Redis 哨兵模式需要明确 Redis 主从实例和哨兵实例的协作关系。以下是部署 Redis 哨兵架构的详细方法[^1]: #### 1. 创建 `docker-compose.yml` 文件 编写一个 `docker-compose.yml` 文件,定义 Redis 主从节点以及哨兵节点的配置。 ```yaml version: '3.8' services: redis-master: image: redis:6.2-alpine container_name: redis-master ports: - "6379:6379" networks: - redis-net redis-slave-1: image: redis:6.2-alpine container_name: redis-slave-1 command: redis-server --slaveof redis-master 6379 ports: - "6380:6379" networks: - redis-net redis-slave-2: image: redis:6.2-alpine container_name: redis-slave-2 command: redis-server --slaveof redis-master 6379 ports: - "6381:6379" networks: - redis-net sentinel-1: image: redis:6.2-alpine container_name: sentinel-1 command: redis-sentinel --sentinel --daemonize no --port 26379 redis-master:6379 2@redis-master 6379 quorum 2 ports: - "26379:26379" depends_on: - redis-master - redis-slave-1 - redis-slave-2 networks: - redis-net sentinel-2: image: redis:6.2-alpine container_name: sentinel-2 command: redis-sentinel --sentinel --daemonize no --port 26380 redis-master:6379 2@redis-master 6379 quorum 2 ports: - "26380:26379" depends_on: - redis-master - redis-slave-1 - redis-slave-2 networks: - redis-net sentinel-3: image: redis:6.2-alpine container_name: sentinel-3 command: redis-sentinel --sentinel --daemonize no --port 26381 redis-master:6379 2@redis-master 6379 quorum 2 ports: - "26381:26379" depends_on: - redis-master - redis-slave-1 - redis-slave-2 networks: - redis-net networks: redis-net: driver: bridge ``` #### 2. 启动服务 使用以下命令启动所有服务: ```bash docker-compose up -d ``` 这将启动一个包含主节点、两个从节点和三个哨兵节点的 Redis 哨兵集群。 #### 3. 验证哨兵功能 可以通过连接到任意一个哨兵容器来验证其状态: ```bash docker exec -it sentinel-1 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster ``` 如果主节点发生故障,哨兵会自动进行故障转移,并选择一个新的主节点[^3]。 --- ### 注意事项 - 确保所有 Redis 和哨兵实例位于同一个网络中(如 `redis-net`),以便它们能够相互通信。 - 哨兵的 `quorum` 参数决定了多少个哨兵节点同意后才能触发故障转移。建议将其设置为至少 2 或更高以提高可靠性。 - 在生产环境中,建议为每个容器分配独立的主机端口,并确保防火墙规则允许这些端口通信[^5]。 --- ### 示例代码:Spring Boot 集成 Redis 哨兵 如果需要在 Spring Boot 应用中集成 Redis 哨兵,可以参考以下代码[^4]: ```java @SpringBootApplication public class RedisDemoApplication { public static void main(String[] args) { SpringApplication.run(RedisDemoApplication.class, args); } @Bean public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer() { return configBuilder -> configBuilder.readFrom(ReadFrom.REPLICA_PREFERRED); } } ``` 上述代码配置了 Lettuce 客户端优先从 Redis 从节点读取数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值