初识Redis(3)----主从复制

Redis的主从复制

主从复制,是指将一台redis服务器的数据,复制到另一台redis服务器上。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。Master以写为主,slave以读为主。
默认情况下,每台redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但是一个从节点只能有一个主节点。
每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本

主从复制的作用:

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

主从复制的运行机制

  • 当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave ,包括客户端的写入、key 的过期或被逐出等等。
  • 当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。
  • 当无法进行部分同步时, slave 会请求进行全量同步。这会涉及到一个更复杂的过程,例如 master 需要创建所有数据的快照,将之发送给 slave ,之后在数据集更改时持续发送命令流到 slave 。

Redis使用默认的异步复制,其特点是低延迟和高性能,是绝大多数 Redis 用例的自然复制模式。但是,slave会异步地确认其从主 Redis 服务器周期接收到的数据量。

Redis复制的基本特性

  • Redis使用异步复制,slave和master之间异步地确认处理的数据量
  • 一个master可以拥有多个slave
  • slave可以接受其他slave的连接。除了多个slave可以连接同一个master之外,slave之间也可以像层叠状的结构连接到其他slave。
  • redis复制在master是非阻塞的。这意味着master在一个或多个slave进行初次同步或者部分同步时,可以继续处理查询请求。
  • 复制在slave也是非阻塞的。当slave进行初次同步时,他可以使用旧的数据集处理请求。
  • 复制可以用在可伸缩性,便于只读查询可以有多个slave进行或者用于数据安全。
  • 可以使用复制来避免master将全部数据集写入磁盘造成的开销。(有数据丢失的风险)

一般来说,要将Redis应用在项目中,一般不建议只使用一台Redis,原因如下:

  1. 从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求,负载较大;
  2. 从容量上,单个redis服务器内存容量有限,就算一台redis服务器内存容量为256G,也不能将所有内存作为redis存储内存,一般来说,单台redis最大使用内存不应该超过20G

常用的主从复制架构:
在这里插入图片描述
redis主从复制----流程
master开启一个后台保存进程,以便于生产一个RDB。同时它开始缓冲所有从客户端接收到的新的写入命令。当后台保存完成时,master将数据集文件传输给slave,salve将之保存在磁盘上,然后加载文件到内存。然后master会发送所有的缓冲命令给slave。这个过程以指令流的形式完成并且和redis协议本身的格式相同。

  1. salve启动成功连接到master后会发送一条sync命令
  2. master接收到命令,启动后台的存盘进程,同时收集所有接受到的用于修改数据的命令集,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次全量同步

全量复制:salve服务在接收到数据库文件之后,将其存盘并加载到内存中
增量复制:master继续将新的所有收集到的修改命令一次传给salve完成同步
但是只要是重新连接master,一次全量复制将会被自动执行。

节点信息

#从机中查询的信息
192.168.1.113:6878> info replication
# Replication
role:slave  #当前角色
master_host:192.168.1.113  #主机IP
master_port:6379  #主机端口
master_link_status:up  #主机与从机连接状态
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:238
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:87588455b3d8045bb0ec16990881d5c66eda6621
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:238
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:238
#主机中查到的信息
192.168.1.113:6379> info replication
# Replication
role:master
connected_slaves:2 #从机连接数
slave0:ip=192.168.1.113,port=6878,state=online,offset=154,lag=0
slave1:ip=192.168.1.113,port=6377,state=online,offset=154,lag=1
master_replid:87588455b3d8045bb0ec16990881d5c66eda6621
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:154
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:154

复制–配置
1.通过命令配置

slaveof  <ip>  <port>  #通过命令配置只是暂时的,想要永久有效需要在配置文件中配置

slaveof no one  #设置自己为master  (当master宕机之后,可以手动设置,将当前节点设置为主服务器)

2.redis.conf 中配置

replicaof <ip> <port>  #配置主机的IP和端口
masterauth <password> #如果主机有密码,将其密码配置上就可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值