1、当一张表很大时,可以水平拆分为若干个小的分区,存储在物理硬盘上,每个分区包含表的若干行记录。
2、根据数据到分区的映射关系不同,分为hash分区、list分区、range分区。每个分区还可以进行二次分区。
3、为了数据安全,每个分区的数据在物理上存储多份,每一份叫做分区的一个副本。每个 副本会存储在一个 Zone 中,且一个 Zone 只能有一个副本。
4、副本的构成包括记录事务的日志、存储在内存的增量数据(MemTable)、磁盘上的静态数据(SSTable)。
5、基于副本内容的不同,可以分为全能型副本、日志型副本、和只读型副本。一个分区在一个zone中最多有一个全功能或日志副本,只读型副本在一个zone中可以有多个。
类型 | Log | MemTable | SSTable | 数据安全 |
---|---|---|---|---|
全能型 | 有,参与投票 | 有 | 有 | 高 |
日志型 | 有,参与投票 | 无 | 无 | 低 |
只读型 | 有,但是不属于paxos组,只是listener,不参与投票 | 有 | 有 | 中 |
6、以分区为单位组建paxos协议组,在分区级用多副本保证数据可靠性和服务高可用。
7、默认情况下,OceanBase 会自动的把这些副本打散到 Zone 内的机器中,避免让大多数副本集中到少数机器的情况,这样既可以均衡流量,也避免一台服务器故障后,影响太多的副 本,造成大面积的重新选举。
8、一个paxos组自动选出谁是主、谁是从,将由主副本对外提供业务,应用要访问的数据默认只会访问主副本。
9、自动负载均衡,各个服务器中都承载业务流量。
10、每台OB Server相对独立,可以独立执行SQL,如果应用要访问的数据在不同机器,OB Server自动将请求路由至数据所在机器,对业务完全透明。
11、每台 OB Server 都是全功能的,都是相对独立的,都践行“首问责任制”和“最 多访问一次”的概念,避免对业务的侵入性。
12、Paxos组成员通过Redo-Log的多数派强同步来确保数据持久化。leader无需等待所有follower的反馈,多数派完成同步即可向应用反馈成功。
[多数派] 三副本(一主两副),有一个副反馈成功即成功(一主加一副,两个即为三副本中的多数派);五副本(一主四副),有二个副反馈成功即成功(一主加二副,三个即为五副本中的多数派);
如下为例子说明:
13、如果哪个从副本由于故障没有落盘成功怎么办?等故障恢复后,再从主副本那里追平数据就好。
14、Paxos组成员这种Redo-Log机制好处:
数据更新只要Redo-Log落盘就好,而Redo-Log的落盘是像记日记一样,是顺序写的, 很快。实际更新的数据存储在内存,不用马上落盘.减少了数据落盘带来的寻址、写数据 等时间,快速响应应用的写请求。 |
---|
Redo-Log日志是同时同步给2个以上 |