Redis主从复制

本文深入探讨Redis主从复制机制,包括其工作原理、搭建方式、应用场景及注意事项。讲解了如何通过命令行或配置文件设置主从关系,以及主从复制在读写分离和故障切换中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主从复制介绍:

    

什么是主从复制?

 
为什么要使用主从复制?
  •     redis-server单点故障(避免单节点服务挂掉导致不能使用)
  •     单节点QPS有限(性能瓶颈)
 
主从复制应用场景分析:
  •     读写分离场景,规避redis单机瓶颈
  •     故障切换,master出问题后还有slave节点可以使用
 
 
 

搭建主从复制

    主Redis服务以普通模式启动,主要是启动从服务器的方式
    1、第一种方式:命令行
#连接需要实现从节点的redis,执行下面的命令
slaveof [ip] [port]
 
    2、第二种方式:redis.conf配置文件
#配置文件中增加
slaveof [ip] [port]
#从服务器是否只读(默认yes)
slave-read-only yes

        退出主从集群的方式,命令:

Slaveof no one

 

启动之前先保证

  •     防火墙已经关闭:systemctl stop firewalld.service
  •     redis.conf文件中配置:
#这里设置为:bind 0.0.0.0 或者是对应从服务器的IP地址,除非测试,最好不要对外开放是任何IP,因为之前Redis暴漏过很多安全漏洞
bind 0.0.0.0

 

演示第一种搭建,命令行主从复制:

    两台服务器安装Redis并启动
 
    从服务器执行命令,连接主服务器,并测试数据
 
 
演示第二种搭建,配置文件设置主从复制:
    在redis.conf配置文件加上主服务器的IP和端口,保存后重启Redis服务
 
    重启从服务器后就会自动连接,下面是测试数据
 
    检查主从是否正常,通过info命令查看Redis监控信息,其中包括主从复制内容 Replication
    可通过命令:查看主从服务器的状态
info replication
 
 
 
在国外,新版本主从配置,slaveof会逐渐更新为replicaof命令,因为文化差异,slaveof他们认为是奴隶的意思,后续版本需要注意主从配置命令。
 
 

主从复制流程:

  •     从服务器通过psync(partial synchronizeation)命令发送主服务器已有的同步速度(同步源ID、同步速度offset)
  •     master收到请求,同步源为当前master,则根据偏移量增量同步
  •     同步源非当前master,则进入全量同步:master生成rdb,传输到slave,加载到slave内存
 
 

主从复制核心知识:

  •     Redis默认使用异步服饰,slave和master之间异步的确认处理的数据量。
  •     一个master可以拥有多个slave。
  •     slave可以接受其他slave的连接。slave可以有下级sub slave
  •     主从同步过程在master侧是非阻塞的。
  •     slave初次同步需要删除旧数据,加载新数据,会阻塞到来的连接请求。
 

主从复制应用场景:

  •     主从复制可以用来支持读写分离
  •     slave服务设定为只读,可以用于在数据安全的场景下(只有主服务能新增修改)
  •     可以使用主从复制来避免master持久化造成的开销。master关闭持久化,slave配置为不定期保存或者启用AOF。(注意:重新启动的master程序将从一个空数据集开始,如果一个slave试图与它同步,那么这个slave也会被清空。)
 
 

主从复制的注意事项:

    读写分离场景:
  •     数据复制延时导致读到过期数据或者读不到数据(网络原因、slave阻塞)
  •     从节点故障(多个client如何迁移)
    
    全量复制情况下:
  •     第一次建立主从关系或者runid(同步源ID)不匹配会导致全量复制
  •     故障转移的时候也会出现全量复制
 
    复制风暴:
  •     master故障重启,如果slave节点较多,所有slave都要复制,对服务器的性能,网络的压力都有很大影响。
  •     如果一个机器部署了多个master
 
    写能力有限:
  •     主从复制还是只有一台master,提供的写服务能力有限
 
    master故障情况下:
  •     如果是master无持久化,slave开启持久化来保留数据的场景,建议不要配置redis自动重启。
  •     启动redis自动重启,master启动后,无备份数据,可能导致集群数据丢失的情况。(解决方案:1、把从服务器持久化文件《dump.rdb》复制一份到master后重启。2、不要使用自动重启,故障后以从服务器作为matser服务继续使用)
 
    带有效期的key:
  •     slave不会让key过期,而是等待master让key过期
  •     在Lua脚本执行期间,不执行认可key过期操作
 
java代码是通过info命令,查看Replication集群信息,根据哪些是主从服务器,进行写、读操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值