你当前正在访问 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 中配置多区域群集。

Prerequisites

  • 本文需要 Azure CLI 2.30.0 或更高版本。 如果你使用的是 Azure Cloud Shell,则表示已安装最新版本。
  • 使用 Azure 虚拟网络 与自承载环境或本地环境建立连接。 有关如何将本地环境连接到 Azure 的详细信息,请参阅 将本地网络连接到 Azure

设置网络环境

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

  1. 登录 Azure 门户

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

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

    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. 在美国东部创建第二个虚拟网络,同时使用专用子网:

     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. 将第一个虚拟网络与第二个虚拟网络建立对等互联:

    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. 若要连接两个虚拟网络,请在第二个虚拟网络与第一个虚拟网络之间创建另一个对等互连:

    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
    

    如果添加更多区域,则每个虚拟网络都需要从它对等互连到所有其他虚拟网络,并从所有其他虚拟网络对等互连到它。

  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

    • 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)。 有关详细信息,请参阅 适用于 Apache Cassandra 的 Azure 托管实例的服务级别协议

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

    成功部署可用性区域也会受到特定区域中所有区域中计算资源的可用性。 如果所选产品层或容量在所有区域中不可用,则部署可能会失败。

  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 角色分配仅用于部署目的。 适用于 Apache Cassandra 的 Azure 托管实例在 Azure Cosmos DB 上没有后端依赖项。

清理资源

如果不打算继续使用此托管实例群集,请执行以下步骤将其删除:

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

后续步骤

本快速入门介绍了如何使用 Azure CLI 和 Azure 托管实例 for Apache Cassandra 创建多区域群集。 现在你可开始使用该群集了。