Redis主从复制

导读:本篇文章讲解 Redis主从复制,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点,但一个从节点只能有一个主节点。
主从复制的作用主要如下:

  1. 数据冗余:主从复制实现了数据的热备份,是持久化的一种数据冗余方式。
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,有从节点提供读服务(即写redis数据时连接主节点,读redis数据时连接从节点)。分摊服务器负载:尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提供Redis服务器的并发量。
  4. 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下:

  1. 从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大。
  2. 从容量上,单个redis服务器内存容量有限,就算一台redis服务器内存容量是256G,也不能将所有内存用作redis存储内存,一般来说,但它redis最大内存不应该超过20G。
    电商网站上的商品,一般都是一次上传,无数次浏览的,就是写少读多。
    对于这种场景,我们使用下面的架构:
    在这里插入图片描述
    主从复制,读写分离,可以减缓服务器压力,架构中经常使用。
    只要在公司中,主从复制就是必须使用的,真实项目中不可能单机使用Redis!

环境配置

只配置从节点不配置主节点。

  1. 查看当前库的信息info replication
redis-cli -p 6379
127.0.0.1:6379> info replication # 查看当前连接的信息
# Replication
role:master # 主机
connected_slaves:0 # 无从机
master_replid:79fad1a602f4eed2f198d6924fe18a9049820740
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
master_repl_meaningful_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

复制3个配置文件,然后修改对应的信息

  1. 端口
  2. pid文件名称(后台模式配置为yes时,需要修改,否则不需要)
  3. log文件名字
  4. dump.rdb名字

一组二从

默认情况下,所有的redis服务器都是主机
一主(6379)而从(6380,6381)

配置从机的主机命令:salveof host port

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379  # 配置主机为6379
OK
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
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:a5fad555f061a246d74852ff544c97438fb0aeb4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
master_repl_meaningful_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0

主机中查看从机配置

127.0.0.1:6379> info replication
# Replication
role:master  # 表示为主机
connected_slaves:1 # 一个从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=28,lag=1 # 从机信息
master_replid:a5fad555f061a246d74852ff544c97438fb0aeb4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
master_repl_meaningful_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

如果配置了两台从机,查看从机信息
在这里插入图片描述

真实环境中,通过配置文件配置主从配置。
细节
主机可以写,从机不可以写。
在这里插入图片描述

  1. 测试:主机断开连接,从机依旧连接到主机,但是没有写操作,这个时候,主机如果上线了,从机依旧可以直接获取到主机写的信息。
  2. 如果使用命令配置的方式配置从机,从机一旦shutdown,从机再上线,不会连接主机,因为从新上线后,是默认配置,自己就是主机。
  3. 从机再次配置主机后,从机可以获取到主机的所有数据,这个叫全量同步。

复制原理
Slave启动成功连接到Master后会发送给master一个sync同步命令。
Master接收到命令,启动后台的存盘进程,同时收集所有接收到的用于修改的数据集命令,在后台进程执行完毕后,Master将传送整个数据文件到slave,并完成一次完全同步。
全量复制:salve服务器在接收到数据库文件后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成增量同步。
但是只要从新连接master,一次全量同步将被自动执行,我们的数据一定可以在从机中看到。

手动配置主机

命令
使用slaveof no one 可以把从机变成主机,相当于谋朝篡位
如果主机断开连接,我可以使用slaveof no one让自己变成主机!其他的节点就可以手动配置连接到这个新主机。如果之前的主机上线了,如果想配置成主机,还需要手动配置。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100430.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!