全球数据库网络(GDN)多写版使用说明

更新时间:
复制为 MD 格式

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)的最新数据。新加坡和法兰克福子集群同理。

image

适用范围

您的集群版本需为MySQL 8.0.2

创建GDN多写版

  1. 申请使用:PolarDB GDN多写版目前处于灰度发布阶段。如需使用,可通过钉钉搜索群号入群咨询。钉钉群号:30245017864

  2. 创建与管理全球数据库网络:选择符合适用范围的一个集群作为全球数据库网络(GDN)的主集群。

    重要

    创建GDN多写版过程中,主集群会执行一次重启。

  3. 添加与管理从集群:前往PolarDB购买页,为上述创建的全球数据库网络(GDN)添加相应的从集群。

  4. 连接全球数据库网络:在GDN中,每个子集群(主集群和从集群)均提供独立的集群地址。您可以根据应用所在的地域,连接就近的集群地址以实现访问。此外,GDN还提供了一个全局域名,这不仅能够实现就近访问,还能在主集群切换后保持域名不变。

  5. 根据业务需求,在指定地域的子集群中创建对应的表,以实现各子集群对其拥有写权限的表执行本地写入,实现读写就近处理,有效降低跨地域写入延迟。

管理表的写权限

在某一子集群上创建表时,默认该子集群即获得该表的写入权限。每张表有且仅有一个子集群持有其写权限,同时所有子集群默认具备对该表的只读访问能力。

转移写权限

通过以下DDL命令可将表的写权限在子集群间动态转移:

命令

说明

ALTER TABLE <table_name> GDN_RELEASE;

释放当前子集群对表的写权限。执行后,当前子集群对该表变为只读状态。

ALTER TABLE <table_name> GDN_FETCH;

获取表的写权限至当前子集群。执行前需先在原子集群上释放该表的写权限。

查看写权限归属

通过SHOW CREATE TABLE命令的输出可判断当前子集群是否拥有该表的写权限:

  • 输出中包含/* GDN_REMOTE */标签:该表的写权限归属于其他子集群,当前子集群为只读状态。

  • 输出中不包含/* GDN_REMOTE */标签:当前子集群拥有该表的写权限。

操作示例

以下示例演示如何将在中国(香港)子集群创建的表t_A的写权限转移到新加坡子集群。

  1. 在中国(香港)子集群创建表并确认写权限归属。

    -- 在中国(香港)子集群创建表
    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
  2. 在中国(香港)子集群释放表的写权限。

    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
  3. 在新加坡子集群获取表的写权限。

    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
  4. 在法兰克福子集群查看,确认该表仍为只读状态。

    -- 输出中包含 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