深入剖析 Redis 的三种集群方式以及实战配置
Redis作为高性能内存数据库其集群化部署是解决单节点性能瓶颈与实现高可用的关键。本篇将深入剖析三种主流的集群方式主从复制、哨兵模式Sentinel与官方集群Cluster并为您提供详细的搭建指南与配置示例。一、主从复制 (Master-Slave Replication)主从复制是最基础的集群模式通过一个主节点Master和一个或多个从节点Slave实现读写分离。主节点负责处理写操作从节点负责处理读操作并实时从主节点同步数据。1. 核心原理数据同步从节点启动后向主节点发送 SYNC 命令。主节点执行 bgsave 生成RDB快照并发送给从节点同时将快照期间的写命令记录到复制积压缓冲区。从节点加载RDB并执行缓冲区中的命令完成初始化同步。增量同步初始化后主节点每次执行的写命令都会同步发送给从节点实现增量同步。2. 搭建步骤与配置以下以单机伪集群为例在一台服务器上启动3个Redis实例1个主节点2个从节点。主节点配置 (redis-master.conf)# 端口 port 6379 # 后台运行 daemonize yes # PID文件 pidfile /var/run/redis_6379.pid # 日志文件 logfile /usr/local/redis-cluster/logs/redis_6379.log # 工作目录 dir /usr/local/redis-cluster/data # 持久化 dbfilename dump-6379.rdb # 开启AOF appendonly yes appendfilename appendonly-6379.aof从节点1配置 (redis-slave1.conf)# 端口 port 6380 # 后台运行 daemonize yes # PID文件 pidfile /var/run/redis_6380.pid # 日志文件 logfile /usr/local/redis-cluster/logs/redis_6380.log # 工作目录 dir /usr/local/redis-cluster/data # 持久化 dbfilename dump-6380.rdb # 开启AOF appendonly yes appendfilename appendonly-6380.aof # 指定主节点 replicaof 127.0.0.1 6379 # 主节点密码如果设置了 masterauth 123456从节点2配置 (redis-slave2.conf)# 端口 port 6381 # 后台运行 daemonize yes # PID文件 pidfile /var/run/redis_6381.pid # 日志文件 logfile /usr/local/redis-cluster/logs/redis_6381.log # 工作目录 dir /usr/local/redis-cluster/data # 持久化 dbfilename dump-6381.rdb # 开启AOF appendonly yes appendfilename appendonly-6381.aof # 指定主节点 replicaof 127.0.0.1 6379 # 主节点密码如果设置了 masterauth 1234563. 启动服务redis-server /usr/local/redis-cluster/conf/redis-master.conf redis-server /usr/local/redis-cluster/conf/redis-slave1.conf redis-server /usr/local/redis-cluster/conf/redis-slave2.conf4. 验证主从关系# 连接主节点 redis-cli -p 6379 127.0.0.1:6379 info replication # 连接从节点 redis-cli -p 6380 127.0.0.1:6380 info replication5. 全量复制与增量复制对比二、哨兵模式 (Sentinel)哨兵模式在主从复制的基础上增加了高可用HA能力。通过多个哨兵进程监控主从节点当主节点故障时哨兵会自动选举一个从节点升级为新的主节点并通知其他从节点切换主节点实现故障转移。1. 核心原理监控哨兵进程持续监控主节点和从节点的健康状态。通知当某个节点主或从出现故障时哨兵会向系统管理员发送通知。故障转移当主节点故障时哨兵会选举一个从节点成为新的主节点并让其他从节点指向新的主节点。2. 搭建步骤与配置同样以单机伪集群为例部署1个主节点、2个从节点和3个哨兵节点。主节点配置 (redis-master.conf)port 6379 daemonize yes pidfile /var/run/redis_6379.pid logfile /usr/local/redis-cluster/logs/redis_6379.log dir /usr/local/redis-cluster/data dbfilename dump-6379.rdb appendonly yes appendfilename appendonly-6379.aof # 设置密码可选 requirepass 123456从节点1配置 (redis-slave1.conf)port 6380 daemonize yes pidfile /var/run/redis_6380.pid logfile /usr/local/redis-cluster/logs/redis_6380.log dir /usr/local/redis-cluster/data dbfilename dump-6380.rdb appendonly yes appendfilename appendonly-6380.aof # 指向主节点 replicaof 127.0.0.1 6379 # 如果主节点有密码 masterauth 123456哨兵1配置 (sentinel1.conf)port 26379 daemonize yes pidfile /var/run/redis-sentinel_26379.pid logfile /usr/local/redis-cluster/logs/sentinel_26379.log dir /usr/local/redis-cluster/data # 监控主节点 sentinel monitor mymaster 127.0.0.1 6379 2 # 密码如果主节点有 sentinel auth-pass mymaster 123456 # 故障转移超时时间 sentinel down-after-milliseconds mymaster 5000 # 故障转移后最多保留的失败次数 sentinel failover-timeout mymaster 10000 # 故障转移时最多同时迁移的key数量 sentinel parallel-syncs mymaster 1哨兵2配置 (sentinel2.conf)port 26380 daemonize yes pidfile /var/run/redis-sentinel_26380.pid logfile /usr/local/redis-cluster/logs/sentinel_26380.log dir /usr/local/redis-cluster/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel auth-pass mymaster 123456 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000 sentinel parallel-syncs mymaster 1哨兵3配置 (sentinel3.conf)port 26381 daemonize yes pidfile /var/run/redis-sentinel_26381.pid logfile /usr/local/redis-cluster/logs/sentinel_26381.log dir /usr/local/redis-cluster/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel auth-pass mymaster 123456 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000 sentinel parallel-syncs mymaster 13. 启动服务# 启动Redis节点 redis-server /usr/local/redis-cluster/conf/redis-master.conf redis-server /usr/local/redis-cluster/conf/redis-slave1.conf redis-server /usr/local/redis-cluster/conf/redis-slave2.conf # 启动哨兵 redis-sentinel /usr/local/redis-cluster/conf/sentinel1.conf redis-sentinel /usr/local/redis-cluster/conf/sentinel2.conf redis-sentinel /usr/local/redis-cluster/conf/sentinel3.conf4. 测试故障转移# 连接哨兵查看主节点 redis-cli -p 26379 127.0.0.1:26379 sentinel master mymaster # 关闭主节点 redis-cli -p 6379 shutdown # 等待哨兵选举后再次查看 127.0.0.1:26379 sentinel master mymaster三、官方集群 (Redis Cluster)Redis Cluster是官方提供的分布式解决方案通过数据分片Sharding解决单节点内存限制问题并内置高可用能力。它不需要中间件节点间直接通信。1. 核心原理数据分片Redis Cluster将16384个哈希槽Hash Slot分布在多个主节点上。哈希槽分配每个键通过CRC16算法计算后对16384取模决定其所在的哈希槽。高可用每个主节点都绑定一个或多个从节点。当主节点故障时从节点会升级为新的主节点。2. 搭建步骤与配置以单机伪集群为例部署3个主节点和3个从节点。主节点1配置 (redis-7000.conf)port 7000 daemonize yes pidfile /var/run/redis_7000.pid logfile /usr/local/redis-cluster/logs/redis_7000.log dir /usr/local/redis-cluster/data dbfilename dump-7000.rdb appendonly yes appendfilename appendonly-7000.aof # 开启集群模式 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 # 关闭集群完整性检查单机测试 cluster-require-full-coverage no从节点1配置 (redis-7003.conf)port 7003 daemonize yes pidfile /var/run/redis_7003.pid logfile /usr/local/redis-cluster/logs/redis_7003.log dir /usr/local/redis-cluster/data dbfilename dump-7003.rdb appendonly yes appendfilename appendonly-7003.aof # 开启集群模式 cluster-enabled yes cluster-config-file nodes-7003.conf cluster-node-timeout 5000 # 指定主节点 replicaof 127.0.0.1 7000依次创建 redis-7001.conf, redis-7002.conf, redis-7004.conf, redis-7005.conf, redis-7006.conf并修改端口号。3. 启动服务redis-server /usr/local/redis-cluster/conf/redis-7000.conf redis-server /usr/local/redis-cluster/conf/redis-7001.conf redis-server /usr/local/redis-cluster/conf/redis-7002.conf redis-server /usr/local/redis-cluster/conf/redis-7003.conf redis-server /usr/local/redis-cluster/conf/redis-7004.conf redis-server /usr/local/redis-cluster/conf/redis-7005.conf redis-server /usr/local/redis-cluster/conf/redis-7006.conf4. 创建集群# 进入Redis源码目录 cd /path/to/redis-5.0.5/src # 使用官方工具创建集群 ./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1执行命令后会提示输入 yes 来确认分配哈希槽和创建集群。5. 连接集群# 使用 -c 参数连接集群 redis-cli -c -p 7000 # 设置key 127.0.0.1:7000 set name redis-cluster # 读取key可能重定向到其他节点 127.0.0.1:7000 get name - Redirected to slot [12182] located at 127.0.0.1:7002 redis-cluster 127.0.0.1:7002四、总结与对比特性主从复制哨兵模式官方集群读写分离✅✅✅数据分片❌❌✅高可用❌✅ (自动故障转移)✅ (内置)部署复杂度低中高适用场景读多写少、简单扩展需要高可用、读写分离大数据量、高并发
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2445733.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!