文章目录
redis主从复制
Redis主从复制是将一个Redis实例的数据复制到多个Redis实例,以实现读写分离、负载均衡、故障转移等功能。在主从复制架构中,一个Redis实例作为主节点,其他Redis实例作为从节点,从节点会自动复制主节点的数据,当主节点发生故障时,从节点会自动选举一个新的主节点,确保系统的高可用性。
使用Redis主从复制可以提高系统的可靠性和性能,同时也可以提供灵活的扩展方案,满足不同的业务需求。
一. 配置文件的方式设置
Redis主从复制中,一个主节点可以有多个从节点。要配置主从复制,需要修改主节点和从节点的redis.conf配置文件。
1. 主节点配置:
bind 0.0.0.0 # 监听所有接口
protected-mode no # 取消保护模式
port 6379 # 端口
daemonize yes # 后台运行
# 主节点配置
masterauth masterpassword # 设置主从连接密码
requirepass password # 设置访问密码
appendonly yes # 开启AOF持久化
2. 从节点1配置:
bind 0.0.0.0
protected-mode no
port 6380
daemonize yes
# 从节点1配置
slaveof 127.0.0.1 6379 # 设置主节点地址和端口
masterauth masterpassword # 设置主从连接密码(6379.conf中的密码)
requirepass password # 设置访问密码 (6379.conf中的密码)
appendonly yes
3. 从节点2配置:
bind 0.0.0.0
protected-mode no
port 6381
daemonize yes
# 从节点配置
#slaveof 127.0.0.1 6379
slaveof <master-ip> <master-port> # 设置主节点信息
masterauth <master-password> # 设置主从连接密码(6379.conf中的密码)
requirepass <require-password> # 设置访问密码 (6379.conf中的密码)
appendonly yes # 开启AOF持久化
说明:
- 主从节点的端口、密码等信息不能更改,否则主从关系无法自动重建。
- requirepass是访问Redis的密码,masterauth是Sentinel和从节点连接主节点的密码。
- appendonly yes打开AOF持久化,实现数据强一致性。
- 多个从节点可以连接同一个主节点,实现读扩展。
- 如果主节点下线,可以手动将某个从节点升级为主节点(需要关闭从节点的slaveof配置),其他从节点重新配置从新的主节点同步数据。
启动各节点后,使用redis-cli -h 127.0.0.1 -p 6379 -a password 等命令就可以连接主节点进行读写操作。从节点只读。
如果想实现自动主备切换,可以使用Redis Sentinel解决方案。配置sentinel.conf,启动多个Sentinel监控主从节点,一旦主节点故障,Sentinel会自动将从节点选举为主节点,实现故障转移。
二. 命令的方式设置
1. 创建服务
创建三个redis-server服务实例
./install_server.sh 指定一个端口号为6379 主节点
./install_server.sh 指定一个端口号为6380 从节点
./install_server.sh 指定一个端口号为6381 从节点
2. 设置主从节点
使用命令的方式设置主从节点
在从节点的客户端中执行如下命令即可设置当前节点为从节点,连接主节点的地址和端口号:
REPLICAOF 127.0.0.1 6379
6381客户端
[root@bogon src]# ./redis-cli -p 6381
127.0.0.1:6381> REPLICAOF 127.0.0.1 6379
OK Already connected to specified master
127.0.0.1:6381>
6380也一样
[root@bogon src]# ./redis-cli -p 6380
127.0.0.1:6380> REPLICAOF 127.0.0.1 6379
OK Already connected to specified master
127.0.0.1:6380>
3. 测试
如果从节点突然挂掉了,可以重新恢复
6381客户端执行:shutdown
127.0.0.1:6381> shutdown
启动服务
redis-server /etc/redis/6381.conf REPLICAOF 127.0.0.1 6379
4,如果主节点突然挂掉了,可以将从节点提升为主节点
在从节点的客户端连接中执行如下命令:
REPLICAOF no one #此时从节点变为主节点,其他从节点需要重新连接到新的主节点
三. 从节点升级为主节点
在Redis主从复制中,如果主节点下线,可以通过以下两种方式让从节点自动升级为主节点:
- 配置slave-serve-stale-data在从节点的redis.conf配置文件中,设置slave-serve-stale-data为yes:
slave-serve-stale-data yes
这意味着在主从连接断开的情况下,从节点可以继续响应客户端请求。原主节点重新上线后,主从关系将重建,从节点将从主节点同步最新数据。
启用该配置后,一旦主从连接断开,从节点将自动成为“临时主节点”,继续提供服务,实现高可用。
-
使用Redis Sentinel
Redis Sentinel是Redis官方推出的高可用性解决方案。它可以监控主从节点,一旦检测到主节点故障,将自动将一个从节点升级为主节点,实现自动主节点故障转移。使用Sentinel,需要以下几步:
- 安装并配置多个Sentinel实例(至少2个)
- 向Sentinels指定主节点和从节点信息
- Sentinels监控主从节点运行状态
- 主节点下线时,Sentinels通过投票协议选择一个从节点升级为主节点
- 新主节点上线,Sentinels自动将其它从节点指向新主节点
- 旧主节点再次上线时,将变为从节点,实现自动主备切换Sentinel机制实现了Redis高可用,当主节点故障时能够自动并迅速地将从节点提升为主节点,确保业务连续性。这也是生产环境中推荐的高可用解决方案。
所以,要实现Redis主从节点的自动主备切换,有两种方式:
- 配置从节点的slave-serve-stale-data为yes,简单但手动主备切换
- 使用Sentinel架构,实现自动主备切换和高可用 Sentinel方案更加智能化,能够自动监控和处理主从节点的上下线,是生产环境首推的选择。但slave-serve-stale-data也为我们提供了一个简易的主备切换思路,在实验环境中也值得尝试。
四. 查看主从关系
[root@localhost ~]# redis-cli -p 6379 -a 123456
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=127.0.0.1,port=6382,state=online,offset=2128,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=2128,lag=0
slave2:ip=127.0.0.1,port=6380,state=online,offset=2128,lag=0
master_failover_state:no-failover
master_replid:ef8fa1c27460b44fe1b8a54653f4fa8b1de9201a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2128
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2128
127.0.0.1:6379>