Share via


快速入門:使用 Azure Managed Instance for Apache Cassandra 建立多區域叢集

Azure Managed Instance for Apache Cassandra 是純開放原始碼 Apache Cassandra 叢集的完全受控服務。 此服務也允許根據每個工作負載的特定需求來覆寫組態,允許視需要提供最大彈性和控制。

本快速入門示範如何使用 Azure CLI 命令在 Azure 中設定多區域叢集。

必要條件

  • 此文章需要 Azure CLI 2.30.0 版或更新版本。 若您使用的是 Azure Cloud Shell,即已安裝最新版本。

  • Azure 虛擬網路,可連線到您的自我裝載或內部部署環境。 如需將內部部署環境連線至 Azure 的詳細資訊,請參閱將內部部署網路連線到 Azure 一文 (部份機器翻譯)。

設定網路環境

因為佈建此服務的所有資料中心都必須使用 VNet 插入部署到專用子網路,所以請在部署之前先設定適當的網路對等互連。 在本快速入門中,在個別區域中建立具有兩個資料中心的叢集:美國東部和美國東部 2。 首先,為每個區域建立虛擬網路。

  1. 登入 Azure 入口網站

  2. 建立名為 cassandra-mi-multi-region 的資源群組:

    az group create --location eastus2 --name cassandra-mi-multi-region
    
  3. 在美國東部 2 中建立第一個具有專用子網路的 VNet:

    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. 在美國東部中建立第二個 VNet,同時具有專用子網路:

     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. 將第一個 VNet 對等互連至第二個 VNet:

    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. 若要連線兩個 VNet,請在第二個 VNet 和第一個 VNet 之間建立另一個對等互連:

    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
    

    注意

    如果新增更多區域,則每個 VNet 都需要從自己到所有其他 VNet 的對等互連,以及從所有其他 VNet 到自己的對等互連。

  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> 取代為您的訂用帳戶識別碼:

    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. 部署叢集資源。 使用您的訂用帳戶 ID 來取代 <Subscription 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 建立資料中心。 使用您的訂用帳戶 ID 來取代 <SubscriptionID> 。 此動作最多可能需要 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. 在美國東部建立資料中心。 使用您的訂用帳戶 ID 來取代 <SubscriptionID>

    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 的值可以從下列可用的 SKU 中選擇:

    • Standard_E8s_v4
    • Standard_E16s_v4
    • Standard_E20s_v4
    • Standard_E32s_v4
    • 標準 DS13_v2
    • 標準 DS14_v2
    • Standard_D8s_v4
    • Standard_D16s_v4
    • Standard_D32s_v4

    也請注意,--availability-zone 設為 false。 若要啟用可用性區域,請將此設定為 true。 可用性區域會增加服務的可用性 SLA。 如需詳細資訊,請參閱 Azure Managed Instance for Apache Cassandra 的 SLA

    警告

    並非所有區域都支援可用性區域。 如果您選取的區域不支援可用性區域,部署即會失敗。 如需支持的區域,請參閱具有可用性區域的 Azure 區域 (部份機器翻譯)。

    可用性區域是否能成功部署也受限於指定區域中所有區域的計算資源可用性。 如果您選取的 SKU 或容量無法在所有區域使用,部署可能會失敗。

  4. 建立第二個資料中心之後,取得節點狀態,以確認所有 Cassandra 節點都已成功啟動:

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    
    az managed-cassandra cluster node-status \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName
    
  5. 然後,使用 CQLSH 連線到叢集,並使用下列 CQL 查詢來更新每個 keyspace 中的複寫策略,以包含叢集內的所有資料中心 (系統資料表會自動更新):

    ALTER KEYSPACE "ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'dc-eastus2': 3, 'dc-eastus': 3};
    
  6. 最後,如果您要將資料中心新增至已經有資料的叢集,則必須執行 rebuild,才能複寫歷程記錄資料。 在此情況下,我們假設 dc-eastus2 資料中心已經有資料。 在 Azure CLI 中,執行下列命令以在新 dc-eastus 資料中心的每個節點上執行 nodetool rebuild,並以節點的 IP 位址取代 <ip address>

    az managed-cassandra cluster invoke-command \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --host <ip address> \
      --command-name nodetool --arguments rebuild="" "dc-eastus2"=""
    

    警告

    在套用 keyspace 複寫變更之前,您應該允許應用程式用戶端寫入新的資料中心。 否則重建將無法運作,且須建立支援要求,以便我們的小組可代表您執行 repair

疑難排解

如果您在使用 Azure CLI 將權限套用至虛擬網路時遇到錯誤,可以從 Azure 入口網站手動套用相同的權限。 錯誤範例:在圖形資料庫中找不到 'e5007d2c-4b13-4a74-9b6a-605d99f03501' 的使用者或服務主體。 如需詳細資訊,請參閱使用 Azure 入口網站新增 Azure Cosmos DB 服務主體 (部份機器翻譯)。

注意

Azure Cosmos DB 角色指派僅供部署之用。 Azure Managed Instance for Apache Cassandra 在 Azure Cosmos DB 上沒有後端相依性。

清除資源

如果您不打算繼續使用這個受控執行個體叢集,請使用下列步驟將其刪除:

  1. 從 Azure 入口網站的左側功能表中,選取 [資源群組]
  2. 在該清單中,選取您在本快速入門中建立的資源群組。
  3. 在資源群組 [概觀] 窗格中,選取 [刪除資源群組]
  4. 在下個視窗中輸入要刪除的資源群組名稱,然後選取 [刪除]

下一步

在本快速入門中,您已了解如何使用 Azure CLI 和 Azure Managed Instance for Apache Cassandra 來建立多區域叢集。 您現在可以開始使用叢集。