当前位置: 首页 > news >正文

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

文章目录

  • redis主从复制
    • 一. 配置文件的方式设置
      • 1. 主节点配置:
      • 2. 从节点1配置:
      • 3. 从节点2配置:
    • 二. 命令的方式设置
      • 1. 创建服务
      • 2. 设置主从节点
      • 3. 测试
    • 三. 从节点升级为主节点
    • 四. 查看主从关系

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> 
http://www.lryc.cn/news/62842.html

相关文章:

  • 被chatGPT割了一块钱韭菜
  • vue3+ts+pinia+vite一次性全搞懂
  • Apache安装与基本配置
  • 哈夫曼树【北邮机试】
  • thinkphp:数值(保留小数点后N位,四舍五入,左侧补零,格式化货币,取整,生成随机数,数字与字母进行转换)
  • 用Flutter你得了解的七个问题
  • Nmap使用手册
  • 基于ResNet-attention的负荷预测
  • 华为校招机试 - 批量初始化次数(20230426)
  • WhatsApp CRM:通过 CRM WhatsApp 集成向客户发送消息
  • SOLIDWORKS Electrical无缝集成电气和机械设计
  • Numpy从入门到精通——数组变形|合并数组
  • DJ4-5 路由算法:LS 和 DV
  • python图像处理之形态学梯度、礼帽、黑帽
  • 千万级直播系统后端架构设计
  • ImageJ 用户手册——第五部分(菜单命令File,Edit)
  • nmap常用命令
  • 常用adb 命令
  • 后端开发常犯的问题(Java版)
  • Vue CLI 部署
  • 客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway
  • fMRI时间序列振幅和相位对功能连接分析的影响
  • 备战2个月,四轮面试拿下字节offer...
  • 关于Nginx
  • tensorflow中的共享变量
  • flink cep数据源keyby union后 keybe失效
  • python中的继承与多态,dir()函数
  • C++练级之初级:第五篇
  • JMeter的使用(二)
  • C/C++文件操作/IO流