使用 CQL 创建和管理多区域表 - Amazon Keyspaces(Apache Cassandra 兼容)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 CQL 创建和管理多区域表

您可以使用 Cassandra 查询语言 (CQL) 在 Amazon Keyspaces 中创建和管理多区域密钥空间和表。

本节提供了如何使用 CQL 创建和管理多区域表的示例。您在多区域密钥空间中创建的所有表都会自动从密钥空间继承多区域设置。有关 CQL 的更多信息,请参阅 Amazon Keyspaces C QL 语言参考。

有关支持的配置和功能的更多信息,请参阅 Amazon Keyspaces 多区域复制使用说明

创建多区域键空间 (CQL)

要创建多区域密钥空间,请使用指定NetworkTopologyStrategy Amazon Web Services 区域 要在其中复制密钥空间。您必须包括您当前的区域和至少一个其他区域。下面是一个示例 CQL 语句。

CREATE KEYSPACE mykeyspace WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'us-east-1':'3', 'ap-southeast-1':'3','eu-west-1':'3' };

键空间中的所有表都使用与键空间相同的复制策略。您无法更改表级别的复制策略。

NetworkTopologyStrategy— 每个区域的重复系数为三,因为默认情况下,Amazon Keyspaces 会在同一个Amazon Web Services 区域区域内的三个可用区之间复制数据。

注意

当您创建多区域键空间时,Amazon Keyspaces 会在您的账户中创建一个名为 AWSServiceRoleForAmazonKeyspacesReplication 的服务相关角色。此角色允许 Amazon Keyspaces 代表您将写入复制到多区域表的所有副本。要了解更多信息,请参阅使用角色进行 Amazon Keyspaces 多区域复制

您可以使用 CQL 语句在system_multiregion_info密钥空间中查询tables表,以编程方式列出您指定的多区域表的区域和状态。下面是一个代码示例。

SELECT * from system_multiregion_info.tables WHERE keyspace_name = 'mykeyspace' AND table_name = 'mytable';

该语句的输出如下所示:

keyspace_name | table_name | region | status ----------------+----------------+----------------+-------- mykeyspace | mytable | us-east-1 | ACTIVE mykeyspace | mytable | ap-southeast-1 | ACTIVE mykeyspace | mytable | eu-west-1 | ACTIVE

使用默认设置创建多区域表 (CQL)

要使用默认设置创建多区域表,可以使用以下示例。

CREATE TABLE mykeyspace.mytable(pk int, ck int, PRIMARY KEY (pk, ck)) WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST' }, 'point_in_time_recovery':{ 'status':'enabled' }, 'encryption_specification':{ 'encryption_type':'AWS_OWNED_KMS_KEY' }, 'client_side_timestamps':{ 'status':'enabled' } };

创建具有预置容量模式和 auto Scaling (CQL) 的多区域表

要使用 auto Scaling 在预配置模式下创建多区域表,必须先通过CUSTOM_PROPERTIES为表定义来指定容量模式。指定预配置容量模式后,您可以使用配置表的 auto Scaling 设置。AUTOSCALING_SETTINGS

有关 auto Scaling 设置、目标跟踪策略、目标值和可选设置的详细信息,请参阅使用 CQL 创建具有自动缩放功能的新表

创建多区域表时,您还可以为表的每个副本指定不同的读取容量和读取 auto Scaling 设置。您指定的设置会覆盖表中指定内容的常规设置。 Amazon Web Services 区域但是,写入容量在所有副本之间保持同步,以确保有足够的容量在所有区域之间复制写入。

要定义特定区域中表副本的读取容量,您可以将以下参数配置为表的一部分replica_updates

  • 区域

  • 预配置的读取容量单位(可选)

  • 读取容量的自动缩放设置(可选)

以下示例显示了预配置模式下多区域表的CREATE TABLE语句。一般的写入和读取容量 auto scaling 设置相同。但是,在向上或向下扩展表的读取容量之前,read auto scaling 设置指定了 60 秒的额外冷却时间。此外,美国东部区域(弗吉尼亚北部)的读取容量 auto scaling 设置高于其他副本的读取容量 auto scaling 设置。此外,目标值设置为 70% 而不是 50%。

CREATE TABLE mykeyspace.mytable(pk int, ck int, PRIMARY KEY (pk, ck)) WITH CUSTOM_PROPERTIES = { 'capacity_mode': { 'throughput_mode': 'PROVISIONED', 'read_capacity_units': 5, 'write_capacity_units': 5 } } AND AUTOSCALING_SETTINGS = { 'provisioned_write_capacity_autoscaling_update': { 'maximum_units': 10, 'minimum_units': 5, 'scaling_policy': { 'target_tracking_scaling_policy_configuration': { 'target_value': 50 } } }, 'provisioned_read_capacity_autoscaling_update': { 'maximum_units': 10, 'minimum_units': 5, 'scaling_policy': { 'target_tracking_scaling_policy_configuration': { 'target_value': 50, 'scale_in_cooldown': 60, 'scale_out_cooldown': 60 } } }, 'replica_updates': { 'us-east-1': { 'provisioned_read_capacity_autoscaling_update': { 'maximum_units': 20, 'minimum_units': 5, 'scaling_policy': { 'target_tracking_scaling_policy_configuration': { 'target_value': 70 } } } } } };

更新多区域表 (CQL) 的预配置容量和 auto scaling 设置

您可以使用ALTER TABLE更新现有表的容量模式和 auto Scaling 设置。如果您要更新当前处于按需容量模式的表,capacity_mode则为必填项。如果您的表已处于预置容量模式,则可以省略此字段。

有关 auto Scaling 设置、目标跟踪策略、目标值和可选设置的详细信息,请参阅使用 CQL 创建具有自动缩放功能的新表

在同一语句中,您还可以通过更新表的replica_updates属性来更新特定区域中表副本的读取容量和自动缩放设置。下面是一个示例语句。

ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES = { 'capacity_mode': { 'throughput_mode': 'PROVISIONED', 'read_capacity_units': 1, 'write_capacity_units': 1 } } AND AUTOSCALING_SETTINGS = { 'provisioned_write_capacity_autoscaling_update': { 'maximum_units': 10, 'minimum_units': 5, 'scaling_policy': { 'target_tracking_scaling_policy_configuration': { 'target_value': 50 } } }, 'provisioned_read_capacity_autoscaling_update': { 'maximum_units': 10, 'minimum_units': 5, 'scaling_policy': { 'target_tracking_scaling_policy_configuration': { 'target_value': 50, 'scale_in_cooldown': 60, 'scale_out_cooldown': 60 } } }, 'replica_updates': { 'us-east-1': { 'provisioned_read_capacity_autoscaling_update': { 'maximum_units': 20, 'minimum_units': 5, 'scaling_policy': { 'target_tracking_scaling_policy_configuration': { 'target_value': 70 } } } } } };

查看多区域表 (CQL) 的预配置容量和 auto Scaling 设置

要查看多区域表的 auto Scaling 配置,请使用以下命令。

SELECT * FROM system_multiregion_info.autoscaling WHERE keyspace_name = 'mykeyspace' AND table_name = 'mytable';

此命令的输出如下所示:

keyspace_name | table_name | region | provisioned_read_capacity_autoscaling_update | provisioned_write_capacity_autoscaling_update ----------------+------------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- mykeyspace | mytable | ap-southeast-1 | {'minimum_units': 5, 'maximum_units': 10, 'scaling_policy': {'target_tracking_scaling_policy_configuration': {'scale_out_cooldown': 60, 'disable_scale_in': false, 'target_value': 50, 'scale_in_cooldown': 60}}} | {'minimum_units': 5, 'maximum_units': 10, 'scaling_policy': {'target_tracking_scaling_policy_configuration': {'scale_out_cooldown': 0, 'disable_scale_in': false, 'target_value': 50, 'scale_in_cooldown': 0}}} mykeyspace | mytable | us-east-1 | {'minimum_units': 5, 'maximum_units': 20, 'scaling_policy': {'target_tracking_scaling_policy_configuration': {'scale_out_cooldown': 60, 'disable_scale_in': false, 'target_value': 70, 'scale_in_cooldown': 60}}} | {'minimum_units': 5, 'maximum_units': 10, 'scaling_policy': {'target_tracking_scaling_policy_configuration': {'scale_out_cooldown': 0, 'disable_scale_in': false, 'target_value': 50, 'scale_in_cooldown': 0}}} mykeyspace | mytable | eu-west-1 | {'minimum_units': 5, 'maximum_units': 10, 'scaling_policy': {'target_tracking_scaling_policy_configuration': {'scale_out_cooldown': 60, 'disable_scale_in': false, 'target_value': 50, 'scale_in_cooldown': 60}}} | {'minimum_units': 5, 'maximum_units': 10, 'scaling_policy': {'target_tracking_scaling_policy_configuration': {'scale_out_cooldown': 0, 'disable_scale_in': false, 'target_value': 50, 'scale_in_cooldown': 0}}}

关闭多区域表 (CQL) 的自动缩放

您可以使用关闭ALTER TABLE现有表的 auto 缩放。请注意,您无法为单个表副本禁用 auto 缩放。

在以下示例中,针对表的读取容量关闭了 auto Scaling。

ALTER TABLE mykeyspace.mytable WITH AUTOSCALING_SETTINGS = { 'provisioned_read_capacity_autoscaling_update': { 'autoscaling_disabled': true } };
注意

要删除 Application Auto Scaling 使用的服务相关角色,您必须在所有 Amazon Web Services 区域中禁用账户中所有表的自动扩缩。

手动设置多区域表的预配置容量 (CQL)

如果您必须关闭多区域表的 auto Scaling,则可以使用ALTER TABLE手动为副本表配置表的读取容量。

ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES = { 'capacity_mode': { 'throughput_mode': 'PROVISIONED', 'read_capacity_units': 1, 'write_capacity_units': 1 }, 'replica_updates': { 'us-east-1': { 'read_capacity_units': 2 } } };
注意

我们建议对使用预配置容量的多区域表使用 auto scaling。有关更多信息,请参阅 使用 Amazon Keyspaces 中的多区域表