Redis(08)主从复制master-slave replication

Redis主从复制用于实现读写分离和故障转移,通过配置文件或命令行设置主从节点,从节点可自动复制主节点数据。当主节点故障,从节点可升为主节点,Sentinel提供自动故障检测和切换。
摘要由CSDN通过智能技术生成

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持久化

说明:

  1. 主从节点的端口、密码等信息不能更改,否则主从关系无法自动重建。
  2. requirepass是访问Redis的密码,masterauth是Sentinel和从节点连接主节点的密码。
  3. appendonly yes打开AOF持久化,实现数据强一致性。
  4. 多个从节点可以连接同一个主节点,实现读扩展。
  5. 如果主节点下线,可以手动将某个从节点升级为主节点(需要关闭从节点的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主从复制中,如果主节点下线,可以通过以下两种方式让从节点自动升级为主节点:

  1. 配置slave-serve-stale-data在从节点的redis.conf配置文件中,设置slave-serve-stale-data为yes:
slave-serve-stale-data yes 

这意味着在主从连接断开的情况下,从节点可以继续响应客户端请求。原主节点重新上线后,主从关系将重建,从节点将从主节点同步最新数据。

启用该配置后,一旦主从连接断开,从节点将自动成为“临时主节点”,继续提供服务,实现高可用。

  1. 使用Redis Sentinel

    Redis Sentinel是Redis官方推出的高可用性解决方案。它可以监控主从节点,一旦检测到主节点故障,将自动将一个从节点升级为主节点,实现自动主节点故障转移。使用Sentinel,需要以下几步:

    1. 安装并配置多个Sentinel实例(至少2个)
    2. 向Sentinels指定主节点和从节点信息
    3. Sentinels监控主从节点运行状态
    4. 主节点下线时,Sentinels通过投票协议选择一个从节点升级为主节点
    5. 新主节点上线,Sentinels自动将其它从节点指向新主节点
    6. 旧主节点再次上线时,将变为从节点,实现自动主备切换Sentinel机制实现了Redis高可用,当主节点故障时能够自动并迅速地将从节点提升为主节点,确保业务连续性。这也是生产环境中推荐的高可用解决方案。

所以,要实现Redis主从节点的自动主备切换,有两种方式:

  1. 配置从节点的slave-serve-stale-data为yes,简单但手动主备切换
  2. 使用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> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bilal-abdurehim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值