你当前正在访问 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 Managed Instance for Apache Cassandra 群集。 它还介绍了如何创建数据中心,以及如何在数据中心内纵向扩展或缩减节点。

先决条件

重要

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

创建托管实例群集

  1. 登录到 Azure 门户

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

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

    az network vnet create -n <VNet_Name> -l eastus2 -g <Resource_Group_Name> --subnet-name <Subnet Name>
    

    注意

    部署 Azure Managed Instance for Apache Cassandra 需要 Internet 访问权限。 在限制 Internet 访问权限的环境中,部署将失败。 请确保未在 VNet 中阻止对以下关键 Azure 服务(托管 Cassandra 需要这些服务才能正常工作)的访问权限:

    • Azure 存储
    • Azure KeyVault
    • Azure 虚拟机规模集
    • Azure 监视
    • Microsoft Entra ID
    • 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 值是固定值,请完全按照命令中的说明输入这些值。 如果不这样做,则会在创建群集时出错。 如果在执行此命令时遇到任何错误,则你可能没有运行此命令的权限,请与管理员联系以获取权限。

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

    注意

    你将在下面提供的 delegatedManagementSubnetId 变量的值与你在上面的命令中提供的 --scope 的值完全相同:

    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. 最后,使用 az managed-cassandra datacenter create 命令为群集创建具有三个节点(标准 D8s v4 VM SKU)的数据中心,并为每个节点附加 4 个 P30 磁盘:

    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
    

    注意

    可以从以下可用 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。 有关更多详细信息,请在此处查看 SLA 的完整详细信息。

    警告

    并非所有区域都支持可用性区域。 如果选择不支持可用性区域的区域,部署将会失败。 有关支持的区域的信息,请参阅此处。 可用性区域的成功部署还受限于给定区域内所有区域中的计算资源的可用性。 如果你选择的 SKU 或容量在所有区域中均不可用,则部署可能会失败。

  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
    

连接到群集

Azure Managed Instance for Apache Cassandra 不会创建具有公共 IP 地址的节点。 若要连接到新创建的 Cassandra 群集,必须在虚拟网络中另外创建一个资源。 此资源可以是应用程序,也可以是安装了 Apache 开源查询工具 CQLSH 的虚拟机。 你可使用资源管理器模板来部署 Ubuntu 虚拟机。

从 CQLSH 连接

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

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

# Install the Cassandra libraries in order to get CQLSH:
echo "deb http://archive.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra

# Export the SSL variables:
export SSL_VERSION=TLSv1_2
export SSL_VALIDATE=false

# Connect to CQLSH (replace <IP> with the private IP addresses of a node in your Datacenter):
host=("<IP>")
initial_admin_password="Password provided when creating the cluster"
cqlsh $host 9042 -u cassandra -p $initial_admin_password --ssl

从应用程序连接

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

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

对于 Java,我们还强烈建议在应用程序对尾部延迟敏感时启用推测执行策略此处的演示说明了其工作原理以及如何启用策略。

备注

在大多数情况下,无需配置或安装证书(rootCA、节点或客户端、信任存储等)就能连接到 Azure Managed Instance for Apache Cassandra。 可以使用客户端正在使用的运行时的默认信任存储和密码来启用 SSL 加密(请参阅 Java.NETNode.jsPython 的示例),因为 Azure Managed Instance for Apache Cassandra 证书将受到该环境的信任。 在极少数情况下,如果证书不受信任,可能需要将其添加到信任存储。

配置客户端证书(可选)

配置客户端证书是可选操作。 只要已执行上述步骤,客户端应用程序就可以连接到 Azure Managed Instance for Apache Cassandra。 但是,如果需要,还可以另外创建和配置用于身份验证的客户端证书。 通常,可以通过两种方式创建证书:

  • 自签名证书。 这意味着每个节点都有一个专用和公用(无 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 将权限应用到虚拟网络时遇到错误(例如,“无法在‘e5007d2c-4b13-4a74-9b6a-605d99f03501’的图形数据库中找到用户或服务主体”),则可以在 Azure 门户中手动应用相同的权限。 通过此处了解如何执行此操作。

注意

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 群集。 现在你可开始使用该群集了: