1.概念:存储引擎中的概念,同一份数据在不同节点上的拷贝称为副本。存储引擎采用分层LSM_Tree结构,分为基线数据和增量数据,基线保存在磁盘,称为SSTable;增量数据在内存,称为MemTable,通过redolog保证事务性,commitlog或Clog.事务提交时利用paxos协议在多个节点间同步redolog达成多数派提交,从而维护副本间数据一致性。
2.广播日志流
sys租户、meta租户没有广播日志流;每个用户租户只能有一个广播日志流。
select * from dba_ob_ls; sys租户只有一个1号日志流
select * from DBA_OB_LS_LOCATIONS\G; 查看日志流分布位置节点
select * from DBA_OB_TABLE_LOCATIONS limit 5;查看数据分区信息及所归属的日志流映射
3.locality,4.x版本只支持租户级,描述承载数据的容器
LOCALITY: FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3
租户的副本类型和分布,表示zone1-3各存在一个全能型副本。
部署模式 | locality属性 | zone分布 |
同城三中心 | F@z1,F@z2,F@z3 | z1、z2、z3 分别位于 Region R1 的 IDC idc1、idc2、idc3 |
两地五中心 | F@z1,F@z2,F@z3,F@z4,F@z5 | z1、z2 位于 Region R1 的 IDC idc1; z3、z4 位于 Region R1 的 IDC idc2; z5 位于 Region R2 |
三地五中心 | F@z1,F@z2,F@z3,F@z4,F@z5 | z1、z2 位于 Region R1 的 IDC idc1 和 IDC idc2; z3、z4 位于 Region R2 的 IDC idc3 和 IDC idc4; z5 位于 Region R3 |
修改增加减少副本前提条件1.增加副本前,要确认租户在目标zone上是否有资源池,如果么有需要调整现有资源池zone列表;2.要确认待变更zone上各节点资源分配情况,如果资源不足导致无法存放租户需要的资源单元。
ALTER RESOURCE POOL mq_pool_01 ZONE_LIST=('zone1','zone2','zone3'); 调整资源池zone列表
1.修改locality
ALTER TENANT mq_t2 LOCALITY="FULL{1}@zone1, FULL{1}@zone2,FULL{1}@zone3";修改副本
2.增加副本
ALTER TENANT mq_t2 LOCALITY="FULL{1}@zone1, FULL{1}@zone2,FULL{1}@zone3";
手动添加副本,添加缺少的日志流副本
SELECT TENANT_NAME,TENANT_ID,LOCALITY FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mq_t2';
SELECT * FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1006; 获取待操作租户的所有日志流信息
SELECT * FROM oceanbase.GV$OB_UNITS WHERE TENANT_ID=1006; 获取待操作租户的unit资源
SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1001 AND TENANT_ID=1006;查看1001号日志流副本分布
ALTER SYSTEM ADD REPLICA LS= 1001 SERVER='10.44.100.200:2882' REPLICA_TYPE='F' DATA_SOURCE='10.44.100.198:2882' PAXOS_REPLICA_NUM=3;
4.减少副本
ALTER TENANT mq_t2 locality="FULL{1}@zone1, FULL{1}@zone2";
手动删除副本
ALTER SYSTEM REMOVE REPLICA LS = 1001 SERVER = '10.44.100.200:2882' PAXOS_REPLICA_NUM = 2;
5.副本类型转换
ALTER TENANT mq_t2 LOCALITY="F@zone1,F@zone2,R@zone3";
ALTER SYSTEM MODIFY REPLICA LS = 1001 SERVER='172.xx.xxx.192:2882'
REPLICA_TYPE='R' PAXOS_REPLICA_NUM=2; 手动转换
6.调整副本分布
ALTER TENANT mq_t2 locality="FULL{1}@zone1, FULL{1}@zone2, FULL
{1}@zone3, FULL{1}@zone4"; 先增加zone4副本
ALTER TENANT mq_t2 locality="FULL{1}@zone1, FULL{1}@zone2, FULL
{1}@zone4"; 然后减少zone3副本
7.查看租户历史locality变更记录
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS
WHERE JOB_TYPE = 'ALTER_TENANT_LOCALITY' AND tenant_id = 1002 ORDER BY
START_TIME DESC LIMIT 10;
8.副本迁移
SELECT * FROM oceanbase.DBA_OB_SERVERS\G 查看zone中observer节点服务器ip
ALTER SYSTEM migrate unit = 1006 destination = 'x158:2882';将unit=1006迁移到同zone另一个节点
9.修改日志流的法定成员数
查询日志流有4个F类型副本,而日志流PAXOS_REPLICA_NUMBER=5,需要调整为4
SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID=1001 AND TENANT_ID=1006;
ALTER SYSTEM MODIFY LS = 1006 paxos_replica_num = 4;
10.取消副本任务
SELECT * FROM oceanbase.CDB_OB_LS_REPLICA_TASKS; 记录task_id
ALTER SYSTEM CANCEL REPLICA TASK TASK_ID = 'Y13CE6-0-0';
4.流量分布
leader承担事务中的读写请求,因此每个分区leader分布决定了流量在每个节点上的分布
通过primary zone来描述了leader副本的偏好位置,而leader副本承载了业务强一致性读写流量,即primary zone决定了oceanbase数据库中的流量分布。如t1表primary_zone=zone1,则rootService尽量将t1表的leader调度到zone1上。
region属性:zone有一个region属性,表示zone所处的地区,一个region包含多个zone
5.数据分布
数据分区是基于建表语句创建的逻辑对象,是划分和管理表数据的一种机制。租户有若干unit组成,日志流根据规则分布其上,基本分区策略有范围range、列表list、哈希hash、key分区。
日志流组与unit group一一对应,日志流组内日志流分布在对应的unit group上,日志流leader打散在primary zone上。
select TENANT_ID,LS_ID,STATUS,PRIMARY_ZONE,UNIT_GROUP_ID,LS_GROUP_ID from CDB_OB_LS where TENANT_ID=1006;
unit是物理资源的抽象,每个unit占用节点上一定物理资源,包括cpu、内存、存储等,是资源调度的基本单位。
每个租户有若干unit组成,每个unit放置于一个节点上,可以实现租户水平扩展。
日志流框定了一组数据,包括数据分区和有序的redolog日志流,通过paxos协议实现多副本日志同步,是分布式事务参与者
6.数据负载均衡
一级分区表-每个一级分区表是一个独立的均衡组,打散在各个服务节点上。
二级分区表-每个一级分区下的二级分区是一个独立均衡组,打散在各个服务节点上
非分区表-所有非分区表统一考虑,有且仅有一个均衡组。
表组:逻辑概念,一组表的集合,sharding属性控制组内表数据聚集和打散关系.none|partition|adaptive
none任意类型表聚集在一台机器上;partition表组内数据水平打散
配置项:enable_rebalance、enable_transfer
系统租户transfer partition
1.查询非分区表t1的相关id
SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID = 1 AND DATABASE_NAME = 'SYS' AND TABLE_NAME= 't1' LIMIT 1;
2.创建一级分区表并查询里面的分区
CREATE TABLE test (
user_code varchar(20) NOT NULL,
p_date INT NOT NULL)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_bin
PARTITION BY RANGE (p_date) (
PARTITION p20210201 VALUES LESS THAN ( 20210202 ),
PARTITION p20210202 VALUES LESS THAN ( 20210203 ),
PARTITION p20210203 VALUES LESS THAN ( 20210204 ),
PARTITION p20210204 VALUES LESS THAN ( 20210205 ),
PARTITION pmax VALUES LESS THAN maxvalue
)
;
SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID,table_name ,PARTITION_NAME FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID = 1 AND DATABASE_NAME = 'SYS' AND TABLE_NAME= 'test' AND PARTITION_NAME = 'p20210201' LIMIT 1;




