Snabbstart: Konfigurera ett hybridkluster med Azure Managed Instance för Apache Cassandra

Azure Managed Instance för Apache Cassandra tillhandahåller automatiserade distributions- och skalningsåtgärder för hanterade Apache Cassandra-datacenter med öppen källkod. Den här tjänsten hjälper dig att påskynda hybridscenarier och minska pågående underhåll.

Den här snabbstarten visar hur du använder Azure CLI-kommandon för att konfigurera ett hybridkluster. Om du har befintliga datacenter i en lokal eller lokalt installerad miljö kan du använda Azure Managed Instance för Apache Cassandra för att lägga till andra datacenter i klustret och underhålla dem.

Förutsättningar

  • Den här artikeln kräver Azure CLI version 2.30.0 eller senare. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.

  • Azure Virtual Network med anslutning till din lokala eller lokala miljö. Mer information om hur du ansluter lokala miljöer till Azure finns i artikeln Anslut ett lokalt nätverk till Azure .

Konfigurera ett hybridkluster

  1. Logga in på Azure Portal och gå till din Virtual Network resurs.

  2. Öppna fliken Undernät och skapa ett nytt undernät. Mer information om fälten i formuläret Lägg till undernät finns i artikeln Virtual Network:

    Lägg till ett nytt undernät i Virtual Network.

    Anteckning

    Distributionen av en Azure Managed Instance för Apache Cassandra kräver internetåtkomst. Distributionen misslyckas i miljöer där Internetåtkomst är begränsad. Kontrollera att du inte blockerar åtkomsten i ditt virtuella nätverk till följande viktiga Azure-tjänster som krävs för att Hanterad Cassandra ska fungera korrekt. Du hittar också en omfattande lista över IP-adresser och portberoenden här.

    • Azure Storage
    • Azure KeyVault
    • Azure Virtual Machine Scale Sets
    • Azure Monitoring
    • Azure Active Directory
    • Säkerhet i Azure
  3. Nu ska vi tillämpa vissa särskilda behörigheter på det virtuella nätverket och undernätet som Cassandra Managed Instance kräver med hjälp av Azure CLI. az role assignment create Använd kommandot, ersätt <subscriptionID>, <resourceGroupName>och <vnetName> med lämpliga värden:

    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>
    

    Anteckning

    Värdena assignee och role i föregående kommando är fasta tjänstprinciper respektive rollidentifierare.

  4. Därefter konfigurerar vi resurser för vårt hybridkluster. Eftersom du redan har ett kluster är klusternamnet här bara en logisk resurs för att identifiera namnet på ditt befintliga kluster. Se till att använda namnet på ditt befintliga kluster när du clusterName definierar och clusterNameOverride variabler i följande skript.

    Du behöver också minst seed-noderna från ditt befintliga datacenter och de skvallercertifikat som krävs för kryptering från nod till nod. Azure Managed Instance för Apache Cassandra kräver kryptering från nod till nod för kommunikation mellan datacenter. Om du inte har nod-till-nod-kryptering implementerad i ditt befintliga kluster skulle du behöva implementera den – se dokumentationen här. Du bör ange sökvägen till platsen för certifikaten. Varje certifikat ska vara i PEM-format, t.ex. -----BEGIN CERTIFICATE-----\n...PEM format 1...\n-----END CERTIFICATE-----. I allmänhet finns det två sätt att implementera certifikat:

    1. Självsignerade certifikat. Det innebär ett privat och offentligt certifikat (ingen CA) för varje nod – i det här fallet behöver vi alla offentliga certifikat.

    2. Certifikat som signerats av en certifikatutfärdare. Det här kan vara en självsignerad ca eller till och med en offentlig. I det här fallet behöver vi rotcertifikatutfärdarcertifikatet (se anvisningar om hur du förbereder SSL-certifikat för produktion) och alla mellanhänder (om tillämpligt).

    Om du också har implementerat certifikat från klient till nod (se här) måste du även ange dem i samma format när du skapar hybridklustret. Se exemplet nedan.

    Anteckning

    Värdet för variabeln delegatedManagementSubnetId som du anger nedan är exakt samma som värdet --scope för som du angav i kommandot ovan:

    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
    

    Anteckning

    Om klustret redan har kryptering från nod till nod och från klient till nod bör du veta var dina befintliga klient- och/eller skvaller-SSL-certifikat behålls. Om du är osäker bör du kunna köra keytool -list -keystore <keystore-path> -rfc -storepass <password> för att skriva ut certifikaten.

  5. När klusterresursen har skapats kör du följande kommando för att hämta information om klusterkonfigurationen:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    
    az managed-cassandra cluster show \
       --cluster-name $clusterName \
       --resource-group $resourceGroupName \
    
  6. Föregående kommando returnerar information om den hanterade instansmiljön. Du behöver skvallercertifikaten så att du kan installera dem i förtroendearkivet för noder i ditt befintliga datacenter. Följande skärmbild visar utdata från föregående kommando och formatet för certifikat:

    Hämta certifikatinformationen från klustret.

    Anteckning

    Certifikaten som returneras från kommandot ovan innehåller radbrytningar som representeras som text, till exempel \r\n. Du bör kopiera varje certifikat till en fil och formatera det innan du försöker importera det till ditt befintliga datacenters förtroendearkiv.

    Tips

    gossipCertificates Kopiera matrisvärdet som visas i skärmbilden ovan till en fil och använd följande bash-skript (du skulle behöva ladda ned och installera jq för din plattform) för att formatera certifikaten och skapa separata pem-filer för var och en.

    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 '1d' -e '$d' -i $filename
    done
    
  7. Skapa sedan ett nytt datacenter i hybridklustret. Ersätt variabelvärdena med klusterinformationen:

    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
    

    Anteckning

    Värdet för --sku kan väljas från följande tillgängliga SKU:er:

    • 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

    Observera också att --availability-zone är inställt på false. Om du vill aktivera tillgänglighetszoner anger du detta till true. Tillgänglighetszoner ökar tjänstens serviceavtal för tillgänglighet. Mer information finns i den fullständiga SLA-informationen här.

    Varning

    Tillgänglighetszoner stöds inte i alla regioner. Distributioner misslyckas om du väljer en region där tillgänglighetszoner inte stöds. Se här för regioner som stöds. En lyckad distribution av tillgänglighetszoner är också beroende av tillgängligheten för beräkningsresurser i alla zoner i den angivna regionen. Distributioner kan misslyckas om den SKU som du har valt, eller kapaciteten, inte är tillgänglig i alla zoner.

  8. Nu när det nya datacentret har skapats kör du kommandot show datacenter för att visa dess information:

    resourceGroupName='MyResourceGroup'
    clusterName='cassandra-hybrid-cluster'
    dataCenterName='dc1'
    
    az managed-cassandra datacenter show \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName
    
  9. Föregående kommando matar ut det nya datacentrets startvärdesnoder:

    Hämta information om datacentret.

  10. Lägg nu till det nya datacentrets startvärdesnoder i det befintliga datacentrets startvärdesnodkonfiguration i filen cassandra.yaml . Och installera skvallercertifikaten för den hanterade instansen som du samlade in tidigare till förtroendearkivet för varje nod i ditt befintliga kluster med hjälp av keytool kommandot för varje certifikat:

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

    Anteckning

    Om du vill lägga till fler datacenter kan du upprepa stegen ovan, men du behöver bara startvärdesnoderna.

    Viktigt

    Om ditt befintliga Apache Cassandra-kluster bara har ett enda datacenter, och det är första gången ett datacenter läggs till, kontrollerar du att parametern endpoint_snitch i cassandra.yaml är inställd på GossipingPropertyFileSnitch.

    Viktigt

    Om din befintliga programkod använder QUORUM för konsekvens bör du se till att innan du ändrar replikeringsinställningarna i steget nedan använder din befintliga programkod LOCAL_QUORUM för att ansluta till ditt befintliga kluster (annars misslyckas liveuppdateringar när du har ändrat replikeringsinställningarna i nedanstående steg). När replikeringsstrategin har ändrats kan du återgå till QUORUM om det önskas.

  11. Använd slutligen följande CQL-fråga för att uppdatera replikeringsstrategin i varje nyckelområde så att alla datacenter i klustret inkluderas:

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

    Du måste också uppdatera flera systemtabeller:

    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}
    

    Viktigt

    Om datacenter i ditt befintliga kluster inte framtvingar kryptering från klient till nod (SSL) och du tänker att programkoden ska ansluta direkt till Cassandra Managed Instance måste du även aktivera SSL i programkoden.

Använda hybridkluster för realtidsmigrering

Anvisningarna ovan ger vägledning för att konfigurera ett hybridkluster. Detta är dock också ett bra sätt att uppnå en sömlös migrering utan avbrott. Om du har en lokal eller annan Cassandra-miljö som du vill inaktivera utan avbrottstid, till förmån för att köra din arbetsbelastning i Azure Managed Instance för Apache Cassandra, måste följande steg utföras i den här ordningen:

  1. Konfigurera hybridkluster – följ anvisningarna ovan.

  2. Inaktivera tillfälligt automatiska reparationer i Azure Managed Instance för Apache Cassandra under migreringen:

        az managed-cassandra cluster update --cluster-name --resource-group--repair-enabled false
    
  3. Kör nodetool repair --full på varje nod i det befintliga klustrets datacenter. Du bör bara köra detta när alla tidigare steg har vidtagits. Detta bör säkerställa att alla historiska data replikeras till dina nya datacenter i Azure Managed Instance för Apache Cassandra. För de flesta installationer kan du bara köra en eller två parallellt för att inte överbelasta klustret. Du kan övervaka en viss reparationskörning genom att kontrollera nodetool netsats och nodetool compactionstats mot den specifika noden. Om du har en mycket stor mängd data i ditt befintliga kluster kan det vara nödvändigt att köra reparationerna på nyckelrymden eller till och med tabellnivå . Mer information om hur du kör reparationer i Cassandra finns här .

    Anteckning

    För att påskynda reparationer rekommenderar vi (om systembelastningen tillåter det) att öka både dataflöde och komprimeringsdataflöde som i exemplet nedan:

      az managed-cassandra cluster invoke-command --resource-group $resourceGroupName --cluster-name $clusterName --host $host --command-name nodetool --arguments "setstreamthroughput"="" "7000"=""
       
      az managed-cassandra cluster invoke-command --resource-group $resourceGroupName --cluster-name $clusterName --host $host --command-name nodetool --arguments "setcompactionthroughput"="" "960"=""
    
  4. Klipp ut programkoden så att den pekar på startvärdesnoderna i din nya Azure Managed Instance för Apache Cassandra-datacenter.

    Viktigt

    Om datacenter i ditt befintliga kluster inte framtvingar kryptering från klient till nod (SSL) måste du aktivera detta i programkoden, eftersom Cassandra Managed Instance framtvingar detta.

  5. Kör nodetool-reparation igen på alla noder i det befintliga klustrets datacenter, på samma sätt som i steg 3 ovan (för att säkerställa att eventuella delta replikeras efter att programmet har klippts över).

  6. Kör ALTER KEYSPACE för varje nyckelutrymme på samma sätt som tidigare, men ta nu bort dina gamla datacenter.

  7. Kör nodetool decommission för varje gammal datacenternod.

  8. Växla programkoden tillbaka till kvorum (om det behövs/rekommenderas).

  9. Återaktivera automatiska reparationer:

        az managed-cassandra cluster update --cluster-name --resource-group--repair-enabled true
    

Felsökning

Om du får ett fel när du tillämpar behörigheter på din Virtual Network med hjälp av Azure CLI, till exempel Det går inte att hitta användaren eller tjänstens huvudnamn i grafdatabasen för "e5007d2c-4b13-4a74-9b6a-605d99f03501", kan du tillämpa samma behörighet manuellt från Azure Portal. Lär dig hur du gör detta här.

Anteckning

Azure Cosmos DB-rolltilldelningen används endast i distributionssyfte. Azure Managed Instanced för Apache Cassandra har inga serverdelsberoenden i Azure Cosmos DB.

Rensa resurser

Om du inte kommer att fortsätta att använda det här klustret för den hanterade instansen tar du bort det med följande steg:

  1. På den vänstra menyn i Azure Portal väljer du Resursgrupper.
  2. I listan väljer du den resursgrupp som du skapade för den här snabbstarten.
  3. I fönstret Översikt för resursgruppen väljer du Ta bort resursgrupp.
  4. I nästa fönster anger du namnet på resursgruppen som ska tas bort och väljer sedan Ta bort.

Nästa steg

I den här snabbstarten har du lärt dig hur du skapar ett hybridkluster med hjälp av Azure CLI och Azure Managed Instance för Apache Cassandra. Nu kan du börja arbeta med klustret.