2.3.4 日记复制
日记复制重要的感化就是用来包管节点的数据一致性与高可用性。
Leader在LOG产生变更后,经由过程HeartBeat将新的LOG同步到Follower上,Follower在接收到LOG后,再向Leader发送ACK信息,当Leader接到大年夜多半(2/n+1)Follower的ACK信息后,将该LOG设置为已提交,并且Leader将LOG追加到本地磁盘中。
同时Leader将鄙人一?HeartBeat中,通知所有的Follower将该LOG存储在各自的本地磁盘中。
2.3.5 安然性
安然性是用于确保每个节点都是按照雷同的日记序列进行履行的安然机制。
如不雅当某个Follower在同步Leader的日记时掉败,然则将来该Follower又可能被选举为Leader时,就有可能导致前一个Leader已经commit的日记产生覆盖,如许就导致了节点履行不合序列的日记。
Raft的安然性就是用于包管选举出来的Leader必定包含先前已经commit LOG 的机制,重要遵守的原则如下:
每个Term 只能选举一个Leader;
Candidate在选举新的Leader时,应用Term来包管LOG的完全性;
3.分布式数据库数据一致性技巧实现
以国产原厂的分布式数据库SequoiaDB为例,SequoiaDB在多副本的安排中,采取Raft算法包管数据在多副本情况中保持一致。
SequoiaDB集群中,总共包含3中角色节点,分别是调和节点、编目节点和数据节点。因为调和节点本身不存任何数据,所以只有编目节点和数据节点存在事务操作,换言之,编目分区组和数据分区组的副本同步采取Raft算法包管数据一致性。
3.1编目节点和数据节点的事务日记介绍
编目节点和数据节点因为都是须要存储数据的,并且在集群安排中该,为了确保数据的安然,都是建议采取分布式的方法进行安排,所以在数据同步中,须要采取Raft算法的基来源基本理进行数据同步。
别的,SequoiaDB节点的事务日记不会永远保存,而是当所有的事务日记写满后,再从新大年夜第一个文件开端进行覆干烫蛛。
3.2编目分区组的数据一致性
因为编目分区组是保存SequoiaDB集群的元信息,数据同步请求高,所以编目分区组的数据一致性请求为强一致性,即每次向编目分区组履行事务操作时,必须要确保所有的编目节点操作成功,才计算该操作履行成功,不然该事务操作将在全部编目分区组中回退事务日记,以包管分区组内的数据一致性。
别的,编目分区组还有一个比较重要的特点,即编目分区组必须要存在主节点才能够正常工作,如不雅老的主节点宕机了,编目分区组临时没有主节点,则该编目分区组不克不及够对外供给任何事务操作和数据萌芽操作。
3.3数据分区组的数据一致性
数据分区组的数据一致性默认情况下为最终一致性性,即只请求主节点履行事务操作成功即视为操作成功,主节点将在将来异步同步ReplicaLOG到大年夜节点上。
SequoiaDB的主大年夜节点是经由过程事务日记同步来包管数据一致性的,并且主大年夜节点的事务日记同步是单线程完成。
如不雅当主节点和大年夜节点的LSN差距为一笔记录,则主节点会主动将最新的事务日记推送给大年夜节点。
如不雅主节点和大年夜节点的LSN差距跨越一笔记录,则大年夜节点会主动向主节点请求同尘事务日记,主节点收到同步请求后,会将大年夜节点的LSN号到主节点最新的LSN号对应的事务日记打包一次性发送给大年夜节点。
3.5大年夜节点日记重放
3.4主大年夜节点的事务日记同步
昔时夜节点获取到主节点推送过来的事务日记后,就会主动解析事务日记和重放。大年夜节点在重放事务日记时,默认情况下会以10并发来重放事务日记。
大年夜节点在履行并发重放日记时有前提限制,即在集合的独一索引个数<=1的情况下,INSERT、DELETE、UPDATE、LOB WRITE、LOBUPDATE、LOB REMOVE操作可以支撑场发重放事务日记。大年夜节点在做并发重放时,是经由过程记录的OID进行打散并发履行,如许就可以包管对雷同记录的操作不会因为并发重放导致数据不一致。
4.SequoiaDB数据一致性应用
然则用户须要留意,大年夜节点在重放事务日记时, DROP CL操作不克不及够支撑场发重放。
今朝SequoiaDB数据分区组的数据一致性是基于集合级别进行设备的。用户在应用SequoiaDB过程中,可以随时调剂数据一致性的强度。
4.1 创建集应时指定
在一个多副本的SequoiaDB集群中,集合默认的数据一致性行级别为“最终一致性”。用户可以在创建集应时显式指定该集合的“数据一致性强度”,例如可以在SequoiaDB Shell中履行以下敕令
db.CSNAME.createCL(“CLNAME”,{ReplSize:3})
ReplSize参数填写范围
大年夜数据技巧的出生,确确切实让体系的机能有新的冲破,并且支撑硬件以程度扩大的方法来获得线性增长的机能和存储。这些都是以前传统关系型数据库所无法供给的。别的,大年夜数据技巧也摈弃了运行情况必须足够好的硬性请求,而是许可用户经由过程批量便宜X86办事器+本地磁盘的方法搭建范围集群,大年夜而获得比以前依附硬件垂直扩大所供给的更强的计算才能和更多的存储空间。
4.2 修改已经存在的集合
如不雅集合在创建时没有设置“数据一致性”ReplSize参数,用户也可以对已经存在的集合进行修改,在SequoiaDB Shell修改敕令如下
db.CSNAME.CLNAME.alter({ReplSize:3})
ReplSize的取值范围和创建集应时一致。
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 苹不雅在活动协处理器中集成了异常小的语音辨认装配,这个装配一向保持运行,并等待用户说出“嘿 Siri>>>详细阅读
本文标题:分布式数据库数据一致性原理说明与实现
地址:http://www.17bianji.com/lsqh/38048.html
1/2 1