PolarDB MySQL版提供了多租戶模式,允許多個租戶在同一叢集下共用計算資源和儲存資源,同時保證各租戶之間的資料隔離和資源隔離。各租戶僅能訪問其自身的資料,不會出現資源爭搶現象,從而保證業務的穩定運行。
技術原理
DB_1與user_1雖然在系統租戶、普通租戶A及普通租戶B中均存在,但它們是不同的資料庫和使用者,僅名稱相同。
術語
租戶:租戶(tenant)為實現多租戶模式所提出的概念,租戶的層級結構在一個資料庫叢集之下,在資料庫與使用者之上。租戶分為系統租戶和普通租戶:
系統租戶:系統租戶是為適應原有模式下的使用者而設立的。在資料庫叢集中,原有的資料庫和使用者預設歸屬於系統租戶。當通過系統租戶下的使用者串連資料庫時,若該使用者具備相應的資料庫存取權限,則可以訪問所有租戶下的資料庫。
普通租戶:普通租戶需在系統租戶下進行建立。普通租戶之間的資料庫與使用者完全隔離,無法相互訪問,並且普通租戶也無法訪問系統租戶下的資料庫。在進行CPU資源調度時,普通租戶根據min_cpu的值是否大於0,將其分為獨佔型租戶和共用型租戶。
獨佔型租戶:
min_cpu>0,需要保證任何時刻的CPU資源不小於min_cpu。共用型租戶:
min_cpu=0。
獨佔型租戶和共用型租戶可以通過調整
min_cpu的值進行相互轉換。
資源配置:資源配置(resource_config)是為了實現各租戶之間資源隔離與資源調度所提出的概念,一個資源配置描述了一個租戶下能夠使用的資源。當前僅支援對CPU資源進行隔離以及調度。
使用前提
若要開啟多租戶模式,您的叢集需滿足如下條件:
資料庫引擎為MySQL 8.0.2及以上,產品版本為企業版,系列為叢集版,且叢集的節點規格保持一致。
多租戶模式目前處於灰階發布階段。如有需求,請通過DingTalk群聯絡相關工作人員來開啟該功能。功能開啟後,您需要重啟目的地組群才會生效。
DingTalk群號為:59535005981。
注意事項
暫不支援租戶下的Binlog資訊同步。
暫不支援對使用者部分撤銷許可權(Partial Revoke)。
快速體驗
開啟單機多租戶模式。
說明多租戶模式目前處於灰階發布階段。如有需求,請通過DingTalk群聯絡相關工作人員來開啟該功能。功能開啟後,您需要重啟目的地組群才會生效。
DingTalk群號為:59535005981。
使用高許可權帳號串連資料庫。
建立資源配置
r1和r2。CREATE resource_config r1 min_cpu 1 max_cpu 2; CREATE resource_config r2 min_cpu 1 max_cpu 4;說明請根據您叢集的節點規格來填寫min_cpu和max_cpu。
任意一個租戶的
min_cpu不超過當前叢集節點規格的核心數-1,需要為系統租戶預留至少1個CPU。否則,在建立租戶時,租戶與資源配置會綁定失敗。
建立租戶
tn1和tn2。建立租戶時需綁定上述建立的資源配置。CREATE tenant tn1 resource_config r1; CREATE tenant tn2 resource_config r2;說明需要保證所有租戶的資源配置中
min_cpu之和不能超過當前叢集節點規格中的核心數-1。建立使用者
u1和u2,資料庫db1和db2。-- 在租戶 tn1 下建立使用者 u1 CREATE USER 'u1@tn1' IDENTIFIED BY 'password'; -- 在租戶 tn1 下建立資料庫 db1 CREATE DATABASE `db1@tn1`; -- 在租戶 tn2 下建立使用者 u2 CREATE USER 'u2@tn2' IDENTIFIED BY 'password'; -- 在租戶 tn2 下建立資料庫 db2 CREATE DATABASE `db2@tn2`;說明使用高許可權帳號建立使用者與資料庫時,需在使用者名稱或資料庫名後添加
@租戶名稱尾碼進行操作。對使用者
u1和u2授權。-- 給使用者 u1 授予租戶 tn1 的許可權。 GRANT ALL PRIVILEGES ON `%@tn1`.* TO 'u1@tn1'@'%' WITH GRANT OPTION; -- 給使用者 u2 授予租戶 tn2 的許可權。 GRANT ALL PRIVILEGES ON `%@tn2`.* TO 'u1@tn2'@'%' WITH GRANT OPTION;現在,您可以使用使用者
u1@tn1和u2@tn2來驗證不同租戶之間的資料和資源隔離效果。(可選)查看上述所建立的租戶、使用者及資料庫。
租戶:使用高許可權帳號串連資料庫,並通過
SELECT語句來查看租戶。樣本如下:SELECT * FROM mysql.tenants;使用者:您可以前往PolarDB控制台的頁面查看。
賬戶名不帶
@租戶名稱尾碼的為系統租戶下的使用者。賬戶名帶
@租戶名稱尾碼的為對應租戶下的使用者。
資料庫:您可以前往PolarDB控制台的頁面查看。
資料庫名不帶
@租戶名稱尾碼的為系統租戶下的資料庫。資料庫名帶
@租戶名稱尾碼的為對應租戶下的資料庫。

