Redis 主从配置 实现

Redis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

在这里插入图片描述

主从复制的作用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在 写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

  4. 读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;

  5. 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

主从复制原理

主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。

在从节点执行 slaveof 命令后,复制过程便开始运作,下面图示大概可以看到,
从图中可以看出复制过程大致分为6个过程
在这里插入图片描述

开工

建立复制

  1. 主节点和从节点:主节点一般理解为对外提供服务的节点,而从节点是备份节点或者备用节点,默认情况下,redis的节点都是主节点,但可以手工设置为从节点,一点设置了从节点后,数据只能从主节点流向从节点,也就是单向的,不能从 从节点流向主节点。

  2. 设置 连接复制命令的三种方式:

    在配置文件中配置:slaveof 主节点IP地址 主节点端口号
    启动命令中指定参数:redis-server slaveof 主节点IP地址 主节点端口 --port 从节点端口号
    在 从节点 redis-cli 交互窗口直接输入命令:slaveof 主节点IP地址 主节点端口号
    
  3. 演示 连接

  • 启动 主-从服务端

    redis-server --port 6379
    
    redis-server --port 6380
    
  • 进入 从从节点 客户端,设置连接的主节点

    redis-cli -p 6380
    
    127.0.0.1:6380> slaveof 127.0.0.1 6379
    OK
    

    此时就已经连接成功了,我们测试一下

  • 主节点存储数据

    127.0.0.1:6379> set name "zhangsan"
    
    OK
    
  • 从节点查看

    127.0.0.1:6380> get name
    
    "zhangsan"
    
  • 我们刚才也提到了,一旦 redis 变成了从机,就会不存储数据了

    127.0.0.1:6380> set age 18
    
    (error) READONLY You can't write against a read only slave.	
    
  • 主节点查看从节点信息

    127.0.0.1:6379> info replication
    
    # Replication
    role:master        # 本节点角色
    connecteed_slaves:1         # 已连接的节点数
    slave:ip=127.0.0.1,port=6380,state=online,offset=35197452,lag=0       # 从节点的信息
    
  • 从节点查看主节点

    127.0.0.1:6380> info replication
    
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:6         # 主节点最后一次IO的时间
    master_sync_in_progress:0
    slave_repl_offset:35197620
    
  1. 断开连接
  • 断开与当前主节点 的连接:slaveof no one :切开与主节点连接,原来的数据不会删除

  • 切换新的主节点:slaveof 新的主节点IP 新主节点端口号,同样执行 上面的操作再来一遍就OK了。
    原来的数据 也还是存在,需要自己删除。(不删除 还是很有便捷性的,比如下文要说的 哨兵)

发布了102 篇原创文章 · 获赞 229 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/105107133