文章目录
- 使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
- Redis 主从架构简介
- Redis Sentinel 简介
- 配置文件
- 1. 主节点配置 (`redis-master.conf`)
- 2. 从节点配置 (`redis-slave1.conf` 和 `redis-slave2.conf`)
- `redis-slave1.conf`
- `redis-slave2.conf`
- 3. Sentinel 配置 (`sentinel-26379.conf` 和 `sentinel-26380.conf`)
- `sentinel-26379.conf`
- `sentinel-26380.conf`
- Docker Compose 配置
- 关键知识点扩展
- Docker Compose 文件解析
使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
Redis 主从架构简介
-
Redis 主从架构:
Redis 主从架构是一种数据复制机制,使得数据从主节点同步到多个从节点,从而提升系统的高可用性和性能。主节点接收写操作,并将这些操作同步到从节点,以实现数据的冗余和数据一致性。 -
主从节点的配置:
redis-slave1.conf
配置解析:slaveof 10.255.96.33 6379
: 配置从节点docker_redis_slave1
作为主节点docker_redis_master
的从节点。在 Docker 环境中,可以通过主节点的容器名来进行访问,而不需要手动配置 IP 地址。port 6380
: 配置从节点的监听端口号。logfile "redis-6380.log"
: 配置从节点的日志文件。appendonly yes
: 配置 Redis 使用 AOF 文件进行持久化。
redis-slave2.conf
配置解析:slaveof 10.255.96.33 6379
: 配置从节点docker_redis_slave2
作为主节点docker_redis_master
的从节点。port 6381
: 配置从节点的监听端口号。logfile "redis-6381.log"
: 配置从节点的日志文件。appendonly yes
: 配置 Redis 使用 AOF 文件进行持久化。
-
主节点的密码认证:
为增强安全性,可以配置masterauth
用于从节点与主节点之间的安全认证,确保只有授权的客户端可以访问主节点。此外,可以通过requirepass
配置客户端连接 Redis 服务器的密码。
Redis Sentinel 简介
-
Redis Sentinel 作用:
Redis Sentinel 是 Redis 集群中的监控系统,可以监控 Redis 主从架构中的主节点状态。当主节点不可用时,Sentinel 可以触发故障转移,将流量切换到一个新的主节点,确保集群的高可用性。 -
Sentinel 配置文件解析:
sentinel-26379.conf
配置解析:sentinel monitor mymaster 10.255.96.33 6379 2
: 配置 Sentinel 监控主节点10.255.96.33
上的端口6379
,需要至少 2 个 Sentinel 判定主节点失效后,才进行自动故障转移。sentinel auth-pass mymaster 123456
: 配置连接主节点的密码,以增加安全性。sentinel down-after-milliseconds mymaster 10000
: 主节点在连续 10 秒无法响应后判定为失效。sentinel failover-timeout mymaster 60000
: 故障转移的超时时间为 60 秒。
sentinel-26380.conf
配置解析:sentinel monitor mymaster 10.255.96.33 6379 2
: 配置 Sentinel 监控主节点,并允许多个 Sentinel 集群之间的协调。sentinel known-sentinel mymaster 10.255.96.33 26379 436c81e541838009d8a22509ef2172399da4efa6
: 配置多个 Sentinel 的信息,以确保集群内各个 Sentinel 之间的通信和协调。
-
集群中多个 Sentinel 的配置:
使用sentinel known-sentinel
配置多个 Sentinel 以确保集群的冗余性和高可用性。Sentinel 之间通过 IP 和端口进行通信,以确保集群的协调。如果一个 Sentinel 因故障或网络问题失效,其他 Sentinel 可以接管并继续监控主节点。
配置文件
1. 主节点配置 (redis-master.conf
)
# Redis 主节点监听的端口
port 6379
# 日志文件
logfile "redis-6379.log"
# 开启持久化
appendonly yes
# 持久化文件名
appendfilename "appendonly.aof"
# 设置认证密码(可选)
# requirepass 123456
2. 从节点配置 (redis-slave1.conf
和 redis-slave2.conf
)
redis-slave1.conf
port 6380
logfile "redis-6380.log"
appendonly yes
appendfilename "appendonly.aof"
# 配置主节点
slaveof 10.255.96.33 6379
# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456
redis-slave2.conf
port 6381
logfile "redis-6381.log"
appendonly yes
appendfilename "appendonly.aof"
# 配置主节点
slaveof 10.255.96.33 6379
# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456
3. Sentinel 配置 (sentinel-26379.conf
和 sentinel-26380.conf
)
sentinel-26379.conf
port 26379
dir "/app/application"
# Sentinel 的唯一标识
sentinel myid 436c81e541838009d8a22509ef2172399da4efa6
# 监控主节点
sentinel monitor mymaster 10.255.96.33 6379 2
# 判定节点失效的时间
sentinel down-after-milliseconds mymaster 10000
# 故障转移的超时时间
sentinel failover-timeout mymaster 60000
# 从节点信息
sentinel known-replica mymaster 10.255.96.33 6380
sentinel known-replica mymaster 10.255.96.33 6381
# 其他 Sentinel 信息
sentinel known-sentinel mymaster 10.255.96.33 26380 978fee4f6bdf60e79468ead69b81deceb7a7bb44
sentinel current-epoch 0
sentinel-26380.conf
port 26380
dir "/app/application"
# Sentinel 的唯一标识
sentinel myid 978fee4f6bdf60e79468ead69b81deceb7a7bb44
# 监控主节点
sentinel monitor mymaster 10.255.96.33 6379 2
# 判定节点失效的时间
sentinel down-after-milliseconds mymaster 10000
# 故障转移的超时时间
sentinel failover-timeout mymaster 60000
# 从节点信息
sentinel known-replica mymaster 10.255.96.33 6380
sentinel known-replica mymaster 10.255.96.33 6381
# 其他 Sentinel 信息
sentinel known-sentinel mymaster 10.255.96.33 26379 436c81e541838009d8a22509ef2172399da4efa6
sentinel current-epoch 0
Docker Compose 配置
version: "3.0"
services:
docker_redis_master:
image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
container_name: docker_redis_master
volumes:
- ./redis-master.conf:/app/application/redis-temp/redis-master.conf
command: redis-server /app/application/redis-temp/redis-master.conf
ports:
- 6379:6379
network_mode: host
docker_redis_slave1:
image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
container_name: docker_redis_slave1
volumes:
- ./redis-slave1.conf:/app/application/redis-temp/redis-slave1.conf
command: redis-server /app/application/redis-temp/redis-slave1.conf
ports:
- 6380:6380
network_mode: host
docker_redis_slave2:
image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
container_name: docker_redis_slave2
volumes:
- ./redis-slave2.conf:/app/application/redis-temp/redis-slave2.conf
command: redis-server /app/application/redis-temp/redis-slave2.conf
ports:
- 6381:6381
network_mode: host
docker_redis_sentinel26379:
image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
container_name: docker_redis_sentinel26379
volumes:
- ./sentinel-26379.conf:/app/application/redis-temp/sentinel-26379.conf
command: redis-sentinel /app/application/redis-temp/sentinel-26379.conf
ports:
- 26379:26379
network_mode: host
docker_redis_sentinel26380:
image: harbor-ioscar.cbf.com/hawk/redis:5.0.14
container_name: docker_redis_sentinel26380
volumes:
- ./sentinel-26380.conf:/app/application/redis-temp/sentinel-26380.conf
command: redis-sentinel /app/application/redis-temp/sentinel-26380.conf
ports:
- 26380:26380
network_mode: host
关键知识点扩展
-
主从复制的原理
- 主节点负责写操作,从节点通过
slaveof
指令与主节点建立连接并同步数据。 - 数据同步分为全量同步和增量同步。
- 主节点负责写操作,从节点通过
-
Sentinel 的工作原理
- Sentinel 通过心跳机制监控主从节点状态。
- 当主节点失效时,Sentinel 通过选举机制选择一个从节点提升为主节点,并更新其他从节点的同步目标。
-
Docker 持久化与数据挂载
- 配置文件通过
volumes
映射至容器内部,方便管理与更新。 - 数据目录需要挂载到宿主机路径,以保证数据不会因为容器重启而丢失。
- 配置文件通过
-
高可用性
- 使用多个 Sentinel 节点可以避免单点故障,但需要合理配置
quorum
参数,确保故障判定的准确性。
- 使用多个 Sentinel 节点可以避免单点故障,但需要合理配置
-
主从架构的高可用性:
主从架构通过数据复制和故障转移机制提高 Redis 的高可用性。当主节点失效时,从节点会自动接管,并将数据状态保持一致 -
Sentinel 的故障转移机制:
sentinel down-after-milliseconds
: 设定主节点在多长时间内无法响应PING指令后判定为失效。sentinel failover-timeout
: 故障转移的最大等待时间,确保故障转移及时完成。sentinel config-epoch
和sentinel leader-epoch
: 用于协调整个集群内的 Sentinel 状态。
Docker Compose 文件解析
- 挂载配置文件:
在 Docker Compose 文件中,volumes
选项用于将 Redis 配置文件挂载到容器中,使得容器可以使用指定的配置启动。挂载配置文件有助于统一管理和快速配置多个 Redis 实例。 - 网络模式:
network_mode: host
: 这种模式下,容器共享主机网络,不需要配置额外的网络路由。虽然简单易用,但可能会增加安全风险,尤其是在开放端口时。external: true
: 如果使用外部网络,确保容器可以访问到网络服务,避免网络隔离问题。
- 命令配置:
command: redis-server /app/application/redis-temp/redis-master.conf
: 配置 Redis 主节点启动使用的配置文件路径。command: redis-sentinel /app/application/redis-temp/sentinel-26379.conf
: 配置 Redis Sentinel 启动使用的配置文件路径。