Redis 7主从复制与哨兵模式搭建
Redis的主从复制(Master-Slave Replication)通过一个主节点处理写操作,多个从节点复制数据并处理读操作,提升性能和可靠性。哨兵模式(Sentinel)则监控主节点状态,在故障时自动选举新主节点,实现高可用性。下面我将基于Redis 7版本,逐步指导你搭建完整方案。整个过程需在多台服务器或同一服务器的不同端口上运行多个Redis实例(假设使用Linux环境)。
步骤1: 安装Redis 7
确保所有服务器已安装Redis 7。可通过源码编译或包管理器安装:
# 下载并编译Redis 7(以Ubuntu为例)
wget https://download.redis.io/releases/redis-7.0.0.tar.gz
tar xzf redis-7.0.0.tar.gz
cd redis-7.0.0
make
sudo make install
步骤2: 配置主从复制
主从复制需一个主节点(Master)和至少一个从节点(Slave)。假设主节点在192.168.1.100:6379
,从节点在192.168.1.101:6379
。
配置主节点: 创建主节点配置文件
redis-master.conf
:port 6379 daemonize yes # 后台运行 logfile "/var/log/redis/redis-master.log" dir "/var/lib/redis" # 数据存储目录
启动主节点:
redis-server redis-master.conf
配置从节点: 创建从节点配置文件
redis-slave.conf
:port 6379 daemonize yes logfile "/var/log/redis/redis-slave.log" dir "/var/lib/redis" replicaof 192.168.1.100 6379 # 指向主节点IP和端口
启动从节点:
redis-server redis-slave.conf
验证主从复制: 在主节点写入数据:
redis-cli -h 192.168.1.100 set test_key "hello"
在从节点查询数据(应自动同步):
redis-cli -h 192.168.1.101 get test_key # 输出 "hello"
步骤3: 配置哨兵模式
哨兵(Sentinel)监控主节点,需至少三个哨兵实例(推荐奇数个,避免脑裂)。假设哨兵运行在192.168.1.102:26379
、192.168.1.103:26379
和192.168.1.104:26379
。
配置哨兵节点: 创建哨兵配置文件
sentinel.conf
(每个哨兵实例相同):port 26379 daemonize yes logfile "/var/log/redis/sentinel.log" sentinel monitor mymaster 192.168.1.100 6379 2 # 监控主节点,2表示至少2个哨兵同意才触发故障转移 sentinel down-after-milliseconds mymaster 5000 # 5秒无响应视为宕机 sentinel failover-timeout mymaster 10000 # 故障转移超时10秒
启动所有哨兵:
redis-sentinel sentinel.conf
验证哨兵功能: 模拟主节点故障(停止主节点进程):
redis-cli -h 192.168.1.100 shutdown
哨兵会自动选举新主节点(如原从节点)。查看哨兵日志:
tail -f /var/log/redis/sentinel.log # 应显示故障转移过程
使用哨兵查询新主节点信息:
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
步骤4: 测试整体架构
- 写入测试:通过哨兵连接到当前主节点写入数据。
- 故障恢复测试:重启旧主节点,它会自动变为从节点并同步数据。
注意事项
- 安全性:生产环境添加密码认证(在配置文件中设置
requirepass
和masterauth
)。 - 性能优化:调整
maxmemory
和maxmemory-policy
避免内存溢出。 - 监控工具:使用
redis-cli
或第三方工具如Prometheus监控集群状态。 - 常见问题:
- 网络延迟:确保节点间网络畅通,使用内网IP减少延迟。
- 配置错误:检查配置文件路径和权限(
chown redis:redis /var/lib/redis
)。 - 版本兼容性:Redis 7完全兼容此方案,但确保所有节点版本一致。
- 哨兵不起作用:关闭端口防火墙。