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
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
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 Připojení místní sítě k Azure .
Konfigurace hybridního clusteru
Přihlaste se k webu Azure Portal a přejděte k prostředku virtuální sítě.
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 :
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
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
arole
hodnoty v předchozím příkazu jsou pevné instanční objekty a identifikátory rolí.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
aclusterNameOverride
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ů: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.
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 cassandrarequire_client_auth: true
client_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.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 \
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ů:
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
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 nafalse
. Pokud chcete povolit zóny dostupnosti, nastavte ho natrue
hodnotu . 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.
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
Předchozí příkaz vypíše počáteční uzly nového datacentra:
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
naGossipingPropertyFileSnitch
.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é.
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í:
Konfigurace hybridního clusteru – postupujte podle výše uvedených pokynů.
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
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 rebuild
je 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íčů vsystem.available_ranges
nástroji pro dotazy v cílovémcqlsh
datovém centru Cassandra MI:delete from system.available_ranges where keyspace_name = 'myKeyspace';
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.
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.
Spuštění vyřazení nástroje nodetool z provozu pro každý starý uzel datového centra
Přepněte kód aplikace zpět do kvora (pokud je to potřeba nebo preferováno).
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ů:
- V levé nabídce webu Azure Portal vyberte skupiny prostředků.
- V seznamu vyberte skupinu prostředků, kterou jste vytvořili pro účely tohoto rychlého startu.
- V podokně Přehled skupiny prostředků vyberte Odstranit skupinu prostředků.
- 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.