开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天
Oceanbase是阿里自主研发的分布式关系数据库,集群也是构建在x86服务器集群上,有哪些特点呢?
-
高可用 (单机故障自愈,支持跨城多机房容灾,满足金融行业6级别容灾标准)
-
线性扩展(超1500节点)
-
Mysql、oracle高度兼容(mysql 5.6+ oracle 11g+)
-
高性能(独创编码压缩技术)
-
低成本(pc服务器、低端ssd)
-
多租户 (同一集群为多个独立业务提供服务,租户间数据隔离)
-
开源开放(2021年6月1日,推出社区版并开源)
下载:官网下载、GitHub下载、阿里云yum
部署安装:参考前面文章,可以手动、也可以docker部署,只是对于硬件要求还是较高的,尤其对于内存,如果是功能学习的话,至少保证10g可用内存,如果部署安装过程中有问题,可以私信交流。
使用:
Oceanbase多租户
Oceanbse数据库是以集群形态部署运行的,提供给业务的是其中的租户,就是实例,每个实例都拥有一定的计算资源(CPU、内存、空间)
还有一个要注意的,这个是单进程的软件,意思就是你安装了oceanbase,你操作系统的大部分cpu、内存、磁盘资源都会占为己有,独占你懂的。
然后集群会把所有节点独占的资源进行集中管理,然后再从集群中分配出多个租户,每个租户对应一定的资源,这个资源大小可自定义,而且可以在线调整,这个就是弹性伸缩的体现。
查看集群可用资源
集群内默认有个内部管理租户sys,可以查看管理集群的资源,使用如下SQL
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free, mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb
from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
order by a.zone, a.svr_ip;
可用资源如下所示
+-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
| zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb |
+-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
| zone1 | 172.20.249.52:2882 | 14 | 2.5 | 11.5 | 5.000000000000 | 1.000000000000 | 4.000000000000 |
| zone2 | 172.20.249.49:2882 | 14 | 2.5 | 11.5 | 5.000000000000 | 1.000000000000 | 4.000000000000 |
| zone3 | 172.20.249.51:2882 | 14 | 2.5 | 11.5 | 5.000000000000 | 1.000000000000 | 4.000000000000 |
+-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
3 rows in set (0.008 sec)
如何创建租户:
租户创建三步走:
1、创建资源单元规格
创建资源单元规格并不会立即分配资源,资源单元规格在视图__all_unit_config里面,创建之前看一下这个视图,有合适的规格,直接复用
创建语法:
CREATE RESOURCE UNIT unit_name
MAX_CPU [=] cpu_num, cpu最多数量
MAX_MEMORY [=] mem_size, 最大内存容量,单位为字节
MAX_IOPS [=] iops_num, 指定iops最多数量
MAX_DISK_SIZE [=] disk_size, 最大磁盘容量,单位字节,最小值512MB
MAX_SESSION_NUM [=] session_num, session最多数量
[MIN_CPU [=] cpu_num,] 指定cpu最小数量
[MIN_MEMORY [=] mem_size,] 最小内存容量
[MIN_IOPS [=] iops_num] ; 指定iops最少数量
举例 创建单元规格S1
CREATE resource unit S1 max_cpu=3, min_cpu=3, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
2、创建资源池
资源池中资源从节点资源分配来的,资源池在每个节点里的部分叫做资源单元,每个资源单元的大小通过创建时指定的资源单元规格确定
语法如下:
CREATE RESOURCE POOL poolname 资源池名字
UNIT [=] unitname, 资源规格的名字
UNIT_NUM [=] unitnum, 创建的单个zone下面的unit淑
ZONE_LIST [=] ('zone' [, 'zone' ...]); 指定创建的资源池所属的zone
3、创建租户
租户就是一个实例,创建租户需要关联到某个资源池
创建租户语法:
CREATE TENANT [IF NOT EXISTS] tenant_name 租户名
[tenant_characteristic_list] [opt_set_sys_var];
tenant_characteristic_list:
tenant_characteristic [, tenant_characteristic...]
tenant_characteristic:
COMMENT 'string'
| {CHARACTER SET | CHARSET} [=] charsetname
| COLLATE [=] collationname 指定校对规则
| REPLICA_NUM [=] num 副本数
| ZONE_LIST [=] (zone [, zone...]) 修改的zone列表
| PRIMARY_ZONE [=] zone 指定primary zone
| DEFAULT TABLEGROUP [=] {NULL | tablegroup} 设置租户默认表分组信息
| RESOURCE_POOL_LIST [=](poolname [, poolname...])
| LOGONLY_REPLICA_NUM [=] num 日志副本数
| LOCALITY [=] 'locality description' 描述副本在zone的分布情况
opt_set_sys_var:
{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...
这篇暂时学到这,下一篇继续学习如何连接租户。