Redis主从复制是实现高可用和高性能的重要手段之一,通过配置主从复制,可以将数据从主节点同步到一个或多个从节点,从而分担负载、提高读取性能,并为故障转移提供基础。本文将深入探讨Redis主从复制的配置方法,以及在故障发生时如何实现自动或手动的故障转移。
Redis主从复制是指将一个Redis实例(称为主节点)的数据复制到另一个或多个Redis实例(称为从节点)。主节点负责处理写操作,而从节点则可以处理读操作。这种架构的优点包括:
确保已安装Redis。如果尚未安装,可以通过以下命令安装:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install redis-server
# CentOS/RHEL
sudo yum install epel-release
sudo yum install redis
编辑主节点的redis.conf
文件(通常位于/etc/redis/redis.conf
),确保以下配置项正确设置:
port 6379
bind 0.0.0.0
protected-mode no
logfile /var/log/redis/redis.log
dir /var/lib/redis
save 900 1
save 300 10
save 60 10000
appendonly yes
编辑从节点的redis.conf
文件,添加或修改以下内容:
port 6380
slaveof <master-ip> 6379
其中,<master-ip>
为主节点的IP地址。
分别启动主节点和从节点:
# 启动主节点
redis-server /etc/redis/redis.conf
# 启动从节点
redis-server /etc/redis/redis-slave.conf
在从节点上执行以下命令检查状态:
redis-cli -p 6380
info replication
输出中应包含以下信息:
role:slave
表示当前节点是从节点。master_host:<master-ip>
表示主节点的IP地址。master_port:6379
表示主节点的端口号。当主节点发生故障时,需要选择一个从节点升级为主节点以恢复服务。Redis提供了两种常见的故障转移机制:手动故障转移和基于Sentinel的自动故障转移。
手动故障转移适用于简单的场景,管理员可以直接指定某个从节点升级为主节点。例如:
# 将从节点升级为主节点
redis-cli -h <slave-ip> -p 6380 SLAVEOF NO ONE
之后,其他从节点需要重新配置,将其指向新的主节点。
Redis Sentinel是一个分布式系统,用于监控Redis主从节点的状态,并在主节点不可用时自动进行故障转移。
sentinel.conf
,内容如下:port 26379
dir /var/lib/redis-sentinel
sentinel monitor mymaster <master-ip> 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
mymaster
是主节点的名称。<master-ip>
是主节点的IP地址。2
表示至少需要两个Sentinel同意才能触发故障转移。redis-sentinel /etc/redis/sentinel.conf
redis-cli -p 26379 sentinel masters
当主节点不可用时,Sentinel会自动选举一个新的主节点并通知其他从节点更新配置。
假设我们有一个Redis集群,主节点运行在192.168.1.100:6379
,两个从节点分别运行在192.168.1.101:6380
和192.168.1.102:6380
。以下是具体的配置和测试步骤:
redis.conf
,启用持久化和日志记录。redis.conf
中添加slaveof 192.168.1.100 6379
。通过Redis主从复制和故障转移机制,可以有效提升系统的可用性和性能。主从复制解决了读写分离的问题,而Sentinel则提供了自动化的故障检测和恢复能力。在实际部署中,还需要根据业务需求调整相关参数,例如同步频率、超时时间等。