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.

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
Skapa en tillhörighets grupp som innehåller resurserna tillsammans.
azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"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 mariadbvnetSkapa 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 mariadbclusterHitta namnet på avbildningen av den virtuella CentOS 7-datorn.
azure vm image list | findstr CentOSUtdata ser ut ungefär som
5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926.Använd det namnet i följande steg.
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 azureuserAnslut 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.vhdAnvä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
Hämta roten.
sudo suInstallera RAID-support:
a. Installera mdadm.
yum install mdadmb. 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/md0c. Skapa katalogen för monterings punkter.
mkdir /mnt/datad. Hämta UUID för den nyligen skapade RAID-enheten.
blkid | grep /dev/md0e. Redigera/etc/fstab.
vi /etc/fstabf. 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 2g. Montera den nya partitionen.
mount /mnt/dataInstallera MariaDB.
a. Skapa filen MariaDB. lagrings platsen.
vi /etc/yum.repos.d/MariaDB.repob. 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=1c. 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 galeraFlytta 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/mysqlb. 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/mysqlEftersom SELinux stör kluster åtgärderna, är det nödvändigt att inaktivera det för den aktuella sessionen. Redigera
/etc/selinux/configför att inaktivera den för efterföljande omstarter.setenforce 0 then editing `/etc/selinux/config` to set `SELINUX=permissive`Verifiera MySQL-körningar.
a. Starta MySQL.
service mysql startb. 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_installationc. 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; exitd. Stoppa MySQL.
service mysql stopSkapa 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.cnfb. 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Ö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
- MySQL:
Optimera systemet för prestanda. Mer information finns i prestanda justerings strategin.
a. Redigera MySQL-konfigurationsfilen igen.
vi /etc/my.cnf.d/server.cnfb. 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 = 0Stoppa 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 -deprovisionAvbilda 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".

Skapa klustret
Skapa tre virtuella datorer med mallen som du skapade och konfigurera och starta sedan klustret.
- 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
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
Du måste hämta den interna IP-adressen för var och en av de tre virtuella datorerna i nästa steg:

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.cnfTa bort kommentar
wsrep_cluster_nameochwsrep_cluster_addressgenom att ta bort # i början av raden. Du kan dessutom ersätta<ServerIP>iwsrep_node_addressoch<NodeName>iwsrep_node_namemed den virtuella datorns IP-adress och namn och samtidigt ta bort kommentarer till raderna.Starta klustret på MariaDB1 och låt det köras vid start.
sudo service mysql bootstrap chkconfig mysql onStarta 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.

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

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

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.