Redis高可用架构实战指南:从单机到集群的演进之路
声明:本文部分内容使用AI辅助生成,经人工编辑、审核和补充个人经验。
更新说明:技术栈版本信息基于 Redis 7.x。
Redis高可用架构实战指南:从单机到集群的演进之路
Redis作为目前最流行的内存数据库之一,凭借其高性能、丰富的数据结构和简单的部署方式,被广泛应用于缓存、消息队列、排行榜等场景。这里系统介绍Redis的架构演进之路,从单机部署到高可用集群Redis高可用架构实战指南:从单机到集群的演进之路,帮助读者构建稳定可靠的Redis服务。
Redis持久化机制详解
Redis提供了两种持久化方案:RDB和AOFredis cluster 集群,二者各有优劣,可以根据实际场景配合使用。
1.1 RDB持久化
RDB(Redis )通过快照的方式将内存数据保存到磁盘,是一个紧凑的二进制文件。
工作原理:
Redis调用fork()创建子进程父进程继续处理客户端请求子进程将内存数据写入临时RDB文件子进程完成写入后,用临时文件替换原RDB文件
配置示例:
1
2
3
4
5
6
7
# redis.conf
save 900 1 # 900秒内至少1次修改则触发保存
save 300 10 # 300秒内至少10次修改则触发保存
save 60 10000 # 60秒内至少10000次修改则触发保存
dbfilename dump.rdb
dir /var/lib/redis
特性优点缺点
性能
fork子进程处理,对主进程影响小
大数据集fork可能耗时
文件大小
紧凑压缩,适合备份
数据恢复
速度快
可能丢失最后一次快照后的数据
灾难恢复
适合定期备份
快照间隔期间数据可能丢失
1.2 AOF持久化
AOF( Only File)以日志形式记录每个写操作,重启时重新执行这些命令恢复数据。
配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
# redis.conf
appendonly yes
appendfilename "appendonly.aof"
# 同步策略
appendfsync always # 每个写命令都同步,最安全但最慢
appendfsync everysec # 每秒同步一次,折中方案(推荐)
appendfsync no # 由操作系统决定同步时机,最快但最不安全
# AOF重写配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOF重写机制:
随着写操作增多redis cluster 集群,AOF文件会不断膨胀。Redis提供AOF重写功能,只保留能恢复当前数据的最小命令集。
1
2
# 手动触发重写
BGREWRITEAOF
1.3 混合持久化(推荐方案)
Redis 4.0引入了混合持久化,结合RDB和AOF的优点:
1
2
# 开启混合持久化
aof-use-rdb-preamble yes
混合持久化文件格式:
1
[RDB格式数据][AOF格式增量数据]
这样既能利用RDB快速恢复的优势,又能通过AOF保证数据的完整性。
Redis主从复制架构2.1 主从复制原理
Redis主从复制是构建高可用架构的基础redis cluster 集群,主要实现数据的多机备份和读写分离。
复制流程:
1
2
3
4
5
6
1. 从服务器连接主服务器,发送SYNC命令
2. 主服务器执行BGSAVE,生成RDB文件
3. 主服务器将RDB文件发送给从服务器
4. 从服务器加载RDB文件
5. 主服务器将缓冲区的写命令发送给从服务器
6. 后续持续同步主服务器的写命令
2.2 主从配置
主服务器配置(无需特殊配置):
1
2
# 主服务器监听端口
port 6379
从服务器配置:
1
2
3
4
5
6
7
8
9
# 方式一:配置文件
slaveof 192.168.1.100 6379
# 方式二:命令行
redis-cli -p 6380
127.0.0.1:6380> SLAVEOF 192.168.1.100 6379
# 方式三:启动参数
redis-server --port 6380 --slaveof 192.168.1.100 6379
2.3 复制优化配置
1
2
3
4
5
6
# 避免网络闪断导致全量同步
repl-timeout 240
repl-backlog-size 67108864
# 配置从服务器只读(推荐)
slave-read-only yes
Redis哨兵模式()3.1 哨兵架构
哨兵模式用于监控主从集群,实现自动故障转移。
哨兵功能:
功能说明
监控

持续检查主从服务器状态
通知
发现故障时通知其他哨兵和客户端
自动故障转移
主服务器故障时自动将从服务器提升为主服务器
配置提供
为客户端提供当前主服务器地址
3.2 哨兵配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# sentinel.conf
port 26379
dir /tmp
# 监控名为mymaster的主服务器,至少需要1个哨兵同意才判定故障
sentinel monitor mymaster 192.168.1.100 6379 1
# 故障判定时间(毫秒)
sentinel down-after-milliseconds mymaster 30000
# 故障转移超时时间
sentinel failover-timeout mymaster 180000
# 同时同步的从服务器数量
sentinel parallel-syncs mymaster 1
3.3 启动哨兵
1
2
3
4
5
# 方式一
redis-sentinel /etc/redis/sentinel.conf
# 方式二
redis-server /etc/redis/sentinel.conf --sentinel
3.4 哨兵命令
1
2
3
4
5
6
7
8
# 查看主服务器状态
redis-cli -p 26379 sentinel masters
# 查看从服务器状态
redis-cli -p 26379 sentinel slaves mymaster
# 手动故障转移
redis-cli -p 26379 sentinel failover mymaster
Redis 集群架构4.1 集群架构设计
Redis 是Redis官方提供的分布式解决方案,采用无中心架构,支持水平扩展。
核心特性:
哈希槽计算:
1
slot = CRC16(key) % 16384
4.2 集群搭建(6节点示例)
环境规划:
节点IP端口角色
节点1
192.168.1.100
7000
节点2
192.168.1.100
7001
节点3
192.168.1.100
7002
节点4
192.168.1.101
7003
Slave
节点5
192.168.1.101
7004
Slave
节点6
192.168.1.101
7005
Slave
节点配置文件(7000/redis.conf):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
port 7000
bind 192.168.1.100
daemonize yes
pidfile /var/run/redis_7000.pid
dir /var/redis/7000
# 集群配置
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
# AOF持久化
appendonly yes
appendfilename "appendonly.aof"
创建集群:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装Ruby环境(用于redis-trib.rb)
yum -y install ruby ruby-devel rubygems
# 启动所有节点
redis-server /path/to/7000/redis.conf
redis-server /path/to/7001/redis.conf
# ... 其他节点
# 使用redis-cli创建集群(Redis 5.0+)
redis-cli --cluster create
192.168.1.100:7000
192.168.1.100:7001
192.168.1.100:7002
192.168.1.101:7003
192.168.1.101:7004
192.168.1.101:7005
--cluster-replicas 1
4.3 集群管理命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看集群信息
redis-cli -c -p 7000 cluster info
# 查看集群节点
redis-cli -c -p 7000 cluster nodes
# 添加新主节点
redis-cli --cluster add-node 192.168.1.102:7006 192.168.1.100:7000
# 添加新从节点
redis-cli --cluster add-node 192.168.1.102:7007 192.168.1.100:7000
--cluster-slave --cluster-master-id
# 重新分片(迁移槽)
redis-cli --cluster reshard 192.168.1.100:7000
# 删除节点
redis-cli --cluster del-node 192.168.1.100:7000
Redis性能优化实践5.1 内存优化
1
2
3
4
5
6
7
8
9
10
11
# 设置最大内存
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy allkeys-lru
# 可选策略:
# volatile-lru : 从已设置过期时间的数据中淘汰最近最少使用
# allkeys-lru : 从所有数据中淘汰最近最少使用
# volatile-ttl : 从已设置过期时间的数据中淘汰即将过期的
# noeviction : 不淘汰,写入时报错(默认)
5.2 网络优化
1
2
3
4
5
6
7
8
9
10
# 开启TCP_NODELAY,禁用Nagle算法
tcp-nodelay yes
# 设置TCP监听队列长度
tcp-backlog 511
# 设置客户端输出缓冲区限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
5.3 安全配置
1
2
3
4
5
6
7
8
9
10
# 设置密码
requirepass your_password
# 绑定内网IP
bind 127.0.0.1 192.168.1.100
# 禁用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "CONFIG_RENAME"

六、Redis监控与运维6.1 常用监控命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看Redis信息
redis-cli info
# 查看实时统计
redis-cli --stat
# 查看慢查询
redis-cli slowlog get 10
# 监控Redis命令执行
redis-cli monitor
# 查看大键
redis-cli --bigkeys
6.2 关键监控指标指标说明告警阈值建议
已使用内存
> * 80%
客户端连接数
> * 80%
拒绝连接数
> 0
/
缓存命中率
< 80%
r_sec
每秒操作数
根据业务评估
us
RDB保存状态
非ok
AOF写入状态
非ok
七、常见问题与解决方案7.1 (error) Redis is to save RDB
原因: 强制关闭Redis导致无法持久化
解决方案:
1
2
redis-cli
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
7.2 缓存穿透、击穿、雪崩问题描述解决方案
缓存穿透
查询不存在的数据,直接访问数据库
布隆过滤器、缓存空值
缓存击穿
热点key过期,大量请求访问数据库
互斥锁、逻辑过期
缓存雪崩
大量key同时过期
随机过期时间、多级缓存
7.3 Big Key问题
检测:
1
redis-cli --bigkeys
解决方案:
八、总结
Redis的高可用架构演进路线通常是:
1
单机 → 主从复制 → 哨兵模式 → 集群模式
在实际生产环境中,建议:
小型应用:主从复制+哨兵模式即可满足需求中大型应用:采用Redis 集群,至少6节点(3主3从)关键业务:配合应用层缓存降级策略Redis高可用架构实战指南:从单机到集群的演进之路,保证服务可用性运维监控:建立完善的数据备份和监控告警机制
通过合理选择架构方案和优化配置,可以构建稳定、高性能的Redis服务,为业务提供可靠的数据支撑。
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » Redis高可用架构实战指南:从单机到集群的演进之路
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

