GDN基础版的从集群通过跨区域路由将写请求转发至主集群,当主从集群物理距离较远时,写入延迟较大。GDN多写版提供表级多写方案,各子集群可对其拥有写权限的表执行本地写入,实现读写就近处理,有效降低跨地域写入延迟。
PolarDB GDN多写版目前处于灰度发布阶段。如需使用,可通过钉钉搜索群号入群咨询。
钉钉群号: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多写版目前处于灰度发布阶段。如需使用,可通过钉钉搜索群号入群咨询。钉钉群号: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