Quickstart: Een hybride cluster configureren met Azure Managed Instance voor Apache Cassandra
Azure Managed Instance voor Apache Cassandra is een volledig beheerde service voor pure opensource Apache Cassandra-clusters. Met de service kunnen configuraties ook worden overschreven, afhankelijk van de specifieke behoeften van elke workload, waardoor de maximale flexibiliteit en controle waar nodig mogelijk zijn.
In deze quickstart ziet u hoe u de Azure CLI-opdrachten gebruikt om een hybride cluster te configureren. Als u bestaande datacenters in een on-premises of zelf-hostende omgeving hebt, kunt u Azure Managed Instance voor Apache Cassandra gebruiken om andere datacenters toe te voegen aan dat cluster en deze te onderhouden.
Vereisten
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Voor dit artikel is Azure CLI versie 2.30.0 of hoger vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.
Azure Virtual Network met connectiviteit met uw zelf-hostende of on-premises omgeving. Zie het artikel Een on-premises netwerk verbinden met Azure voor meer informatie over het verbinden van on-premises omgevingen met Azure .
Een hybride cluster configureren
Meld u aan bij Azure Portal en navigeer naar uw Virtual Network-resource.
Open het tabblad Subnetten en maak een nieuw subnet. Zie het artikel Virtual Network voor meer informatie over de velden in het formulier Subnet toevoegen:
Notitie
Voor de implementatie van een Azure Managed Instance voor Apache Cassandra is internettoegang vereist. Implementatie mislukt in omgevingen waarin internettoegang is beperkt. Zorg ervoor dat u de toegang in uw VNet niet blokkeert tot de volgende essentiële Azure-services die nodig zijn om Managed Cassandra goed te laten werken. Hier vindt u ook een uitgebreide lijst met IP-adres- en poortafhankelijkheden.
- Azure Storage
- Azure KeyVault
- Microsoft Azure Virtual Machine Scale Sets
- Azure Monitoring
- Microsoft Entra ID
- Azure-beveiliging
We gaan nu enkele speciale machtigingen toepassen op het VNet en het subnet dat door Cassandra beheerd exemplaar is vereist, met behulp van Azure CLI. Gebruik de
az role assignment create
opdracht, vervang<subscriptionID>
,<resourceGroupName>
en<vnetName>
door de juiste waarden: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>
Notitie
De
assignee
waarden inrole
de vorige opdracht zijn respectievelijk vaste service-principals en rol-id's.Vervolgens gaan we resources configureren voor ons hybride cluster. Omdat u al een cluster hebt, is de clusternaam hier alleen een logische resource om de naam van uw bestaande cluster te identificeren. Zorg ervoor dat u de naam van uw bestaande cluster gebruikt bij het definiëren
clusterName
enclusterNameOverride
variabelen in het volgende script.U hebt ook minimaal de seed-knooppunten van uw bestaande datacenter en de roddelcertificaten nodig die nodig zijn voor knooppunt-naar-knooppuntversleuteling. Azure Managed Instance voor Apache Cassandra vereist knooppunt-naar-knooppuntversleuteling voor communicatie tussen datacenters. Als u geen knooppunt-naar-knooppuntversleuteling hebt geïmplementeerd in uw bestaande cluster, moet u het implementeren. Raadpleeg de documentatie hier. U moet het pad naar de locatie van de certificaten opgeven. Elk certificaat moet de PEM-indeling hebben, bijvoorbeeld
-----BEGIN CERTIFICATE-----\n...PEM format 1...\n-----END CERTIFICATE-----
. Over het algemeen zijn er twee manieren om certificaten te implementeren:Zelfondertekende certificaten. Dit betekent een persoonlijk en openbaar (geen CA)-certificaat voor elk knooppunt. In dit geval hebben we alle openbare certificaten nodig.
Certificaten die zijn ondertekend door een CA. Dit kan een zelfondertekende CA of zelfs een openbare ca zijn. In dit geval hebben we het basis-CA-certificaat nodig (raadpleeg instructies voor het voorbereiden van SSL-certificaten voor productie) en alle tussenpersonen (indien van toepassing).
Als u ook client-naar-knooppuntcertificaatverificatie of wederzijdse MTLS (Transport Layer Security) wilt implementeren, moet u de certificaten in dezelfde indeling opgeven als bij het maken van het hybride cluster. Zie het Azure CLI-voorbeeld hieronder: de certificaten zijn opgegeven in de
--client-certificates
parameter. Hiermee worden uw clientcertificaten geüpload en toegepast op de truststore voor uw Cassandra Managed Instance-cluster (u hoeft dus geen cassandra.yaml-instellingen te bewerken). Nadat het cluster is toegepast, moet Cassandra de certificaten controleren wanneer een client verbinding maakt (zierequire_client_auth: true
in Cassandra client_encryption_options).Notitie
De waarde van de
delegatedManagementSubnetId
variabele die u hieronder opgeeft, is precies hetzelfde als de waarde die--scope
u in de bovenstaande opdracht hebt opgegeven: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
Notitie
Als uw cluster al knooppunt-naar-knooppunt- en client-naar-knooppuntversleuteling heeft, moet u weten waar uw bestaande client- en/of gossip SSL-certificaten worden bewaard. Als u niet zeker weet, kunt u de certificaten afdrukken
keytool -list -keystore <keystore-path> -rfc -storepass <password>
.Nadat de clusterresource is gemaakt, voert u de volgende opdracht uit om de configuratiedetails van het cluster op te halen:
resourceGroupName='MyResourceGroup' clusterName='cassandra-hybrid-cluster' az managed-cassandra cluster show \ --cluster-name $clusterName \ --resource-group $resourceGroupName \
De vorige opdracht retourneert informatie over de omgeving van het beheerde exemplaar. U hebt de roddelcertificaten nodig, zodat u ze kunt installeren in het vertrouwensarchief voor knooppunten in uw bestaande datacenter. In de volgende schermopname ziet u de uitvoer van de vorige opdracht en de indeling van certificaten:
Notitie
De certificaten die uit de bovenstaande opdracht worden geretourneerd, bevatten regeleinden die worden weergegeven als tekst, bijvoorbeeld
\r\n
. Kopieer elk certificaat naar een bestand en maak het op voordat u het in het vertrouwensarchief van uw bestaande datacenter probeert te importeren.Tip
Kopieer de
gossipCertificates
matrixwaarde die in de bovenstaande schermafbeelding wordt weergegeven in een bestand en gebruik het volgende bash-script (u moet jq voor uw platform downloaden en installeren) om de certificaten op te maken en afzonderlijke PEM-bestanden voor elk bestand te maken.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
Maak vervolgens een nieuw datacenter in het hybride cluster. Zorg ervoor dat u de variabelewaarden vervangt door de gegevens van uw cluster:
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
Notitie
De waarde voor
--sku
kan worden gekozen uit de volgende beschikbare SKU's:- 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
Houd er ook rekening mee dat
--availability-zone
is ingesteld opfalse
. Als u beschikbaarheidszones wilt inschakelen, stelt u dit in optrue
. Beschikbaarheidszones verhogen de SLA voor beschikbaarheid van de service. Raadpleeg de volledige SLA-details hier voor meer informatie.Waarschuwing
Beschikbaarheidszones worden niet ondersteund in alle regio's. Implementaties mislukken als u een regio selecteert waarin beschikbaarheidszones niet worden ondersteund. Zie hier voor ondersteunde regio's. De succesvolle implementatie van beschikbaarheidszones is ook onderhevig aan de beschikbaarheid van rekenresources in alle zones in de opgegeven regio. Implementaties kunnen mislukken als de SKU die u hebt geselecteerd, of capaciteit, niet beschikbaar is in alle zones.
Nu het nieuwe datacenter is gemaakt, voert u de opdracht datacenter weergeven uit om de details ervan weer te geven:
resourceGroupName='MyResourceGroup' clusterName='cassandra-hybrid-cluster' dataCenterName='dc1' az managed-cassandra datacenter show \ --resource-group $resourceGroupName \ --cluster-name $clusterName \ --data-center-name $dataCenterName
Met de vorige opdracht worden de seed-knooppunten van het nieuwe datacenter uitgevoerd:
Voeg nu de seed-knooppunten van het nieuwe datacenter toe aan de seed-knooppuntconfiguratie van uw bestaande datacenter in het bestand cassandra.yaml. En installeer de gossip-certificaten van het beheerde exemplaar die u eerder hebt verzameld in het vertrouwensarchief voor elk knooppunt in uw bestaande cluster, met behulp van
keytool
de opdracht voor elk certificaat:keytool -importcert -keystore generic-server-truststore.jks -alias CassandraMI -file cert1.pem -noprompt -keypass myPass -storepass truststorePass
Notitie
Als u meer datacenters wilt toevoegen, kunt u de bovenstaande stappen herhalen, maar u hebt alleen de seed-knooppunten nodig.
Belangrijk
Als uw bestaande Apache Cassandra-cluster slechts één datacenter heeft en dit de eerste keer is dat een datacenter wordt toegevoegd, moet u ervoor zorgen dat de
endpoint_snitch
parametercassandra.yaml
is ingesteld opGossipingPropertyFileSnitch
.Belangrijk
Als uw bestaande toepassingscode QUORUM gebruikt voor consistentie, moet u ervoor zorgen dat voordat u de replicatie-instellingen in de onderstaande stap wijzigt, uw bestaande toepassingscode gebruikmaakt van LOCAL_QUORUM om verbinding te maken met uw bestaande cluster (anders mislukken live-updates nadat u de replicatie-instellingen in de onderstaande stap hebt gewijzigd). Zodra de replicatiestrategie is gewijzigd, kunt u indien gewenst terugkeren naar QUORUM.
Gebruik ten slotte de volgende CQL-query om de replicatiestrategie in elke keyspace bij te werken om alle datacenters in het cluster op te nemen:
ALTER KEYSPACE "ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3};
U moet ook verschillende systeemtabellen bijwerken:
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}
Belangrijk
Als de datacenters in uw bestaande cluster geen versleuteling van client-naar-knooppunten (SSL) afdwingen en u van plan bent dat uw toepassingscode rechtstreeks verbinding maakt met cassandra Managed Instance, moet u ook SSL inschakelen in uw toepassingscode.
Hybride cluster gebruiken voor realtimemigratie
De bovenstaande instructies bevatten richtlijnen voor het configureren van een hybride cluster. Dit is echter ook een uitstekende manier om een naadloze migratie zonder downtime te realiseren. Als u een on-premises of andere Cassandra-omgeving hebt die u buiten gebruik wilt stellen zonder uitvaltijd, moet u ervoor zorgen dat uw workload wordt uitgevoerd in Azure Managed Instance voor Apache Cassandra. De volgende stappen moeten in deze volgorde worden uitgevoerd:
Hybride cluster configureren: volg de bovenstaande instructies.
Schakel automatische reparaties tijdelijk uit in Azure Managed Instance voor Apache Cassandra voor de duur van de migratie:
az managed-cassandra cluster update \ --resource-group $resourceGroupName \ --cluster-name $clusterName --repair-enabled false
Voer in Azure CLI de onderstaande opdracht uit om uit te voeren
nodetool rebuild
op elk knooppunt in uw nieuwe Azure Managed Instance voor het Apache Cassandra-datacenter, waarbij u het IP-adres van het knooppunt vervangt<ip address>
en<sourcedc>
de naam van uw bestaande datacenter (het datacenter waarvan u migreert):az managed-cassandra cluster invoke-command \ --resource-group $resourceGroupName \ --cluster-name $clusterName \ --host <ip address> \ --command-name nodetool --arguments rebuild="" "<sourcedc>"=""
U moet dit alleen uitvoeren nadat alle voorgaande stappen zijn uitgevoerd. Dit moet ervoor zorgen dat alle historische gegevens worden gerepliceerd naar uw nieuwe datacenters in Azure Managed Instance voor Apache Cassandra. U kunt herbouwen op een of meer knooppunten tegelijk uitvoeren. Voer op één knooppunt tegelijk uit om de impact op het bestaande cluster te verminderen. Wordt uitgevoerd op meerdere knooppunten wanneer het cluster de extra I/O- en netwerkdruk kan verwerken. Voor de meeste installaties kunt u slechts één of twee parallel uitvoeren om het cluster niet te overbelasten.
Waarschuwing
U moet het brondatacentrum opgeven wanneer het wordt uitgevoerd
nodetool rebuild
. Als u het datacenter onjuist opgeeft bij de eerste poging, leidt dit ertoe dat tokenbereiken worden gekopieerd, zonder dat er gegevens worden gekopieerd voor uw niet-systeemtabellen. Volgende pogingen mislukken zelfs als u het datacenter correct opgeeft. U kunt dit oplossen door vermeldingen voor elke niet-systeemsleutelruimte tesystem.available_ranges
verwijderen via hetcqlsh
queryhulpprogramma in uw Cassandra MI-datacenter:delete from system.available_ranges where keyspace_name = 'myKeyspace';
Knip uw toepassingscode om te verwijzen naar de seed-knooppunten in uw nieuwe Azure Managed Instance voor Apache Cassandra-datacentrum(s).
Belangrijk
Zoals ook vermeld in de instructies voor hybride installatie, moet u dit inschakelen in uw toepassingscode, omdat het beheerde exemplaar van Cassandra dit afdwingt, als het datacentrum in uw bestaande cluster geen versleuteling van client-naar-knooppunten (SSL) afdwingt.
Voer ALTER KEYSPACE uit voor elke keyspace, op dezelfde manier als eerder gedaan, maar verwijder nu uw oude datacenter(en).
Voer nodetool uit bedrijf voor elk oud datacenterknooppunt.
Zet uw toepassingscode terug naar quorum (indien nodig/voorkeur).
Automatische reparaties opnieuw inschakelen:
az managed-cassandra cluster update \ --resource-group $resourceGroupName \ --cluster-name $clusterName --repair-enabled true
Probleemoplossing
Als er een fout optreedt bij het toepassen van machtigingen voor uw virtuele netwerk met behulp van Azure CLI, zoals Kan de gebruiker of service-principal niet vinden in de grafiekdatabase voor 'e5007d2c-4b13-4a74-9b6a-605d99f03501', kunt u dezelfde machtiging handmatig toepassen vanuit Azure Portal. Hier vindt u informatie over hoe u dit doet.
Notitie
De Azure Cosmos DB-roltoewijzing wordt alleen gebruikt voor implementatiedoeleinden. Azure Managed Instanced voor Apache Cassandra heeft geen back-endafhankelijkheden van Azure Cosmos DB.
Resources opschonen
Als u dit beheerde exemplaarcluster niet meer gaat gebruiken, verwijdert u het met de volgende stappen:
- Selecteer resourcegroepen in het linkermenu van Azure Portal.
- Selecteer de resourcegroep die u eerder voor deze quickstart hebt gemaakt uit de lijst.
- Selecteer Resourcegroep verwijderen in het deelvenster Overzicht van de resourcegroep.
- Selecteer in het volgende venster de naam van de resourcegroep die u wilt verwijderen en selecteer vervolgens Verwijderen.
Volgende stappen
In deze quickstart hebt u geleerd hoe u een hybride cluster maakt met behulp van Azure CLI en Azure Managed Instance voor Apache Cassandra. U kunt nu aan de slag met het cluster.