OceanBase学习记录(九)Paxos协议与负载均衡

[复制链接]
查看3539 | 回复0 | 2022-1-21 19:18:54|发表时间:2022-1-21 19:18:54| 显示全部楼层 |阅读模式

数据分区及分区副本

192002cddoogwkccobbbba.jpg

分区:

当一个表很大的时候,可以水平拆分为若干个分区,每个分 区包含表的若干行记录。根据行数据到分区的映射关系不同,分为hash分区,List分区(按列表),range分区(按范围)等。每一个分区,还可以用不同的维度再分为若干分区,叫做二级分区。分区是OceanBase数据架构的基本单元,是传统数据库的分区表在分布式系统上的实现。

副本:

为了数据安全和提供高可用的数据服务,每个分区的数据在物理上存储多份,每一份叫做分区的一个副本。副本根据负载和特定的策略,由系统自动调度分散在多个Server上。副本支持迁移、复制、增删、类型转换等管理操作。

当一个表很大的时候,可以水平拆分为若干个小的分区,存储在物理硬盘上。每个分区包含表的若干行记录。根据数据到分区的映射关系不同,可以分为hash分区、List分区(按列表),range分区(按范围)等。每一个分区,还可以用不同的维度再分为若干分区,叫做二级分区。为了数据安全,每个分区的数据在物理上存储多份,每一份叫做分区的一个副本。每个副本会存储在一个Zone中,且一个Zone只能有一个副本。

我们用图上的例子解释下,一个交易记录表,按照用户ID可以分为3个hash分区就是表红色、蓝色和黄色的三个分区,每一个hash分区再按照交易时间分为4个range分区,也就是这个表格一共被分割成了12个分区。为了更高的可靠性。每个分区又会有3个副本(假设这个集群有3个Zone),每个副本会分布到不同的zone内,避免单个zone的故障影响业务。

副本构成:

192002sji8q1eifqqej8vy.jpg

根据存储数据种类的不同,副本有几种不同的类型,以支持不同业务在在数据安全,性能伸缩性,可用性,成本等之间进行取舍折中。

全能型副本:也就是目前支持的普通副本,拥有事务日志,MemTable和SSTable等全部完整的数据和功能。它可以随时快速切换为leader对外提供服务。

日志型副本:只包含日志的副本,没有MemTable和SSTable。它参与日志投票并对外提供日志服务,可以参与其他副本的恢复,但自己不能变为主提供数据库服务。因为日志型副本所消耗的物理资源(CPU、内存、磁盘)更少,它可以有效降低最后一副本机器的成本,进而降低整个集群的总体成本。

只读型副本:包含完整的日志,MemTable和SSTable等,但是它的日志比较特殊。它不作为paxos成员参与日志的投票,而是作为一个观察者实时追赶paxos成员的日志,并在本地回放。这种副本可以在业务对读取数据的一致性要求不高的时候提供只读服务。因其不加入paxos成员组,又不会造成投票成员增加导致事务提交延时的增加。

类型

Log

MemTable

SSTable

数据安全

全能型

有,参与投票

日志型

有,参与投票

只读型

有,但不属于paxos组,只是listener

多副本一致性协议

192002o06jc0prfgcr3dp3.jpg

以上图为例,假设一个表有8个分区,每个分区有3个副本。我们可以看到,首先,每个Zone都有P1-P8的副本,且只有一份。其次,我们看Zone内的两台服务器,每个服务器都有4个副本,是均匀分布的。所以OceanBase集群会自动的将分区打散到Zone内的各个服务器中。

还是以上图为例,每个分区的3个副本,会有1个主副本和2个从副本,他们会组成一个Paxos组。比如图中三个P7组成了一个Paxos组,自动选出谁是主,谁是从,比如图中Zone3-Server2的P7是主,将由它对外提供业务,应用要访问数据,默认只会访问主副本,而不会去找从副本。


以分区为单位组建Paxos协议组:每个分区都有多份副本(Replica),自动建立Paxos组,在分区级用多副本保证数据可靠性和服务高可用,数据管理更加灵活方便;

自动选举主副本:OB自动生成多份副本,多副本自动选举主副本,主副本提供服务(如图黄色副本供应用访问,蓝色副本用于备份);


自动负载均衡与智能路由

192002gffcdvcveapt3lxp.jpg

自动负载均衡:主副本均匀打散到各个服务器中,使得各个服务器都能承载业务流量。(如图应用1、2、3读请求分布路由到不同的OB Server);

每台OBServer相互独立:每台OBServer均可以独立执行SQL,如果应用需要访问的数据在不同机器上,OBServer自动将请求路由至数据所在的机器,对业务完全透明(如应用2->P6->P7/P8)

默认情况下,系统会自动的把主副本平均分配到3个Zone中,比如图中,Zone1有3个主,Zone2有2个主,Zone3有3个主,每个服务器也都是有主副本,有从副本。这样的好处是每个服务器都承载了部分业务的同时,也给其他服务器做着备份的工作,将业务负载均衡了。当然,在一些特殊场景下,管理员也可以通过Primary zone的功能将业务负载集中到某个zone内,以满足一些特定场景的需求

对于分布式系统来说,有一个问题,如果应用要访问的数据不在一个服务器上,是否需要应用自己连接多个服务器,造成业务的复杂。答案是不需要的,比如应用2,他要访问的数据分布在P6,P7,P8上,P6的主副本在Zone2-OB Server2,P7的主副本在Zone3-OB Server2,P8的主副本在Zone1-OB Server2中。应用是否需要了解这些细节呢?不需要,应用不需要知道他要访问的数据在哪里,他可以连接任何一台OB Server,比如开始访问P6主副本所在的服务器(Zone2-OB Server2),该服务器会连接其他服务器获取数据后,返回给应用。这个过程对应用是透明的。

通俗来讲,每台OB Server都是全功能的,都是相对独立的,都践行“首问责任制”和“最多访问一次”的概念,避免对业务的侵入性。

通过多副本同步Redo Log确保数据持久化

192003u9vdtvmislitl99u.jpg

Paxos组成员通过Redo-Log的多数派强同步,确保数据的持久化;

Leader无需等待所有Follower的反馈,多数派完成同步即可向应用反馈成功;


例如:应用写数据到P2分区。Zone2-OB Server1的P2为主副本(Leader),承接业务需求;将Redo-Log同步请求发送到Zone1-OB Server1和Zone3-OB Server1中的P2从副本(Follower);任何一个Follower完成Redo-Log落盘并将响应返回给Leader后,Leader即认为Redo-Log完成强同步,无需再等待其它Follower的反馈;Leader反馈应用操作完成。如果那个从副本由于故障没有落盘成功怎么办?等故障恢复后,再从主副本那里追平数据就好。

优势:

1:数据更新,只要Redo-Log落盘就好,而Redo-Log的落盘是像记日记一样,是顺序写的,很快。实际更新的数据存储在内存,不用马上落盘.减少了数据落盘带来的寻址、写数据等时间,快速响应应用的写请求。

2:Redo-Log是同时同步给2个副本的,只要一个回复,不用等第二个,也可以快速响应应用。

通过设置Primary Zone,将业务汇聚到特定Zone

192003blqpblssiszy1b1a.jpg

通过为不同的租户配置不同的Primary Zone,可以将业务流量集中到若干Zone中,减少跨Zone及跨服务器的操作。Zone List,逗号两侧优先级相同,分号左侧优先级高于右侧。

Primary Zone有租户、数据库和表不同的级别

192003jbnzhy9znh9e97yn.jpg

如无特殊指定,自动继承上级对象的primary_zone:database继承租户的primary_zone设置,table继承database的primary_zone设置。

database和table可以指定各自的primary_zone,不必和上一级对象的设置保持一致;提供更加灵活的负载均衡策略。

tablegroup

Table Group,将多个表的相同分区ID的主副本聚集在一个OB Server中,减少分布式事务引入的开销

如果多个表的分区方式完全相同(分区类型、分区键个数、分区数量等) ,可以在逻辑上将这些表归属到同一个Table Group中,以影响动态负载均衡的策略。

同一个Table Group中的所有表,分区ID(partition_id)相同的所有分区,它们的leader在同一个observer上:在不影响全局负载均衡的前提下,可有效减少分布式事务引入的跨机访问开销

如果负载均衡被打破(服务器故障后、扩容缩容等),Table Group中的所有表会作为一个整体来调整分区分布和leader分布。动态创建和删除,并且对上层应用完全透明

如果租户的unit_num=1且primary_zone只有一个zone,不需要tablegroup。

192004hyb1caub8b7mm178.jpg


版权声明:科技块为公益非盈利性质网站,文章图文来源于网友自行编辑发布,科技块作为资讯分发平台仅提供云存储服务,用于网友交流学习使用,不具任何商业用途,图文版权归原作者所有,如有侵权联系删!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

听众

0

收听

0

好友

积分
2534