Kluster MariaDB (MySQL): Tutorial Azure
Penting
Komputer virtual klasik akan dihentikan pada 1 Maret 2023.
Jika Anda menggunakan sumber IaaS dari ASM, harap menyelesaikan migrasi sebelum 1 Maret 2023. Kami mendorong Anda untuk beralih lebih cepat untuk memanfaatkan banyak peningkatan fitur di Azure Resource Manager.
Untuk mengetahui informasi selengkapnya, lihat Migrasikan sumber IaaS Anda ke Azure Resource Manager sebelum 1 Maret 2023.
Catatan
Azure memiliki dua model penyebaran yang berbeda untuk membuat dan bekerja dengan sumber daya: Azure Resource Manager dan klasik. Artikel ini membahas model penerapan klasik. Microsoft merekomendasikan agar sebagian besar penyebaran baru menggunakan model Azure Resource Manager.
Catatan
Kluster MariaDB Enterprise sekarang tersedia di Marketplace Azure. Penawaran baru akan secara otomatis menyebarkan kluster MariaDB Galera di Azure Resource Manager. Anda harus menggunakan penawaran baru dari Marketplace Azure.
Artikel ini menunjukkan kepada Anda cara membuat kluster MariaDBGalera multi-Master (penggantian drop-in yang kuat, dapat diskalakan, dan andal untuk MySQL) agar berfungsi di lingkungan yang sangat tersedia di komputer virtual Azure.
Ikhtisar arsitektur
Artikel ini menjelaskan cara menyelesaikan langkah-langkah berikut ini:
- Buat kluster tiga simpul.
- Pisahkan disk data dari disk OS.
- Buat disk data dalam pengaturan RAID-0/bergaris untuk meningkatkan IOPS.
- Gunakan Azure Load Balancer untuk menyeimbangkan beban untuk tiga simpul.
- Untuk meminimalkan pekerjaan berulang, buat gambar VM yang berisi MariaDB + Galera dan gunakan untuk membuat VM kluster lainnya.
Catatan
Topik ini menggunakan alat Azure CLI , jadi pastikan untuk mengunduhnya dan menyambungkannya ke langganan Azure Anda sesuai dengan instruksi. Jika Anda memerlukan referensi ke perintah yang tersedia di Azure CLI, lihat referensi perintah Azure CLI. Anda juga perlu membuat kunci SSH untuk autentikasi dan mencatat lokasi file .pem.
Buat template
Infrastruktur
Buat grup afinitas untuk menampung sumber daya bersama-sama.
azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"
Membuat jaringan virtual.
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
Buat akun penyimpanan untuk menghosting semua disk kami. Anda tidak boleh menempatkan lebih dari 40 disk yang banyak digunakan pada akun penyimpanan yang sama untuk menghindari mencapai batas akun penyimpanan 20.000 IOPS. Dalam hal ini, Anda berada di bawah batas itu, jadi Anda akan menyimpan semuanya di akun yang sama untuk kesederhanaan.
azure storage account create mariadbstorage --label mariadbstorage --affinity-group mariadbcluster
Temukan nama gambar komputer virtual CentOS 7.
azure vm image list | findstr CentOS
Outputnya akan menjadi sesuatu seperti
5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-70-20140926
.Gunakan nama tersebut di langkah berikut.
Buat templat VM dan ganti /path/to/key.pem dengan jalur tempat Anda menyimpan kunci .pem SSH yang dihasilkan.
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
Lampirkan empat disk data 500 GB ke VM untuk digunakan dalam konfigurasi 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
Gunakan SSH untuk masuk ke VM templat yang Anda buat di mariadbhatemplate.cloudapp.net:22, dan sambungkan dengan menggunakan kunci privat Anda.
Perangkat lunak
Dapatkan akarnya.
sudo su
Instal dukungan RAID:
a. Pasang mdadm.
yum install mdadm
b. Buat konfigurasi RAID0/stripe dengan sistem file 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. Buat direktori titik pemasangan.
mkdir /mnt/data
d. Ambil UUID dari perangkat RAID yang baru dibuat.
blkid | grep /dev/md0
e. Edit /etc/fstab.
vi /etc/fstab
f. Tambahkan perangkat untuk mengaktifkan pemasangan otomatis saat reboot, mengganti UUID dengan nilai yang diperoleh dari perintah blkid sebelumnya.
UUID=<UUID FROM PREVIOUS> /mnt/data ext4 defaults,noatime 1 2
g. Pasang partisi baru.
mount /mnt/data
Pasang MariaDB.
a. Buat file MariaDB.repo.
vi /etc/yum.repos.d/MariaDB.repo
b. Isi file repositori dengan konten berikut:
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
c. Untuk menghindari konflik, hapus postfix dan mariadb-libs yang ada.
yum remove postfix mariadb-libs-*
d. Instal MariaDB dengan Galera.
yum install MariaDB-Galera-server MariaDB-client galera
Pindahkan direktori data MySQL ke perangkat blok RAID.
a. Salin direktori MySQL saat ini ke lokasi barunya dan hapus direktori lama.
cp -avr /var/lib/mysql /mnt/data rm -rf /var/lib/mysql
b. Atur izin untuk direktori baru yang sesuai.
chown -R mysql:mysql /mnt/data && chmod -R 755 /mnt/data/
c. Buat symlink yang mengarahkan direktori lama ke lokasi baru pada partisi RAID.
ln -s /mnt/data/mysql /var/lib/mysql
Karena SELinux mengganggu operasi kluster, perlu untuk menonaktifkannya untuk sesi saat ini. Edit
/etc/selinux/config
untuk menonaktifkannya untuk memulai ulang berikutnya.setenforce 0 then editing `/etc/selinux/config` to set `SELINUX=permissive`
Memvalidasi eksekusi MySQL.
a. Memulai MySQL.
service mysql start
b. Amankan penginstalan MySQL, atur kata sandi akar, hapus pengguna anonim untuk menonaktifkan login root jarak jauh, dan menghapus database pengujian.
mysql_secure_installation
c. Buat pengguna di database untuk operasi kluster, dan secara opsional untuk aplikasi Anda.
mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO 'cluster'@'%' IDENTIFIED BY 'p@ssw0rd' WITH GRANT OPTION; FLUSH PRIVILEGES; exit
d. Hentikan MySQL.
service mysql stop
Membuat tempat penampung konfigurasi.
a. Edit konfigurasi MySQL untuk membuat tempat penampung untuk pengaturan kluster. Jangan ganti atau batalkan
<Variables>
komentar sekarang. Itu akan terjadi setelah Anda membuat VM dari templat ini.vi /etc/my.cnf.d/server.cnf
b. Edit bagian galera dan bersihkan.
c. Edit bagian [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
Buka port yang diperlukan pada firewall dengan menggunakan FirewallD di 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
- Muat ulang firewall:
firewall-cmd --reload
- MySQL:
Optimalkan sistem untuk performa. Untuk informasi selengkapnya, lihat strategi penyetelan performa.
a. Edit file konfigurasi MySQL lagi.
vi /etc/my.cnf.d/server.cnf
b. Edit bagian [mariadb] dan tambahkan konten berikut:
Catatan
Kami menyarankan agar innodb_buffer_pool_size adalah 70 persen dari memori VM Anda. Dalam contoh ini, telah ditetapkan pada 2,45 GB untuk Azure VM sedang dengan RAM 3,5 GB.
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
Hentikan MySQL, nonaktifkan layanan MySQL agar tidak berjalan saat startup untuk menghindari gangguan pada kluster saat menambahkan node, dan mencabut akses komputer.
service mysql stop chkconfig mysql off waagent -deprovision
Ambil VM melalui portal. (Saat ini, masalah #1268 di alat Azure CLI menjelaskan fakta bahwa gambar yang diambil oleh alat Azure CLI tidak menangkap disk data yang terpasang.)
a. Matikan mesin melalui portal.
b. Klik Ambil dan tentukan nama gambar sebagai mariadb-galera-image. Berikan deskripsi dan periksa "Saya telah menjalankan waagent."
Membuat kluster
Buat tiga VM dengan templat yang Anda buat, lalu konfigurasikan dan mulai kluster.
- Buat VM CentOS 7 pertama dari gambar mariadb-galera yang Anda buat, memberikan informasi berikut:
Nama jaringan virtual: mariadbvnet
Subnet: mariadb
Ukuran mesin: sedang
Nama layanan cloud: mariadbha (atau nama apa pun yang ingin Anda akses melalui mariadbha.cloudapp.net)
Nama mesin: mariadb1
Nama pengguna: azureuser
Akses SSH: diaktifkan
Meneruskan file .pem sertifikat SSH dan mengganti /path/to/key.pem dengan jalur tempat Anda menyimpan kunci .pem SSH yang dihasilkan.
Catatan
Perintah berikut dibagi menjadi beberapa baris untuk kejelasan, tetapi Anda harus memasukkan masing-masing sebagai satu baris.
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
Buat dua komputer virtual lagi dengan menghubungkannya ke layanan cloud mariadbha. Ubah nama VM dan port SSH ke port unik yang tidak bertentangan dengan VM lain di layanan cloud yang sama.
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
Untuk 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
Anda harus mendapatkan alamat IP internal masing-masing dari tiga VM untuk langkah berikutnya:
Gunakan SSH untuk masuk ke tiga VM dan mengedit file konfigurasi pada masing-masing VM tersebut.
sudo vi /etc/my.cnf.d/server.cnf
Batalkan komentar
wsrep_cluster_name
danwsrep_cluster_address
dengan menghapus # di awal baris. Selain itu, ganti<ServerIP>
diwsrep_node_address
dan<NodeName>
diwsrep_node_name
dengan alamat IP dan nama VM, masing-masing, dan batalkan komentar baris tersebut juga.Mulai kluster pada MariaDB1 dan biarkan berjalan saat startup.
sudo service mysql bootstrap chkconfig mysql on
Mulai MySQL di MariaDB2 dan MariaDB3 dan biarkan berjalan saat startup.
sudo service mysql start chkconfig mysql on
Muat keseimbangan kluster
Saat Anda membuat VM terkluster, Anda menambahkannya ke dalam set ketersediaan yang disebut clusteravset untuk memastikan bahwa VM tersebut diletakkan pada domain kesalahan dan pembaruan yang berbeda dan bahwa Azure tidak pernah melakukan pemeliharaan pada semua mesin sekaligus. Konfigurasi ini memenuhi persyaratan untuk didukung oleh perjanjian tingkat layanan (SLA) Azure.
Sekarang gunakan Azure Load Balancer untuk menyeimbangkan permintaan antara tiga simpul.
Jalankan perintah berikut di komputer Anda dengan menggunakan Azure CLI.
Struktur parameter perintah adalah: 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 mengatur interval pemeriksaan load balancer menjadi 15 detik, yang mungkin terlalu lama. Ubah di portal di bawah Titik Akhir untuk salah satu VM.
Pilih Konfigurasi ulang set Load-Balanced.
Ubah Interval Probe menjadi 5 detik dan simpan perubahan Anda.
Memvalidasi kluster
Kerja keras sudah selesai. Kluster sekarang harus dapat diakses di mariadbha.cloudapp.net:3306
, yang mencapai load balancer dan permintaan rute antara tiga VM dengan lancar dan efisien.
Gunakan klien MySQL favorit Anda untuk menyambungkan, atau menyambungkan dari salah satu VM untuk memverifikasi bahwa kluster ini berfungsi.
mysql -u cluster -h mariadbha.cloudapp.net -p
Kemudian buat database dan isi dengan beberapa 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;
Database yang Anda buat mengembalikan tabel berikut ini:
+----+--------+
| id | value |
+----+--------+
| 1 | Value1 |
| 4 | Value2 |
+----+--------+
2 rows in set (0.00 sec)
Langkah berikutnya
Dalam artikel ini, Anda membuat kluster MariaDB + Galera tiga simpul yang sangat tersedia di komputer virtual Azure yang menjalankan CentOS 7. VM diseimbangkan bebannya dengan Azure Load Balancer.
Anda mungkin ingin melihat cara lain untuk mengelompokkan MySQL di Linux dan cara untuk mengoptimalkan dan menguji performa MySQL di Azure Linux VM.