Cluster MariaDB (MySQL): kurz Azure

Důležité

Klasické virtuální počítače budou vyřazeny od 1. března 2023.

Pokud používáte prostředky IaaS z ASM, dokončete prosím migraci do 1. března 2023. Doporučujeme, abyste tento přepínač provedli dřív, abyste mohli využít řadu vylepšení funkcí v Azure Resource Manager.

Další informace najdete v tématu migrace prostředků IaaS do Azure Resource Manager do 1. března 2023.

Poznámka

Azure má dva různé modely nasazení pro vytváření prostředků a práci s nimi: Azure Resource Manager a Classic. Tento článek se týká modelu nasazení Classic. Microsoft doporučuje, aby většina nových nasazení používala model Azure Resource Manager.

Poznámka

Cluster MariaDB Enterprise je teď k dispozici v Azure Marketplace. Nová nabídka automaticky nasadí cluster MariaDB Galera na Azure Resource Manager. Novou nabídku byste měli používat z Azure Marketplace.

V tomto článku se dozvíte, jak vytvořit cluster s více hlavními Galeray MariaDBs (robustní, škálovatelné a spolehlivé nahrazení v rámci MySQL) pro práci v prostředí s vysokou dostupností na virtuálních počítačích Azure.

Přehled architektury

Tento článek popisuje, jak provést následující kroky:

  • Vytvořte cluster se třemi uzly.
  • Datové disky oddělte z disku s operačním systémem.
  • Pokud chcete zvýšit IOPS, vytvořte datové disky v nastaveních RAID-0/prokládané.
  • Pro vyrovnávání zatížení pro tři uzly použijte Azure Load Balancer.
  • Chcete-li minimalizovat opakovanou práci, vytvořte image virtuálního počítače, která obsahuje MariaDB + Galera a použijte ji k vytvoření dalších virtuálních počítačů clusteru.

Architektura systému

Poznámka

Toto téma používá nástroje Azure CLI , proto si je nezapomeňte stáhnout a připojit k předplatnému Azure podle pokynů. Pokud potřebujete odkaz na příkazy dostupné v rozhraní příkazového řádku Azure CLI, přečtěte si téma Reference k příkazům Azure CLI. Také budete muset vytvoření klíče SSH pro ověřování a poznamenat si umístění souboru. pem.

Vytvoření šablony

Infrastruktura

  1. Vytvořte skupinu vztahů pro uchovávání prostředků dohromady.

     azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"
    
  2. Vytvořte virtuální síť.

     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. Vytvořte účet úložiště, který bude hostovat všechny tyto disky. Neměli byste umístit více než 40 vysoce používaných disků na stejný účet úložiště, abyste se vyhnuli překročení limitu účtu úložiště 20 000 IOPS. V tomto případě je to ve správném limitu, takže budete pro jednoduchost ukládat všechno na stejný účet.

     azure storage account create mariadbstorage --label mariadbstorage --affinity-group mariadbcluster
    
  4. Vyhledejte název image virtuálního počítače s CentOS 7.

     azure vm image list | findstr CentOS
    

    Výstup bude vypadat nějak 5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926.

    Použijte tento název v následujícím kroku.

  5. Vytvořte šablonu virtuálního počítače a nahraďte/path/to/Key.pem cestou, kam jste uložili generovaný klíč SSH. pem.

     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. Připojte k virtuálnímu počítači 4 500 GB datových disků pro použití v konfiguraci RAID.

     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. Pomocí SSH se přihlaste k virtuálnímu počítači šablony, který jste vytvořili v mariadbhatemplate.cloudapp.net:22, a připojte se pomocí privátního klíče.

Software

  1. Získejte kořenový adresář.

     sudo su
    
  2. Instalace podpory RAID:

    a. Nainstalujte mdadm.

           yum install mdadm
    

    b. Vytvořte konfiguraci RAID0/Stripe pomocí systému souborů 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. Vytvořte adresář přípojný bod.

           mkdir /mnt/data
    

    d. Načte identifikátor UUID nově vytvořeného zařízení RAID.

           blkid | grep /dev/md0
    

    e. Upravit adresáři/etc/fstab.

           vi /etc/fstab
    

    f. Přidejte zařízení, aby se povolilo automatické připojování při restartování, přičemž identifikátor UUID nahraďte hodnotou získanou z předchozího příkazu blkid .

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

    g. Připojte nový oddíl.

           mount /mnt/data
    
  3. Nainstalujte MariaDB.

    a. Vytvořte soubor MariaDB. úložiště.

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

    b. Zadejte soubor úložiště s následujícím obsahem:

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

    c. Aby nedocházelo ke konfliktům, odeberte existující přípony a MariaDB-knihovny.

        yum remove postfix mariadb-libs-*
    

    d. Nainstalujte MariaDB pomocí Galera.

        yum install MariaDB-Galera-server MariaDB-client galera
    
  4. Přesuňte adresář dat MySQL do zařízení blokování RAID.

    a. Zkopírujte aktuální adresář MySQL do nového umístění a odeberte starý adresář.

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

    b. Nastavte oprávnění pro nový adresář odpovídajícím způsobem.

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

    c. Vytvořte symlink, který odkazuje na starý adresář na nové umístění v oddílu RAID.

        ln -s /mnt/data/mysql /var/lib/mysql
    
  5. Vzhledem k tomu, že SELinux brání operacím clusteru, je nutné ho pro aktuální relaci zakázat. Úpravou /etc/selinux/config ji zakážete pro následné restartování.

         setenforce 0
    
         then editing `/etc/selinux/config` to set `SELINUX=permissive`
    
  6. Ověřte spuštění MySQL.

    a. Spusťte MySQL.

        service mysql start
    

    b. Zabezpečte instalaci MySQL, nastavte kořenové heslo, odeberte anonymní uživatele, abyste zakázali vzdálené kořenové přihlášení a odebrali testovací databázi.

        mysql_secure_installation
    

    c. Vytvořte uživatele v databázi pro operace clusteru a volitelně pro vaše aplikace.

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

    d. Zastavte MySQL.

         service mysql stop
    
  7. Vytvořte zástupný symbol konfigurace.

    a. Upravte konfiguraci MySQL a vytvořte zástupný symbol pro nastavení clusteru. Neměňte <Variables> nebo Odkomentujte nyní. K tomu dojde po vytvoření virtuálního počítače z této šablony.

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

    b. Upravte část Galera a vymažte ji.

    c. Upravte oddíl [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. Otevřete požadované porty brány firewall pomocí brány firewall na CentOS 7.

    • MySQL: firewall-cmd --zone=public --add-port=3306/tcp --permanent
    • GALERA: firewall-cmd --zone=public --add-port=4567/tcp --permanent
    • GALERA tis: firewall-cmd --zone=public --add-port=4568/tcp --permanent
    • RSYNC: firewall-cmd --zone=public --add-port=4444/tcp --permanent
    • Znovu načíst bránu firewall: firewall-cmd --reload
  9. Optimalizujte výkon systému. Další informace najdete v tématu věnovaném strategii ladění výkonu.

    a. Upravte konfigurační soubor MySQL znovu.

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

    b. Upravte oddíl [MariaDB] a přidejte následující obsah:

    Poznámka

    Doporučujeme, aby_vyrovnávací paměti InnoDB_pool_size je 70% paměti virtuálního počítače. V tomto příkladu byl nastaven na 2,45 GB pro střední virtuální počítač Azure s 3,5 GB paměti RAM.

        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. Zastavte MySQL, zakažte službě MySQL spuštění při spuštění, abyste se vyhnuli přerušení clusteru při přidávání uzlu a zrušení zřízení počítače.

     service mysql stop
     chkconfig mysql off
     waagent -deprovision
    
  11. Zachyťte virtuální počítač prostřednictvím portálu. (V současné době problém #1268 v nástrojích rozhraní příkazového řádku Azure CLI popisuje fakt, že obrázky zachycené nástroji Azure CLI nezachytí připojené datové disky.)

    a. Vypněte počítač přes portál.

    b. Klikněte na zachytit a zadejte název Image jako MariaDB-Galera-image. Zadejte popis a ověřte, že jste spustili waagent.

    Zachytit virtuální počítač

Vytvoření clusteru

Vytvořte tři virtuální počítače se šablonou, kterou jste vytvořili, a pak nakonfigurujte a spusťte cluster.

  1. Vytvořte první virtuální počítač s CentOS 7 z image MariaDB-Galera-image, kterou jste vytvořili, a poskytněte následující informace:
  • Název virtuální sítě: mariadbvnet

  • Podsíť: MariaDB

  • Velikost počítače: střední

  • Název cloudové služby: mariadbha (nebo libovolný název, ke kterému se chcete dostat prostřednictvím mariadbha.cloudapp.net)

  • Název počítače: mariadb1

  • Uživatelské jméno: azureuser

  • Přístup přes SSH: povolený

  • Předání souboru certifikátu SSH. pem a nahrazení/path/to/Key.pem cestou, kam jste uložili generovaný klíč SSH. pem SSH.

    Poznámka

    Následující příkazy jsou rozděleny na více řádků pro přehlednost, ale měli byste je zadat jako jeden řádek.

     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. Vytvořte dva další virtuální počítače tak, že je propojíte s cloudovou službou mariadbha. Změňte název virtuálního počítače a port SSH na jedinečný port, který není v konfliktu s jinými virtuálními počítači ve stejné cloudové službě.

     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
    

Pro 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. Pro další krok budete muset získat interní IP adresu každého ze tří virtuálních počítačů:

    Získání IP adresy

  2. Pomocí SSH se přihlaste ke třem virtuálním počítačům a upravte konfigurační soubor na každém z nich.

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

    Odkomentujte wsrep_cluster_name a wsrep_cluster_address odebráním # na začátku řádku. Kromě toho nahraďte <ServerIP> v wsrep_node_address a <NodeName> v wsrep_node_name s IP adresou a názvem virtuálního počítače a odkomentujte také tyto řádky.

  3. Spusťte cluster na MariaDB1 a nechte ho spuštěný při spuštění.

     sudo service mysql bootstrap
     chkconfig mysql on
    
  4. Zahajte MySQL na MariaDB2 a MariaDB3 a umožněte spuštění při spuštění.

     sudo service mysql start
     chkconfig mysql on
    

Vyrovnávání zatížení clusteru

Při vytváření clusterových virtuálních počítačů jste je přidali do skupiny dostupnosti s názvem clusteravset, aby se zajistilo, že byly zavedeny do různých domén selhání a aktualizačních prostředků a že Azure nikdy neprovádí údržbu na všech počítačích najednou. Tato konfigurace splňuje požadavky, které musí být podporovány smlouvou o úrovni služeb Azure (SLA).

Teď použijte Azure Load Balancer k vyvážení požadavků mezi třemi uzly.

Na svém počítači spusťte následující příkazy pomocí Azure CLI.

Struktura parametrů příkazu je: 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 nastaví interval testu nástroje pro vyrovnávání zatížení na 15 sekund, což může být příliš dlouhé. Změňte ji na portálu v části koncové body pro libovolný z virtuálních počítačů.

Upravit koncový bod

Vyberte možnost překonfigurovat sadu s vyrovnáváním zatížení.

Překonfigurujte sadu s vyrovnáváním zatížení.

Změňte Interval testu na 5 sekund a uložte provedené změny.

Změnit interval testu

Ověřit cluster

Tato pevná práce je hotová. Cluster by měl být nyní přístupný na mariadbha.cloudapp.net:3306, což má za problém, že nástroj pro vyrovnávání zatížení a požadavky na směrování mezi třemi virtuálními počítači hladce a efektivně.

Pomocí oblíbeného klienta MySQL se připojte nebo se připojte z jednoho virtuálního počítače a ověřte, jestli tento cluster funguje.

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

Pak vytvořte databázi a naplňte ji daty.

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;

Databáze, kterou jste vytvořili, vrátí následující tabulku:

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

Další kroky

V tomto článku jste vytvořili cluster MariaDB + Galera s vysokou dostupností na virtuálních počítačích Azure se systémem CentOS 7. Virtuální počítače mají vyrovnaný vyrovnávání zatížení s Azure Load Balancer.

Můžete se podívat na jiný způsob, jak cluster MySQL v systému Linux a způsoby optimalizace a testování pro výkon MySQL na virtuálních počítačích Azure Linux.