OceanBase与传统数据库对比
传统集中式数据库 | 以OceanBase为代表的分布式数据库 | |
---|---|---|
产品架构 | 经典的“单点集中式”架构,采用“全共享(share-everything)”架构。构建于高端的硬件基础之上 | 原生的“分布式”数据库,采用业内最严格的Paxos分布式一致性协议,基于普通PC硬件设计 |
数据可靠性和服务高可用性 | 1、利用高端硬件设备保证可靠性;2、采用“主从复制”,主节点故障的情况下,会有数据损失(RPO>0);不能自动恢复服务,恢复时间(RTO)通常以小时为单位计算 | 1、以普通PC硬件为基础,利用Paxos分布式一致性协议保证数据可靠性;2、主节点故障情况下,Paxos可保证数据无损(RPO=0),并且自动选举并恢复服务,服务恢复时间在30s内 |
扩展性 | 1、数据存储只能在单点内实现纵向扩展,最终达到单点架构下的容量上限。2、计算节点通常无法扩容,少数模式(RAC、pureScale)可扩容,数量有限 | 1、数据节点和计算节点均可以在MPP架构下实现水平扩展;2、数据节点和计算节点均没有数量限制,在网络贷款足够前提下,可以扩充至任意数目 |
应用场景 | 集中企业客户的核心系统;无法应付互联网业务场景 | 支付宝核心、网商银行核心 |
使用成本 | 比较昂贵;需要支付高端基础硬件费用、软件授权费用、产品服务费用 | 相对较低;PC硬件、软件授权、产品服务费用 |
1、产品简介
核心特性
特性 | 说明 |
---|---|
高扩展 | 1、水平扩展;2、按需在线扩容、缩容、不停服务;3、单机群突破100台服务器 |
高可用 | 1、基于Paxos协议,强一致性;2、少数副本故障,数据不丢,服务不停;3、RPO=0,RTO<30s |
多租户 | 1、DBaas架构;2、资源隔离;3、自动负载均衡 |
高性能 | 1、峰值6100万次/秒;2、单表最大3200亿行;3、准内存处理性能 |
高兼容 | 1、Oracle/MySQL两种兼容模式;2、降低业务迁移改造成本 |
高透明 | 1、全局一致性快照;2、全局索引;3、自动事务两阶段提交 |
2、基本概念
集群 - zone - OBserver - 租户
- 一个集群有多个zone,给一个集群的机器打上相同tag,就属于同一个zone;
- zone>=3(建议奇数);每个zone有且只有一份完整副本;每个zone存在一台OBserver作为 RootService总控服务
- OBserver相对独立,有独立的计算和存储引擎
- 租户:类似 “实例”
- 每个租户有自己的资源池(CPU、内存)用户名、密码
- 租户之间的数据严格隔离;租户内可创建专属的数据库、表、执行DML操作
- 逻辑上类似于数据库实例,但物理上租户并没有自己的专属进程
- 使用OceanBase集群资源的第一个步骤
# 创建租户步骤
# 1、创建“资源单元规格”,定义规格,不实际分配
create resource unit unit1
max_cpu = 4,
max_memory = 10737418240, -- 10GB
min_memory = 10737418240, -- 10GB
max_iops = 1000,
min_iops = 128,
max_session_num = 300,
max_disk_size = 21474836480 -- 20GB
;
# 2、创建“资源池”
create resource pool pool1
unit = 'unit1',
unit_num = 1,
zone_list = ('zone1', 'zone2', 'zone3')
;
<font color='red'>每个OBserver只能有一个 unit</font>;如果 unit_num > 1,每个zone内必须有对应数目的机器;
zone list一般与 zone个数保持一致;
# 3、创建租户
create tenant mysql_tenant
resource_pool_list = ('pool1'),
primary_zone = 'zone1, zone2, zone3'
set ob_tcp_invited_nodes = '%', ob_compatibility_mode = 'mysql', recyclebin = off, ob_timestamp_service = 'GTS'
primary zone:指定主副本分配到zone的优先级,逗号两侧优先级相同,分号左侧优先级高于右侧
需要指定租户类型是mysql还是oracle
# 检查所有服务器状态
select * from __all_server \G
# 查看集群中整体资源分配的情况
__all_virtual_server_stat
# 查看unit
select * from __all_unit_config;
# 查看已经分配的resource unit
select * from __all_unit;
# 将resource unit和具体的租户对应起来
select * from __all_resource_pool;
日志
- observer.log:observer运行时的日志文件
- rootservice.log:observer上rootserver的日志文件
- election.log:observer上选举模块的日志文件
- OB proxy:/opt/xx/install/obproxy-
/log/obproxy. .log
开启日志循环
enable_syslog_recycle = True;
max_syslog_file_count = ;
日志级别
默认 info,级别超过 warn,会自动生成files保留下来
syslog_level = [debug, trace, info(默认), warn, user_err, error]
3、安装部署
- 需要对所有服务器和操作系统进行一系列的设置,使得服务器环境适合部署OceanBase
- 部署OCP,OCP部署完成后可以使用图形化界面完成后续安装部署
- 通过OCP来部署OceanBase集群
- 通过OCP来部署OB proxy
- 创建租户,以及租户内的数据库、表等
- 根据业务需要部署OMS、ODC、备份恢复等其他组件
3.1 客户端工具
白屏工具:OceanBase云平台(OCP)、OceanBase开发者中心(ODC)
黑屏工具:OceanBase客户端、MySQL客户端
4、Paxos协议
分区 | 副本 |
---|---|
1、当一个表很大,可以分为若干分区。根据行数据导分区的映射关系,分为hash分区、list分区、range分区; 2、每一个分区用不同维度再分为若干分区,称为二级分区;3、分区是OceanBase数据架构的基本单元,是传统数据库的分区表在分布式系统上的实现 | 1、为数据安全和提供高可用的数据服务,每个分区的数据在物理上存储多份,每一份叫做分区的一个副本;2、副本根据负载和特定的策略,由系统自动调度分散在多个server上。 |
1、全能型副本:2、日志型副本:3、只读型副本: |
类型 | log | MemTable(内存增量数据) | SSTable(磁盘上静态数据) | 数据安全 |
---|---|---|---|---|
全能型 | 有,参与投票 | 有 | 有 | 高 |
日志型 | 有,参与投票 | 无 | 无 | 低 |
只读型 | 有,不属于paxos组,只是listener | 有 | 有 | 中 |
以分区为单位组建paxos协议组:每个分区都有多份副本(replica),自动建立paxos组,在分区级用多副本保证数据可靠性和服务高可用,数据管理更加灵活方便;自动选出谁是主,谁是从。
- Paxos组是以分区为单位的,不是以表、数据库或租户为单位的
- 组成员自动选举主和从
- 副本会均匀分布在zone的机器上
- Paxos组成员通过redo-log多数派强同步,确保数据的持久化
- leader无需等待所有的follower的反馈,多数派完成同步即可向应用反馈成功
5、负载均衡
自动负载均衡和智能路由
一般情况下,副本以及主副本将被均匀打散到zone内各个服务器中,实现自动负载均衡
primary zone
配置 | 意义 | 说明 |
---|---|---|
(z1,z2,z3) | zone1=zone2=zon3 | 主副本均匀分布在各个机器 |
(z1;z2;z3) | zone1>zone2>zon3 | 主副本只在zone1存在,zone2、zone3均是从副本 |
(z1,z2;z3) | zone1=zone2>zon3 | 主副本均匀分布在zone1和zone2,zone3是从副本 |
租户、database、table:可以指定各自的primary zone,不必和上一级对象的设置保持一致
table group
将多个表的相同分区ID的主副本聚集在一个ob server中,减少分布式事务引入的开销
- 如果多个表的分区方式完全相同(分区类型、分区键个数、分区数量),可以在逻辑上将这些表归属到同一个table group中,以影响动态负载均衡的策略
- 同一个table group的所有表,分区ID相同的所有分区,他们的leader在同一个obsever上
- 如果负载均衡被打破(机器故障、扩容缩容等),table group中所有表回作为一个整体调整分区分布和leader分布
- 动态创建和删除,并且对于上层应用完全透明
- 如果租户的unit_num=1且primary_zone只有一个,不需要table group
6、OB Proxy
智能路由
- 对sql做基本解析,确定leader所在机器
- 反向代理,将请求路由至对应的leader;leader位置无法确定时随机选择OB server
- 轻量sql姐+快速转发,保证高性能,单个OB Proxy每秒转发百万次请求
- ===
- 每个OB Proxy是一个“无状态”的服务进程,不做数据持久化,对部署位置无要求
- OB Proxy不参与数据库引擎的计算任务,不参与事务处理
- 多个OB Proxy之间无联系,可通过F5/SLB组成负载均衡集群
- 不需要独立服务器,可以与OBserver共用一台服务器
OB Proxy:简单的sql parser解析出租户名、数据库名、表名、分区ID等
7、数据可靠及可用性
- 少数派故障时自动实现服务接管,保证服务高可用
- OB server进程异常后的处理策略
- 小于server_permanent_offline_time,进程终止时间不长,暂不做处理
- 大于server_permanent_offline_time,“临时下线”,从其他zone的主副本中,将缺失的数据复制到本zone内剩余的机器上,以维持副本个数
OceanBase容灾
- 同城三机房部署
- 三地五中心副本
- 同城两机房“主-备”方案
- 两个机放,做两个集群,然后redolog同步
- 两地三中心“主-备”方案
8、动态扩容缩容
购买资源 -> 追平数据 -> 切换服务 -> 缩容 -> 退回资源
扩容步骤:
- 为每个zone添加新的物理机器
- 在每台新添加的机器上,以正确的方式启动observer服务
- 为每台新添加的observer进程执行alter system ad server;命令,将observer服务添加到集群中
- 执行alter resource pool poolname unit_num=xx;扩充资源池中的unit个数
- oceanbase自动启动“rebalance”过程,将部分数据从旧的unit在线复制到新的unit上。
- 每个分区复制完成后,OceanBase自动将服务切换到新的unit上,并删除旧unit中分区上的数据
确定是否复制完成?
查看__all_virtual_sys_task_status表,是否有comment like ‘%partition migration%’的任务
缩容步骤:
- 执行alter resource pool poolname unit_num=xx;缩减资源池中的unit个数
- OceanBase自动启动“rebalance”过程,将一部分数据从待下线机器上的unit在线复制到同zone内其它机器的unit上
- 每个分区的数据复制完成后,OceanBase自动将服务切换到新的unit上,之后删除待下线机器的unit分区上的数据
- 为每台要下线的机器执行alter system delete server;命令完成机器下线
- 手动终止已下线机器的observer进程,执行关机等操作
9、分布式事务、MVCC、事务隔离级别
ACID:
A(atomicity)原子性:依赖两阶段提交协议保证分布式事务的原子性
1. 第一阶段:投票阶段 协调者向所有参与者发送prepare请求与实务内容
2.第二阶段:执行阶段 如果所有参与者返回OK,协调者发送提交请求,参与者完成提交后返回给协调者,如果有一个参与者返回no,则需要回滚。
C(consistency)一致性:保证主键唯一等一致性约束;全局快照-单租户GTS服务,1秒钟能够响应获取全局时间戳次数超过200万次;
I(Isolation)隔离性:采用MVCC进行并发控制,实现read-committed的隔离级别;所有修改的行加互斥锁,实现写-写互斥;读操作读取特定快照版本的数据,读写互不阻塞
D(durability)持久性:redo_log使用paxos协议做多副本同步
事务并发问题:
1、脏读:读取了未提交的数据
2、不可重复读:指的是同一事务内,不同时刻读到的同一批数据可能是不一样的(期间被别的事务更新数据)
3、幻读:同一事务内,在操作过程中进行两次查询,第二次查询的结果包含第一次查询中未出现的数据或者缺少了第一次查询中出现的数据(期间被别的事务插入或删除了数据)
OceanBase两种隔离级别:
1、read-committed:可以避免脏读,但是存在不可重复读和幻读(默认)
2、serializable:可以避免脏读、不可重复读、幻读,最严格的隔离级别,但会影响性能
10、SQL引擎
11、存储引擎
准“内存数据库”+ LSMTree存储:有效解决随机写和写放大问题
OceanBase把内存分为两块:(默认50%,参数那块有讲)
- 一块是MemTable,用于写;
- 在内存保存较长时间,当内存空间快满时或达到某个固定的时间或人工触发
- 内存脏数据合并,顺序写入SSD硬盘,避免随机写,提高性能
- 一块是热点缓存,用于读
LSMTree存储:减少磁盘碎片,提升压缩能力
memstore -> mini freeze(dump操作) -> minor freeze(转储) -> major freeze(合并) -> sstable
多个mini freeze数据会异步合并,多个minor freeze 会实时合并
- 触发mestore内存dump操作的阈值
- freeze_targger_percentage>70,内存写满70%
- 每一次dump之前,都会对memstore做一次freeze,产生新的版本号
- 转储时机
- 手工触发:alter system minor freeze;
- mini freeze次数已满;当次数达到minor_compact_trigger参数指定的次数时,自动触发转储。值为0时关闭mini freeze,直接转储
- 合并(major freeze)时机
- 定时合并:有major_freeze_duty_time参数控制,默认“02:00”
- 手动触发:alter system major freeze;
- 转储次数已满:当转储次数已达到major_compact_trigger指定次数时,自动触发合并,值为0时则关闭
- 支持轮换合并,多个zone按次序合并
LSMTree:高数据压缩率,降低存储要求
- 第一次压缩:encoding,使用字典、RLE等算法对数据进行瘦身。
- 第二次压缩:使用lz4等压缩算法对encoding之后的数据再做一次瘦身;OceanBase支持snappy、lz4、lzo、zstd等压缩算法
备份恢复
- 支持全量备份和增量备份:直接对存储池呢个基线数据做全量备份,通过redo-log实现增量备份;可以在线实时进行全量及增量备份,对业务无影响
- 最小粒度为租户:备份恢复最小粒度为租户
- 全局范围内保证数据一致性
- 支持数据库上的任何操作:
- 支持多种备份介质:普通NFS、阿里云对象存储(OSS)
- 性能:备份速度达到网卡上限1G/s,恢复速度500MB/s
12、参数和变量
参数
参数管理
说明 | |
---|---|
管理范围 | 通过集群参数的设置可以控制集群的负载均衡、合并时间、合并方式、资源分配和模块开关等功能 |
参数生效 | 参数分为动态生效和重启生效两类,大部分为动态生效 |
参数级别 | 1、OceanBase的集群参数分为集群级别和租户级别,大部分为集群级别;2、如果同时存在集群级别和租户级别参数,那么集群会覆盖租户参数 |
管理权限 | 1、系统租户可以查看和设置所有其他租户的参数;2、普通租户只能设置自己租户的参数 |
参数说明
系统租户:
show parameters like 'sql_work_area' tenant=t1
sho parameters where edit_level='static_effective' and name='sql_work_area' tenant=t1
普通租户: (需要到租户内部才能修改)
show parameters like 'sql_work_area'
查询结果 | |
---|---|
列名 | 含义 |
svr_ip | 机器IP |
svr_port | 机器端口 |
name | 配置项名 |
value | 配置项值 |
type | 配置项数据类型(number,string) |
info | 配置项解释 |
section | 配置项分类 |
scope | 配置项范围(tenant 、 cluster) |
source | 当前值来源(tenant、cluster、commandline、obadmin、file) |
editable | 是否可以修改 |
edit_level | dynamic_effective(动态修改)static_effective(重启生效) |
常见OB系统配置项 P108
配置项 | 默认值 | 说明 |
---|---|---|
zone_merge_timeout | 3h | 单个zone合并的超时时间;取值范围(1-正无穷) |
freeze_trigger_percentage | 70 | 触发合并时,memstore使用百分比;取值范围(0,100) |
enable_manual_merge | false | 是否开启手动合并;True时,max_merge_duration_time才会有效;True时,则认为DBA关闭自动合并; |
major_freeze_duty_time | 02:00 | 每日定时合并任务的启动时间;取值范围(00:00-24:00) |
syslog_level | info | 日志级别:debug、trace、info、warn、error |
enable_syslog_recycle | false | 是否打开旧日志开关;和max_syslog_file_count配合使用 |
max_syslog_file_count | 0 | 指定最多同时存在多少个日志文件;每个日志文件占用256M空间;如果为0时,则不进行删除 |
trace_log_slow_query_watermark | 100ms | 打印trace.log慢查询控制阈值;取值范围[1,正无穷) |
syslog_io_bandwidth_limit | 30MB | 系统日志IO带宽限流 |
enable_syslog_wf | true | 是否单独保存warning以上日志级别的日志到文件中 |
minor_freeze_times | 0 | 两次合并之间的转储上限次数 |
large_query_threshold | 100ms | 大查询判断条件;取值范围[1,正无穷) |
large_query_worker_percentage | 30 | 大查询分配资源百分比;取值范围[0,100] |
memory_limit_percentage | 80 | 内存使用上限;取值范围[10,90] |
sql_audit_memory_limit | 3G | 开启sql审计,sql审计内部表最大可用内存;默认3G,取值范围[256M,正无穷) |
server_permanent_offline_time | 3600s | 服务器永久下线时间;取值范围[20s,正无穷) |
enable_auto_leader_switch | true | 允许系统自动切主 |
clog_sync_warn_threshold | 100ms | commitlog同步超过多长时间包warn日志;取值范围[1ms,1000ms] |
enable_sql_audit | true | 是否开启sql审计功能; |
sql_audit_memory_limit | 3G | 开启sql审计,sql审计内部表最大可用内存;默认3G,取值范围[256M,正无穷) |
变量variables
会话变量session、全局按量global
查看:
show variables;
show variables like '%%'
修改:
set @@session.
set @@global.
常见的OB系统变量variables
配置项 | 默认值 | 说明 | 属性 |
---|---|---|---|
ob_query_timeout | 10000000 | 查询超时时间 | global、session |
ob_trx_timeout | 10000000 | 事务超时时间 | global、session |
ob_read_consistency | strong | 读一致性 | global、session |
ob_enable_truncate_flashback | on | truncate table是否会进回收站受该参数控制 | global、session |
lower_case_table_names | 1 | 是否大小写敏感:1不敏感 0敏感 | global、session、readonly |
13、OCP、ODC、OMS工具
OCP(oceanbase cloud platform)
(集群管理、租户管理、监控告警、性能诊断、备份恢复、导入导出)
- 支持高可用
- 最多可以同时管理500台主机
- 响应速度可达到秒级
需要安装OCP agent
---核心功能: - 集群管理:提供全生命周期管理,包括安装、运维、性能监控、配置、升级、删除等功能
- 主机管理:提供添加主机、删除主机、主机信息显示等功能
- 租户管理:租户的创建、租户结构拓扑图、性能监控、会话管理、参数管理
- 告警管理:支持集群、租户、主机等不同维度的告警。系统基于告警规则生成告警
- 备份恢复管理:支持集群、租户级别的全量备份、增量备份、redo_log备份、完全恢复、不完全恢复等
- 用户权限管理:通过对用户和角色的管理确保系统安全
ODC(oceanbase developer center)
(连接管理、数据库对象管理、sql工作台、存储过程开发调试、导入导出)
客户端、浏览器登录
功能:
- 数据库日常开发操作
- websql
- sql诊断
- 会话管理
- 数据导入导出
OMS()实时同步工具
数据实时同步 + 快速切换 + 回滚预案(去o方案)
- 支持多种类型数据源:mysql、oracle、db2
- 兼容性评估和改造:异构数据迁移OceanBase的对象兼容性评估和改写建议
- 一站式交互:数据迁移全生命周期管理,数据迁移的创建、配置和监控都在管理界面上连贯操作完成,交互简单
- 多重数据校验: