你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure Managed Instance for Apache Cassandra 创建多区域群集

Azure Managed Instance for Apache Cassandra 是针对纯开源 Apache Cassandra 群集的完全托管服务。 该服务还允许根据每个工作负载的具体需求来替代配置,从而在需要时实现最大的灵活性和控制。

本快速入门演示如何使用 Azure CLI 命令在 Azure 中配置多区域群集。

先决条件

  • 本文需要 Azure CLI 2.30.0 或更高版本。 如果你使用的是 Azure Cloud Shell,则表示已安装最新版本。

  • 与自承载环境或本地环境连接的 Azure 虚拟网络。 若要详细了解如何将本地环境连接到 Azure,请参阅将本地网络连接到 Azure 一文。

设置网络环境

由于必须使用 VNet 注入将使用此服务预配的所有数据中心部署到专用子网中,因此请在部署前配置合适的网络对等互连。 对于本快速入门,请创建一个包含两个数据中心的群集,两个数据中心位于两个独立的区域(“美国东部”和“美国东部 2”)。 首先,请为每个区域创建虚拟网络。

  1. 登录 Azure 门户

  2. 创建名为“cassandra-mi-multi-region”的资源组:

    az group create --location eastus2 --name cassandra-mi-multi-region
    
  3. 使用专用子网在美国东部 2 创建第一个 VNet:

    az network vnet create \
      --name vnetEastUs2 \
      --location eastus2 \
      --resource-group cassandra-mi-multi-region \
      --address-prefix 10.0.0.0/16 \
      --subnet-name dedicated-subnet
    
  4. 同样使用专用子网在美国东部创建第二个 VNet:

     az network vnet create \
       --name vnetEastUs \
       --location eastus \
       --resource-group cassandra-mi-multi-region \
       --address-prefix 192.168.0.0/16 \
       --subnet-name dedicated-subnet
    

    注意

    我们显式添加了不同的 IP 地址范围,以确保在对等互连时不会出现错误。

  5. 将第一个 VNet 与第二个 VNet 对等互连:

    az network vnet peering create \
      --resource-group cassandra-mi-multi-region \
      --name MyVnet1ToMyVnet2 \
      --vnet-name vnetEastUs2 \
      --remote-vnet vnetEastUs \
      --allow-vnet-access \
      --allow-forwarded-traffic
    
  6. 若要连接两个 VNet,请在第二个 VNet 和第一个 VNet 之间创建另一个对等互连:

    az network vnet peering create \
      --resource-group cassandra-mi-multi-region \
      --name MyVnet2ToMyVnet1 \
      --vnet-name vnetEastUs \
      --remote-vnet vnetEastUs2 \
      --allow-vnet-access \
      --allow-forwarded-traffic
    

    注意

    如果添加更多区域,则每个 VNet 都需要与所有其他 VNet 进行对等互连。

  7. 检查上一命令的输出。 确保“peeringState”的值现在为“Connected”。 还可以通过运行以下命令来检查此结果:

    az network vnet peering show \
      --name MyVnet1ToMyVnet2 \
      --resource-group cassandra-mi-multi-region \
      --vnet-name vnetEastUs2 \
      --query peeringState
    
  8. 将一些特殊权限应用于这两个虚拟网络。 Azure Managed Instance for Apache Cassandra 需要这些权限。 运行以下命令。 将 <SubscriptionID> 替换为订阅 ID:

    az role assignment create \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs2
    
    az role assignment create     \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs
    

    注意

    上一命令中的 assigneerole 值是固定值。 请完全按照命令中的说明输入这些值。

如果在运行 az role assignment create 时遇到错误,则表明你可能无权运行它。 请与管理员联系以获取权限。

创建多区域群集

  1. 部署群集资源。 将 <Subscription ID> 替换为订阅 ID。 部署可能需要 5-10 分钟的时间:

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    location='eastus2'
    delegatedManagementSubnetId='/subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs2/subnets/dedicated-subnet'
    initialCassandraAdminPassword='myPassword'
    
     az managed-cassandra cluster create \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName \
       --location $location \
       --delegated-management-subnet-id $delegatedManagementSubnetId \
       --initial-cassandra-admin-password $initialCassandraAdminPassword \
       --debug
    
  2. 创建群集资源后,即可创建数据中心。 首先,在美国东部 2 创建数据中心。 将 <SubscriptionID> 替换为订阅 ID。 此操作可能需要长达 10 分钟的时间才能完成:

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    dataCenterName='dc-eastus2'
    dataCenterLocation='eastus2'
    delegatedManagementSubnetId='/subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs2/subnets/dedicated-subnet'
    
     az managed-cassandra datacenter create \
        --resource-group $resourceGroupName \
        --cluster-name $clusterName \
        --data-center-name $dataCenterName \
        --data-center-location $dataCenterLocation \
        --delegated-subnet-id $delegatedManagementSubnetId \
        --node-count 3
    
  3. 在美国东部创建数据中心。 将 <SubscriptionID> 替换为订阅 ID。

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    dataCenterName='dc-eastus'
    dataCenterLocation='eastus'
    delegatedManagementSubnetId='/subscriptions/<SubscriptionID>/resourceGroups/cassandra-mi-multi-region/providers/Microsoft.Network/virtualNetworks/vnetEastUs/subnets/dedicated-subnet'
    virtualMachineSKU='Standard_D8s_v4'
    noOfDisksPerNode=4
    
     az managed-cassandra datacenter create \
       --resource-group $resourceGroupName \
       --cluster-name $clusterName \
       --data-center-name $dataCenterName \
       --data-center-location $dataCenterLocation \
       --delegated-subnet-id $delegatedManagementSubnetId \
       --node-count 3
       --sku $virtualMachineSKU \
       --disk-capacity $noOfDisksPerNode \
       --availability-zone false
    

    注意

    可以从以下可用 SKU 中选择 --sku 的值:

    • Standard_E8s_v4
    • Standard_E16s_v4
    • Standard_E20s_v4
    • Standard_E32s_v4
    • Standard_DS13_v2
    • Standard_DS14_v2
    • Standard_D8s_v4
    • Standard_D16s_v4
    • Standard_D32s_v4

    另请注意,--availability-zone 设置为 false。 若要启用可用性区域,请将此设置为 true。 可用性区域将提高服务的可用性 SLA。 有关详细信息,请参阅 Azure Managed Instance for Apache Cassandra 的 SLA

    警告

    并非所有区域都支持可用性区域。 如果选择不支持可用性区域的区域,部署会失败。 有关支持的区域,请参阅具有可用性区域的 Azure 区域

    可用性区域的成功部署还受限于给定区域内所有区域中的计算资源的可用性。 如果你选择的 SKU 或容量在所有区域中均不可用,则部署可能会失败。

  4. 创建第二个数据中心后,请获取节点状态,验证是否已成功显示所有 Cassandra 节点:

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    
    az managed-cassandra cluster status\
       --cluster-name $clusterName \
       --resource-group $resourceGroupName
    
  5. 使用 CQLSH 连接群集,并使用以下 CQL 查询更新每个密钥空间中的复制策略,使其包含整个群集中的所有数据中心(系统表将自动更新):

    ALTER KEYSPACE "ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'dc-eastus2': 3, 'dc-eastus': 3};
    
  6. 最后,如果要将数据中心添加到已包含数据的群集,则需要运行 rebuild 以复制历史数据。 在本例中,我们假设 dc-eastus2 数据中心已包含数据。 在 Azure CLI 中,请运行以下命令以在新 dc-eastus 数据中心的每个节点上执行 nodetool rebuild,将 <ip address> 替换为节点的 IP 地址:

    az managed-cassandra cluster invoke-command \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --host <ip address> \
      --command-name nodetool --arguments rebuild="" "dc-eastus2"=""
    

    警告

    在应用密钥空间复制更改之前,不应允许应用程序客户端写入新数据中心。 否则,重新生成将不起作用,并且你需要创建支持请求,以便我们的团队能够代表你运行 repair

疑难解答

如果在使用 Azure CLI 将权限应用到虚拟网络时遇到错误,则可以在 Azure 门户中手动应用相同的权限。 例如,错误可能是“无法在‘e5007d2c-4b13-4a74-9b6a-605d99f03501’的图形数据库中找到用户或服务主体”。 有关详细信息,请参阅使用 Azure 门户添加 Azure Cosmos DB 服务主体

注意

Azure Cosmos DB 角色分配仅用于部署目的。 Azure Managed Instanced for Apache Cassandra 对于 Azure Cosmos DB 不存在后端依赖关系。

清理资源

如果不打算继续使用此托管实例群集,请按照以下步骤删除它:

  1. 从 Azure 门户的左侧菜单中选择“资源组”。
  2. 从列表中选择为本快速入门创建的资源组。
  3. 在资源组的“概述”窗格上,选择“删除资源组” 。
  4. 在下一窗口中输入要删除的资源组的名称,然后选择“删除” 。

后续步骤

在本快速入门中,你了解了如何使用 Azure CLI 和 Azure Managed Instance for Apache Cassandra 创建多区域群集。 现在你可开始使用该群集了。