共用方式為


快速入門:使用 Azure Managed Instance for Apache Cassandra 設定混合式叢集

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

本快速入門示範如何使用 Azure CLI 命令來設定混合式叢集。 如果您在內部部署或自我裝載環境中有現有的數據中心,您可以使用適用於Apache Cassandra的 Azure 受控實例,將其他數據中心新增至這些叢集並加以維護。

先決條件

  • 本文需要 Azure CLI 2.30.0 版或更新版本。 若您使用的是 Azure Cloud Shell,即已安裝最新版本。
  • 使用與您自我托管或內部部署環境連線的 Azure 虛擬網路。 如需如何將內部部署環境連線至 Azure 的詳細資訊,請參閱 將內部部署網路連線至 Azure

設定混合式叢集

  1. 登入 Azure 入口網站 並移至您的虛擬網路資源。

  2. 選取子網標籤,然後建立新的子網。 若要深入瞭解 [ 新增子網 ] 窗體上的字段,請參閱 新增子網

    此螢幕快照顯示選擇加入並將新子網新增至虛擬網路的選項。

    部署適用於 Apache Cassandra 的 Azure 受控實例需要因特網存取。 在網際網路存取受限的環境中,部署失敗。 請確定您不會封鎖虛擬網路內對下列重要 Azure 服務進行存取,這是 Apache Cassandra 的 Azure 受控實例正常運作所需的重要 Azure 服務。 如需IP位址和埠相依性的清單,請參閱 必要的輸出網路規則

    • Azure 儲存體
    • Azure Key Vault
    • Azure 虛擬機器擴展集
    • Azure 監視器
    • Microsoft Entra ID
    • 適用於雲端的 Microsoft Defender
  3. 使用 Azure CLI,將某些特殊許可權套用至適用於 Apache Cassandra 的 Azure 受控實例所需的虛擬網路和子網。 使用 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 值分別是固定的服務主體和角色標識碼。

  4. 設定混合式叢集的資源。 因為您已經有叢集,因此叢集名稱是用來識別現有叢集名稱的邏輯資源。 當您在下列文稿中定義 clusterNameclusterNameOverride 變數時,請使用現有叢集的名稱。

    您至少也需要來自現有資料中心的種子節點,以及節點對節點加密所需的 Gossip 憑證。 Azure Managed Instance for Apache Cassandra 需要節點對節點加密,才能在資料中心之間進行通訊。 如果您沒有在現有叢集中實作節點對節點加密,則必須實作它。 如需詳細資訊,請參閱 節點對節點加密。 提供憑證位置的路徑。 每個憑證都應該以隱私權增強郵件 (PEM) 格式,例如 -----BEGIN CERTIFICATE-----\n...PEM format 1...\n-----END CERTIFICATE-----。 一般而言,有兩種方式可以實作憑證:

    • 自我簽署憑證。 每個節點都有沒有憑證授權單位 (CA) 的私人和公用憑證。 在此情況下,您需要所有公開憑證。
    • 由 CA 簽署的憑證。 自我簽署 CA 或公用 CA 所簽發的憑證。 在此情況下,您需要根 CA 憑證和所有相關中間憑證(如適用)。 如需詳細資訊,請參閱 準備安全套接字層 (SSL) 憑證以供生產環境使用。

    或者,如果您想要實作用戶端對節點憑證驗證或相互傳輸層安全性(TLS),請以與建立混合式叢集時相同的格式提供憑證。 請參閱本文稍後的 Azure CLI 範例。 憑證會在--client-certificates參數中提供。

    此方法會將客戶端憑證上傳並套用至適用於 Apache Cassandra 叢集之 Azure 受控實例的信任存放區。 您不需要編輯 cassandra.yaml 設定。 套用憑證之後,叢集會要求 Cassandra 在用戶端連線時驗證憑證。 如需詳細資訊,請參閱 require_client_auth: true Cassandra client_encryption_options

    您在此程式代碼中提供的變數值 delegatedManagementSubnetId 與您先前命令中提供的 值 --scope 相同:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster-legal-name'
    clusterNameOverride='cassandra-hybrid-cluster-illegal-name'
    location='eastus2'
    delegatedManagementSubnetId='/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName>'
    
    # You can override the cluster name if the original name isn't legal for an Azure resource:
    # overrideClusterName='ClusterNameIllegalForAzureResource'
    # the default cassandra version will be v3.11
    
    az managed-cassandra cluster create \
      --cluster-name $clusterName \
      --resource-group $resourceGroupName \
      --location $location \
      --delegated-management-subnet-id $delegatedManagementSubnetId \
      --external-seed-nodes 10.52.221.2 10.52.221.3 10.52.221.4 \
      --external-gossip-certificates /usr/csuser/clouddrive/rootCa.pem /usr/csuser/clouddrive/gossipKeyStore.crt_signed
      # optional - add your existing datacenter's client-to-node certificates (if implemented):
      # --client-certificates /usr/csuser/clouddrive/rootCa.pem /usr/csuser/clouddrive/nodeKeyStore.crt_signed
    

    如果您的叢集已經有節點對節點和用戶端對節點加密,您應該知道現有用戶端或 Gossip TLS/SSL 憑證的存放位置。 如果您不確定,請執行 keytool -list -keystore <keystore-path> -rfc -storepass <password> 以列印憑證。

  5. 建立叢集資源之後,請執行下列命令以取得叢集設定詳細資料:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    
    az managed-cassandra cluster show \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName \
    
  6. 上一個命令會傳回受控執行個體環境的相關資訊。 您需要 Gossip 憑證,以便將其安裝在現有資料中心節點的信任存放區。 下列螢幕快照顯示上一個命令的輸出和憑證格式。

    顯示從叢集取得憑證詳細數據結果的螢幕快照。

    從上述命令行傳回的憑證包含以文字表示的換行符。 例如 \r\n。 將每個憑證複製到檔案並格式化,再嘗試將它匯入現有的信任存放區。

    gossipCertificates 螢幕快照中顯示的陣列值複製到檔案中。 使用下列 Bash 腳本來格式化憑證,併為每個憑證建立個別的 PEM 檔案。 若要下載適用於您的平臺的 jq Bash 腳本,請參閱 下載 jq

    readarray -t cert_array < <(jq -c '.[]' gossipCertificates.txt)
    # iterate through the certs array, format each cert, write to a numbered file.
    num=0
    filename=""
    for item in "${cert_array[@]}"; do
    let num=num+1
    filename="cert$num.pem"
    cert=$(jq '.pem' <<< $item)
    echo -e $cert >> $filename
    sed -e 's/^"//' -e 's/"$//' -i $filename
    done
    
  7. 接下來,在混合式叢集中建立新的資料中心。 將變數值取代為您的叢集詳細資料:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    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 9
      --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)。 如需詳細資訊,請參閱 在線服務的 SLA

    並非所有區域都支援可用性區域。 如果您選取不支援可用性區域的區域,部署會失敗。 如需支持的區域,請參閱 Azure 區域清單

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

  8. 現在已建立新的資料中心,請執行 datacenter show 命令以檢視其詳細數據:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    dataCenterName='dc1'
    
    az managed-cassandra datacenter show \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName
    

    上一個命令會顯示新資料中心的種子節點。

    顯示如何取得數據中心詳細數據的螢幕快照。

  9. 將新的數據中心種子節點新增至 cassandra.yaml 檔案中現有資料中心的種子節點組態。 將您稍早收集的受管實例信任憑證安裝到現有叢集中每個節點的信任存儲中。 使用 keytool 命令針對每個憑證:

    keytool -importcert -keystore generic-server-truststore.jks -alias CassandraMI -file cert1.pem -noprompt -keypass myPass -storepass truststorePass
    

    如果您想要新增更多數據中心,請重複上述步驟,但只需要種子節點。

    重要事項

    如果您現有的 Apache Cassandra 叢集只有單一資料中心,而且此資料中心是第一個新增的數據中心,請確定 endpoint_snitch 中的 cassandra.yaml 參數設定為 GossipingPropertyFileSnitch

    如果您的現有應用程式代碼使用 QUORUM 來維持一致性,請確保在下一步變更複寫設定之前,現有的應用程式代碼會使用 LOCAL_QUORUM 連接到現有的叢集。 否則,在您變更下列步驟中的複寫設定之後,即時更新就會失敗。 變更複寫策略之後,您可以視需要還原為 QUORUM

  10. 最後,使用下列 Cassandra 查詢語言查詢來更新每個 keyspace 中的複寫策略,以包含整個叢集的所有數據中心:

    ALTER KEYSPACE "ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3};
    

    您也需要更新數個系統資料表:

    ALTER KEYSPACE "system_auth" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}
    ALTER KEYSPACE "system_distributed" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}
    ALTER KEYSPACE "system_traces" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}
    

    如果現有叢集中的數據中心未強制執行 用戶端對節點加密 (SSL),而且您想要讓應用程式程式代碼直接連線到適用於 Apache Cassandra 的 Azure 受控實例,您也需要在應用程式程式代碼中啟用 TLS/SSL。

使用混合式叢集進行即時移轉

上述指示提供如何設定混合式叢集的指引。 這種方法也是達成無縫零停機移轉的絕佳方式。 下列程式示範如何將您想要解除委任的內部部署或其他 Cassandra 環境移轉至 Apache Cassandra 的 Azure 受控實例,而不需要停機。

  1. 設定混合式叢集。 請遵循先前的指示。

  2. 在移轉期間暫時停用適用於 Apache Cassandra 的 Azure 受控實例中的自動修復:

    az managed-cassandra cluster update \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName --repair-enabled false
    
  3. 在 Azure CLI 中,使用下列命令,在適用於 Apache Cassandra 資料中心的新 Azure 受控實例的每個節點上執行 nodetool rebuild 。 將 <ip address> 替換為節點的 IP 位址。 將 <sourcedc> 取代為您現有的資料中心的名稱,即您要從中移轉資料的資料中心:

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

    只有在您採取所有先前的步驟之後,才執行此命令。 此方法應可確保所有歷程記錄資料都會被複寫到 Azure Managed Instance for Apache Cassandra 中的新資料中心。 您可以同時在一或多個節點上執行 rebuild 。 一次在一個節點上執行,以減少對現有叢集的影響。 請在叢集可以處理額外的 I/O 和網路壓力時,才在多個節點上執行。 針對大部分的安裝,您只能平行執行一或兩個,以免多載叢集。

    警告

    當您執行 nodetool rebuild時,必須指定來源data center。 如果您在第一次嘗試時錯誤地提供了資料中心,則會複製權杖範圍,而不會為您的非系統資料表複製資料。 即使您正確提供數據中心,後續嘗試也會失敗。 若要解決此問題,請使用目標 Azure 受控實例中 Apache Cassandra 資料中心的 cqlsh 查詢工具,在 system.available_ranges 中刪除每個非系統鍵空間的項目。

    delete from system.available_ranges where keyspace_name = 'myKeyspace';
    
  4. 完全移轉您的應用程式程式碼,以指向新 Azure Managed Instance for Apache Cassandra 資料中心的種子節點。

    如混合式設定指示中所述,如果現有叢集中的數據中心未強制執行 用戶端對節點加密 (SSL),請在應用程式程式代碼中啟用此功能。 適用於 Apache Cassandra 的 Azure 受控實例會強制執行這項需求。

  5. 針對每個鍵空間執行ALTER KEYSPACE,方法與先前相同。 現在您可以移除舊的數據中心。

  6. 針對每個舊的資料中心節點執行 node tool decommission

  7. 視需要或偏好,將應用程式程式代碼切換回 QUORUM

  8. 重新啟用自動修復:

    az managed-cassandra cluster update \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName --repair-enabled true
    

疑難排解

如果您在使用 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. 在下一個窗格中,輸入要刪除的資源群組名稱,然後選取 [ 刪除]。

後續步驟