Rychlý start: Konfigurace hybridního clusteru se službou Azure Managed Instance pro Apache Cassandra

Azure Managed Instance for Apache Cassandra je plně spravovaná služba pro čistě opensourcové clustery Apache Cassandra. Služba také umožňuje přepsání konfigurací v závislosti na konkrétních potřebách jednotlivých úloh, což umožňuje maximální flexibilitu a kontrolu tam, kde je to potřeba.

Tento rychlý start ukazuje, jak pomocí příkazů Azure CLI nakonfigurovat hybridní cluster. Pokud máte existující datacentra v místním nebo místním prostředí, můžete pomocí služby Azure Managed Instance for Apache Cassandra přidat další datacentra do daného clusteru a spravovat je.

Požadavky

  • Tento článek vyžaduje Azure CLI verze 2.30.0 nebo vyšší. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.

  • Azure Virtual Network s připojením k místnímu nebo místnímu prostředí. Další informace o připojení místních prostředí k Azure najdete v článku o Připojení místní síti k Azure.

Konfigurace hybridního clusteru

  1. Přihlaste se k webu Azure Portal a přejděte k prostředku virtuální sítě.

  2. Otevřete kartu Podsítě a vytvořte novou podsíť. Další informace o polích ve formuláři Přidat podsíť najdete v článku o virtuální síti :

    Add a new subnet to your Virtual Network.

    Poznámka:

    Nasazení spravované instance Azure pro Apache Cassandra vyžaduje přístup k internetu. Nasazení selže v prostředích, kde je omezený přístup k internetu. Ujistěte se, že ve vaší virtuální síti neblokujete přístup k následujícím důležitým službám Azure, které jsou nezbytné pro správné fungování spravované Cassandry. Tady najdete také rozsáhlý seznam IP adres a závislostí portů.

    • Azure Storage
    • Azure KeyVault
    • Azure Virtual Machine Scale Sets
    • Monitorování Azure
    • Microsoft Entra ID
    • Zabezpečení Azure
  3. Teď použijeme pro virtuální síť a podsíť, kterou spravovaná instance Cassandra vyžaduje, pomocí Azure CLI. az role assignment create Použijte příkaz, nahraďte <subscriptionID><resourceGroupName><vnetName> a nahraďte příslušnými hodnotami:

    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>
    

    Poznámka:

    Hodnoty assignee a role hodnoty v předchozím příkazu jsou pevné instanční objekty a identifikátory rolí.

  4. Dále nakonfigurujeme prostředky pro náš hybridní cluster. Vzhledem k tomu, že už cluster máte, bude zde název clusteru pouze logickým prostředkem, který identifikuje název existujícího clusteru. Při definování clusterName a clusterNameOverride proměnných v následujícím skriptu nezapomeňte použít název existujícího clusteru.

    Potřebujete také minimálně počáteční uzly z vašeho stávajícího datacentra a certifikáty gossip vyžadované pro šifrování mezi uzly. Azure Managed Instance for Apache Cassandra vyžaduje šifrování mezi uzly a uzly pro komunikaci mezi datovými centry. Pokud ve stávajícím clusteru nemáte implementované šifrování typu node-to-node, budete ho muset implementovat – viz dokumentace. Měli byste zadat cestu k umístění certifikátů. Každý certifikát by měl být ve formátu PEM, například -----BEGIN CERTIFICATE-----\n...PEM format 1...\n-----END CERTIFICATE-----. Obecně platí, že existují dva způsoby implementace certifikátů:

    1. Certifikáty podepsané svým držitelem To znamená privátní a veřejný certifikát (bez certifikační autority) pro každý uzel – v tomto případě potřebujeme všechny veřejné certifikáty.

    2. Certifikáty podepsané certifikační autoritou Může se jednat o certifikační autoritu podepsanou svým držitelem nebo dokonce veřejnou certifikační autoritu. V tomto případě potřebujeme kořenový certifikát certifikační autority (viz pokyny k přípravě certifikátů SSL pro produkční prostředí) a všechny zprostředkovatele (pokud je to možné).

    Pokud chcete také implementovat ověřování certifikátů typu klient-uzel nebo vzájemné ověřování pomocí protokolu MTLS (Transport Layer Security), musíte certifikáty zadat ve stejném formátu jako při vytváření hybridního clusteru. Podívejte se na ukázku Azure CLI níže – certifikáty jsou uvedené v parametru --client-certificates . Tím se nahrají a použijí klientské certifikáty na úložiště důvěryhodnosti pro cluster spravované instance Cassandra (tj. nemusíte upravovat nastavení cassandra.yaml). Po použití bude cluster vyžadovat, aby Cassandra ověřil certifikáty, když se klient připojí (viz cassandra require_client_auth: trueclient_encryption_options).

    Poznámka:

    Hodnota proměnné, delegatedManagementSubnetId kterou zadáte níže, je úplně stejná jako hodnota --scope , kterou jste zadali v předchozím příkazu:

    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 is not 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
    

    Poznámka:

    Pokud už váš cluster obsahuje šifrování node-to-node a client-to-node, měli byste vědět, kde se uchovávají stávající klient a/nebo gossip certifikáty SSL. Pokud si nejste jistí, měli byste být schopni keytool -list -keystore <keystore-path> -rfc -storepass <password> certifikáty vytisknout.

  5. Po vytvoření prostředku clusteru spusťte následující příkaz a získejte podrobnosti o nastavení clusteru:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    
    az managed-cassandra cluster show \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName \
    
  6. Předchozí příkaz vrátí informace o prostředí spravované instance. Budete potřebovat certifikáty gossip, abyste je mohli nainstalovat do úložiště důvěryhodnosti pro uzly ve stávajícím datacentru. Následující snímek obrazovky ukazuje výstup předchozího příkazu a formát certifikátů:

    Get the certificate details from the cluster.

    Poznámka:

    Certifikáty vrácené z výše uvedeného příkazu obsahují konce řádků reprezentované jako text, například \r\n. Před pokusem o import do úložiště důvěryhodnosti vašeho stávajícího datacentra byste měli každý certifikát zkopírovat do souboru a naformátovat ho.

    Tip

    gossipCertificates Zkopírujte hodnotu pole zobrazenou na výše uvedeném snímku obrazovky do souboru a použijte následující skript Bash (budete muset stáhnout a nainstalovat jq pro vaši platformu) k formátování certifikátů a vytvoření samostatných souborů pem pro každou z nich.

    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. Dále vytvořte nové datové centrum v hybridním clusteru. Nezapomeňte nahradit hodnoty proměnných podrobnostmi clusteru:

    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
    

    Poznámka:

    Hodnotu lze --sku vybrat z následujících dostupných skladových položek:

    • 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

    Všimněte si také, že --availability-zone je nastavena na false. Pokud chcete povolit zóny dostupnosti, nastavte ho na truehodnotu . Zóny dostupnosti zvyšují smlouvu SLA o dostupnosti služby. Další podrobnosti najdete v úplných podrobnostech smlouvy SLA.

    Upozorňující

    Zóny dostupnosti nejsou podporovány ve všech oblastech. Pokud vyberete oblast, ve které nejsou zóny dostupnosti podporované, nasazení se nezdaří. Informace o podporovaných oblastech najdete tady . Úspěšné nasazení zón dostupnosti podléhá také dostupnosti výpočetních prostředků ve všech zónách v dané oblasti. Nasazení může selhat, pokud vybraná skladová položka nebo kapacita není dostupná ve všech zónách.

  8. Teď, když je nové datové centrum vytvořené, spusťte příkaz show datacenter a zobrazte jeho podrobnosti:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    dataCenterName='dc1'
    
    az managed-cassandra datacenter show \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName
    
  9. Předchozí příkaz vypíše počáteční uzly nového datacentra:

    Screenshot of how to get datacenter details.

  10. Teď přidejte počáteční uzly nového datacentra do konfigurace počátečního uzlu vašeho stávajícího datacentra v souboru cassandra.yaml. Nainstalujte spravované instance gossip certifikáty, které jste předtím shromáždili do úložiště důvěryhodnosti pro každý uzel v existujícím clusteru, pomocí keytool příkazu pro každý certifikát:

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

    Poznámka:

    Pokud chcete přidat další datová centra, můžete výše uvedené kroky zopakovat, ale potřebujete jenom počáteční uzly.

    Důležité

    Pokud má váš existující cluster Apache Cassandra pouze jedno datové centrum a při prvním přidání datového centra se ujistěte, že endpoint_snitch je parametr nastavený cassandra.yaml na GossipingPropertyFileSnitch.

    Důležité

    Pokud váš stávající kód aplikace používá k zajištění konzistence kvorum, měli byste před změnou nastavení replikace v následujícím kroku zajistit, aby se váš stávající kód aplikace LOCAL_QUORUM pro připojení k existujícímu clusteru (jinak se živé aktualizace po změně nastavení replikace v následujícím kroku nezdaří). Po změně strategie replikace se můžete vrátit k KVORUM, pokud je to upřednostňované.

  11. Nakonec pomocí následujícího dotazu CQL aktualizujte strategii replikace v jednotlivých prostorech klíčů tak, aby zahrnovala všechna datová centra v clusteru:

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

    Musíte také aktualizovat několik systémových tabulek:

    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}
    

    Důležité

    Pokud datacentra ve vašem existujícím clusteru nevynucují šifrování SSL (client-to-node encryption) a máte v úmyslu připojit se přímo ke spravované instanci Cassandra, budete také muset v kódu aplikace povolit SSL.

Použití hybridního clusteru k migraci v reálném čase

Výše uvedené pokyny obsahují pokyny ke konfiguraci hybridního clusteru. Jedná se ale také o skvělý způsob, jak dosáhnout bezproblémové migrace s nulovými výpadky. Pokud máte místní nebo jiné prostředí Cassandra, které chcete vyřadit z provozu s nulovým výpadkem, ve prospěch spouštění úloh ve službě Azure Managed Instance for Apache Cassandra je potřeba provést následující kroky v tomto pořadí:

  1. Konfigurace hybridního clusteru – postupujte podle výše uvedených pokynů.

  2. Po dobu trvání migrace dočasně zakažte automatické opravy ve službě Azure Managed Instance for Apache Cassandra:

    az managed-cassandra cluster update \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName --repair-enabled false
    
  3. V Azure CLI spusťte následující příkaz, který se spustí nodetool rebuild na každém uzlu v novém datovém centru Azure Managed Instance for Apache Cassandra, nahradí <ip address> se IP adresou uzlu a <sourcedc> názvem vašeho stávajícího datového centra (ze kterých migrujete):

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

    Tuto operaci byste měli spustit až po provedení všech předchozích kroků. To by mělo zajistit, aby se všechna historická data replikovala do nových datových center ve službě Azure Managed Instance for Apache Cassandra. Opětovné sestavení můžete spustit na jednom nebo více uzlech současně. Spusťte na jednom uzlu současně, abyste snížili dopad na existující cluster. Spusťte na více uzlech, když cluster dokáže zpracovat dodatečný vstupně-výstupní a síťový tlak. U většiny instalací můžete paralelně spustit pouze jednu nebo dvě, aby cluster nepřetěžuje.

    Upozorňující

    Při spuštění nodetool rebuildje nutné zadat zdrojové datové centrum. Pokud při prvním pokusu nesprávně zadáte datové centrum, dojde k zkopírování rozsahů tokenů bez kopírování dat pro nesystémové tabulky. Následné pokusy selžou, i když datové centrum zadáte správně. Tento problém můžete vyřešit odstraněním položek pro každý nesystémový prostor klíčů v system.available_ranges nástroji pro dotazy v cílovém cqlsh datovém centru Cassandra MI:

    delete from system.available_ranges where keyspace_name = 'myKeyspace';
    
  4. Vyjměte kód aplikace tak, aby odkazoval na počáteční uzly v nové instanci Azure Managed Instance pro datové centra Apache Cassandra.

    Důležité

    Jak je uvedeno také v pokynech k hybridnímu nastavení, pokud datacentra ve vašem existujícím clusteru nevynucují šifrování typu klient-uzel (SSL), budete ho muset povolit v kódu aplikace, protože to vynucuje spravovaná instance Cassandra.

  5. Spusťte ALTER KEYSPACE pro každý prostor klíčů stejným způsobem jako v předchozích krocích, ale teď odeberte stará datacentra.

  6. Spuštění vyřazení nástroje nodetool z provozu pro každý starý uzel datového centra

  7. Přepněte kód aplikace zpět do kvora (pokud je to potřeba nebo preferováno).

  8. Znovu povolte automatické opravy:

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

Řešení problému

Pokud při použití oprávnění pro vaši virtuální síť pomocí Azure CLI dojde k chybě, například nejde najít uživatele nebo instanční objekt v grafové databázi e5007d2c-4b13-4a74-9b6a-605d99f03501, můžete stejné oprávnění použít ručně z webu Azure Portal. Tady se dozvíte, jak to udělat.

Poznámka:

Přiřazení role Azure Cosmos DB se používá jenom pro účely nasazení. Spravovaná instance Azure pro Apache Cassandra nemá žádné závislosti back-endu ve službě Azure Cosmos DB.

Vyčištění prostředků

Pokud nebudete dál používat tento cluster spravovaných instancí, odstraňte ho pomocí následujících kroků:

  1. V levé nabídce webu Azure Portal vyberte skupiny prostředků.
  2. V seznamu vyberte skupinu prostředků, kterou jste vytvořili pro účely tohoto rychlého startu.
  3. V podokně Přehled skupiny prostředků vyberte Odstranit skupinu prostředků.
  4. V dalším okně zadejte název skupiny prostředků, která se má odstranit, a pak vyberte Odstranit.

Další kroky

V tomto rychlém startu jste zjistili, jak vytvořit hybridní cluster pomocí Azure CLI a Azure Managed Instance for Apache Cassandra. Teď můžete začít pracovat s clusterem.