MariaDB (MySQL)-cluster: Azure-zelf studie

Belangrijk

Klassieke virtuele machines zullen worden ingetrokken op 1 maart 2023.

Als u IaaS-resources van ASM gebruikt, voltooit u de migratie op 1 maart 2023. We raden u aan de switch sneller te laten profiteren van de vele functie verbeteringen in Azure Resource Manager.

Zie voor meer informatie uw IaaS-Resources migreren naar Azure Resource Manager op 1 maart 2023.

Notitie

Azure heeft twee verschillende implementatie modellen voor het maken van en werken met resources: Azure Resource Manager en klassiek. Dit artikel is van toepassing op het klassieke implementatiemodel. Micro soft raadt aan de meeste nieuwe implementaties het Azure Resource Manager model te gebruiken.

Notitie

MariaDB Enter prise-cluster is nu beschikbaar in de Azure Marketplace. Met de nieuwe aanbieding wordt automatisch een MariaDB Galera-cluster geïmplementeerd op Azure Resource Manager. U moet de nieuwe aanbieding van Azure Marketplacegebruiken.

In dit artikel wordt beschreven hoe u een Galera -cluster van MariaDBs (een robuuste, schaal bare en betrouw bare vervanging voor MySQL) maakt voor gebruik in een omgeving met hoge Beschik baarheid op Azure virtual machines.

Overzicht van de architectuur

In dit artikel wordt beschreven hoe u de volgende stappen uitvoert:

  • Maak een cluster met drie knoop punten.
  • Scheid de gegevens schijven van de besturingssysteem schijf.
  • Maak de gegevens schijven in de RAID-0/striped-instelling om IOPS te verhogen.
  • Gebruik Azure Load Balancer om de belasting voor de drie knoop punten te verdelen.
  • Als u terugkerende werk wilt minimaliseren, maakt u een VM-installatie kopie die MariaDB + Galera bevat en gebruikt u deze om de andere cluster-Vm's te maken.

Systeem architectuur

Notitie

In dit onderwerp worden de Azure cli -hulpprogram ma's gebruikt. Zorg er daarom voor dat u deze downloadt en verbindt met uw Azure-abonnement volgens de instructies. Als u een verwijzing nodig hebt naar de opdrachten die beschikbaar zijn in de Azure CLI, raadpleegt u de Naslag informatie voor Azure cli-opdrachten. U moet ook een SSH-sleutel maken voor verificatie en noteer de locatie van het. pem-bestand.

De sjabloon maken

Infrastructuur

  1. Maak een affiniteits groep om de resources samen op te slaan.

     azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"
    
  2. Maak een virtueel netwerk.

     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. Maak een opslag account om al onze schijven te hosten. U mag niet meer dan 40 zwaar gebruikte schijven op hetzelfde opslag account plaatsen om te voor komen dat de limiet voor de opslag account van 20.000 IOPS wordt bereikt. In dit geval kunt u zich onder die limiet bevinden, zodat u alles op hetzelfde account opslaat voor eenvoud.

     azure storage account create mariadbstorage --label mariadbstorage --affinity-group mariadbcluster
    
  4. Zoek de naam van de installatie kopie van de virtuele machine CentOS 7.

     azure vm image list | findstr CentOS
    

    De uitvoer is iets zoals 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926.

    Gebruik die naam in de volgende stap.

  5. Maak de VM-sjabloon en vervang/Path/to/Key.pem door het pad waar u de gegenereerde. pem SSH-sleutel hebt opgeslagen.

     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. Koppel 4 500-GB gegevens schijven aan de virtuele machine voor gebruik in de RAID-configuratie.

     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. Gebruik SSH om u aan te melden bij de sjabloon-VM die u hebt gemaakt op mariadbhatemplate.cloudapp.net:22 en maak verbinding met behulp van uw persoonlijke sleutel.

Software

  1. De hoofdmap ophalen.

     sudo su
    
  2. RAID-ondersteuning installeren:

    a. Installeer mdadm.

           yum install mdadm
    

    b. Maak de RAID0/Stripe-configuratie met een EXT4-bestands systeem.

           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. Maak de koppel punt Directory.

           mkdir /mnt/data
    

    d. Haal de UUID van het zojuist gemaakte RAID-apparaat op.

           blkid | grep /dev/md0
    

    e. /Etc/fstab. bewerken

           vi /etc/fstab
    

    f. Voeg het apparaat toe om automatisch koppelen bij opnieuw opstarten in te scha kelen en vervang de UUID door de waarde die is verkregen van de vorige blkid -opdracht.

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

    g. Koppel de nieuwe partitie.

           mount /mnt/data
    
  3. Installeer MariaDB.

    a. Maak het bestand MariaDB. opslag plaats.

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

    b. Vul het opslag plaats-bestand in met de volgende inhoud:

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

    c. Verwijder bestaande achtervoegsel-en mariadb-bibliotheken om conflicten te voor komen.

        yum remove postfix mariadb-libs-*
    

    d. Installeer MariaDB met Galera.

        yum install MariaDB-Galera-server MariaDB-client galera
    
  4. Verplaats de MySQL-gegevens Directory naar het RAID-blok apparaat.

    a. Kopieer de huidige MySQL-map naar de nieuwe locatie en verwijder de oude map.

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

    b. Stel de machtigingen voor de nieuwe map dienovereenkomstig in.

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

    c. Maak een symlink die de oude map naar de nieuwe locatie op de RAID-partitie verwijst.

        ln -s /mnt/data/mysql /var/lib/mysql
    
  5. Omdat selinux de cluster bewerkingen verstoort, is het nood zakelijk om het uit te scha kelen voor de huidige sessie. Bewerk /etc/selinux/config om het uit te scha kelen voor volgende keer opnieuw opstarten.

         setenforce 0
    
         then editing `/etc/selinux/config` to set `SELINUX=permissive`
    
  6. MySQL-uitvoeringen valideren.

    a. Start MySQL.

        service mysql start
    

    b. De MySQL-installatie beveiligen, het hoofd wachtwoord instellen, anonieme gebruikers verwijderen om externe basis aanmelding uit te scha kelen en de test database verwijderen.

        mysql_secure_installation
    

    c. Maak een gebruiker in de Data Base voor cluster bewerkingen en optioneel voor uw toepassingen.

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

    d. MySQL stoppen.

         service mysql stop
    
  7. Maak een tijdelijke aanduiding voor de configuratie.

    a. Bewerk de MySQL-configuratie om een tijdelijke aanduiding voor de cluster instellingen te maken. Vervang de <Variables> of verwijder de opmerking nu niet. Dit gebeurt nadat u een virtuele machine hebt gemaakt op basis van deze sjabloon.

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

    b. Bewerk de sectie Galera en schakel deze uit.

    c. Bewerk de sectie [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. Open de vereiste poorten op de firewall met behulp van firewalls op 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
    • De firewall opnieuw laden: firewall-cmd --reload
  9. Optimaliseer het systeem voor de prestaties. Zie voor meer informatie strategie voor het afstemmen van prestaties.

    a. Bewerk het MySQL-configuratie bestand opnieuw.

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

    b. Bewerk de sectie [mariadb] en voeg de volgende inhoud toe:

    Notitie

    Het is raadzaam dat InnoDB_buffer_pool_size 70 procent van het geheugen van uw virtuele machine is. In dit voor beeld is deze ingesteld op 2,45 GB voor de gemiddelde Azure VM met 3,5 GB aan RAM-geheugen.

        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. Stop MySQL, schakel de MySQL-service uit bij het opstarten om te voor komen dat het cluster wordt verstoord bij het toevoegen van een knoop punt en de inrichting van de machine te verwijderen.

     service mysql stop
     chkconfig mysql off
     waagent -deprovision
    
  11. Leg de virtuele machine vast via de portal. (Momenteel geeft #1268 in de Azure cli-hulpprogram ma's een beschrijving van het feit dat installatie kopieën die zijn vastgelegd door de Azure cli-hulpprogram ma's, de gekoppelde gegevens schijven niet vastleggen.)

    a. Sluit de machine af via de portal.

    b. Klik op vastleggen en geef de naam van de installatie kopie op als mariadb-Galera-image. Geef een beschrijving op en schakel ' Ik heb waagent uit. '

    De virtuele machine vastleggen

Het cluster maken

Maak drie Vm's met de sjabloon die u hebt gemaakt, en configureer en start vervolgens het cluster.

  1. Maak de eerste CentOS-VM van de mariadb-Galera-installatie kopie die u hebt gemaakt en geef de volgende informatie op:
  • Naam van virtueel netwerk: mariadbvnet

  • Subnet: mariadb

  • Computer grootte: gemiddeld

  • Naam van Cloud service: mariadbha (of de naam die u wilt openen via mariadbha.cloudapp.net)

  • Computer naam: mariadb1

  • Gebruikers naam: azureuser

  • SSH-toegang: ingeschakeld

  • Het SSH Certificate. pem-bestand door te geven en/Path/to/Key.pem te vervangen door het pad waar u de gegenereerde. pem SSH-sleutel hebt opgeslagen.

    Notitie

    De volgende opdrachten zijn gesplitst over meerdere regels voor duidelijkheid, maar u moet elke regel opgeven.

     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. Maak twee meer virtuele machines door deze te verbinden met de mariadbha-Cloud service. Wijzig de naam van de virtuele machine en de SSH-poort in een unieke poort die geen conflict veroorzaakt met andere virtuele machines in dezelfde Cloud service.

     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
    

Voor 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. U moet het interne IP-adres van elk van de drie Vm's ophalen voor de volgende stap:

    IP-adres ophalen

  2. Gebruik SSH om u aan te melden bij de drie Vm's en bewerk het configuratie bestand op elk hiervan.

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

    Verwijder wsrep_cluster_name en wsrep_cluster_address door de # aan het begin van de regel te verwijderen. Vervang daarnaast <ServerIP> in wsrep_node_address en <NodeName> in wsrep_node_name met het IP-adres en de naam van de virtuele machine, respectievelijk, en verwijder deze regels ook.

  3. Start het cluster op MariaDB1 en laat het uitvoeren bij het opstarten.

     sudo service mysql bootstrap
     chkconfig mysql on
    
  4. Start MySQL op MariaDB2 en MariaDB3 en laat het worden uitgevoerd bij het opstarten.

     sudo service mysql start
     chkconfig mysql on
    

Taak verdeling van het cluster

Wanneer u de geclusterde Vm's hebt gemaakt, hebt u deze toegevoegd aan een beschikbaarheidsset met de naam clusteravset om ervoor te zorgen dat ze op verschillende fout-en update domeinen zijn geplaatst en dat Azure nooit onderhoud op alle machines tegelijk wordt uitgevoerd. Deze configuratie voldoet aan de vereisten die worden ondersteund door de Azure service level agreement (SLA).

Gebruik nu Azure Load Balancer om aanvragen te verdelen tussen de drie knoop punten.

Voer de volgende opdrachten uit op de computer met behulp van de Azure CLI.

De structuur van de opdracht parameters is: 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

De CLI stelt het load balancer probe-interval in op 15 seconden. Dit kan iets te lang zijn. Wijzig deze in de portal onder eind punten voor een van de vm's.

Eind punt bewerken

Selecteer de set met gelijke taak verdeling opnieuw configureren.

De set met gelijke taak verdeling opnieuw configureren

Wijzig het Test interval in 5 seconden en sla uw wijzigingen op.

Test interval wijzigen

Het cluster valideren

De vaste hoeveelheid werk wordt uitgevoerd. Het cluster moet nu toegankelijk zijn op mariadbha.cloudapp.net:3306, waarmee de load balancer en de aanvragen tussen de drie Vm's soepel en efficiënt worden doorgestuurd.

Gebruik uw favoriete MySQL-client om verbinding te maken of maak verbinding vanaf een van de virtuele machines om te controleren of dit cluster werkt.

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

Maak vervolgens een Data Base en vul deze met een aantal gegevens.

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;

De data base die u hebt gemaakt, retourneert de volgende tabel:

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

Volgende stappen

In dit artikel hebt u een Maxi maal beschik bare cluster met drie knoop punten MariaDB + Galera gemaakt op virtuele machines van Azure met CentOS 7. De virtuele machines worden gelijkmatig verdeeld met Azure Load Balancer.

U kunt bijvoorbeeld een andere manier voor het clusteren van MySQL op Linux en manieren om MySQL-prestaties op virtuele machines met Azure Linux te optimaliseren en testen.