租戶
租戶偏向于資源層面的邏輯概念,是在物理節點上劃分的資源單元,可以指定其資源規格,包括 CPU、內存、日志盤空間、IOPS 等。
租戶類似于傳統數據庫的數據庫實例,租戶通過資源池與資源關聯,從而獨占一定的資源配額,可以動態調整資源配額。在租戶下可以創建 Database、表、用戶等數據庫對象。
OceanBase 數據庫 4.0 開始,有三種類型的租戶:系統租戶
、用戶租戶
以及每個用戶租戶對應的 Meta 租戶
。
租戶 ID 為 1 的是系統租戶。租戶 ID 大于 1000 的租戶中,偶數的是用戶租戶,奇數的是 Meta 租戶,并且用戶租戶的租戶 ID 比其對應 Meta 租戶大 1。
SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,COMPATIBILITY_MODE,STATUS,UNIT_NUM,COMPATIBLE,MAX_LS_ID FROM DBA_OB_TENANTS;
系統租戶
- 系統租戶是集群默認創建的租戶,與集群生命期一致,負責管理集群和所有租戶的生命周期。系統租戶僅有一個 1 號日志流,只支持單點寫入,不具備擴展能力。
- 系統租戶定位于集群管理和租戶管理,不提供完整的數據庫功能,不推薦在生產或業務測試等場合使用。
用戶租戶
- 與系統租戶對應的是用戶租戶,用戶租戶是由用戶創建的租戶。
- 對外提供完整的數據庫功能。
- 支持 MySQL 和 Oracle 兩種兼容模式。
用戶租戶介紹
用戶租戶與通常所見的數據庫管理系統相對應,可以被看作是一個數據庫實例。它由系統租戶根據業務需要所創建出來。 用戶租戶具備一個實例所應該具有的所有特性,主要包括:
- 可以創建自己的用戶
- 可以創建數據庫(database,僅 MySQL 兼容模式支持)、表(table)等所有客體對象
- 有自己獨立的系統表和系統視圖
- 有自己獨立的系統變量
- 數據庫實例所具備的其他特性
所有用戶數據的元信息都存儲在用戶租戶下,所以每個租戶都有自己的命名空間,并且彼此隔離不可訪問。系統租戶管理所有用戶租戶,系統租戶與用戶租戶之間的層級關系如下圖所示。
在用戶租戶下創建的用戶,只能登錄到本租戶,對其他租戶不可見。
- 對于 MySQL 兼容模式的租戶,可以從視圖
mysql.user
中查詢用戶信息。 - 對于 Oracle 兼容模式的租戶,可以從系統視圖
ALL_USERS
中查詢用戶信息。
在用戶租戶下可以創建表,創建后對其他租戶不可見。
- 對于 MySQL 兼容模式的租戶,可以從
information_schema.tables
視圖中查詢本租戶所有用戶表的信息。 - 對于 Oracle 兼容模式的租戶,可以從
ALL_TABLES
視圖中查詢本租戶所有用戶表的信息。
用戶租戶只能在本租戶下修改本租戶的系統變量。
- 對于 MySQL 兼容模式的租戶,可以從
information_schema.global_variables
和information_schema.session_variables
視圖中查詢系統變量信息。也可以通過SHOW VARIABLES
語句查詢。 - 對于 Oracle 兼容模式的租戶,可以通過
SHOW VARIABLES
語句來查詢本租戶所有的系統變量。
Meta租戶
- Meta 租戶是 OceanBase 數據庫內部自管理的租戶。
- 每創建一個用戶租戶會創建一個對應的 Meta 租戶,其生命周期與用戶租戶保持一致。
- Meta 租戶用于存儲和管理用戶租戶的租戶私有數據。
- Meta 租戶不可登錄,普通用戶只能通過系統租戶的視圖查詢 Meta 租戶下的數據。
- Meta 租戶沒有獨立的 Unit,創建租戶時默認為 Meta 租戶預留資源,各項資源從用戶租戶資源中扣除。
前置概念
租戶通過資源池與資源關聯,從而獲取可用的資源。租戶和資源池相輔相成的關系。
概念 | 對應視圖 | 描述 |
---|---|---|
資源規格 | DBA_OB_Unit_CONFIGS | 資源規格定義了常見物理資源項的大小,包括 CPU、內存、磁盤空間、IOPS 等。創建資源池時指定其資源規格,從而根據定義創建資源單元。 |
資源單元(Unit) | DBA_OB_UnitS | Unit 是租戶管理中非常重要的概念。OceanBase 按照 Unit 來管理物理資源,是 CPU、內存、存儲空間、IOPS 等物理資源的集合。Unit 也是資源調度的基本單位,其具有節點、Zone、Region 等位置屬性,節點是服務器的抽象,Zone 是機房的抽象,Region 是地域的抽象,通過調整 Unit 的位置屬性從而調整租戶的部署方式。 |
資源池 | DBA_OB_RESOURCE_POOLS | 每個 Unit 都歸屬于一個資源池,每個資源池由若干個 Unit 組成,資源池是資源分配的基本單位,同一個資源池內的各個 Unit 具有相同的資源規格,即該資源池內 Unit 的物理資源大小都相同。 |
租戶 | DBA_OB_TENANTS |
通過 Unit 的概念,我們將 OceanBase 數據庫的物理概念和邏輯概念進行了關聯。每個租戶有若干 Unit,分布于若干 Zone 的若干節點上。而每個節點上分布有若干個 Unit,這些 Unit 歸屬于不同租戶。概括的講:集群由節點組成,節點是 Unit 的容器。租戶由 Unit 組成,Unit 是數據庫對象的容器。
創建租戶時通過設置 RESOURCE_POOL_LIST,可以指定該租戶關聯到的資源池,從而該租戶擁有指定資源池的 Unit。例如:設置租戶 a 的 RESOURCE_POOL_LIST=(‘a_pool’),其部署圖如下:
創建租戶
創建租戶的流程
OceanBase 數據庫僅支持創建用戶租戶,系統租戶由集群創建時自動創建。創建用戶租戶是一系列操作的組合,首先創建資源規格,然后基于該資源規格創建資源池,最后創建租戶并指定其資源池。所以創建租戶的順序為:資源規格 -> 資源池 -> 租戶。
步驟一:創建資源規格
創建一個名稱為 S1_unit_config
的資源規格,其資源配置為 CPU
為 1 核,內存 5G
,日志盤空間 6G
。
CREATE RESOURCE UNIT S1_unit_configMEMORY_SIZE = '5G',MAX_CPU = 1, MIN_CPU = 1,LOG_DISK_SIZE = '6G',MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;
步驟二:創建資源池
創建一個名為 mq_pool_01
的資源池,在 zone1
里創建 1 個 Unit
,Unit
的資源規格為 S1_unit_config
。
CREATE RESOURCE POOL mq_pool_01 UNIT='S1_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1');
步驟三:創建租戶
創建一個名為 mq_t1
的租戶(默認為 MySQL
模式租戶),副本數為 2,資源池指定為 mq_pool_01
,Primary Zone
為 zone1
,允許所有 IP 連接數據庫。
CREATE TENANT IF NOT EXISTS mq_t1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01')set OB_TCP_INVITED_NODES='%';
查詢創建的租戶
SELECT c.TENANT_ID, e.TENANT_NAME, concat(c.NAME, ': ', d.NAME) `pool:conf`, concat(c.UNIT_COUNT, ' unit: ', d.min_cpu, 'C/', ROUND(d.MEMORY_SIZE/1024/1024/1024,0), "G") unit_info-> FROM DBA_OB_RESOURCE_POOLS c, DBA_OB_UNIT_CONFIGS d, DBA_OB_TENANTS e-> WHERE c.UNIT_CONFIG_ID=d.UNIT_CONFIG_ID AND c.TENANT_ID=e.TENANT_ID AND c.TENANT_ID>1000-> ORDER BY c.TENANT_ID;
+-----------+-------------+----------------------------+---------------+
| TENANT_ID | TENANT_NAME | pool:conf | unit_info |
+-----------+-------------+----------------------------+---------------+
| 1002 | mq_t1 | mq_pool_01: S1_unit_config | 1 unit: 1C/1G |
+-----------+-------------+----------------------------+---------------+
1 row in set (0.033 sec)obclient(root@sys)[oceanbase]>
以上就是本次的分享,感謝閱讀。
上一章:《OceanBase數據庫-學習筆記3-Oceanbase相關命令》
下一章:《OceanBase數據庫-學習筆記5-用戶》