Delen via


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

  • 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

  1. Meld u aan bij Azure Portal en navigeer naar uw Virtual Network-resource.

  2. 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:

    Voeg een nieuw subnet toe aan uw virtuele netwerk.

    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
  3. 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 in role de vorige opdracht zijn respectievelijk vaste service-principals en rol-id's.

  4. 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 en clusterNameOverride 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:

    1. Zelfondertekende certificaten. Dit betekent een persoonlijk en openbaar (geen CA)-certificaat voor elk knooppunt. In dit geval hebben we alle openbare certificaten nodig.

    2. 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 (zie require_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> .

  5. 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 \
    
  6. 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:

    Haal de certificaatgegevens op uit het cluster.

    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
    
  7. 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 op false. Als u beschikbaarheidszones wilt inschakelen, stelt u dit in op true. 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.

  8. 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
    
  9. Met de vorige opdracht worden de seed-knooppunten van het nieuwe datacenter uitgevoerd:

    Schermopname van het ophalen van gegevens over datacentrums.

  10. 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 parameter cassandra.yaml is ingesteld op GossipingPropertyFileSnitch.

    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.

  11. 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:

  1. Hybride cluster configureren: volg de bovenstaande instructies.

  2. 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
    
  3. 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 uitgevoerdnodetool 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 te system.available_ranges verwijderen via het cqlsh queryhulpprogramma in uw Cassandra MI-datacenter:

    delete from system.available_ranges where keyspace_name = 'myKeyspace';
    
  4. 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.

  5. Voer ALTER KEYSPACE uit voor elke keyspace, op dezelfde manier als eerder gedaan, maar verwijder nu uw oude datacenter(en).

  6. Voer nodetool uit bedrijf voor elk oud datacenterknooppunt.

  7. Zet uw toepassingscode terug naar quorum (indien nodig/voorkeur).

  8. 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:

  1. Selecteer resourcegroepen in het linkermenu van Azure Portal.
  2. Selecteer de resourcegroep die u eerder voor deze quickstart hebt gemaakt uit de lijst.
  3. Selecteer Resourcegroep verwijderen in het deelvenster Overzicht van de resourcegroep.
  4. 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.