MariaDB (MySQL)-kluster: Azure-självstudie

Viktigt

De klassiska virtuella datorerna kommer att dras tillbaka den 1 mars 2023.

Om du använder IaaS-resurser från ASM ska du slutföra migreringen den 1 mars 2023. Vi rekommenderar att du gör switchen tidigare för att dra nytta av de många funktionerna i Azure Resource Manager.

Mer information finns i migrera dina IaaS-resurser till Azure Resource Manager före den 1 mars 2023.

Anteckning

Azure har två olika distributions modeller för att skapa och arbeta med resurser: Azure Resource Manager och klassisk. Den här artikeln beskriver hur du gör om du använder den klassiska distributionsmodellen. Microsoft rekommenderar att de flesta nya distributioner använder Azure Resource Managers modellen.

Anteckning

MariaDB Enterprise Cluster är nu tillgängligt på Azure Marketplace. Det nya erbjudandet distribuerar automatiskt ett MariaDB Galera-kluster på Azure Resource Manager. Du bör använda det nya erbjudandet från Azure Marketplace.

Den här artikeln visar hur du skapar ett Galera -kluster med flera huvud servrar i MariaDBs (en robust, skalbar och tillförlitlig direkt ersättning för MySQL) som fungerar i en miljö med hög tillgänglighet på Azure Virtual Machines.

Översikt över arkitekturen

I den här artikeln beskrivs hur du utför följande steg:

  • Skapa ett kluster med tre noder.
  • Separera data diskarna från OS-disken.
  • Öka IOPS genom att skapa data diskarna i RAID-0/Striped-inställning.
  • Använd Azure Load Balancer för att utjämna belastningen för de tre noderna.
  • Du kan minimera repetitivt arbete genom att skapa en VM-avbildning som innehåller MariaDB + Galera och sedan använda den för att skapa de andra virtuella datorerna i klustret.

System arkitektur

Anteckning

I det här avsnittet används Azure CLI -verktygen, så se till att ladda ned dem och ansluta dem till din Azure-prenumeration enligt anvisningarna. Om du behöver en referens till de kommandon som är tillgängliga i Azure CLI, se kommando referens för Azure CLI. Du måste också skapa en SSH-nyckel för autentisering och Anteckna platsen för. pem-filen.

Skapa mallen

Infrastruktur

  1. Skapa en tillhörighets grupp som innehåller resurserna tillsammans.

     azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"
    
  2. Skapa ett virtuellt nätverk.

     azure network vnet create --address-space 10.0.0.0 --cidr 8 --subnet-name mariadb --subnet-start-ip 10.0.0.0 --subnet-cidr 24 --affinity-group mariadbcluster mariadbvnet
    
  3. Skapa ett lagrings konto som är värd för alla våra diskar. Du bör inte placera fler än 40 kraftigt använda diskar på samma lagrings konto för att undvika att överskrida lagrings konto gränsen på 20 000 IOPS. I det här fallet är det bra under den gränsen, så att du kan lagra allt i samma konto för enkelhetens skull.

     azure storage account create mariadbstorage --label mariadbstorage --affinity-group mariadbcluster
    
  4. Hitta namnet på avbildningen av den virtuella CentOS 7-datorn.

     azure vm image list | findstr CentOS
    

    Utdata ser ut ungefär som 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926.

    Använd det namnet i följande steg.

  5. Skapa mallen för virtuell dator och ersätt/path/to/Key.pem med den sökväg där du sparade den genererade. pem SSH-nyckeln.

     azure vm create --virtual-network-name mariadbvnet --subnet-names mariadb --blob-url "http://mariadbstorage.blob.core.windows.net/vhds/mariadbhatemplate-os.vhd"  --vm-size Medium --ssh 22 --ssh-cert "/path/to/key.pem" --no-ssh-password mariadbtemplate 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926 azureuser
    
  6. Anslut data diskar på 4 500 GB till den virtuella datorn för användning i RAID-konfigurationen.

     FOR /L %d IN (1,1,4) DO azure vm disk attach-new mariadbhatemplate 512 http://mariadbstorage.blob.core.windows.net/vhds/mariadbhatemplate-data-%d.vhd
    
  7. Använd SSH för att logga in på den mall-VM som du skapade på mariadbhatemplate.cloudapp.net:22 och Anslut med hjälp av din privata nyckel.

Programvara

  1. Hämta roten.

     sudo su
    
  2. Installera RAID-support:

    a. Installera mdadm.

           yum install mdadm
    

    b. Skapa RAID0/stripe-konfigurationen med ett fil system för EXT4.

           mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf
           mdadm --detail --scan >> /etc/mdadm.conf
           mkfs -t ext4 /dev/md0
    

    c. Skapa katalogen för monterings punkter.

           mkdir /mnt/data
    

    d. Hämta UUID för den nyligen skapade RAID-enheten.

           blkid | grep /dev/md0
    

    e. Redigera/etc/fstab.

           vi /etc/fstab
    

    f. Lägg till enheten för att aktivera automatisk montering vid omstart, och ersätt UUID: n med värdet som hämtades från föregående blkid -kommando.

           UUID=<UUID FROM PREVIOUS>   /mnt/data ext4   defaults,noatime   1 2
    

    g. Montera den nya partitionen.

           mount /mnt/data
    
  3. Installera MariaDB.

    a. Skapa filen MariaDB. lagrings platsen.

             vi /etc/yum.repos.d/MariaDB.repo
    

    b. Fyll i lagrings platsen-filen med följande innehåll:

           [mariadb]
           name = MariaDB
           baseurl = http://yum.mariadb.org/10.0/centos7-amd64
           gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
           gpgcheck=1
    

    c. Ta bort befintliga postfix-och MariaDB-libs för att undvika konflikter.

        yum remove postfix mariadb-libs-*
    

    d. Installera MariaDB med Galera.

        yum install MariaDB-Galera-server MariaDB-client galera
    
  4. Flytta MySQL data-katalogen till RAID block-enheten.

    a. Kopiera den aktuella MySQL-katalogen till den nya platsen och ta bort den gamla katalogen.

        cp -avr /var/lib/mysql /mnt/data  
        rm -rf /var/lib/mysql
    

    b. Ange behörigheter för den nya katalogen enligt detta.

        chown -R mysql:mysql /mnt/data && chmod -R 755 /mnt/data/
    

    c. Skapa en symlink som pekar på den gamla katalogen på den nya platsen på RAID-partitionen.

        ln -s /mnt/data/mysql /var/lib/mysql
    
  5. Eftersom SELinux stör kluster åtgärderna, är det nödvändigt att inaktivera det för den aktuella sessionen. Redigera /etc/selinux/config för att inaktivera den för efterföljande omstarter.

         setenforce 0
    
         then editing `/etc/selinux/config` to set `SELINUX=permissive`
    
  6. Verifiera MySQL-körningar.

    a. Starta MySQL.

        service mysql start
    

    b. Skydda MySQL-installationen, ange rot lösen ordet, ta bort anonyma användare om du vill inaktivera fjärrinloggning för roten och ta bort test databasen.

        mysql_secure_installation
    

    c. Skapa en användare på databasen för kluster åtgärder och eventuellt för dina program.

        mysql -u root -p
        GRANT ALL PRIVILEGES ON *.* TO 'cluster'@'%' IDENTIFIED BY 'p@ssw0rd' WITH GRANT OPTION; FLUSH PRIVILEGES;
        exit
    

    d. Stoppa MySQL.

         service mysql stop
    
  7. Skapa en plats hållare för konfiguration.

    a. Redigera MySQL-konfigurationen för att skapa en plats hållare för kluster inställningarna. Ersätt inte <Variables> eller ta bort kommentaren nu. Det sker när du har skapat en virtuell dator från den här mallen.

         vi /etc/my.cnf.d/server.cnf
    

    b. Redigera avsnittet Galera och ta bort det.

    c. Redigera avsnittet [MariaDB] .

        wsrep_provider=/usr/lib64/galera/libgalera_smm.so
        binlog_format=ROW
        wsrep_sst_method=rsync
        bind-address=0.0.0.0 # When set to 0.0.0.0, the server listens to remote connections
        default_storage_engine=InnoDB
        innodb_autoinc_lock_mode=2
    
        wsrep_sst_auth=cluster:p@ssw0rd # CHANGE: Username and password you created for the SST cluster MySQL user
        #wsrep_cluster_name='mariadbcluster' # CHANGE: Uncomment and set your desired cluster name
        #wsrep_cluster_address="gcomm://mariadb1,mariadb2,mariadb3" # CHANGE: Uncomment and Add all your servers
        #wsrep_node_address='<ServerIP>' # CHANGE: Uncomment and set IP address of this server
        #wsrep_node_name='<NodeName>' # CHANGE: Uncomment and set the node name of this server
    
  8. Öppna nödvändiga portar i brand väggen med hjälp av brand väggen på CentOS 7.

    • MySQL: firewall-cmd --zone=public --add-port=3306/tcp --permanent
    • GALERA: firewall-cmd --zone=public --add-port=4567/tcp --permanent
    • GALERA-IST: firewall-cmd --zone=public --add-port=4568/tcp --permanent
    • RSYNC: firewall-cmd --zone=public --add-port=4444/tcp --permanent
    • Läs in brand väggen igen: firewall-cmd --reload
  9. Optimera systemet för prestanda. Mer information finns i prestanda justerings strategin.

    a. Redigera MySQL-konfigurationsfilen igen.

         vi /etc/my.cnf.d/server.cnf
    

    b. Redigera avsnittet [MariaDB] och Lägg till följande innehåll:

    Anteckning

    Vi rekommenderar att InnoDB_buffer_pool_size är 70 procent av den virtuella datorns minne. I det här exemplet har den ställts in på 2,45 GB för den virtuella Azure-datorn med 3,5 GB RAM-minne.

        innodb_buffer_pool_size = 2508M # The buffer pool contains buffered data and the index. This is usually set to 70 percent of physical memory.
        innodb_log_file_size = 512M #  Redo logs ensure that write operations are fast, reliable, and recoverable after a crash
        max_connections = 5000 # A larger value will give the server more time to recycle idled connections
        innodb_file_per_table = 1 # Speed up the table space transmission and optimize the debris management performance
        innodb_log_buffer_size = 128M # The log buffer allows transactions to run without having to flush the log to disk before the transactions commit
        innodb_flush_log_at_trx_commit = 2 # The setting of 2 enables the most data integrity and is suitable for Master in MySQL cluster
        query_cache_size = 0
    
  10. Stoppa MySQL, inaktivera MySQL-tjänsten från att köras vid start för att undvika avbrott i klustret när du lägger till en nod och avetablerar datorn.

     service mysql stop
     chkconfig mysql off
     waagent -deprovision
    
  11. Avbilda den virtuella datorn via portalen. (För närvarande beskriver problem #1268 i Azure CLI-verktygen det faktum att bilder som samlas in av Azure CLI-verktygen inte fångar de anslutna data diskarna.)

    a. Stäng av datorn via portalen.

    b. Klicka på avbilda och ange avbildnings namnet som MariaDB-Galera-image. Ange en beskrivning och markera "Jag har kört waagent".

    Avbilda den virtuella datorn

Skapa klustret

Skapa tre virtuella datorer med mallen som du skapade och konfigurera och starta sedan klustret.

  1. Skapa den första virtuella CentOS 7-datorn från den MariaDB-Galera-avbildning som du skapade, och ange följande information:
  • Namn på virtuellt nätverk: mariadbvnet

  • Undernät: MariaDB

  • Dator storlek: medel

  • Namn på moln tjänst: mariadbha (eller vilket namn du vill ska nås via mariadbha.cloudapp.net)

  • Dator namn: mariadb1

  • Användar namn: azureuser

  • SSH-åtkomst: aktive rad

  • Du skickar SSH Certificate. pem-filen och ersätter/path/to/Key.pem med sökvägen där du sparade den genererade. pem SSH-nyckeln.

    Anteckning

    Följande kommandon är uppdelade över flera rader för tydlighetens skull, men du bör ange var och en rad.

     azure vm create
     --virtual-network-name mariadbvnet
     --subnet-names mariadb
     --availability-set clusteravset
     --vm-size Medium
     --ssh-cert "/path/to/key.pem"
     --no-ssh-password
     --ssh 22
     --vm-name mariadb1
     mariadbha mariadb-galera-image azureuser
    
  1. Skapa två fler virtuella datorer genom att ansluta dem till moln tjänsten mariadbha. Ändra det virtuella dator namnet och SSH-porten till en unik port som inte står i konflikt med andra virtuella datorer i samma moln tjänst.

     azure vm create
     --virtual-network-name mariadbvnet
     --subnet-names mariadb
     --availability-set clusteravset
     --vm-size Medium
     --ssh-cert "/path/to/key.pem"
     --no-ssh-password
     --ssh 23
     --vm-name mariadb2
     --connect mariadbha mariadb-galera-image azureuser
    

För MariaDB3:

    azure vm create
    --virtual-network-name mariadbvnet
    --subnet-names mariadb
    --availability-set clusteravset
    --vm-size Medium
    --ssh-cert "/path/to/key.pem"
    --no-ssh-password
    --ssh 24
    --vm-name mariadb3
    --connect mariadbha mariadb-galera-image azureuser
  1. Du måste hämta den interna IP-adressen för var och en av de tre virtuella datorerna i nästa steg:

    Hämtar IP-adress

  2. Använd SSH för att logga in på de tre virtuella datorerna och redigera konfigurations filen på var och en av dem.

     sudo vi /etc/my.cnf.d/server.cnf
    

    Ta bort kommentar wsrep_cluster_name och wsrep_cluster_address genom att ta bort # i början av raden. Du kan dessutom ersätta <ServerIP> i wsrep_node_address och <NodeName> i wsrep_node_name med den virtuella datorns IP-adress och namn och samtidigt ta bort kommentarer till raderna.

  3. Starta klustret på MariaDB1 och låt det köras vid start.

     sudo service mysql bootstrap
     chkconfig mysql on
    
  4. Starta MySQL på MariaDB2 och MariaDB3 och låt det köras vid start.

     sudo service mysql start
     chkconfig mysql on
    

Belastningsutjämna klustret

När du skapade de klustrade virtuella datorerna lade du till dem i en tillgänglighets uppsättning med namnet clusteravset för att säkerställa att de har lagts till i olika fel-och uppdaterings domäner och att Azure aldrig utför underhåll på alla datorer på samma gång. Den här konfigurationen uppfyller de krav som stöds av Azure service avtal (SLA).

Använd nu Azure Load Balancer för att balansera begär Anden mellan de tre noderna.

Kör följande kommandon på datorn med hjälp av Azure CLI.

Kommando parametrarnas struktur är: azure vm endpoint create-multiple <MachineName> <PublicPort>:<VMPort>:<Protocol>:<EnableDirectServerReturn>:<Load Balanced Set Name>:<ProbeProtocol>:<ProbePort>

azure vm endpoint create-multiple mariadb1 3306:3306:tcp:false:MySQL:tcp:3306
azure vm endpoint create-multiple mariadb2 3306:3306:tcp:false:MySQL:tcp:3306
azure vm endpoint create-multiple mariadb3 3306:3306:tcp:false:MySQL:tcp:3306

CLI: en anger avsöknings intervall för belastningsutjämnare till 15 sekunder, vilket kan vara lite för långt. Ändra den i portalen under slut punkter för någon av de virtuella datorerna.

Redigera slut punkt

Välj Konfigurera om den belastningsutjämnade uppsättningen.

Konfigurera om den belastningsutjämnade uppsättningen

Ändra avsöknings intervallet till 5 sekunder och spara ändringarna.

Ändra avsöknings intervall

Verifiera klustret

Hård arbetet är gjort. Klustret bör nu vara tillgängligt på mariadbha.cloudapp.net:3306, vilket träffar belastningsutjämnaren och dirigerar begär Anden mellan de tre virtuella datorerna smidigt och effektivt.

Använd din favorit MySQL-klient för att ansluta eller Anslut från en av de virtuella datorerna för att kontrol lera att klustret fungerar.

 mysql -u cluster -h mariadbha.cloudapp.net -p

Skapa sedan en databas och fyll i den med vissa data.

CREATE DATABASE TestDB;
USE TestDB;
CREATE TABLE TestTable (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value VARCHAR(255));
INSERT INTO TestTable (value)  VALUES ('Value1');
INSERT INTO TestTable (value)  VALUES ('Value2');
SELECT * FROM TestTable;

Databasen som du skapade returnerar följande tabell:

+----+--------+
| id | value  |
+----+--------+
|  1 | Value1 |
|  4 | Value2 |
+----+--------+
2 rows in set (0.00 sec)

Nästa steg

I den här artikeln har du skapat ett MariaDB + Galera-kluster med hög tillgänglighet på virtuella Azure-datorer som kör CentOS 7. De virtuella datorerna är belastningsutjämnade med Azure Load Balancer.

Du kanske vill titta på ett annat sätt för kluster MySQL på Linux och sätt att optimera och testa MySQL-prestanda på virtuella Azure Linux-datorer.