GDN基礎版的從叢集通過跨地區路由將寫請求轉寄至主叢集,當主從叢集物理距離較遠時,寫入延遲較大。GDN多寫版提供表級多寫方案,各子叢集可對其擁有寫入權限的表執行本地寫入,實現讀寫就近處理,有效降低跨地區寫入延遲。
PolarDB GDN多寫版目前處於灰階發布階段。如需使用,可通過DingTalk搜尋群號入群諮詢。
DingTalk群號:30245017864
工作原理
GDN多寫版深度融合PolarDB的物理複製技術,構建面向跨地區部署的表級多寫能力。核心機制如下:
表級寫入權限歸屬:每張表的寫入許可權嚴格歸屬於唯一的子叢集,確保同一時刻僅有一個子叢集可對該表執行寫操作。
本地寫入:各子叢集可對其擁有寫入權限的表執行本地寫入,實現低延遲、高吞吐的資料更新。
全域資料同步:所有資料變更通過高效能的物理複製鏈路即時同步至其他子叢集,確保全域資料一致性。
全量資料可讀:所有子叢集均可直接讀取全量表的最新資料,支援跨地區情境下的本地讀訪問。
以三個子叢集(中國(香港)、新加坡、法蘭克福)為例:
在中國(香港)子叢集建立 Table A,其寫入權限預設歸屬中國(香港)子叢集。
在新加坡子叢集建立 Table B,其寫入權限歸屬新加坡子叢集。
在法蘭克福子叢集建立 Table C,其寫入權限歸屬法蘭克福子叢集。
中國(香港)子叢集對 Table A 的所有寫操作直接作用於本機資料,同時通過物理複製即時接收來自新加坡和法蘭克福子叢集同步的 Table B 和 Table C 的資料變更。因此,中國(香港)子叢集不僅能高效執行本地寫入(Table A),還可直接讀取所有表(Table A、Table B、Table C)的最新資料。新加坡和法蘭克福子叢集同理。
適用範圍
您的叢集版本需為MySQL 8.0.2。
建立GDN多寫版
申請使用:PolarDB GDN多寫版目前處於灰階發布階段。如需使用,可通過DingTalk搜尋群號入群諮詢。DingTalk群號:30245017864
建立與管理全球資料庫網路:選擇符合適用範圍的一個叢集作為全球資料庫網路(GDN)的主叢集。
重要建立GDN多寫版過程中,主叢集會執行一次重啟。
添加與管理從叢集:前往PolarDB購買頁,為上述建立的全球資料庫網路(GDN)添加相應的從叢集。
串連全球資料庫網路:在GDN中,每個子叢集(主叢集和從叢集)均提供獨立的叢集地址。您可以根據應用所在的地區,串連就近的叢集地址以實現訪問。此外,GDN還提供了一個全域網域名稱,這不僅能夠實現就近訪問,還能在主叢集切換後保持網域名稱不變。
根據業務需求,在指定地區的子叢集中建立對應的表,以實現各子叢集對其擁有寫入權限的表執行本地寫入,實現讀寫就近處理,有效降低跨地區寫入延遲。
管理表的寫入權限
在某一子叢集上建立表時,預設該子叢集即獲得該表的寫入許可權。每張表有且僅有一個子叢集持有其寫入權限,同時所有子叢集預設具備對該表的唯讀訪問能力。
轉移寫入權限
通過以下DDL命令可將表的寫入權限在子叢集間動態轉移:
命令 | 說明 |
| 釋放當前子叢集對錶的寫入權限。執行後,當前子叢集對該表變為唯讀狀態。 |
| 擷取表的寫入權限至當前子叢集。執行前需先在原子叢集上釋放該表的寫入權限。 |
查看寫入權限歸屬
通過SHOW CREATE TABLE命令的輸出可判斷當前子叢集是否擁有該表的寫入權限:
輸出中包含
/* GDN_REMOTE */標籤:該表的寫入權限歸屬於其他子叢集,當前子叢集為唯讀狀態。輸出中不包含
/* GDN_REMOTE */標籤:當前子叢集擁有該表的寫入權限。
操作樣本
以下樣本示範如何將在中國(香港)子叢集建立的表t_A的寫入權限轉移到新加坡子叢集。
在中國(香港)子叢集建立表並確認寫入權限歸屬。
-- 在中國(香港)子叢集建立表 CREATE TABLE t_A (id INT PRIMARY KEY); -- 查看錶結構,不包含 GDN_REMOTE 標籤,說明寫入權限在當前子叢集 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8在中國(香港)子叢集釋放表的寫入權限。
ALTER TABLE t_A GDN_RELEASE; -- 再次查看,輸出中包含 GDN_REMOTE 標籤,說明寫入權限已釋放 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) /* GDN_REMOTE */ ENGINE=InnoDB DEFAULT CHARSET=utf8在新加坡子叢集擷取表的寫入權限。
ALTER TABLE t_A GDN_FETCH; -- 查看錶結構,不包含 GDN_REMOTE 標籤,說明寫入權限已轉移至當前子叢集 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8在法蘭克福子叢集查看,確認該表仍為唯讀狀態。
-- 輸出中包含 GDN_REMOTE 標籤,說明寫入權限不在當前子叢集 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) /* GDN_REMOTE */ ENGINE=InnoDB DEFAULT CHARSET=utf8