OceanBase學習之路13|體驗多租戶特性
OceanBase 資料庫具有多租戶的特性,在叢集層面實現了例項資源的池化。在 OceanBase 資料庫中,每一個租戶即一個例項(類比 MySQL Instance)。租戶與租戶之間資料、許可權、資源隔離,每個租戶擁有自己獨立的訪問埠及 CPU、記憶體訪問資源。
背景資訊
OceanBase 資料庫可以靈活的調整租戶資源分配情況(CPU、記憶體),並且整個過程對上層業務透明。透過多租戶機制,OceanBase 叢集可以幫助使用者高效的利用資源,在保證可用性和效能的前提下,最佳化成本,並且做到按照需求彈性擴容。
為了幫助您更容易的理解 OceanBase 資料庫多租戶的概念。下面透過建立一個 OceanBase 資料庫租戶的例子分步驟進行說明。
建立資源規格 Unit Config
在 OceanBase 資料庫中,資源單元 Unit 是一個租戶使用 CPU、記憶體的最小邏輯單元,也是叢集擴充套件和負載均衡的一個基本單位,在叢集節點上下線,擴容、縮容時會動態調整資源單元在節點上的分佈進而達到資源的使用均衡。而 Unit Config 則規定了一個 Unit 需要使用的計算儲存資源(包含記憶體、CPU 和 IO 等)的規格,是一個配置資訊。
因為其分散式的架構,一個 OceanBase 資料庫租戶可以在資源規格、資源池、副本型別,副本分佈幾個不同維度靈活定義,所以建立租戶時,也需要按照 “unit config -> resource pool -> tenant” 的順序進行建立和定義。
OceanBase 資料庫在建立租戶前,需要先確定租戶的 Unit Config。您需要使用
sys
租戶管理員,透過如下 SQL 語句來建立。
下面建立兩個 Unit Config,分別為
unit1
和
unit2
並指定 CPU、記憶體、使用的最大及最小閾值。
-
建立
unit1
資源單元的 CPU、記憶體使用大小為 3 C、6 G。obclient [oceanbase]> CREATE RESOURCE UNIT UNIT1 MAX_CPU =3,MIN_CPU =3 ,MEMORY_SIZE ='6G';
-
建立
unit2
資源單元的 CPU、記憶體使用大小為 4 C、8 G。obclient [oceanbase]> CREATE RESOURCE UNIT UNIT2 MAX_CPU =4,MIN_CPU =4 ,MEMORY_SIZE ='8G';
建立資源池和關聯 Unit Config
Unit Config 是一組租戶的配置規格資訊,而 Resource Pool 則是租戶的資源實體,所以在這一步我們需要建立一個 Resource Pool,並且與 Unit Config 關聯起來。
建立兩個不同的資源池
pool1
、
pool2
,併為其分別指定到
unit1
、
unit2
上。實現資源單元與資源池的對應。
UNIT_NUM
表示在一個副本中指定多少個
unit
單元(同一個租戶中,一個節點上最多隻能有一個
unit
),
ZONE_LIST
則指定租戶在當前叢集中在哪幾個副本進行部署。
本例中考慮到是單節點叢集,我們都指定單個 Unit 和 Zone List。建立 Resource Pool 需要保證有足夠的資源剩餘,如果資源不足,您可以先嚐試刪除已有的
test
租戶,或者將已有租戶的 Unit Config 調整到更小。如何調整請參見
調整租戶資源大小。
obclient [oceanbase]> CREATE RESOURCE POOL pool1 UNIT='UNIT1',UNIT_NUM=1,ZONE_LIST=('zone1'); obclient [oceanbase]> CREATE RESOURCE POOL pool2 UNIT='UNIT2',UNIT_NUM=1,ZONE_LIST=('zone1');
注意
上面的例子針對的是單節點的叢集環境,如果您的叢集有 3 個節點,那麼
ZONE_LIST
的值應該為('zone1','zone2','zone3')
,其中 Zone 的名稱需要根據您建立的情況具體填寫。
根據建立的 Resource Pool 建立租戶
在完成 Unit Config、Resource Pool 的建立,完成資源單元和資源池的對應後,就可以正常開始租戶建立了。
本例中由於是單節點叢集,所以我們只能建立單副本的租戶。如果希望建立 3 副本的租戶,OceanBase 叢集至少需要 3 個節點。
定義一個名為
tenant1
的單副本租戶,並規定字符集為
utf8mb4
,使用
pool1
的資源池,
ob_tcp_invited_nodes
是租戶白名單定義,初始可以設定為 '%',表示任意 IP 地址均可以訪問,後期可以修改。
obclient [oceanbase]> CREATE TENANT IF NOT EXISTS tenant1 CHARSET='utf8mb4', ZONE_LIST=('zone1'), PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes='%';
注意
上面的例子針對的是單節點的叢集環境,只能建立單副本的租戶。如果您的叢集有 3 個節點,那麼
ZONE_LIST
的值應該為('zone1','zone2','zone3'),PRIMARY_ZONE
則填寫'zone1;zone2;zone3'
,表示租戶的 Leader 優先分佈在zone1
,其次為zone2
。
類似的,定義一個名為
tenant2
的一個 單副本的租戶,並規定字符集為
utf8mb4
,使用
pool2
的資源池。
obclient [oceanbase]> CREATE TENANT IF NOT EXISTS tenant2 CHARSET='utf8mb4', ZONE_LIST=('zone1'), PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool2') SET ob_tcp_invited_nodes='%';
在完成
tenant1
、
tenant2
租戶建立後,您可以透過查詢
oceanbase.DBA_OB_TENANTS
檢視來確認租戶是否建立成功。
obclient [oceanbase]> SELECT * FROM DBA_OB_TENANTS;
在完成 tenant1、tenant2 租戶建立後,您可以透過查詢
oceanbase.DBA_OB_TENANTS
檢視來確認租戶是否建立成功。
obclient [oceanbase]> SELECT * FROM DBA_OB_TENANTS;
上述操作確認完成後,您已完成在同一個叢集下實現兩個租戶的建立過程。接下來便可以在租戶里正常的進行資料庫操作了。
使用新建立的
tenant1
進行登入,並建立一張測試表。
obclient -hXXX.XX.XXX.106 -P2883 -uroot@tenant1#ob_test -p obclient [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | oceanbase | | information_schema | | mysql | | test | +--------------------+ 4 rows in set obclient [(none)]> USE test; Database changed obclient [test]> CREATE TABLE t_f1(id DECIMAL(10,0),id2 DECIMAL(10,0),id3 DATE,id4 DATE,id5 FLOAT,id6 FLOAT,id7 VARCHAR(30),id8 VARCHAR(300)); Query OK, 0 rows affected obclient [test]> SHOW TABLES; +----------------+ | Tables_in_test | +----------------+ | t_f1 | +----------------+ 1 row in set
使用
tenant2
租戶進行登入,檢視
test
庫情況。
obclient -h***.**.***.106 -P2883 -uroot@tenant2#ob_test -p obclient [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | oceanbase | | information_schema | | mysql | | test | +--------------------+ 4 rows in set obclient [(none)]> USE test; Database changed obclient [test]> SHOW TABLES; Empty set
可以看到叢集下兩個租戶的資源、資料、許可權都是隔離的,您可以進行更多測試,體驗 OceanBase 資料庫的租戶隔離特性。
修改租戶配置和調整例項資源規格
OceanBase 資料庫可以靈活的對租戶資源的 CPU,記憶體資源進行調整,並且線上生效,對業務透明。修改租戶所佔用的 CPU、記憶體大小,您僅需要調整租戶所對應的 Unit Config,不需要對資源池或者租戶進行調整。
租戶資源單元可透過系統表
__all__unit_config
進行檢視。
obclient [oceanbase]> SELECT * FROM oceanbase.__all_unit_config; +----------------------------+----------------------------+----------------+--------------------------------------+---------+---------+--------------+--------------+----------+----------+---------------+---------------------+ | gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num | +----------------------------+----------------------------+----------------+--------------------------------------+---------+---------+--------------+--------------+----------+----------+---------------+---------------------+ | 2022-07-05 17:32:17.519436 | 2022-07-05 17:32:17.519436 | 1 | sys_unit_config | 5 | 2.5 | 17179869184 | 12884901888 | 10000 | 5000 | 2608854990848 | 9223372036854775807 | | 2022-07-10 12:58:33.279509 | 2022-07-10 12:58:33.279509 | 1026 | unit1 | 3 | 3 | 6442450944 | 6442450944 | 128 | 128 | 10737418240 | 64 | | 2022-07-10 12:58:39.276495 | 2022-07-10 12:58:39.276495 | 1027 | unit2 | 4 | 4 | 8589934592 | 8589934592 | 128 | 128 | 21474836480 | 64 | +----------------------------+----------------------------+----------------+--------------------------------------+---------+---------+--------------+--------------+----------+----------+---------------+---------------------+
查詢結果顯示,
unit1
資源單元 CPU、記憶體使用的分別是 3 C,6 G。
透過以下命令調整
unit1
資源單元 CPU、記憶體的使用大小為 5 c,10 G。
obclient [oceanbase]> ALTER resource unit unit1 max_cpu =5,min_cpu =5 ,memory_size ='10G'; Query OK, 0 rows affected obclient [oceanbase]> SELECT * FROM oceanbase.__all_unit_config; +----------------------------+----------------------------+----------------+-----------------+---------+---------+-------------+---------------+----------+----------+-------------+ | gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | memory_size | log_disk_size | max_iops | min_iops | iops_weight | +----------------------------+----------------------------+----------------+-----------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 2022-09-29 17:07:14.647714 | 2022-09-29 17:07:14.647714 | 1 | sys_unit_config | 2.5 | 2.5 | 8589934592 | 8589934592 | 25000 | 25000 | 2 | | 2022-09-29 18:27:21.231880 | 2022-09-30 10:53:49.522260 | 1004 | unit1 | 5 | 5 | 10737418240 | 51539607552 | 80000 | 80000 | 8 | +----------------------------+----------------------------+----------------+-----------------+---------+---------+-------------+---------------+----------+----------+-------------+
如上所示,租戶配置的調整是線上立即生效的,調整成功後,
unit1
的 CPU、記憶體為 5 c,10 G。OceanBase 資料庫透過核心的虛擬化技術,在變更配置後租戶的 CPU 和記憶體資源可以立即生效,無需資料遷移或者切換,對業務無感知。
透過檢視
DBA_OB_UNITS
資訊,您可以獲取到資源單元、資源池、租戶在叢集裡的對應資訊及 CPU、記憶體資訊。
obclient [oceanbase]> SELECT * FROM DBA_OB_UNITS;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026075/viewspace-2932347/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OceanBase學習之路54|如何配置多租戶管理?
- OceanBase學習之路53|多租戶管理引數如何設定?
- OceanBase學習之路6|透過 Obclient 連線 OceanBase 租戶client
- OceanBase學習之路7|透過 MySQL 客戶端連線 OceanBase 租戶MySql客戶端
- OceanBase學習之路11|體驗 DDL 新特性(Oracle 模式)Oracle模式
- OceanBase學習之路12|體驗 DDL 新特性(MySQL 模式)MySql模式
- OceanBase學習之路40|如何將資源池分配給租戶?
- OceanBase學習之路15|體驗 Operational OLAP
- Oracle多租戶特性的常用操作Oracle
- OceanBase學習之路16|體驗 OceanBase 資料庫熱點行更新能力資料庫
- Oracle 20C 多租戶_新特性Oracle
- OceanBase學習之路14|體驗並行匯入 & 資料壓縮並行
- 多租戶
- 2 多租戶體系結構概述
- 多租戶軟體開發架構架構
- 【多租戶技術】
- Oracle 18c新特性:多租戶艦隊 CDB FleetOracle
- Oracle 18c新特性詳解-多租戶專題Oracle
- MaxCompute多租戶資料安全體系
- 強化學習-學習筆記13 | 多智慧體強化學習強化學習筆記智慧體
- 技術分享 | OceanBase 資源及租戶管理
- 技術分享 | OceanBase 租戶延遲刪除
- OceanBase學習之路9|連線方式概述
- 1.1. 關於多租戶體系結構
- OceanBase學習之路3 |SpringJDBC 連線示例SpringJDBC
- Part II 配置和管理多租戶環境概述-Oracle多租戶管理員指南Oracle
- 如何理解多租戶架構?架構
- HBase多租戶-Namespace Quota管理namespace
- Python學習之路13-記分Python
- 1.2. 多租戶體系結構的優點
- oracle 12c 多租戶體系結構概念Oracle
- 大資料體系下的多租戶管理方案大資料
- OceanBase 原始碼解讀(五):租戶的一生原始碼
- OceanBase學習之路5|C 應用程式連線 OceanBase 資料庫資料庫
- OceanBase學習之路8|Java 應用程式連線 OceanBase 資料庫Java資料庫
- OceanBase學習之路4|SpringBoot 連線示例Spring Boot
- OceanBase學習之路10|C 相關 API 介紹API
- OceanBase學習之路38|如何合併資源池?