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.

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
Vytvořte skupinu vztahů pro uchovávání prostředků dohromady.
azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"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 mariadbvnetVytvoř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 mariadbclusterVyhledejte název image virtuálního počítače s CentOS 7.
azure vm image list | findstr CentOSVýstup bude vypadat nějak
5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926.Použijte tento název v následujícím kroku.
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 azureuserPř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.vhdPomocí 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
Získejte kořenový adresář.
sudo suInstalace podpory RAID:
a. Nainstalujte mdadm.
yum install mdadmb. 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/md0c. Vytvořte adresář přípojný bod.
mkdir /mnt/datad. Načte identifikátor UUID nově vytvořeného zařízení RAID.
blkid | grep /dev/md0e. Upravit adresáři/etc/fstab.
vi /etc/fstabf. 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 2g. Připojte nový oddíl.
mount /mnt/dataNainstalujte MariaDB.
a. Vytvořte soubor MariaDB. úložiště.
vi /etc/yum.repos.d/MariaDB.repob. 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=1c. 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 galeraPř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/mysqlb. 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/mysqlVzhledem k tomu, že SELinux brání operacím clusteru, je nutné ho pro aktuální relaci zakázat. Úpravou
/etc/selinux/configji zakážete pro následné restartování.setenforce 0 then editing `/etc/selinux/config` to set `SELINUX=permissive`Ověřte spuštění MySQL.
a. Spusťte MySQL.
service mysql startb. 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_installationc. 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; exitd. Zastavte MySQL.
service mysql stopVytvoř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.cnfb. 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 serverOtevř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
- MySQL:
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.cnfb. 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 = 0Zastavte 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 -deprovisionZachyť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.

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

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.cnfOdkomentujte
wsrep_cluster_nameawsrep_cluster_addressodebráním # na začátku řádku. Kromě toho nahraďte<ServerIP>vwsrep_node_addressa<NodeName>vwsrep_node_names IP adresou a názvem virtuálního počítače a odkomentujte také tyto řádky.Spusťte cluster na MariaDB1 a nechte ho spuštěný při spuštění.
sudo service mysql bootstrap chkconfig mysql onZahajte 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čů.

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

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

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.