共用方式為


快速入門:使用 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

設定網路環境

由於使用此服務布建的所有數據中心必須透過虛擬網路注入來部署到專用子網,因此應在部署之前預先配置適當的網路對等連接。 在本快速入門中,在個別區域中建立具有兩個資料中心的叢集:美國東部和美國東部 2。 首先,為每個區域建立虛擬網路。

  1. 登入 Azure 入口網站

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

    az group create --location eastus2 --name cassandra-mi-multi-region
    
  3. 在 East US 2 建立第一個具有專用子網的虛擬網路:

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

     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. 將第一個虛擬網路連接到第二個虛擬網路:

    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. 若要連線這兩個虛擬網路,請在第二個虛擬網路與第一個虛擬網路之間建立另一個對等互連:

    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
    

    如果您新增更多區域,每個虛擬網路都需要從它對等互連到所有其他虛擬網路,以及從所有其他虛擬網路對等互連到它。

  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. 在美國東部建立資料中心。 將 <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的值:

    • 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)。 如需詳細資訊,請參閱 適用於 Apache Cassandra 的 Azure 受控實例的服務等級協定

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

    成功部署可用性區域也會受限於特定區域中所有區域的計算資源可用性。 如果您選取的產品層或容量無法跨所有區域使用,部署可能會失敗。

  4. 建立第二個數據中心之後,取得節點狀態,以確認所有 Cassandra 節點都成功出現:

    resourceGroupName='cassandra-mi-multi-region'
    clusterName='test-multi-region'
    
    az managed-cassandra cluster 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 address> 替換為節點的 IP 位址:

    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 角色指派僅供部署之用。 適用於 Apache Cassandra 的 Azure 受控實例在 Azure Cosmos DB 上沒有後端相依性。

清除資源

如果您不打算繼續使用此受控實例叢集,請遵循下列步驟將其刪除:

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

後續步驟

在本快速入門中,您已瞭解如何使用適用於 Apache Cassandra 的 Azure CLI 和 Azure 受控實例來建立多區域叢集。 您現在可以開始使用叢集。