更新全局表副本配置

更新时间:
复制 MD 格式

Java SDK 可更新全局表中单个物理表副本的写入权限或主资质。

前提条件

安装Tablestore Java SDK并初始化客户端。更新全局表副本配置需使用 5.17.7 及以上版本。

功能说明

调用 updateGlobalTable 方法更新全局表中的单个物理表副本。每次请求通过地域、实例和表名称定位副本,并至少设置 writableprimaryEligible 中的一项:writable 适用于主备模式和多活模式,用于控制副本是否接受写入;primaryEligible 仅适用于主备模式,用于将副本标记为具备主资质。

public UpdateGlobalTableResponse updateGlobalTable(UpdateGlobalTableRequest request) throws TableStoreException, ClientException
重要

主备切换过程中,在关闭原主副本的写入权限前,原主副本和目标副本会同时可写,存在数据不一致风险。请先确认数据同步完成,并将应用写入 Endpoint 切换到目标副本,再尽快关闭原主副本的写入权限。完整操作流程请参见全局表

以下示例将北京地域的备副本标记为可写并具备主资质。数据同步和应用写入链路准备完成后,关闭杭州地域原主副本的写入权限,完成主副本切换。

String globalTableId = "gt-01234567-89ab-cdef-0123-456789abcdef";
String globalTableName = "example_table";

GlobalTableTypes.UpdatePhyTable newPrimary =
        new GlobalTableTypes.UpdatePhyTable(
                "cn-beijing", "example-replica-instance", globalTableName);
newPrimary.setWritable(true);
newPrimary.setPrimaryEligible(true);
UpdateGlobalTableResponse prepareResponse = client.updateGlobalTable(
        new UpdateGlobalTableRequest(globalTableId, globalTableName, newPrimary));
System.out.println("Prepare request ID: " + prepareResponse.getRequestId());

// 确认数据同步和应用写入链路准备完成后再继续。
GlobalTableTypes.UpdatePhyTable oldPrimary =
        new GlobalTableTypes.UpdatePhyTable(
                "cn-hangzhou", "example-primary-instance", globalTableName);
oldPrimary.setWritable(false);
UpdateGlobalTableResponse completeResponse = client.updateGlobalTable(
        new UpdateGlobalTableRequest(globalTableId, globalTableName, oldPrimary));
System.out.println("Complete request ID: " + completeResponse.getRequestId());

请求成功后,查询全局表信息,确认目标副本已成为可写的主副本,原主副本已成为只读的备副本。

参数说明

UpdateGlobalTableRequest 包含以下参数。

名称

类型

说明

globalTableId(必选)

String

全局表 ID。未记录 ID 时,可以按物理表定位全局表,具体用法请参见查询全局表信息

globalTableName(必选)

String

全局表名称,必须与基础表名称相同。

phyTable(必选)

GlobalTableTypes.UpdatePhyTable

要更新的物理表副本及其配置。每次请求只能更新一个副本。

物理表副本配置

phyTable 的类型为 GlobalTableTypes.UpdatePhyTable,包含以下参数。writableprimaryEligible 单独均为可选参数,但必须至少设置一项,否则服务端返回 OTSParameterInvalid

名称

类型

说明

regionId(必选)

String

要更新的物理表所在地域的 ID,例如 cn-beijing

instanceName(必选)

String

要更新的物理表所属实例的名称。

tableName(必选)

String

要更新的物理表名称。全局表中的物理表名称相同。

writable(可选)

Boolean

物理表是否接受写入。设置为 false 后,通过该物理表所属实例的 Endpoint 执行写操作会失败。

primaryEligible(可选)

Boolean

主备模式下,物理表是否具备主资质。将备副本设置为可写且具备主资质后,其角色变为 primary_eligible;关闭原主副本写入权限后,该副本成为 primary。多活模式无需设置此参数。