24/09/2020

MariaDB Galera Cluster Kurulumu

Bu makalede sizlere MariaDB Galera Cluster kurulumunu anlatacağım.

Öncelikle neden böyle bir şeye ihtiyacımız var?

Veri tabanı kullandığınız projelerde eğer geniş bir kitleye hizmet veriyorsanız tek bir veri tabanı sunucusu ile bu hizmeti sağlıklı bir şekilde vermeniz pek mümkün olmayacaktır. Her ne kadar MariaDB dikey olarak ölçekleyebilseniz de yüksek erişilebilirlik açısından birden fazla veri tabanı sunucusu ile hizmet vermeniz daha sağlıklı olacaktır.

Kurulum için neye ihtiyacımız var?

Aslında bu sorunun cevabı sizde, fakat ben 3 sunucu ile bu kümeleme işlemi gerçekleştireceğim. Bunun için her makinada Ubutu 20.04 64bit işletim sisteminin kurulu olması gerekmektedir.

Ben kurulumu Digital Ocean (DO) üzerinde gerçekletireceğim. DO'da her droplet için birer public IP adresi tanımlı gelmektedir. Fakat veri tabanı sunucularımı dış dünyaya açmak istemiyorum, bu yüzdenprivate IP kullandım.

Her bir sunucu 2 Core ve 2 GB RAM'e sahiptir. Siz bunu ihtiyacınıza göre belirleyebilirsiniz. Eğer yükü veri tabanı sunucuları eşit olarak dağıtacaksanız birbiri ile aynı özelliklerde sunucular seçmenizi önerebilirim. Farlı özelliklerdeki sunucular için trafiğin tercih edilen özelliklere göre yönlendirilmesi gerekebilir.

alt

db1 : 10.135.0.2
db2 : 10.135.0.3
db3 : 10.135.0.4

db1

apt-get update -y  
apt-get install rsync mariadb-server mariadb-client -y  
mysql_secure_installation  

MariaDB root kullanıcısı için parola belirleyip diğer seçenekleri Y olarak seçelim. Veri tabanınız daha güvenli hale gelir.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

db2 ve db3

db2 ve db3 için db1 deki adımları tekrarlayım. Her veri tabanı sunucusunda MariaDB root kullanıcısı için aynı parolayı verebilirsiniz.

Şimdi sırasıyla her bir veri tabanı sunusunda bulunan /etc/mysql/mariadb.conf.d/50-server.cnf dosyasına aşağıdaki satırları ekleyelim. vim veya nano ile ilgili dosyayı açabilirsiniz.

db1 için

[galera]
wsrep_on=ON  
wsrep_provider=/usr/lib/galera/libgalera_smm.so  
wsrep_cluster_address="gcomm://10.135.0.2,10.135.0.3,10.135.0.4"  
binlog_format=row  
default_storage_engine=InnoDB  
innodb_autoinc_lock_mode=2  
bind-address=0.0.0.0  
wsrep_cluster_name="galera_cluster"  
wsrep_node_address="10.135.0.2"  
wsrep_node_name="db1"  

db2 için

[galera]
wsrep_on=ON  
wsrep_provider=/usr/lib/galera/libgalera_smm.so  
wsrep_cluster_address="gcomm://10.135.0.2,10.135.0.3,10.135.0.4"  
binlog_format=row  
default_storage_engine=InnoDB  
innodb_autoinc_lock_mode=2  
bind-address=0.0.0.0  
wsrep_cluster_name="galera_cluster"  
wsrep_node_address="10.135.0.3"  
wsrep_node_name="db2"  

db3 için

[galera]
wsrep_on=ON  
wsrep_provider=/usr/lib/galera/libgalera_smm.so  
wsrep_cluster_address="gcomm://10.135.0.2,10.135.0.3,10.135.0.4"  
binlog_format=row  
default_storage_engine=InnoDB  
innodb_autoinc_lock_mode=2  
bind-address=0.0.0.0  
wsrep_cluster_name="galera_cluster"  
wsrep_node_address="10.135.0.4"  
wsrep_node_name="db3"  

Daha sonra db1, db2 ve db3 sunucularında sırasıyla aşağıdaki komutları çalıştıralım. MariaDB servisini durdurup, tmp klasörünün yazma izinlerini değiştiriyoruz.

systemctl stop mariadb  
chmod 777 -R /tmp/  

db1 sunucusu komut satırında Galera Cluster'ı başlatalım.

galera_new_cluster  

db2 ve db3 sunucularında MariaDB servisi tekrar başlattığımızda kümeleme işlemimiz tamamlanmış olacaktır.

systemctl start mariadb  

Şimdi herhangi bir veri tabanına mysql -u root -p komutuyla bağlanıp testimizi yapabiliriz.

alt

Ayrıca kümedeki sunucu sayısını her hangi bir sunucuda aşağıdaki komutu çalıştırıp görüntüleyebilirsiniz.

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"  

alt

Şimdi ister HAproxy ile yük dengeleme işlemi yaparak veri tabanı bağlantısını gerçekleştirin ister IP adresleri üzerinden okuma ve yazma işlemlerinizi ayırın.

Her bir MariaDB'yi sunucu özelliklerize optimize etmeniz gerekebilir. Bunun için internet ortamında çeşitli araçlar bulunmaktadır.

Küme içinde bulunan her MariaDB sunucusun konfigürasyonunun aynı olması gerekmiyor, fakat sağlıklı çalışması açısından aynı olmasında fayda var.