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

快速入门:使用 Azure CLI 为 Apache Cassandra 群集创建 Azure 托管实例

Azure Managed Instance for Apache Cassandra 是针对纯开源 Apache Cassandra 群集的完全托管服务。 该服务还允许替代配置,具体取决于每个工作负载的特定需求,以实现最大的灵活性和控制。

本快速入门演示如何使用 Azure CLI 命令创建 Azure Managed Instance for Apache Cassandra 群集。 它还演示如何在数据中心内创建数据中心并纵向扩展或缩减节点。

Prerequisites

重要说明

本文需要 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 托管实例 for Apache Cassandra 的实例需要 Internet 访问。 在限制 Internet 访问权限的环境中,部署将失败。 确保不会阻止虚拟网络中访问 Apache Cassandra 的 Azure 托管实例正常运行所需的以下 Azure 服务:

    • Azure 存储
    • Azure Key Vault
    • Azure 虚拟机规模集
    • Azure Monitor
    • Microsoft Entra ID
    • Microsoft Defender for Cloud
  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. 为具有三个虚拟机(VM)的群集创建数据中心。 使用以下配置:

    • VM 大小:标准 E8s v5
    • 数据磁盘:附加到部署的每个 VM 的 4 个 P30 磁盘

    完成所有信息后,请使用 az managed-cassandra datacenter create 命令:

    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. 可用性区域有助于提高服务的可用性。 有关详细信息,请参阅联机服务的服务级别协议

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

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

  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 群集,必须在同一虚拟网络中创建另一个资源。 此资源可以是已安装 Cassandra 查询语言 Shell(CQLSH) 的应用程序或 VM。 CQLSH 是 Apache 开源查询工具。

可以使用 Azure 资源管理器模板 部署 Ubuntu VM。

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

使用 CQLSH 连接

部署 VM 后,使用 SSH 协议连接到计算机并安装 CQLSH。 使用以下命令:

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

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

安装 Cassandra 库以获取 CQLSH。 请遵循 Cassandra 文档中的官方步骤或指南。

从应用程序进行连接

与 CQLSH 一样,使用受支持的 Apache Cassandra 客户端驱动程序 之一从应用程序进行连接时,必须启用传输层安全性/安全套接字层(TLS/SSL)加密,并且必须禁用证书验证。 有关示例,请参阅 Java.NETNode.jsPython

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

对于 Java,我们建议启用 推理执行策略 ,其中应用程序对尾部延迟敏感。 有关展示此方法如何工作的演示以及启用策略的方法,请参阅 实现推测执行策略

通常不需要配置证书(例如 rootCAnodeclienttruststore)来连接到用于 Apache Cassandra 的 Azure 托管实例。 TLS/SSL 加密使用默认信任存储和客户端选择的运行时密码。 有关示例代码,请参阅 Java.NETNode.jsPython)。 默认情况下,证书受信任。 如果没有,请将它们添加到信任库。

配置客户端证书(可选)

配置客户端证书是可选的。 执行上述步骤后,客户端应用程序可以连接到适用于 Apache Cassandra 的 Azure 托管实例。 如果需要,还可以创建和配置用于身份验证的客户端证书。 一般情况下,可通过两种方式创建证书:

  • 自签名证书: 每个节点的专用和公共证书都是没有证书颁发机构(CA)的。 在这种情况下,需要所有公共证书。
  • CA 签名的证书: 由自签名 CA 或公共 CA 颁发的证书。 对于此设置,需要根 CA 证书和所有中间证书(如果适用)。 有关详细信息,请参阅 准备用于生产的 SSL 证书

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

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

清理资源

不再需要资源时,请使用 az group delete 命令删除资源组、托管实例和所有相关资源:

az group delete --name <Resource_Group_Name>

后续步骤

本快速入门介绍了如何使用 Azure CLI 创建适用于 Apache Cassandra 群集的 Azure 托管实例。 现在你可开始使用该群集了: