Redis高可用架构实战指南:从单机到集群的演进之路

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

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们