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

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

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

本快速入门演示如何使用 Azure 命令行接口 (CLI) 命令创建包含 Azure 托管实例 for Apache Cassandra 的群集。 它还演示如何创建数据中心,以及如何在数据中心内纵向扩展或缩减节点。

先决条件

重要

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

创建托管实例群集

  1. 登录到 Azure 门户

  2. 在 Azure CLI 中设置订阅 ID:

    az account set --subscription <Subscription_ID>
    
  3. 接下来,在资源组中创建包含专用子网的虚拟网络:

    az network vnet create --name <VNet_Name> --location eastus2 \
      --resource-group <Resource_Group_Name> --subnet-name <Subnet Name>
    

    注意

    部署 Azure Managed Instance for Apache Cassandra 需要 Internet 访问权限。 在限制 Internet 访问权限的环境中,部署将失败。 请确保不会阻止虚拟网络中访问托管 Cassandra 正常工作所需的以下 Azure 服务:

    • Azure 存储
    • Azure KeyVault
    • Azure 虚拟机规模集 (VMSS)
    • Azure 监视
    • Microsoft Entra 身份识别系统
    • Azure 安全性
  4. 将这些特定权限应用到虚拟网络。 托管实例需要。 使用 az role assignment create 命令,将 <subscriptionID><resourceGroupName><vnetName> 替换为适当的值:

    az role assignment create \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>
    

    注意

    assigneerole 的值是固定值。 按照命令中所述输入这些值。 不这样做会导致在创建群集时出错。 如果在执行此命令时遇到任何错误,则可能无权运行它。 联系 Azure 管理员以获取权限。

  5. 接下来,使用 az managed-cassandra cluster create 命令在新建的虚拟网络中创建群集。 运行以下命令,delegatedManagementSubnetId 变量的值:

    注意

    delegatedManagementSubnetId该值与应用权限的虚拟网络名称相同。

    resourceGroupName='<Resource_Group_Name>'
    clusterName='<Cluster_Name>'
    location='eastus2'
    delegatedManagementSubnetId='/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.Network/virtualNetworks/<VNet name>/subnets/<subnet name>'
    initialCassandraAdminPassword='myPassword'
    cassandraVersion='3.11' # set to 4.0 for a Cassandra 4.0 cluster
    
    az managed-cassandra cluster create \
      --cluster-name $clusterName \
      --resource-group $resourceGroupName \
      --location $location \
      --delegated-management-subnet-id $delegatedManagementSubnetId \
      --initial-cassandra-admin-password $initialCassandraAdminPassword \
      --cassandra-version $cassandraVersion \
      --debug
    
  6. 使用以下配置为群集创建数据中心,其中包含三个虚拟机:

    dataCenterName='dc1'
    dataCenterLocation='eastus2'
    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
    

    注意

    可以从以下可用的 VM 大小中选择该值 --sku

    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E20s_v5
    • Standard_E32s_v5

    默认情况下,--availability-zone 设置为 false。 若要启用可用性区域,请将其设置为 true. 可用性区域有助于提高服务的可用性。 有关详细信息,请参阅 联机服务的 SLA

    警告

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

    成功部署可用性区域取决于所选区域的所有区域中计算资源的可用性。 如果选择的虚拟机大小在所选区域中不可用,则部署会失败。

  7. 创建数据中心后,可以运行 az managed-cassandra datacenter update 命令以纵向缩减或纵向扩展群集。 将 node-count 参数的值更改为所需的值:

    resourceGroupName='<Resource_Group_Name>'
    clusterName='<Cluster Name>'
    dataCenterName='dc1'
    dataCenterLocation='eastus2'
    
    az managed-cassandra datacenter update \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName \
      --node-count 9
    

连接到群集

适用于 Apache Cassandra 的 Azure 托管实例不会创建具有公共 IP 地址的节点。 若要连接到新的 Cassandra 群集,必须在同一虚拟网络中创建另一个资源。 此资源可以是应用程序,也可以是安装了 Apache 开源查询工具 CQLSH 的虚拟机。

你可使用资源管理器模板来部署 Ubuntu 虚拟机。

注意

由于 Python 版本的一些 已知问题 ,我们建议使用 Python3.10.12 附带的 Ubuntu 22.04 映像,或使用 Python 虚拟环境 运行 CQLSH。

从 CQLSH 连接

部署虚拟机后,使用 SSH 连接到该虚拟机并安装 CQLSH,如以下命令中所示:

# Install default-jre and default-jdk
sudo apt update
sudo apt install openjdk-8-jdk openjdk-8-jre

检查 Cassandra 的版本是否仍受支持 ,并选择所需的版本。 建议使用稳定版本。

按照 Cassandra 文档中的官方步骤安装 Cassandra 库,以便获取 CQLSH。

使用 cqlsh 进行连接,如文档中所述。

从应用程序连接

与 CQLSH 一样,使用某个受支持的 Apache Cassandra 客户端驱动程序从应用程序进行连接需要启用 SSL 加密,并禁用认证验证。 有关示例,请参阅 Java.NETNode.jsPython

建议禁用证书验证,因为除非将群集节点的 IP 地址映射到相应的域,否则证书验证不起作用。 如果你有一个内部策略,该策略要求对任何应用程序执行 SSL 证书验证,可以通过为每个节点添加类似于主机文件中的条目 10.0.1.5 host1.managedcassandra.cosmos.azure.com 来方便。 如果采用此方法,则还需要在纵向扩展节点时添加新条目。

对于 Java,我们强烈建议启用 推理执行策略 ,其中应用程序对尾部延迟敏感。 有关说明其工作原理以及如何启用策略的演示,请参阅 “实现推理执行策略”。

注意

通常不需要配置证书、rootCA、节点、客户端或信任存储来连接到 Azure Managed Instance for Apache Cassandra。 SSL 加密使用默认信任存储以及客户端选择的运行时密码。 有关示例代码,请参阅 Java.NETNode.jsPython)。 默认情况下,证书受信任。 否则,请将其添加到信任库。

配置客户端证书(可选)

配置客户端证书是可选的。 只要遵循上述步骤,客户端应用程序就可以连接到 Apache Cassandra 的 Azure 托管实例。 如果需要,还可以创建和配置用于身份验证的客户端证书。 通常,可以通过两种方式创建证书:

自签名证书:每个节点的专用和公共证书(无 CA)。 在这种情况下,需要所有公共证书。

CA 签名的证书:由自签名 CA 或公共 CA 颁发。 对于此设置,需要根 CA 证书和所有中间证书(如果适用)。 有关详细信息,请参阅 准备用于生产的 SSL 证书

若要实现客户端到节点证书身份验证或相互传输层安全性(mTLS),请使用 Azure CLI 提供证书。 以下命令上传客户端证书并将其应用于 Cassandra 托管实例群集的信任存储。 无需修改 cassandra.yaml 设置。 应用后,群集要求 Cassandra 在客户端连接期间验证证书。 请参阅 Cassandra client_encryption_options 中的 require_client_auth: true

resourceGroupName='<Resource_Group_Name>'
clusterName='<Cluster Name>'

az managed-cassandra cluster update \
  --resource-group $resourceGroupName \
  --cluster-name $clusterName \
  --client-certificates /usr/csuser/clouddrive/rootCert.pem /usr/csuser/clouddrive/intermediateCert.pem

疑难解答

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

注意

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

清理资源

如果不再需要资源组、托管实例及所有相关资源,可使用 az group delete 命令将其删除:

az group delete --name <Resource_Group_Name>

后续步骤

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