高可用 Redis 服务架构分析与搭建
目录
引言
一、高可用 Redis 架构的核心概念
1.1 Redis 的单点问题
1.2 高可用性的定义
1.3 Redis 高可用方案概述
二、Redis Sentinel 架构详解与搭建
2.1 Sentinel 模式简介
2.2 架构拓扑图
2.3 环境准备
安装 Docker
创建目录结构
2.4 配置文件编写
redis-sentinel/master/redis.conf
redis-sentinel/slave1/redis.conf
redis-sentinel/sentinel1/sentinel.conf
2.5 启动容器
2.6 测试 Sentinel 故障转移
三、Redis Cluster 架构详解与搭建
3.1 Redis Cluster 简介
3.2 架构拓扑图
3.3 环境准备
创建 docker-compose.yml
3.4 启动集群
3.5 初始化 Cluster
3.6 测试读写
四、高可用 Redis 架构对比与选型建议
五、客户端连接与高可用支持
5.1 Python 示例(使用 redis-py-cluster)
5.2 Java 示例(使用 Lettuce)
六、监控与运维实践
6.1 Prometheus + Grafana 监控 Redis
6.2 日志收集与告警
七、总结
附录:完整部署脚本与源码
A.1 Sentinel 模式部署脚本
A.2 Cluster 模式部署脚本
引言
Redis(Remote Dictionary Server)是一个开源的高性能键值数据库,广泛用于缓存、消息队列和实时数据处理等场景。在高并发、大规模分布式系统中,如何确保 Redis 的高可用性(High Availability, HA)是关键问题之一。本文将深入探讨高可用 Redis 架构的设计与实现,并提供一个完整的案例及可运行的代码示例。
一、高可用 Redis 架构的核心概念
1.1 Redis 的单点问题
默认情况下,Redis 是一个单实例服务。虽然性能极高,但一旦该节点宕机或网络中断,整个 Redis 服务就会不可用,导致业务中断。
1.2 高可用性的定义
高可用性指的是系统在面对故障时仍能持续提供服务的能力。通常通过冗余、自动故障转移(Failover)、负载均衡等机制来实现。
1.3 Redis 高可用方案概述
常见的 Redis 高可用方案包括:
- Redis 主从复制(Replication)
- Redis Sentinel(哨兵模式)
- Redis Cluster(集群模式)
- 基于 Proxy 的分片集群(如 Codis、Twemproxy)
我们将重点介绍 Redis Sentinel 和 Redis Cluster,并分别给出部署与代码示例。
二、Redis Sentinel 架构详解与搭建
2.1 Sentinel 模式简介
Redis Sentinel 是官方提供的高可用解决方案,具备以下功能:
- 监控主从节点状态
- 自动进行故障转移(Master Down 后选举新 Master)
- 提供配置管理接口(客户端可以通过 Sentinel 获取当前 Master 地址)
2.2 架构拓扑图
Client|
Sentinel (3个节点)|
Redis Master <--> Redis Slave (多个)
2.3 环境准备
我们将在本地使用 Docker 搭建一个包含 1 个 Redis Master、2 个 Slave 和 3 个 Sentinel 的测试环境。
安装 Docker
sudo apt update && sudo apt install docker.io -y
创建目录结构
mkdir -p redis-sentinel/{master,slave1,slave2,sentinel1,sentinel2,sentinel3}
2.4 配置文件编写
redis-sentinel/master/redis.conf
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
dir /data
requirepass "mypassword"
redis-sentinel/slave1/redis.conf
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
dir /data
slaveof 127.0.0.1 6379
masterauth "mypassword"
requirepass "mypassword"
同理配置 slave2
使用端口 6381
。
redis-sentinel/sentinel1/sentinel.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster mypassword
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
其他两个 Sentinel 配置类似,使用不同端口:26380
, 26381
。
2.5 启动容器
docker run --name redis-master -d -v $(pwd)/redis-sentinel/master:/usr/local/etc/redis --network host redis redis-server /usr/local/etc/redis/redis.confdocker run --name redis-slave1 -d -v $(pwd)/redis-sentinel/slave1:/usr/local/etc/redis --network host redis redis-server /usr/local/etc/redis/redis.confdocker run --name redis-slave2 -d -v $(pwd)/redis-sentinel/slave2:/usr/local/etc/redis --network host redis redis-server /usr/local/etc/redis/redis.confdocker run --name sentinel1 -d -v $(pwd)/redis-sentinel/sentinel1:/usr/local/etc/redis --network host redis redis-sentinel /usr/local/etc/redis/sentinel.confdocker run --name sentinel2 -d -v $(pwd)/redis-sentinel/sentinel2:/usr/local/etc/redis --network host redis redis-sentinel