分布式-redis主从复制架构

文章目录

是什么

主从复制是redis最简单的集群模式,主要是为了解决单点故障问题 ,所以将数据复制多个副本到从节点中,这样即使有一台服务器宕机,其他服务仍可提供服务。主从模式中,包含一个主节点(Master)和多个从节点(Slave),一般主节点负责读写操作,从节点负责读操作,当主节点发生故障,将一个从节点升级为主节点,实现故障转移(需要人工手动操作)。

优点:简单易用,适用于读多写少的场景

缺点:

  1. 不具备故障自动转移的能力,没有办法做容错和恢复
  2. 只有主节点进行写操作,无法负载均衡
  3. 存储能力受到单机限制
java 复制代码
// 主从数据库数据同步过程
1.全量复制:【当主从服务器刚建立连接的时候,进行全量数据同步】
	a、首先从服务器连接到主服务器,发送psync命令进行数据全量同步(Redis2.8之前是sync命令)
	b、主服务器收到psync命令之后,执行bgsave命令生成RDB快照文件发送给从服务器
	c、从服务器收到RDB快照文件后,清空内存旧数据,将接收到的数据写入磁盘

2、增量复制:【全量复制结束后,进行增量复制】
	a、主服务器每执行一个写命令就会向从服务器发送相同的写命令
	b、从服务器接收并执行收到的写命令。

优点:
  (1)数据热备份:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  (2)故障恢复:  如果master宕掉了,可以手动提升一个新的master,实现故障转移。
  (3)负载均衡:  可以轻易实现横向扩展,实现读写分离,一个master用于写,多个slave 用于分摊读的压力
  
缺点:
  (1)网络延迟:由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以有一定的延迟
  (2)如果master宕掉了,普通主从模式无法自动切换master,必须使用哨兵模式

常见架构

总体来说,主数据库Master以写为主,从数据库Slave以读为主,整体负责读写分离、容灾恢复。

case1:一主二仆【中心化架构】 slaveof 新主库IP 新主库端口

case2:薪火相传【去中心化架构】 slaveof 新主库IP 新主库端口

case3:反客为主 slaveof no one

一主二仆【中心化架构,为主】

master主机日志

slave从机日志

常见问题

1、slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的123是否也可以复制?

答:从头开始复制;123也可以复制

2、从机是否可以写?set可否?

答:从机不可写,不可set,主机可写

3、主机shutdown后情况如何?从机是上位还是原地待命

答:从机还是原地待命(咸鱼翻身,还是咸鱼)

4、主机又回来了后,主机新增记录,从机还能否顺利复制?

答:能

5、其中一台从机down后情况如何?依照原有它能跟上大部队吗?

答**:不能跟上,每次与master断开之后,都需要重新连接**,除非你配置进redis.conf文件(具体位置:redis.conf搜寻#### REPLICATION ####)

薪火相传【去中心化架构】

上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力(奴隶的奴隶还是奴隶),中途变更转向会清除之前的数据,重新建立拷贝最新的

slaveof 新主库IP 新主库端口

case3:反客为主

使当前数据库停止与其他数据库的同步,转成主数据库,形成一个中心点

SLAVEOF no one

相关推荐
翊谦6 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
晓晓hh6 小时前
JavaSE学习——迭代器
java·开发语言·学习
查古穆6 小时前
栈-有效的括号
java·数据结构·算法
自然语6 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
Java面试题总结7 小时前
Spring - Bean 生命周期
java·spring·rpc
硅基诗人7 小时前
每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
java
014-code7 小时前
String.intern() 到底干了什么
java·开发语言·面试
難釋懷7 小时前
OpenResty实现Redis查询
数据库·redis·openresty
eastyuxiao7 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
摇滚侠7 小时前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js