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.

Arsitektur sistem

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

  1. Buat grup afinitas untuk menampung sumber daya bersama-sama.

     azure account affinity-group create mariadbcluster --location "North Europe" --label "MariaDB Cluster"
    
  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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
    
  7. Gunakan SSH untuk masuk ke VM templat yang Anda buat di mariadbhatemplate.cloudapp.net:22, dan sambungkan dengan menggunakan kunci privat Anda.

Perangkat lunak

  1. Dapatkan akarnya.

     sudo su
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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`
    
  6. 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
    
  7. 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
    
  8. 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
  9. 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
    
  10. 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
    
  11. 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."

    Mengambil komputer virtual

Membuat kluster

Buat tiga VM dengan templat yang Anda buat, lalu konfigurasikan dan mulai kluster.

  1. 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
    
  1. 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
  1. Anda harus mendapatkan alamat IP internal masing-masing dari tiga VM untuk langkah berikutnya:

    Mendapatkan alamat IP

  2. 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 dan wsrep_cluster_address dengan menghapus # di awal baris. Selain itu, ganti <ServerIP> di wsrep_node_address dan <NodeName> di wsrep_node_name dengan alamat IP dan nama VM, masing-masing, dan batalkan komentar baris tersebut juga.

  3. Mulai kluster pada MariaDB1 dan biarkan berjalan saat startup.

     sudo service mysql bootstrap
     chkconfig mysql on
    
  4. 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.

Mengedit titik akhir

Pilih Konfigurasi ulang set Load-Balanced.

Mengonfigurasi ulang Set dengan beban seimbang

Ubah Interval Probe menjadi 5 detik dan simpan perubahan Anda.

Mengubah interval pemeriksaan

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.