OBCA
一、分布式数据库
传统数据库:高成本,难扩展
分布式数据库:数据高可靠、服务高可用、线性扩容、低成本、全局一致性、对业务透明
object-database-example
二、OceanBase
object-database-example
基本概念:
集群:Zone-1:n
Zone:OBServer-1:n,在每一个Zone选择一台Server部署总控服务(rootService)
OBServer包含多个租户,每个租户之间相互隔离(内存、CPU、数据)
每个租户拥有n个资源池
【注】:一台OBServer上只能放置一个租户的一个资源块,当一台OBServer宕机时,会迁移到同一个Zone下的其他Server上,同时,为保证租户资源的负载均衡,会在一个Zone内动态分配各Server中Unit的数量
OB集群部署:
在不少于三台机器上部署集群,首先部署OCP,然后登录OCP服务器,部署集群。每台OCP机器上有2个docker,分别运行OCP(Web服务)和OBServer(OB集群),OCP集群自带DNS服务器
创建租户:
- 创建资源单元规格(仅为规格定义)
- 创建资源池
- 创建租户
检查集群状态:服务器状态,资源分配情况、资源unit规格、资源unit使用情况
查看系统日志:observer、rootservice、obproxy
三、OceanBase集群技术架构
- 数据分区与分区副本
副本由事务日志、存储在内存的增量数据(MemTable)、磁盘上的静态数据(SSTable)三部分构成。同时,根据存储数据种类的不同,分为全能型、日志型、只读型,一个分区在一个zone中最多有一个全功能或日志型副本,只读型副本在同一个zone可以有多个
多副本一致性:以Zone为单位建立Paxos协议组;自主选举主副本
自动负载均衡:主副本均匀打散到各个服务器中
每台server相互独立,server会自动将请求路由至数据所在的机器上,对业务是透明的
- OBProxy
- 对sql做基本解析,确定Leader机器,当Leader无法确定时,随机选择一台server。
- 每个proxy是无状态的。
- 不做数据持久化,不参与数据库引擎的计算任务,不参与事务。
- proxy之间无关联,类似于网关转发,上层可搭载负载均衡统一转发到proxy
Primary Zone 有租户、数据库、表不同级别的设置,优先级中表>数据库>租户
Table Group:将多个表的相同分区id(分区类型、分区键个数、分区数量等)的主副本聚集在一个observer,以影响负载均衡
- 可有效减少分布式事务导致的跨机访问延时
- 可动态创建和删除,对上层应用透明
- 若unit_num=1且primary_zone只有一个,则不需要tablegroup
- 数据高可用
高可用指标:灾难恢复能力等级
- RTO(Recovery Time Objective)恢复时间目标:在故障或灾难发生之后,数据库停止工作的最高可承受时间,这是一个最大可容忍时限,必须在此时限内恢复数据-服务可用性
- RPO(Recovery Point Object)恢复点目标:这是一个过去的时间点,当灾难或紧急事件发生时,数据可以恢复到的时间点,是业务系统所能容忍的数据丢失量-数据可靠性
高可用机制:
少数主副本故障时自动从从副本选出新的主副本,并接管业务,少数派不可当选主副本
- 分布式事务
保证ACID特性的机制:
- OB两阶段提交保证事务的原子性,事务协调者和所有参与者均为主副本
- 多版本并发控制(MVCC),解决读写互斥
- 基于全局一致的数据版本号管理,实现不同的隔离级别,事务隔离级别:脏读、幻读、不可重复读
四、OB Server的SQL引擎和存储引擎
- SQL引擎:同时兼容Mysql和Oracle
- 存储引擎
- 传统数据库存在随机写导致的写放大的问题。
- OB通过准内存+LSMTree存储,避免随机写,LSMTree存储高数据压缩率
写数据:路径一:内存→硬盘中形成转储数据文件→通过定时或阈值启动与基线数据的合并;路径二:内存→Redo-Log实时数据落盘并同步给其他从副本
转储和合并的区别:
备份:通过常驻进程-备份恢复组件,每隔一段时间查询元数据库MetaDB有无备份任务,控制整个基线的备份任务状态。
五、OCP及ODC工具介绍
练习题
- 通过 OCP删除 OBServer后,系统 将会删除该 OBServer 的所有数据,且无法恢复,请谨慎操作。
- OceanBase服务器要求使用的磁盘类型是SSD固态盘
- 关于OCP上OBProxy管理功能,下面说法正确的是可以安装、下线、重启OBProxy
- OceanBase融合增量数据与基线数据,生成新的基线,这一过程称之为合并
- OceanBase可以支持在一个数据库中同时支持MySQL租户和Oracle租户。
- 普通租户可以更改自身的系统变量。
- Global级(租户级)变量修改后,对当前已经打开的session不生效。