redis在Docker下的主从复制(读写分离)、哨兵(主从切换)

       公司项目涉及到redis,最近不太忙于是准备仔细学习下,起初是直接在Windows下搭建,现在试试Docker下搭建redis然后试下哨兵配置,废话不多说,直接搭建步骤:

1.Docker安装redis

指令1)docker search redis

查找redis镜像,结果显示不同版本

2)docker pull redis

docker 直接拉取redis镜像 ,默认最新版本

2.搭建redis主从复制(读写分离)配置

2.1.创建redis容器实例

指令:

docker run --name redis-6379 -p 6379:6379 -d redis

docker run --name redis-6380 -p 6380:6379 -d redis

docker run --name redis-6381 -p 6381:6379 -d redis

如果以前创建过相同redis容器实例

docker ps -a 查看显示所有的容器,包括未运行的。

docker restart name

进入容器内部 : docker exec -it redis-6379 /bin/bash

启动 redis 客户端 连接本地的 redis 服务 :redis-cli

                             连接远程的 redis 服务 :redis-cli -h host -p port -a password

2.2 按照1主2从的结

### 使用 Docker Compose 部署 Redis 主从架构并添加哨兵的配置方法 以下是如何通过 Docker Compose 来部署 Redis 主从架构,并集成 Redis Sentinel 以实现高可用性的详细指南。 --- #### ### 1. 架构概述 Redis 主从架构支持数据冗余和读写分离,而 Redis Sentinel 提供自动化的主节点故障转移机制。这种组合非常适合需要高可靠性和可扩展性的场景[^2]。 --- #### ### 2. 准备工作 确保已经安装了 DockerDocker Compose。如果没有安装,可以按照官方文档中的指导完成安装[^3]。 --- #### ### 3. 配置文件详解 ##### ###### (1) **主节点配置 (`redis-master.conf`)** 这是 Redis 主节点的配置文件,启用持久化存储和其他必要选项。 ```conf port 6379 bind 0.0.0.0 protected-mode no requirepass mypassword appendonly yes ``` ##### ###### (2) **从节点配置 (`redis-slave1.conf`, `redis-slave2.conf`)** 从节点需要指定其所属的主节点地址,并设置密码认证。 ```conf port 6380 bind 0.0.0.0 protected-mode no slaveof redis-master 6379 masterauth mypassword requirepass mypassword appendonly yes ``` ##### ###### (3) **Sentinel 配置 (`sentinel-26379.conf`, `sentinel-26380.conf`)** Sentinel 负责监控主从节点的状态,并在主节点失效时触发选举新的主节点。 ```conf port 26379 dir /tmp sentinel monitor mymaster redis-master 6379 2 sentinel auth-pass mymaster mypassword sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000 sentinel parallel-syncs mymaster 1 ``` --- #### ### 4. Docker Compose 文件 创建一个名为 `docker-compose.yml` 的文件,定义整个系统的结构和服务依赖关系。 ```yaml version: '3.9' services: redis-master: image: redis:alpine container_name: redis-master ports: - "6379:6379" networks: - redis-net command: ["redis-server", "/etc/redis/redis.conf"] volumes: - ./config/redis-master.conf:/etc/redis/redis.conf redis-slave1: image: redis:alpine container_name: redis-slave1 depends_on: - redis-master networks: - redis-net command: ["redis-server", "/etc/redis/redis.conf"] volumes: - ./config/redis-slave1.conf:/etc/redis/redis.conf redis-slave2: image: redis:alpine container_name: redis-slave2 depends_on: - redis-master networks: - redis-net command: ["redis-server", "/etc/redis/redis.conf"] volumes: - ./config/redis-slave2.conf:/etc/redis/redis.conf sentinel1: image: redis:alpine container_name: sentinel1 depends_on: - redis-master networks: - redis-net command: ["redis-sentinel", "/etc/redis/sentinel.conf"] volumes: - ./config/sentinel-26379.conf:/etc/redis/sentinel.conf ports: - "26379:26379" sentinel2: image: redis:alpine container_name: sentinel2 depends_on: - redis-master networks: - redis-net command: ["redis-sentinel", "/etc/redis/sentinel.conf"] volumes: - ./config/sentinel-26380.conf:/etc/redis/sentinel.conf ports: - "26380:26380" networks: redis-net: driver: bridge ``` --- #### ### 5. 启动服务 执行以下命令启动 Redis 主从架构及其对应的 Sentinel: ```bash docker-compose up -d ``` 等待所有容器启动完成后,可以通过以下方式验证配置是否正确。 --- #### ### 6. 验证配置 ##### ###### (1) 查看主从状态 登录到主节点,检查是否有从节点连接: ```bash docker exec -it redis-master redis-cli -h redis-master -p 6379 INFO replication ``` 观察返回结果中的 `role` 字段应为 `master`,同时确认 `connected_slaves` 数量是否正确[^1]。 ##### ###### (2) 测试主从同步 向主节点写入一条记录,并尝试从从节点读取该记录: ```bash # 在主节点上写入数据 docker exec -it redis-master redis-cli -h redis-master -p 6379 SET key value # 在从节点上读取数据 docker exec -it redis-slave1 redis-cli -h redis-slave1 -p 6380 GET key ``` ##### ###### (3) 检查 Sentinel 状态 查询 Sentinel 对主节点的监控情况: ```bash docker exec -it sentinel1 redis-cli -p 26379 SENTINEL masters ``` --- #### ### 7. 故障切换测试 手动停止当前主节点,观察 Sentinel 是否能自动选出一个新的主节点: ```bash docker stop redis-master ``` 稍等片刻后,重新运行以下命令查看新主节点的信息: ```bash docker exec -it sentinel1 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值