Redis学习(八):Redis主从复制

本文涉及的产品
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
简介: Redis学习(八):Redis主从复制

一、主从复制是什么


       

主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。


8fdc90ddf6914a13905482ee0c9dbcf0.png


二、主从复制能干什么



1、读写分离,性能扩展

       

主服务器负责写,从服务器负责读。

       

当应用需要进行读操作时,直接到从服务器中读取数据;当应用需要进行写操作时,将数据写入主服务器中,再复制到从服务器中。


2、容灾快速恢复


如果一台从服务器宕机,可以再从其他从服务器中读取;如果一台主服务器宕机,可以做成集群模式,集群中的每一个部分都是一主多从的配置。


三、复制原理



Slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步(全量复制);在此之后,每次master更新的数据会主动地写入slave中(增量复制)。


全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步


3f855b6ffac349699cbca7b7c2e8482e.png


简而言之,从机连接上主机之后,主动请求数据同步;主机将所有数据同步到rdb中,将rdb文件发送给从机。在此之后的每次主机数据更新,都由主机主动地更新到从机中。

 

四、常用的三种策略



1、一主二仆

96c2fcaf75174002ac8cbdae4d60d426.png



从机宕机后,再次重启会变为其他主机,需要手动将其假如到当前主机中变为从机;主机宕机后,从机还为从机,在主机重启后还是主机的从机。

     

成为某个主机的从机的命令:

slaveof  <ip><port>


605e239001bc4e40ab00402a6688fa37.png


上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master。

类似于主机下管理着从机小组长,从机小组长下面又管理着从机。


优点: 可以有效减轻master的写压力,去中心化降低风险。


缺点:一个从机宕机,后面的slave都没法备份;主机宕机,从机还是从机,无法写数据。


3、反客为主


当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。


将从机变为主机的命令:

slaveof  no one


那么能否自动使从机变为主机呢?


五、哨兵模式



1、哨兵模式是什么

       

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。


dd46ef42bfbf4a0aa476e7f302f96984.png


2、怎么设置哨兵

 

sentinel monitor mymaster 127.0.0.1 6379 1


其中mymaster为监控对象起的服务器名称;127.0.0.1和6379为监控的主机IP和端口号;1 为至少有多少个哨兵同意迁移的数量。


3、哨兵的作用:故障恢复


32e163d8c28b49b8a8189ab8b276ad06.png


当主机宕机时,哨兵从从机中挑选一台作为主机。选出主机后,哨兵向所有从服务发送slaveof的臣服命令,使所有的从机归顺主机。当主机重启后,也必须臣服与新主,哨兵也会向其发送slaveof命令。


再说一下从机变为主机的挑选原则:优先级小的为主机;优先级相同的,偏移量大的为主机;优先级和偏移量相同的,runid小的为主机。解释一下优先级、偏移量和runid三个概念:优先级是Redis配置文件中配置的值,默认为100,值越小优先级越高;偏移量是指从机获取原主机数据的完整度,获得数据比较全的偏移量较高;每一个Redis实例启动后都会有的一个40位runid


总结起来,sentinel就像托孤大臣一样,扶植新主,统领群臣朝拜,即使旧主归来也要俯首。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
3月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
70 1
|
3月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
63 0
|
3月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
70 0
|
29天前
|
缓存 NoSQL 关系型数据库
Redis学习总结
Redis学习总结
31 1
|
1月前
|
消息中间件 存储 缓存
深入理解Redis集群主从复制原理
该文章主要探讨了Redis集群中的主从复制原理,包括为何需要主从复制、配置方法、复制流程以及一些高级特性。
深入理解Redis集群主从复制原理
|
2月前
|
NoSQL Redis
Redis 主从复制架构配置及原理
Redis 主从复制架构配置及原理
45 5
|
3月前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
61 1
|
3月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
64 1
|
3月前
|
存储 缓存 NoSQL
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
70 1