Konfigurera replikering av Apache HBase-kluster i virtuella Azure-nätverk

Lär dig hur du konfigurerar Apache HBase-replikering i ett virtuellt nätverk eller mellan två virtuella nätverk i Azure.

Klusterreplikering använder en käll-push-metod. Ett HBase-kluster kan vara en källa eller ett mål, eller så kan det uppfylla båda rollerna samtidigt. Replikeringen är asynkron. Målet med replikering är slutlig konsekvens. När källan får en redigering till en kolumnfamilj när replikeringen är aktiverad, sprids redigeringen till alla målkluster. När data replikeras från ett kluster till ett annat, källklustret och alla kluster som redan har förbrukat data som spåras, för att förhindra replikeringsloopar.

I den här artikeln konfigurerar du en källmålsreplikering. Andra klustertopologier finns i referensguiden för Apache HBase.

Följande är användningsfall för HBase-replikering för ett enda virtuellt nätverk:

  • Belastningsutjämning. Du kan till exempel köra genomsökningar eller MapReduce-jobb i målklustret och mata in data i källklustret.
  • Lägger till hög tillgänglighet.
  • Migrera data från ett HBase-kluster till ett annat.
  • Uppgradera ett Azure HDInsight-kluster från en version till en annan.

Följande är användningsfall för HBase-replikering för två virtuella nätverk:

  • Konfigurera haveriberedskap.
  • Belastningsutjämning och partitionering av programmet.
  • Lägger till hög tillgänglighet.

Du kan replikera kluster med skriptåtgärdsskript från GitHub.

Förutsättningar

Innan du börjar den här artikeln måste du ha en Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.

Konfigurera miljöerna

Du har tre konfigurationsalternativ:

  • Två Apache HBase-kluster i ett virtuellt Azure-nätverk.
  • Två Apache HBase-kluster i två olika virtuella nätverk i samma region.
  • Två Apache HBase-kluster i två olika virtuella nätverk i två olika regioner (geo-replikering).

Den här artikeln beskriver scenariot geo-replikering.

För att hjälpa dig att konfigurera miljöerna har vi skapat några Azure Resource Manager-mallar. Om du föredrar att konfigurera miljöer med hjälp av andra metoder kan du läsa:

Konfigurera två virtuella nätverk i två olika regioner

Om du vill använda en mall som skapar två virtuella nätverk i två olika regioner och VPN-anslutningen mellan de virtuella nätverken väljer du knappen Distribuera till Azure .

Deploy to Azure button for new cluster

Några av de hårdkodade värdena i mallen:

VNet 1

Property Värde
Plats Västra USA
VNet-namn <ClusterNamePrevix-vnet1>
Adressutrymmesprefix 10.1.0.0/16
Namn på undernät undernät 1
Prefix för undernät 10.1.0.0/24
Undernätsnamn (gateway) GatewaySubnet (kan inte ändras)
Prefix för undernät (gateway) 10.1.255.0/27
Gatewaynamn vnet1gw
Gateway-typ Vpn
Gateway-VPN-typ Routningsbaserad
Gateway-SKU Grundläggande
Gateway-IP vnet1gwip

VNet 2

Property Värde
Plats USA, östra
VNet-namn <ClusterNamePrevix-vnet2>
Adressutrymmesprefix 10.2.0.0/16
Namn på undernät undernät 1
Prefix för undernät 10.2.0.0/24
Undernätsnamn (gateway) GatewaySubnet (kan inte ändras)
Prefix för undernät (gateway) 10.2.255.0/27
Gatewaynamn vnet2gw
Gateway-typ Vpn
Gateway-VPN-typ Routningsbaserad
Gateway-SKU Grundläggande
Gateway-IP vnet1gwip

Du kan också följa stegen nedan för att konfigurera två olika virtuella nätverk och virtuella datorer manuellt

  1. Skapa två virtuella nätverk (virtuellt nätverk) i olika regioner
  2. Aktivera peering i både det virtuella nätverket. Gå till Virtuellt nätverk som skapats i ovanstående steg och klicka sedan på peering och lägg till peeringlänk i en annan region. Gör det för både det virtuella nätverket.
  3. Skapa den senaste versionen av UBUNTU i varje VNET.

Konfigurera DNS

I det sista avsnittet skapar mallen en virtuell Ubuntu-dator i vart och ett av de två virtuella nätverken. I det här avsnittet installerar du Bind på de två virtuella DNS-datorerna och konfigurerar sedan DNS-vidarebefordran på de två virtuella datorerna.

För att installera Bind måste du hitta den offentliga IP-adressen för de två virtuella DNS-datorerna.

  1. Öppna Azure Portal.
  2. Öppna den virtuella DNS-datorn genom att välja Resursgrupper > [resursgruppsnamn] > [vnet1DNS]. Resursgruppens namn är det du skapade i den senaste proceduren. Standardnamnen för virtuella DNS-datorer är vnet1DNS och vnet2NDS.
  3. Välj Egenskaper för att öppna egenskapssidan för det virtuella nätverket.
  4. Skriv ned den offentliga IP-adressen och verifiera även den privata IP-adressen. Den privata IP-adressen ska vara 10.1.0.4 för vnet1DNS och 10.2.0.4 för vnet2DNS.
  5. Ändra DNS-servrarna för båda de virtuella nätverken så att standard-DNS-servrar (Azure-tillhandahållna) används för att tillåta inkommande och utgående åtkomst för att ladda ned paket för att installera Bindning i följande steg.

Om du vill installera Bind använder du följande procedur:

  1. Använd SSH för att ansluta till den offentliga IP-adressen för den virtuella DNS-datorn. Följande exempel ansluter till en virtuell dator på 40.68.254.142:

    ssh sshuser@40.68.254.142
    

    Ersätt sshuser med det SSH-användarkonto som du angav när du skapade den virtuella DNS-datorn.

    Kommentar

    Det finns en mängd olika sätt att hämta ssh verktyget. I Linux, Unix och macOS tillhandahålls det som en del av operativsystemet. Om du använder Windows bör du överväga något av följande alternativ:

  2. Om du vill installera Bind använder du följande kommandon från SSH-sessionen:

     sudo apt-get update -y
     sudo apt-get install bind9 -y
    
  3. Konfigurera Bind för att vidarebefordra namnmatchningsbegäranden till din lokala DNS-server. Om du vill göra det använder du följande text som innehållet i /etc/bind/named.conf.options filen:

    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; };
    };
    

    Viktigt!

    Ersätt värdena i goodclients avsnittet med IP-adressintervallet för de två virtuella nätverken. I det här avsnittet definieras de adresser som DNS-servern accepterar begäranden från.

    Om du vill redigera den här filen använder du följande kommando:

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

    Om du vill spara filen använder du Ctrl+X, Y och sedan Retur.

  4. Använd följande kommando från SSH-sessionen:

    hostname -f
    

    Det här kommandot returnerar ett värde som liknar följande text:

    vnet1DNS.icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net
    

    Texten icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net är DNS-suffixetför det här virtuella nätverket. Spara det här värdet eftersom det används senare.

    Du måste också ta reda på DNS-suffixet från den andra DNS-servern. Du behöver det i nästa steg.

  5. Om du vill konfigurera Bind för att matcha DNS-namn för resurser i det virtuella nätverket använder du följande text som innehållet i /etc/bind/named.conf.local filen:

    // 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
    };
    

    Viktigt!

    Du måste ersätta v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net med DNS-suffixet för det andra virtuella nätverket. Och vidarebefordrarens IP-adress är dns-serverns privata IP-adress i det andra virtuella nätverket.

    Om du vill redigera den här filen använder du följande kommando:

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

    Om du vill spara filen använder du Ctrl+X, Y och sedan Retur.

  6. Använd följande kommando för att starta Bindning:

    sudo service bind9 restart
    
  7. Kontrollera att bindningen kan matcha namnen på resurser i det andra virtuella nätverket genom att använda följande kommandon:

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

    Viktigt!

    Ersätt vnet2dns.v5ant3az2hbe1edzthhvwwkcse.bx.internal.cloudapp.net med det fullständigt kvalificerade domännamnet (FQDN) för den virtuella DNS-datorn i det andra nätverket.

    Ersätt 10.2.0.4 med den interna IP-adressen för din anpassade DNS-server i det andra virtuella nätverket.

    Svaret ser ut ungefär som i följande text:

    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
    

    Hittills kan du inte söka efter IP-adressen från det andra nätverket utan angiven IP-adress för DNS-servern.

Konfigurera det virtuella nätverket så att det använder den anpassade DNS-servern

Använd följande steg för att konfigurera det virtuella nätverket att använda den anpassade DNS-servern i stället för den rekursiva Azure-matcharen:

  1. I Azure-portalen väljer du det virtuella nätverket och sedan DNS-servrar.

  2. Välj Anpassad och ange den interna IP-adressen för den anpassade DNS-servern. Välj slutligen Spara.

  3. Öppna den virtuella DNS-serverdatorn i vnet1 och klicka på Starta om. Du måste starta om alla virtuella datorer i det virtuella nätverket för att DNS-konfigurationen ska börja gälla.

  4. Upprepa stegen för att konfigurera den anpassade DNS-servern för vnet2.

Om du vill testa DNS-konfigurationen kan du ansluta till de två virtuella DNS-datorerna med hjälp av SSH och pinga DNS-servern i det andra virtuella nätverket med hjälp av dess värdnamn. Om det inte fungerar använder du följande kommando för att kontrollera DNS-status:

sudo service bind9 status

Skapa Apache HBase-kluster

Skapa ett Apache HBase-kluster i vart och ett av de två virtuella nätverken med följande konfiguration:

  • Resursgruppsnamn: Använd samma resursgruppsnamn som du skapade de virtuella nätverken.
  • Klustertyp: HBase
  • Version: HBase 1.1.2 (HDI 3.6)
  • Plats: Använd samma plats som det virtuella nätverket. Som standard är vnet1 USA, västra och vnet2 är USA, östra.
  • Lagring: Skapa ett nytt lagringskonto för klustret.
  • Virtuellt nätverk (från Avancerade inställningar på portalen): Välj vnet1 som du skapade i den senaste proceduren.
  • Undernät: Standardnamnet som används i mallen är undernät1.

För att säkerställa att miljön är korrekt konfigurerad måste du kunna pinga huvudnodens FQDN mellan de två klustren.

Läsa in testdata

När du replikerar ett kluster måste du ange de tabeller som du vill replikera. I det här avsnittet läser du in vissa data i källklustret. I nästa avsnitt aktiverar du replikering mellan de två klustren.

Om du vill skapa en kontakttabell och infoga data i tabellen följer du anvisningarna i Apache HBase-självstudien: Kom igång med Apache HBase i HDInsight.

Kommentar

Om du vill replikera tabeller från ett anpassat namnområde måste du även se till att lämpliga anpassade namnområden definieras i målklustret.

Aktivera replikering

Följande steg beskriver hur du anropar skriptåtgärdsskriptet från Azure-portalen. Information om hur du kör en skriptåtgärd med hjälp av Azure PowerShell och klassiska Azure CLI finns i Anpassa HDInsight-kluster med hjälp av skriptåtgärd.

Aktivera HBase-replikering från Azure-portalen

  1. Logga in på Azure-portalen.

  2. Öppna HBase-källklustret.

  3. I klustermenyn väljer du Skriptåtgärder.

  4. Längst upp på sidan väljer du Skicka ny.

  5. Välj eller ange följande information:

    1. Namn: Ange Aktivera replikering.
    2. BASH-skript-URL: Ange https://raw.githubusercontent.com/Azure/hbase-utils/master/replication/hdi_enable_replication.sh.
    3. Huvud: Kontrollera att den här parametern är markerad. Rensa de andra nodtyperna.
    4. Parametrar: Följande exempelparametrar aktiverar replikering för alla befintliga tabeller och kopierar sedan alla data från källklustret till målklustret:

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

    Kommentar

    Använd värdnamn i stället för FQDN för både käll- och målklustrets DNS-namn.

    Den här genomgången förutsätter hn1 som aktiv huvudnod. Kontrollera klustret för att identifiera den aktiva huvudnoden.

  6. Välj Skapa. Skriptet kan ta en stund att köra, särskilt när du använder argumentet -copydata .

Obligatoriska argument:

Name beskrivning
-s, --src-cluster Anger DNS-namnet på HBase-källklustret. Till exempel: -s hbsrccluster, --src-cluster=hbsrccluster
-d, --dst-cluster Anger DNS-namnet på målklustret (repliken) HBase. Exempel: -s dsthbcluster, --src-cluster=dsthbcluster
-sp, --src-ambari-password Anger administratörslösenordet för Ambari i HBase-källklustret.
-dp, --dst-ambari-password Anger administratörslösenordet för Ambari i målets HBase-kluster.

Valfria argument:

Name beskrivning
-su, --src-ambari-user Anger administratörsanvändarnamnet för Ambari i HBase-källklustret. Standardvärdet är admin.
-du, --dst-ambari-user Anger administratörsanvändarnamnet för Ambari i målets HBase-kluster. Standardvärdet är admin.
-t, --table-list Anger de tabeller som ska replikeras. Exempel: --table-list="table1; table2; table3". Om du inte anger tabeller replikeras alla befintliga HBase-tabeller.
-m, --machine Anger huvudnoden där skriptåtgärden körs. Värdet ska väljas baserat på vilken som är den aktiva huvudnoden. Använd det här alternativet när du kör skriptet $0 som en skriptåtgärd från HDInsight-portalen eller Azure PowerShell.
-cp, -copydata Möjliggör migrering av befintliga data i tabellerna där replikering är aktiverad.
-rpm, -replicate-phoenix-meta Aktiverar replikering på Phoenix-systemtabeller.

Använd det här alternativet med försiktighet. Vi rekommenderar att du återskapar Phoenix-tabeller i replikkluster innan du använder det här skriptet.
-h, --help Visar användningsinformation.

Avsnittet print_usage() i skriptet har en detaljerad förklaring av parametrar.

När skriptåtgärden har distribuerats kan du använda SSH för att ansluta till målets HBase-kluster och sedan kontrollera att data har replikerats.

Replikeringsscenarier

I följande lista visas några allmänna användningsfall och deras parameterinställningar:

  • Aktivera replikering på alla tabeller mellan de två klustren. Det här scenariot kräver inte kopiering eller migrering av befintliga data i tabellerna och använder inte Phoenix-tabeller. Använd följande parametrar:

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

  • Aktivera replikering i specifika tabeller. Om du vill aktivera replikering i table1, table2 och table3 använder du följande parametrar:

    -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"

  • Aktivera replikering i specifika tabeller och kopiera befintliga data. Om du vill aktivera replikering i table1, table2 och table3 använder du följande parametrar:

    -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

  • Aktivera replikering på alla tabeller och replikera Phoenix-metadata från källa till mål. Phoenix metadatareplikering är inte perfekt. Använd den med försiktighet. Använd följande parametrar:

    -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

Konfigurera replikering mellan ESP-kluster

Krav

  1. Båda ESP-klustren bör finnas där i samma sfär (domän). Kontrollera /etc/krb5.conf filens standardsfäregenskap för att bekräfta.
  2. Vanliga användare bör vara där som har läs- och skrivåtkomst till båda klustren
    1. Om båda klustren till exempel har samma klusteradministratörsanvändare (till exempel admin@abc.example.com), kan den användaren användas för att köra replikeringsskriptet.
    2. Om båda klustren använder samma användargrupp kan du lägga till en ny användare eller använda en befintlig användare från gruppen.
    3. Om båda klustren använder en annan användargrupp kan du lägga till en ny användare för att båda använda en befintlig användare från grupperna.

Steg för att köra replikeringsskript

Kommentar

Utför endast följande steg om DNS inte kan matcha värdnamnet korrekt för målklustret.

  1. Kopiera mottagarkluster är värd för IP- och värdnamnsmappning i källklusternoder /etc/hosts-fil.
  2. Kopiera huvudnoden, arbetsnoden och ZooKeeper-nodernas värd och IP-mappning från /etc/hosts-filen för målklustret (mottagare).
  3. Lägg till kopierade poster källkluster /etc/hosts-fil. Dessa poster bör läggas till i huvudnoder, arbetsnoder och ZooKeeper-noder.

Steg 1: Skapa nyckelfliksfil för användaren med hjälp av ktutil. $ ktutil

  1. addent -password -p admin@ABC.EXAMPLE.COM -k 1 -e RC4-HMAC
  2. Be om lösenord för att autentisera, ange användarlösenord
  3. wkt /etc/security/keytabs/admin.keytab

Kommentar

Kontrollera att nyckelfliksfilen lagras i /etc/security.keytabs/ mappen i <username>.keytab formatet .

Steg 2: Kör skriptåtgärd med -ku alternativet

  1. Ange -ku <username> i ESP-kluster.
Name beskrivning
-ku, --krb-user För ESP-kluster, Common Kerberos-användare, som kan autentisera både käll- och målkluster

Kopiera och migrera data

Det finns två separata skript för att kopiera eller migrera data när replikeringen har aktiverats:

Du kan följa samma procedur som beskrivs i Aktivera replikering för att anropa skriptåtgärden. Använd följande parametrar:

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

Avsnittet print_usage() i skriptet innehåller en detaljerad beskrivning av parametrar.

Scenarier

  • Kopiera specifika tabeller (test1, test2 och test3) för alla rader som har redigerats fram till nu (aktuell tidsstämpel):

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

    Eller:

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

  • Kopiera specifika tabeller med ett angivet tidsintervall:

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

Inaktivera replikering

Om du vill inaktivera replikering använder du ett annat skriptåtgärdsskript från GitHub. Du kan följa samma procedur som beskrivs i Aktivera replikering för att anropa skriptåtgärden. Använd följande parametrar:

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

Avsnittet print_usage() i skriptet har en detaljerad förklaring av parametrar.

Scenarier

  • Inaktivera replikering i alla tabeller:

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

    eller

    --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>

  • Inaktivera replikering i angivna tabeller (table1, table2 och table3):

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

Kommentar

Om du tänker ta bort målklustret måste du ta bort det från peer-listan i källklustret. Detta kan göras genom att köra kommandot remove_peer "1" i hbase-gränssnittet i källklustret. Om detta misslyckas kanske källklustret inte fungerar korrekt.

Nästa steg

I den här artikeln har du lärt dig hur du konfigurerar Apache HBase-replikering i ett virtuellt nätverk eller mellan två virtuella nätverk. Mer information om HDInsight och Apache HBase finns i följande artiklar: