Redis集群化部署的三种主流方式:主从复制实现读写分离,哨兵模式在复制基础上增加高可用故障转移能力,官方集群通过哈希槽分片解决内存限制并内置高可用。三种方案均提供详细配置示例与搭建步骤,适用于不同场景的性能与可靠性需求。
Redis作为高性能内存数据库,其集群化部署是解决单节点性能瓶颈与实现高可用的关键。本文深入剖析三种主流集群方式:主从复制、哨兵模式(Sentinel)与官方集群(Cluster),并提供详细的搭建指南与配置示例。
主从复制是最基础的集群模式,通过一个主节点(Master)和一个或多个从节点(Slave)实现读写分离。主节点负责写操作,从节点负责读操作,并实时从主节点同步数据。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
SYNC 命令。主节点执行 bgsave 生成RDB快照并发送给从节点,同时将快照期间的写命令记录到复制积压缓冲区。从节点加载RDB并执行缓冲区中的命令,完成初始化同步。以单机伪集群为例,在一台服务器上启动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# 开启AOFappendonly yesappendfilename "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# 开启AOFappendonly yesappendfilename "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# 开启AOFappendonly yesappendfilename "appendonly-6381.aof"# 指定主节点replicaof 127.0.0.1 6379# 主节点密码(如果设置了)masterauth 123456
redis-server /usr/local/redis-cluster/conf/redis-master.confredis-server /usr/local/redis-cluster/conf/redis-slave1.confredis-server /usr/local/redis-cluster/conf/redis-slave2.conf
# 连接主节点redis-cli -p 6379127.0.0.1:6379> info replication# 连接从节点redis-cli -p 6380127.0.0.1:6380> info replication

哨兵模式在主从复制基础上增加高可用(HA)能力。通过多个哨兵进程监控主从节点,当主节点故障时,哨兵自动选举一个从节点升级为新的主节点,并通知其他从节点切换主节点,实现故障转移。

以单机伪集群为例,部署1个主节点、2个从节点和3个哨兵节点。
主节点配置(redis-master.conf):
port 6379daemonize yespidfile /var/run/redis_6379.pidlogfile "/usr/local/redis-cluster/logs/redis_6379.log"dir /usr/local/redis-cluster/datadbfilename dump-6379.rdbappendonly yesappendfilename "appendonly-6379.aof"# 设置密码(可选)requirepass 123456
从节点1配置(redis-slave1.conf):
port 6380daemonize yespidfile /var/run/redis_6380.pidlogfile "/usr/local/redis-cluster/logs/redis_6380.log"dir /usr/local/redis-cluster/datadbfilename dump-6380.rdbappendonly yesappendfilename "appendonly-6380.aof"# 指向主节点replicaof 127.0.0.1 6379# 如果主节点有密码masterauth 123456
哨兵1配置(sentinel1.conf):
port 26379daemonize yespidfile /var/run/redis-sentinel_26379.pidlogfile "/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 26380daemonize yespidfile /var/run/redis-sentinel_26380.pidlogfile "/usr/local/redis-cluster/logs/sentinel_26380.log"dir /usr/local/redis-cluster/datasentinel monitor mymaster 127.0.0.1 6379 2sentinel auth-pass mymaster 123456sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 10000sentinel parallel-syncs mymaster 1
哨兵3配置(sentinel3.conf):
port 26381daemonize yespidfile /var/run/redis-sentinel_26381.pidlogfile "/usr/local/redis-cluster/logs/sentinel_26381.log"dir /usr/local/redis-cluster/datasentinel monitor mymaster 127.0.0.1 6379 2sentinel auth-pass mymaster 123456sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 10000sentinel parallel-syncs mymaster 1
# 启动Redis节点redis-server /usr/local/redis-cluster/conf/redis-master.confredis-server /usr/local/redis-cluster/conf/redis-slave1.confredis-server /usr/local/redis-cluster/conf/redis-slave2.conf# 启动哨兵redis-sentinel /usr/local/redis-cluster/conf/sentinel1.confredis-sentinel /usr/local/redis-cluster/conf/sentinel2.confredis-sentinel /usr/local/redis-cluster/conf/sentinel3.conf
# 连接哨兵查看主节点redis-cli -p 26379127.0.0.1:26379> sentinel master mymaster# 关闭主节点redis-cli -p 6379 shutdown# 等待哨兵选举后,再次查看127.0.0.1:26379> sentinel master mymaster
Redis Cluster是官方提供的分布式解决方案,通过数据分片(Sharding)解决单节点内存限制问题,并内置高可用能力。它不需要中间件,节点间直接通信。
以单机伪集群为例,部署3个主节点和3个从节点。
主节点1配置(redis-7000.conf):
port 7000daemonize yespidfile /var/run/redis_7000.pidlogfile "/usr/local/redis-cluster/logs/redis_7000.log"dir /usr/local/redis-cluster/datadbfilename dump-7000.rdbappendonly yesappendfilename "appendonly-7000.aof"# 开启集群模式cluster-enabled yescluster-config-file nodes-7000.confcluster-node-timeout 5000# 关闭集群完整性检查(单机测试)cluster-require-full-coverage no
从节点1配置(redis-7003.conf):
port 7003daemonize yespidfile /var/run/redis_7003.pidlogfile "/usr/local/redis-cluster/logs/redis_7003.log"dir /usr/local/redis-cluster/datadbfilename dump-7003.rdbappendonly yesappendfilename "appendonly-7003.aof"# 开启集群模式cluster-enabled yescluster-config-file nodes-7003.confcluster-node-timeout 5000# 指定主节点replicaof 127.0.0.1 7000
依次创建 redis-7001.conf、redis-7002.conf、redis-7004.conf、redis-7005.conf、redis-7006.conf,并修改端口号。
redis-server /usr/local/redis-cluster/conf/redis-7000.confredis-server /usr/local/redis-cluster/conf/redis-7001.confredis-server /usr/local/redis-cluster/conf/redis-7002.confredis-server /usr/local/redis-cluster/conf/redis-7003.confredis-server /usr/local/redis-cluster/conf/redis-7004.confredis-server /usr/local/redis-cluster/conf/redis-7005.confredis-server /usr/local/redis-cluster/conf/redis-7006.conf
# 进入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 来确认分配哈希槽和创建集群。
# 使用 -c 参数连接集群redis-cli -c -p 7000# 设置key127.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>
| 特性 | 主从复制 | 哨兵模式 | 官方集群 |
|---|---|---|---|
| 读写分离 | |||
| 数据分片 | |||
| 高可用 | (自动故障转移) | (内置) | |
| 部署复杂度 | 低 | 中 | 高 |
| 适用场景 | 读多写少、简单扩展 | 需要高可用、读写分离 | 大数据量、高并发 |
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述