Apache HBase-clusterreplicatie instellen in virtuele Azure-netwerken

Meer informatie over het instellen van Apache HBase-replicatie binnen een virtueel netwerk of tussen twee virtuele netwerken in Azure.

Clusterreplicatie maakt gebruik van een bron-push-methodologie. Een HBase-cluster kan een bron of een bestemming zijn, of het kan beide rollen tegelijk vervullen. Replicatie is asynchroon. Het doel van replicatie is uiteindelijke consistentie. Wanneer de bron een bewerking ontvangt in een kolomfamilie wanneer replicatie is ingeschakeld, wordt de bewerking doorgegeven aan alle doelclusters. Wanneer gegevens van het ene cluster naar het andere worden gerepliceerd, worden het broncluster en alle clusters die de gegevens al hebben gebruikt, gebruikt om replicatielussen te voorkomen.

In dit artikel stelt u een bron-doelreplicatie in. Zie de referentiehandleiding voor Apache HBase voor andere clustertopologieën.

Hier volgen HBase-replicatiegebruiksscenario's voor één virtueel netwerk:

  • Taakverdeling. U kunt bijvoorbeeld scans of MapReduce-taken uitvoeren op het doelcluster en gegevens opnemen in het broncluster.
  • Hoge beschikbaarheid toevoegen.
  • Gegevens migreren van het ene HBase-cluster naar het andere.
  • Een Azure HDInsight-cluster upgraden van de ene versie naar de andere.

Hier volgen HBase-replicatiegebruiksscenario's voor twee virtuele netwerken:

  • Herstel na noodgevallen instellen.
  • Taakverdeling en partitionering van de toepassing.
  • Hoge beschikbaarheid toevoegen.

U kunt clusters repliceren met behulp van scriptactiescripts vanuit GitHub.

Vereisten

Voordat u aan dit artikel begint, moet u een Azure-abonnement hebben. Zie Een gratis proefversie van Azure downloaden.

De omgevingen instellen

U hebt drie configuratieopties:

  • Twee Apache HBase-clusters in één virtueel Azure-netwerk.
  • Twee Apache HBase-clusters in twee verschillende virtuele netwerken in dezelfde regio.
  • Twee Apache HBase-clusters in twee verschillende virtuele netwerken in twee verschillende regio's (geo-replicatie).

In dit artikel wordt het scenario voor geo-replicatie behandeld.

Om u te helpen bij het instellen van de omgevingen, hebben we enkele Azure Resource Manager-sjablonen gemaakt. Als u liever de omgevingen instelt met behulp van andere methoden, raadpleegt u:

Twee virtuele netwerken instellen in twee verschillende regio's

Als u een sjabloon wilt gebruiken waarmee twee virtuele netwerken in twee verschillende regio's en de VPN-verbinding tussen de VNets worden gemaakt, selecteert u de volgende knop Implementeren in Azure .

Deploy to Azure button for new cluster

Enkele van de in code vastgelegde waarden in de sjabloon:

VNet 1

Eigenschappen Weergegeven als
Locatie VS - west
VNet-naam <ClusterNamePrevix-vnet1>
Adresruimtevoorvoegsel 10.1.0.0/16
Subnetnaam subnet 1
Subnetvoorvoegsel 10.1.0.0/24
Naam van subnet (gateway) GatewaySubnet (kan niet worden gewijzigd)
Subnetvoorvoegsel (gateway) 10.1.255.0/27
Gatewaynaam vnet1gw
Gatewaytype VPN
VPN-type gateway RouteBased
Gateway-SKU Basis
IP-adres van gateway vnet1gwip

VNet 2

Eigenschappen Weergegeven als
Locatie VS - oost
VNet-naam <ClusterNamePrevix-vnet2>
Adresruimtevoorvoegsel 10.2.0.0/16
Subnetnaam subnet 1
Subnetvoorvoegsel 10.2.0.0/24
Naam van subnet (gateway) GatewaySubnet (kan niet worden gewijzigd)
Subnetvoorvoegsel (gateway) 10.2.255.0/27
Gatewaynaam vnet2gw
Gatewaytype VPN
VPN-type gateway RouteBased
Gateway-SKU Basis
IP-adres van gateway vnet1gwip

U kunt ook de onderstaande stappen volgen om twee verschillende vnet's en VM's handmatig in te stellen

  1. Twee VNET's (virtueel netwerk) maken in een andere regio
  2. Peering inschakelen in zowel het VNET. Ga naar virtueel netwerk dat u in de bovenstaande stappen hebt gemaakt en klik op peering en voeg peeringkoppeling van een andere regio toe. Doe dit voor zowel het virtuele netwerk.
  3. Maak de nieuwste versie van de UBUNTU in elk VNET.

DNS instellen

In de laatste sectie maakt de sjabloon een virtuele Ubuntu-machine in elk van de twee virtuele netwerken. In deze sectie installeert u Bind op de twee virtuele DNS-machines en configureert u vervolgens het doorsturen van DNS op de twee virtuele machines.

Als u Bind wilt installeren, moet yon het openbare IP-adres van de twee virtuele DNS-machines vinden.

  1. Open de Azure Portal.
  2. Open de virtuele DNS-machine door Resourcesgroepen > [resourcegroepnaam] > [vnet1DNS] te selecteren. De naam van de resourcegroep is de naam die u in de laatste procedure maakt. De standaardnamen van virtuele DNS-machines zijn vnet1DNS en vnet2NDS.
  3. Selecteer Eigenschappen om de eigenschappenpagina van het virtuele netwerk te openen.
  4. Noteer het openbare IP-adres en controleer ook het privé-IP-adres. Het privé-IP-adres is 10.1.0.4 voor vnet1DNS en 10.2.0.4 voor vnet2DNS.
  5. Wijzig de DNS-servers voor beide virtuele netwerken zodat standaard -DNS-servers (Door Azure geleverde) worden gebruikt om binnenkomende en uitgaande toegang toe te staan om pakketten te downloaden om Bind te installeren in de volgende stappen.

Gebruik de volgende procedure om Bind te installeren:

  1. Gebruik SSH om verbinding te maken met het openbare IP-adres van de virtuele DNS-machine. In het volgende voorbeeld wordt verbinding gemaakt met een virtuele machine op 40.68.254.142:

    ssh sshuser@40.68.254.142
    

    Vervang door sshuser het SSH-gebruikersaccount dat u hebt opgegeven bij het maken van de virtuele DNS-machine.

    Notitie

    Er zijn verschillende manieren om het ssh hulpprogramma te verkrijgen. In Linux, Unix en macOS wordt deze geleverd als onderdeel van het besturingssysteem. Als u Windows gebruikt, kunt u een van de volgende opties overwegen:

  2. Gebruik de volgende opdrachten uit de SSH-sessie om Bind te installeren:

     sudo apt-get update -y
     sudo apt-get install bind9 -y
    
  3. Configureer Bind om aanvragen voor naamomzetting door te sturen naar uw on-premises DNS-server. Gebruik hiervoor de volgende tekst als de inhoud van het /etc/bind/named.conf.options bestand:

    acl goodclients {
        10.1.0.0/16; # Replace with the IP address range of the virtual network 1
        10.2.0.0/16; # Replace with the IP address range of the virtual network 2
        localhost;
        localhost;
    };
    
    options {
        directory "/var/cache/bind";
        recursion yes;
        allow-query { goodclients; };
    
        forwarders {
            168.63.129.16; #This is the Azure DNS server
        };
    
        dnssec-validation auto;
    
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
    };
    

    Belangrijk

    Vervang de waarden in de goodclients sectie door het IP-adresbereik van de twee virtuele netwerken. In deze sectie worden de adressen gedefinieerd waaruit deze DNS-server aanvragen accepteert.

    Gebruik de volgende opdracht om dit bestand te bewerken:

    sudo nano /etc/bind/named.conf.options
    

    Als u het bestand wilt opslaan, gebruikt u Ctrl+X, Y en vervolgens Enter.

  4. Gebruik vanuit de SSH-sessie de volgende opdracht:

    hostname -f
    

    Met deze opdracht wordt een waarde geretourneerd die lijkt op de volgende tekst:

    vnet1DNS.icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net
    

    De icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net tekst is het DNS-achtervoegsel voor dit virtuele netwerk. Sla deze waarde op, omdat deze later wordt gebruikt.

    U moet ook het DNS-achtervoegsel van de andere DNS-server achterhalen. U hebt deze nodig in de volgende stap.

  5. Als u Bind wilt configureren om DNS-namen voor resources in het virtuele netwerk op te lossen, gebruikt u de volgende tekst als de inhoud van het /etc/bind/named.conf.local bestand:

    // Replace the following with the DNS suffix for your virtual network
    zone "v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net" {
            type forward;
            forwarders {10.2.0.4;}; # The Azure recursive resolver
    };
    

    Belangrijk

    U moet het v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net vervangen door het DNS-achtervoegsel van het andere virtuele netwerk. En het ip-adres van de doorstuurserver is het privé-IP-adres van de DNS-server in het andere virtuele netwerk.

    Gebruik de volgende opdracht om dit bestand te bewerken:

    sudo nano /etc/bind/named.conf.local
    

    Als u het bestand wilt opslaan, gebruikt u Ctrl+X, Y en vervolgens Enter.

  6. Gebruik de volgende opdracht om Bind te starten:

    sudo service bind9 restart
    
  7. Gebruik de volgende opdrachten om te controleren of binding de namen van resources in het andere virtuele netwerk kan omzetten:

    sudo apt install dnsutils
    nslookup vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net
    

    Belangrijk

    Vervang vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net door de FQDN (Fully Qualified Domain Name) van de virtuele DNS-machine in het andere netwerk.

    Vervang 10.2.0.4 door het interne IP-adres van uw aangepaste DNS-server in het andere virtuele netwerk.

    Het antwoord lijkt op de volgende tekst:

    Server:         10.2.0.4
    Address:        10.2.0.4#53
    
    Non-authoritative answer:
    Name:   vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net
    Address: 10.2.0.4
    

    Tot nu toe kunt u het IP-adres van het andere netwerk niet opzoeken zonder het opgegeven IP-adres van de DNS-server.

Het virtuele netwerk configureren voor het gebruik van de aangepaste DNS-server

Als u het virtuele netwerk wilt configureren voor het gebruik van de aangepaste DNS-server in plaats van de recursieve resolver van Azure, gebruikt u de volgende stappen:

  1. Selecteer in Azure Portal het virtuele netwerk en selecteer vervolgens DNS-servers.

  2. Selecteer Aangepast en voer het interne IP-adres van de aangepaste DNS-server in. Selecteer ten slotte Opslaan.

  3. Open de virtuele DNS-servermachine in vnet1 en klik op Opnieuw opstarten. U moet alle virtuele machines in het virtuele netwerk opnieuw opstarten om de DNS-configuratie van kracht te laten worden.

  4. Herhaal de stappen voor het configureren van de aangepaste DNS-server voor vnet2.

Als u de DNS-configuratie wilt testen, kunt u verbinding maken met de twee virtuele DNS-machines met behulp van SSH en de DNS-server van het andere virtuele netwerk pingen met behulp van de hostnaam. Als dit niet werkt, gebruikt u de volgende opdracht om de DNS-status te controleren:

sudo service bind9 status

Apache HBase-clusters maken

Maak een Apache HBase-cluster in elk van de twee virtuele netwerken met de volgende configuratie:

  • Naam van resourcegroep: gebruik dezelfde resourcegroepnaam als u de virtuele netwerken hebt gemaakt.
  • Clustertype: HBase
  • Versie: HBase 1.1.2 (HDI 3.6)
  • Locatie: Gebruik dezelfde locatie als het virtuele netwerk. Vnet1 is standaard VS - west en vnet2 is VS - oost.
  • Opslag: Maak een nieuw opslagaccount voor het cluster.
  • Virtueel netwerk (van geavanceerde instellingen in de portal): selecteer vnet1 die u in de laatste procedure hebt gemaakt.
  • Subnet: De standaardnaam die in de sjabloon wordt gebruikt, is subnet1.

Om ervoor te zorgen dat de omgeving correct is geconfigureerd, moet u de FQDN van het hoofdknooppunt tussen de twee clusters kunnen pingen.

Testgegevens laden

Wanneer u een cluster repliceert, moet u de tabellen opgeven die u wilt repliceren. In deze sectie laadt u enkele gegevens in het broncluster. In de volgende sectie schakelt u replicatie tussen de twee clusters in.

Als u een tabel Contactpersonen wilt maken en enkele gegevens in de tabel wilt invoegen, volgt u de instructies in de zelfstudie over Apache HBase: Aan de slag met Apache HBase in HDInsight.

Notitie

Als u tabellen wilt repliceren vanuit een aangepaste naamruimte, moet u ervoor zorgen dat ook de juiste aangepaste naamruimten zijn gedefinieerd in het doelcluster.

Replicatie inschakelen

In de volgende stappen wordt beschreven hoe u het scriptactiescript aanroept vanuit Azure Portal. Zie HDInsight-clusters aanpassen met behulp van scriptactie voor informatie over het uitvoeren van een scriptactie met behulp van Azure PowerShell en de klassieke Azure CLI.

HBase-replicatie inschakelen vanuit Azure Portal

  1. Meld u aan bij de Azure-portal.

  2. Open het HBase-broncluster.

  3. Selecteer scriptacties in het clustermenu.

  4. Selecteer Bovenaan de pagina de optie Nieuw verzenden.

  5. Selecteer of voer de volgende gegevens in:

    1. Naam: Voer Replicatie inschakelen in.
    2. Bash-script-URL: Voer in https://raw.githubusercontent.com/Azure/hbase-utils/master/replication/hdi_enable_replication.sh.
    3. Hoofd: Zorg ervoor dat deze parameter is geselecteerd. Wis de andere knooppunttypen.
    4. Parameters: Met de volgende voorbeeldparameters kunt u replicatie voor alle bestaande tabellen inschakelen en vervolgens alle gegevens van het broncluster naar het doelcluster kopiëren:

    -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -copydata

    Notitie

    Gebruik hostnaam in plaats van FQDN voor de DNS-naam van het bron- en doelcluster.

    In dit scenario wordt ervan uitgegaan dat hn1 actief hoofdknooppunt is. Controleer het cluster om het actieve hoofdknooppunt te identificeren.

  6. Selecteer Maken. Het uitvoeren van het script kan enige tijd duren, met name wanneer u het argument -copydata gebruikt.

Vereiste argumenten:

Name Beschrijving
-s, --src-cluster Hiermee geeft u de DNS-naam van het HBase-broncluster. Bijvoorbeeld: -s hbsrccluster, --src-cluster=hbsrccluster
-d, --dst-cluster Hiermee geeft u de DNS-naam van het HBase-doelcluster (replica). Bijvoorbeeld: -s dsthbcluster, --src-cluster=dsthbcluster
-sp, --src-ambari-password Hiermee geeft u het beheerderswachtwoord voor Ambari op het HBase-broncluster.
-dp, --dst-ambari-password Hiermee geeft u het beheerderswachtwoord voor Ambari op het doel-HBase-cluster.

Optionele argumenten:

Name Beschrijving
-su, --src-ambari-user Hiermee geeft u de gebruikersnaam van de beheerder voor Ambari op het bron-HBase-cluster. De standaardwaarde is beheerder.
-du, --dst-ambari-user Hiermee geeft u de gebruikersnaam van de beheerder voor Ambari op het doel HBase-cluster. De standaardwaarde is beheerder.
-t, --table-list Hiermee geeft u de tabellen die moeten worden gerepliceerd. Bijvoorbeeld: --table-list="table1; tabel2; tabel3". Als u geen tabellen opgeeft, worden alle bestaande HBase-tabellen gerepliceerd.
-m, --machine Hiermee geeft u het hoofdknooppunt waarop de scriptactie wordt uitgevoerd. De waarde moet worden gekozen op basis van het actieve hoofdknooppunt. Gebruik deze optie wanneer u het script $0 uitvoert als een scriptactie vanuit de HDInsight-portal of Azure PowerShell.
-cp, -copydata Hiermee schakelt u de migratie van bestaande gegevens in de tabellen waarvoor replicatie is ingeschakeld.
-rpm, -repliceren-phoenix-meta Hiermee schakelt u replicatie in op Phoenix-systeemtabellen.

Gebruik deze optie met voorzichtigheid. Het is raadzaam om Phoenix-tabellen opnieuw te maken op replicaclusters voordat u dit script gebruikt.
-h, --help Geeft gebruiksgegevens weer.

De print_usage() sectie van het script heeft een gedetailleerde uitleg van parameters.

Nadat de scriptactie is geïmplementeerd, kunt u SSH gebruiken om verbinding te maken met het doel-HBase-cluster en vervolgens te controleren of de gegevens zijn gerepliceerd.

Replicatiescenario's

In de volgende lijst ziet u enkele algemene gebruiksvoorbeelden en de bijbehorende parameterinstellingen:

  • Schakel replicatie in voor alle tabellen tussen de twee clusters. In dit scenario hoeven bestaande gegevens in de tabellen niet te worden gekopieerd of gemigreerd en worden geen Phoenix-tabellen gebruikt. Gebruik de volgende parameters:

    -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password>

  • Schakel replicatie in voor specifieke tabellen. Gebruik de volgende parameters om replicatie in te schakelen voor tabel1, tabel2 en tabel3:

    -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -t "table1;table2;table3"

  • Schakel replicatie in voor specifieke tabellen en kopieer de bestaande gegevens. Gebruik de volgende parameters om replicatie in te schakelen voor tabel1, tabel2 en tabel3:

    -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -t "table1;table2;table3" -copydata

  • Schakel replicatie in voor alle tabellen en repliceer Phoenix-metagegevens van bron naar bestemming. Phoenix-metagegevensreplicatie is niet perfect. Wees voorzichtig. Gebruik de volgende parameters:

    -m hn1 -s <source hbase cluster name> -d <destination hbase cluster name> -sp <source cluster Ambari password> -dp <destination cluster Ambari password> -t "table1;table2;table3" -replicate-phoenix-meta

Replicatie tussen ESP-clusters instellen

Vereisten

  1. Beide ESP-clusters moeten zich in dezelfde realm (domein) bevinden. Controleer /etc/krb5.conf de standaardeigenschap van het bestand om te bevestigen.
  2. Algemene gebruiker moet er zijn die lees- en schrijftoegang heeft tot beide clusters
    1. Als beide clusters bijvoorbeeld dezelfde gebruiker voor clusterbeheerder hebben (bijvoorbeeld admin@abc.example.com), kan die gebruiker worden gebruikt om het replicatiescript uit te voeren.
    2. Als beide clusters dezelfde gebruikersgroep gebruiken, kunt u een nieuwe gebruiker toevoegen of bestaande gebruiker uit de groep gebruiken.
    3. Als beide clusters gebruikmaken van een andere gebruikersgroep, kunt u een nieuwe gebruiker toevoegen om beide bestaande gebruikers uit de groepen te gebruiken.

Stappen voor het uitvoeren van een replicatiescript

Notitie

Voer de volgende stappen alleen uit als DNS de hostnaam van het doelcluster niet correct kan oplossen.

  1. Kopieer sinkclusterhosts IP en hostnaamtoewijzing in bronclusterknooppunten /etc/hosts-bestand.
  2. Kopieer hoofdknooppunt, werkknooppunt en ZooKeeper-knooppunten host en IP-toewijzing vanuit /etc/hosts-bestand van doelcluster (sink).
  3. Voeg gekopieerd broncluster/etc/hosts-bestand toe. Deze vermeldingen moeten worden toegevoegd aan hoofdknooppunten, werkknooppunten en ZooKeeper-knooppunten.

Stap 1: Maak een keytab-bestand voor de gebruiker met behulp van ktutil. $ ktutil

  1. addent -password -p admin@ABC.EXAMPLE.COM -k 1 -e RC4-HMAC
  2. Wachtwoord vragen om te verifiëren, gebruikerswachtwoord opgeven
  3. wkt /etc/security/keytabs/admin.keytab

Notitie

Zorg ervoor dat het keytab-bestand is opgeslagen in /etc/security.keytabs/ de map in de <username>.keytab indeling.

Stap 2: Scriptactie uitvoeren met -ku optie

  1. Geef -ku <username> op ESP-clusters op.
Name Beschrijving
-ku, --krb-user Voor ESP-clusters, algemene Kerberos-gebruiker die zowel bron- als doelclusters kan verifiëren

Gegevens kopiëren en migreren

Er zijn twee afzonderlijke scriptactiescripts beschikbaar voor het kopiëren of migreren van gegevens nadat replicatie is ingeschakeld:

U kunt dezelfde procedure volgen die wordt beschreven in Replicatie inschakelen om de scriptactie aan te roepen. Gebruik de volgende parameters:

-m hn1 -t <table1:start_timestamp:end_timestamp;table2:start_timestamp:end_timestamp;...> -p <replication_peer> [-everythingTillNow]

De print_usage() sectie van het script heeft een gedetailleerde beschrijving van parameters.

Scenario's

  • Kopieer specifieke tabellen (test1, test2 en test3) voor alle rijen die tot nu toe zijn bewerkt (huidige tijdstempel):

    -m hn1 -t "test1::;test2::;test3::" -p "<zookeepername1>;<zookeepername2>;<zookeepername3>:2181:/hbase-unsecure" -everythingTillNow

    Of:

    -m hn1 -t "test1::;test2::;test3::" --replication-peer="<zookeepername1>;<zookeepername2>;<zookeepername3>:2181:/hbase-unsecure" -everythingTillNow

  • Specifieke tabellen kopiëren met een opgegeven tijdsbereik:

    -m hn1 -t "table1:0:452256397;table2:14141444:452256397" -p "<zookeepername1>;<zookeepername2>;<zookeepername3>:2181:/hbase-unsecure"

Replicatie uitschakelen

Als u replicatie wilt uitschakelen, gebruikt u een ander script voor scriptacties vanuit GitHub. U kunt dezelfde procedure volgen die wordt beschreven in Replicatie inschakelen om de scriptactie aan te roepen. Gebruik de volgende parameters:

-m hn1 -s <source hbase cluster name> -sp <source cluster Ambari password> <-all|-t "table1;table2;...">

De print_usage() sectie van het script heeft een gedetailleerde uitleg van parameters.

Scenario's

  • Schakel replicatie voor alle tabellen uit:

    -m hn1 -s <source hbase cluster name> -sp Mypassword\!789 -all

    of

    --src-cluster=<source hbase cluster name> --dst-cluster=<destination hbase cluster name> --src-ambari-user=<source cluster Ambari user name> --src-ambari-password=<source cluster Ambari password>

  • Replicatie uitschakelen voor opgegeven tabellen (tabel1, tabel2 en tabel3):>

    -m hn1 -s <source hbase cluster name> -sp <source cluster Ambari password> -t "table1;table2;table3"

Notitie

Als u het doelcluster wilt verwijderen, moet u het verwijderen uit de peerlijst van het broncluster. U kunt dit doen door de opdracht remove_peer '1' uit te voeren in de hbase-shell op het broncluster. Als dit niet lukt, werkt het broncluster mogelijk niet goed.

Volgende stappen

In dit artikel hebt u geleerd hoe u Apache HBase-replicatie instelt in een virtueel netwerk of tussen twee virtuele netwerken. Zie de volgende artikelen voor meer informatie over HDInsight en Apache HBase: