你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Managed Instance for Apache Cassandra 是针对纯开源 Apache Cassandra 群集的完全托管服务。 该服务还允许替代配置,具体取决于每个工作负载的特定需求,以实现最大的灵活性和控制。
本快速入门演示如何使用 Azure CLI 命令创建 Azure Managed Instance for Apache Cassandra 群集。 它还演示如何在数据中心内创建数据中心并纵向扩展或缩减节点。
Prerequisites
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如果要在本地运行 CLI 引用命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
如果系统发出提示,则在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行 az version 以查找所安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 使用 Azure 虚拟网络 与自承载环境或本地环境建立连接。 有关如何将本地环境连接到 Azure 的详细信息,请参阅 将本地网络连接到 Azure。
- 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
重要说明
本文需要 Azure CLI 2.30.0 或更高版本。 如果你使用的是 Azure Cloud Shell,则表示已安装最新版本。
创建托管实例群集
登录到 Azure 门户。
在 Azure CLI 中设置订阅 ID:
az account set --subscription <Subscription_ID>
在资源组中创建具有专用子网的虚拟网络:
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
将这些特定权限应用到虚拟网络。 托管实例需要。 使用
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>
assignee
和role
的值是固定值。 按照命令中所述输入这些值。 创建群集时不这样做会导致错误。 如果在运行此命令时遇到任何错误,则可能无权运行它。 请联系 Azure 管理员获取权限。使用 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
为具有三个虚拟机(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 大小在所选区域中不可用,则部署会失败。
创建数据中心后,可以运行 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、 .NET、 Node.js和 Python。
建议禁用证书验证,因为它不起作用,除非将群集节点的 IP 地址映射到相应的域。 如果内部策略要求你对任何应用程序执行 TLS/SSL 证书验证,请为每个节点添加类似于主机文件中的条目 10.0.1.5 host1.managedcassandra.cosmos.azure.com
,以促进此设置。 如果采用此方法,则每当纵向扩展节点时,还需要添加新条目。
对于 Java,我们建议启用 推理执行策略 ,其中应用程序对尾部延迟敏感。 有关展示此方法如何工作的演示以及启用策略的方法,请参阅 实现推测执行策略。
通常不需要配置证书(例如 rootCA
、node
、client
或 truststore
)来连接到用于 Apache Cassandra 的 Azure 托管实例。 TLS/SSL 加密使用默认信任存储和客户端选择的运行时密码。 有关示例代码,请参阅 Java、 .NET、 Node.js和 Python)。 默认情况下,证书受信任。 如果没有,请将它们添加到信任库。
配置客户端证书(可选)
配置客户端证书是可选的。 执行上述步骤后,客户端应用程序可以连接到适用于 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 托管实例。 现在你可开始使用该群集了: