OB-租戶(Tenant)管理


概述

租戶的概念類似於傳統數據庫的數據庫實例。租戶下可以建立數據庫,在租戶的數據庫下可以建立表。

支持租戶級別的轉儲、租戶級別的分區主切換和租戶級別的擴容縮容

支持兩種類型租戶

  • MySQL 租戶

  • Oracle 租戶

OceanBase 集群初始內置了一個系統租戶 sys, 可以用來管理 OceanBase 集群。

新建租戶

只有用 root 用戶連接到 sys 租戶(root@sys)才能執行 CREATE TENANT 命令去創建租戶。創建新租戶后,可以指定創建租戶的類型和白名單。

語法

CREATE TENANT [IF NOT EXISTS] tenantname 
     [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…]) 
|PRIMARY_ZONE [=] zone  
|DEFAULT TABLEGROUP [=] {NULL | tablegroup}
|RESOURCE_POOL_LIST [=](poolname [, poolname…])
|LOGONLY_REPLICA_NUM [=] num
|LOCALITY [=] 'locality description'

opt_set_sys_var:
{ SET | SET VARIABLES | VARIABLES } system_var_name = expr [,system_var_name = expr] ...

說明

  • 如果要創建的租戶名已存在,並且沒有指定 IF NOT EXISTS,則會出現錯誤。
  • 租戶名的合法性和變量名一致,最長 30 個字符,字符只能是大小寫英文字母、數字和下划線,而且必須以字母或下划線開頭,並且不能是 OceanBase 數據庫的關鍵字。
  • 在租戶下可以指定資源池。
  • RESOURCE_POOL_LIST 為創建租戶時的必填項。
  • CREATE TENANT 命令中的 RESOURCE_POOL_LIST 中,暫時僅支持一個資源池。

示例

配置說明

  • primary_zone 指該租戶的表的分區 Leader 所在的 Zone ,例如,primary_zone ='zone1; zone2, zone3' 表示該租戶的表的分區 Leader 在 zone1 上, 這時通過分號來分隔。
  • zone2zone3 通過逗號分割,表示 zone2zone3 是同一優先級,但是比 zone1 優先級低。
  • primary_zone 設置時,其值可以為 RANDOM(必須大寫),表示隨機選擇最高優先級內的任一一個 Zone 作為 Primary Zone。

創建mysql租戶

創建名為 test_tenant 的一個 3 副本的 MySQL 租戶(創建新租戶默認是 MySQL 租戶)

CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1');

-- 設置遠程訪問客戶端
ALTER TENANT test_tenant SET VARIABLES ob_tcp_invited_nodes='%';

創建oracle租戶

創建名為 test_tenant 的一個 3 副本 Oracle 租戶。通過參數 ob_compatibility_mode 設置租戶模式,並且必須使用 OBClient 或 ODC 連接 Oracle 租戶進行創建。

CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1') SET ob_compatibility_mode='oracle';

創建可從遠程客戶端IP地址訪問OceanBase數據庫的租戶

創建租戶后,直接通過修改變量 ob_tcp_invited_nodes 的值為 % 以便允許任何客戶端 IP 連接該租戶。如果不調整 ob_tcp_invited_nodes 的值,則默認租戶的連接方式為只允許本機的 IP 連接數據庫。

CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1') SET ob_tcp_invited_nodes='%';

注意事項

普通租戶的內存最小規格必須大於等於 5 GB,否則創建租戶失敗。如果希望建立租戶進行非常簡單的功能測試,可以修改參數 alter system __min_full_resource_pool_memory 的值為 1073741824 來允許以最小 1 GB 內存的規格創建租戶。

alter system __min_full_resource_pool_memory=1073741824;

查看租戶信息

在 OBClient 中使用 sys 租戶登錄集群

查看當前集群的租戶信息

SELECT * FROM oceanbase.gv$tenant;

image-20210830095112109

查看當前租戶

SHOW TENANT;

查看租戶白名單

系統變量 ob_tcp_invited_nodes 用於設置租戶的 IP 白名單,是租戶全局的白名單限制參數。默認值為 127.0.0.1,::1,表示僅允許本機的 IP 連接該租戶。

查看該變量確認白名單設置

SHOW VARIABLES LIKE 'ob_tcp_invited_nodes';

值為 %,表示允許任何客戶端 IP 連接該租戶

系統變量配置規則

ob_tcp_invited_nodes 用於設置租戶的 IP 白名單,支持百分號(%) 、短橫線(_) 和 IP(多個 IP 之間用逗號分隔),支持 IP 列表匹配、掩碼匹配和模糊匹配。

租戶會話管理

查看租戶會話

-- 查看租戶當前會話
SHOW PROCESSLIST;

image-20210830095211713

終止租戶會話

KILL session_id;
-- 或者
KILL CONNECTION session_id;

修改租戶

可以通過 SQL 語句修改租戶的信息,包括修改租戶名、副本數、Zone 列表、主 Zone 以及系統變量值等。

語法

ALTER TENANT {tenant_name | ALL}
    [SET] [tenant_option_list] [opt_global_sys_vars_set]

tenant_option_list:
    tenant_option [, tenant_option ...]

tenant_option:
            COMMENT [=]'string' 
            |{CHARACTER SET | CHARSET} [=] charsetname 
            |COLLATE [=]  collationname 
            |REPLICA_NUM [=] num 
            |ZONE_LIST [=] (zone [, zone…]) 
            |PRIMARY_ZONE [=] zone 
            |RESOURCE_POOL_LIST [=](poolname [, poolname…]) 
            |DEFAULT TABLEGROUP [=] {NULL | tablegroupname}
            |{READ ONLY | READ WRITE}
      |LOGONLY_REPLICA_NUM [=] num
      |LOCALITY [=] 'locality description'
      |LOCK|UNLOCK;
      
opt_global_sys_vars_set:
      VARIABLES system_var_name = expr [,system_var_name = expr] ...

鎖定租戶

租戶被鎖定后,不能在該租戶上創建新的連接,已有的鏈接保持不變。

語法

ALTER TENANT tenant_name LOCK;

刪除租戶

刪除租戶后,租戶下的數據庫和表也同時被刪除。但是租戶使用的資源配置不會被刪除。資源配置可以繼續給其他租戶使用。

對於主備庫配置場景,僅支持在主集群上刪除租戶,不支持在備集群上執行租戶刪除操作。

語法

DROP TENANT tenant_name [FORCE]
-- 或者
DROP TENANT tenant_name PURGE; 

說明

  • 對於 DROP TENANT 操作:

    • 當租戶開啟回收站功能時,DROP TENANT 操作表示刪除的租戶會進入回收站。租戶實際占用的空間並沒有釋放,只是不能再向該租戶建立新的連接。對於回收站中的租戶,后續您可以通過租戶級回收站功能進一步刪除或恢復該租戶

      • 執行 FLASHBACK 時,可以使用租戶原始的名稱,也可以使用回收站中的名稱,回收站中的名稱全局唯一,因此使用回收站中的名稱,可以明確恢復的是哪個租戶。當多個租戶存在相同的原始名稱時,此時恢復的租戶是這些租戶中最后進入回收站中的租戶。

        -- 查看回收站中租戶信息
        SHOW RECYCLEBIN;
        
        --將系統租戶回收站中的 tenant_name 閃回為正常租戶
        FLASHBACK TENANT <tenant_name> TO BEFORE DROP;
        
      • 執行 PURGE TENANT 時,同樣可以使用原始名稱和回收站中的名稱。與 FLASHBACK 不同,PURGE TENANT 時,如果多個原始名稱相同,則刪除的是最早進入回收站中的租戶。

        -- 將租戶 tenant_name 從回收站中徹底清除
        PURGE TENANT tenant_name;
        
        -- 將回收站中的全部對象全部徹底清除
        PURGE RECYCLEBIN;
        
    • 當租戶關閉回收站功能時,DROP TENANT 操作表示延遲刪除租戶,后台線程會進行 GC(Garbage Collection)動作,租戶的信息仍然可以通過內部表查詢。租戶具體延遲刪除的時間由配置項 schema_history_expire_time 控制,默認為 7 天

  • DROP TENANT PURGE 操作表示僅延遲刪除租戶,且無論回收站功能是否開啟,刪除的租戶均不進入回收站。

  • FORCE 參數表示無論回收站功能是否開啟,均可以立刻刪除租戶。

示例

延遲刪除租戶 t1,刪除的租戶可進入回收站

 DROP TENANT t1;

延遲刪除租戶 t1,刪除的租戶不進入回收站

DROP TENANT t1 PURGE;

立刻刪除租戶 t1

DROP TENANT t1 FORCE;

管理變量

分類

租戶的變量分為 Global 級別和 Session 級別。

  • Session 級別的變量繼承自 Global 級別的變量。同時,Session 建立后可以設定 Session 級別的變量。Session 級別的變量在 Session 中覆蓋 Global 級別的變量。

查看變量

查詢 Session/Global 級別變量語句的語法

SHOW [GLOBAL] VARIABLES [SHOW_VARIABLES_OPTS]

SHOW_VARIABLES_OPTS:
[LIKE 'pattern' | WHERE expr]

示例

SHOW VARIABLES LIKE 'ob_query_timeout';
SHOW GLOBAL VARIABLES WHERE variable_name LIKE 'ob_query_timeout';

image-20210830095451458

sys 租戶可以通過內部表 __all_virtual_sys_variable查詢其他所有普通租戶的 Global 變量。

select * from __all_virtual_sys_variable;

image-20210830095749934

如果連接 sys 租戶后再切換到普通租戶,此時查詢的 Session 級別變量仍然是 sys 租戶的 Session 級別的變量。查詢的 Global 級別的變量是切換后普通租戶的 Global 級別變量。

設置變量

設置 Session 級別的變量僅對當前 Session 有效,對其他 Session無效。設置 Global 級別的變量對當前 Session 無效,需要重新登錄建立新的 Session 才會生效。

語法

SET [GLOBAL] VARIABLE_NAME = 'VALUE'

示例

SET ob_query_timeout = 20000000;
SET GLOBAL ob_query_timeout = 20000000;
說明

變量中類型為 INT, 並且在 SHOW VARIABLE命令中顯示 ON/OFF或者 True/False的變量,可以通過如下任意方法設置值:

SET @@foreign_key_checks = ON;

SET @@foreign_key_checks = 1;

SET @@foreign_key;

以上三種方式的 Session 級別變量的設置是等效的。

image-20210830100008297


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM