Takip et

Galera Kümesi ile Yüksek Erişilebilir MariaDB 10.1 Yapılandırması (Ubuntu 16.04 Üzerinde)

Galera Kümesi ile Yüksek Erişilebilir MariaDB 10.1 Yapılandırması (Ubuntu 16.04 Üzerinde) Giriş Günümüzün hızla değişen dijital dünya

Galera Kümesi ile Yüksek Erişilebilir MariaDB 10.1 Yapılandırması (Ubuntu 16.04 Üzerinde)

Giriş

Günümüzün hızla değişen dijital dünyasında, veritabanlarının sürekli erişilebilirliği ve performansı, kritik iş uygulamaları için vazgeçilmez bir gereklilik haline gelmiştir. Tek bir veritabanı sunucusunun arızalanması, ciddi iş kesintilerine ve veri kaybına yol açabilir. Bu sorunları aşmak için yüksek erişilebilirlik (High Availability – HA) çözümleri devreye girer. MariaDB Galera Kümesi, MySQL ve MariaDB için senkron replikasyon sağlayan, çoklu ana (multi-master) bir küme çözümüdür. Bu makalede, Ubuntu 16.04 işletim sistemi üzerinde MariaDB 10.1 ve Galera Kümesi’nin nasıl yapılandırılacağını adım adım ele alacağız.

Galera Kümesi, veritabanı işlemlerini kümedeki tüm düğümler arasında eşzamanlı olarak çoğaltarak veri tutarlılığını garanti eder. Herhangi bir düğüme yazılan veri, işlem tamamlanmadan önce diğer tüm düğümlerde de onaylanır. Bu, bir düğümün arızalanması durumunda bile veri kaybını önler ve kümenin kesintisiz çalışmaya devam etmesini sağlar. Ayrıca, kümedeki her düğüm yazılabilir olduğundan (multi-master), uygulama trafiği herhangi bir düğüme yönlendirilebilir, bu da yük dengeleme ve ölçeklenebilirlik avantajları sunar.

MariaDB 10.1, bu makalenin odak noktasıdır ve Galera entegrasyonu için sağlam bir temel sunar. Ubuntu 16.04 ise, uzun süreli destek (LTS) sağlayan ve birçok kurumsal ortamda hala kullanılan stabil bir işletim sistemi sürümüdür. Bu kombinasyon, güvenilir ve yüksek performanslı bir veritabanı altyapısı oluşturmak için güçlü bir seçenektir.

Bu makalede, Galera Kümesi’nin temel prensiplerinden başlayarak, ön koşulların hazırlanması, MariaDB ve Galera paketlerinin kurulumu, güvenlik duvarı yapılandırması, küme yapılandırma dosyalarının düzenlenmesi, kümenin başlatılması ve durumunun kontrol edilmesi gibi tüm adımları detaylı bir şekilde açıklayacağız. Ayrıca, olası sorunlara karşı çözüm önerileri ve küme performansını optimize etmeye yönelik ipuçları da sunulacaktır.

Ön Koşullar ve Sistem Hazırlığı

Galera Kümesi’nin başarılı bir şekilde kurulması için belirli ön koşulların sağlanması ve sunucuların doğru şekilde hazırlanması gerekmektedir.

1. Minimum Sunucu Sayısı

Galera Kümesi, doğru bir “çoğunluk” (quorum) mekanizması için tek sayıda düğümle (node) çalışmayı tercih eder. En az üç düğüm, bir düğümün arızalanması durumunda bile kümenin çalışmaya devam etmesini ve “bölünmüş beyin” (split-brain) senaryolarını önlemesini sağlar. Bu makalede üç sunucu (node1, node2, node3) üzerinden ilerleyeceğiz.

2. İşletim Sistemi

Tüm sunucularda Ubuntu 16.04 LTS (Xenial Xerus) yüklü olmalıdır. Güncel paketler için sistemin güncel olduğundan emin olun:

sudo apt update
sudo apt upgrade -y

3. Ağ Yapılandırması

Her sunucunun statik bir IP adresine sahip olması ve birbiriyle iletişim kurabilmesi çok önemlidir. Ayrıca, tüm düğümlerin birbirlerinin ana bilgisayar adlarını (hostname) IP adreslerine çözümleyebilmesi için /etc/hosts dosyasını yapılandırmak faydalı olacaktır.

Örnek IP adresleri ve hostname’ler:
* node1: 192.168.1.101 (hostname: node1)
* node2: 192.168.1.102 (hostname: node2)
* node3: 192.168.1.103 (hostname: node3)

Her sunucuda /etc/hosts dosyasını düzenleyin:

sudo nano /etc/hosts

Dosyaya aşağıdaki satırları ekleyin (kendi IP adreslerinizle değiştirin):

192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3

Değişiklikleri kaydedin ve her sunucudan diğerlerine ping atarak bağlantıyı test edin.

4. Root veya Sudo Yetkisi

Kurulum ve yapılandırma adımları için root kullanıcısı veya sudo yetkisine sahip bir kullanıcı gereklidir.

5. Mevcut MySQL/MariaDB Kurulumunun Kaldırılması

Eğer sunucularda daha önce bir MySQL veya MariaDB kurulumu varsa, Galera Kümesi’nin düzgün çalışabilmesi için bunların tamamen kaldırılması ve veri dizinlerinin temizlenmesi önerilir.

sudo systemctl stop mysql
sudo apt purge mysql-server mysql-client mysql-common -y
sudo apt purge mariadb-server mariadb-client mariadb-common -y
sudo rm -rf /var/lib/mysql
sudo apt autoremove -y
sudo apt clean

Bu adımı her düğümde uygulayın.

Adım 1: Her Sunucuda MariaDB ve Galera Paketlerinin Kurulumu

MariaDB 10.1, Ubuntu 16.04’ün varsayılan depolarında doğrudan bulunmayabilir veya güncel olmayabilir. Bu nedenle, MariaDB’nin resmi deposunu eklemek en iyi yaklaşımdır.

1. MariaDB APT Deposunun Eklenmesi

Her sunucuda aşağıdaki adımları uygulayın:

sudo apt-get install software-properties-common dirmngr apt-transport-https -y
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.mariadb.org/repo/10.1/ubuntu xenial main'

Yukarıdaki add-apt-repository komutu, MariaDB 10.1’in Ubuntu 16.04 (xenial) için uygun deposunu ekleyecektir.

2. Paket Listesinin Güncellenmesi ve Kurulum

Depoyu ekledikten sonra, paket listesini güncelleyin ve MariaDB sunucusu, istemcisi ve Galera paketlerini yükleyin:

sudo apt update
sudo apt install mariadb-server galera mariadb-client -y

Kurulum sırasında MariaDB root kullanıcısı için bir şifre belirlemeniz istenebilir. Güçlü bir şifre belirlediğinizden emin olun.

3. MariaDB Servisinin Durdurulması

Kurulum tamamlandıktan sonra, Galera yapılandırmasına başlamadan önce MariaDB servisini durdurun ve önyüklemede otomatik başlamasını devre dışı bırakın. Bu, küme başlatma sürecini manuel olarak kontrol etmemizi sağlayacaktır.

sudo systemctl stop mariadb
sudo systemctl disable mariadb

Bu adımı kümedeki tüm düğümlerde uygulayın.

Adım 2: Güvenlik Duvarı Yapılandırması (UFW)

Galera Kümesi’nin düğümler arasında sorunsuz iletişim kurabilmesi için belirli portların açık olması gerekmektedir. Ubuntu’da varsayılan güvenlik duvarı olan UFW’yi (Uncomplicated Firewall) yapılandıracağız. Her sunucuda aşağıdaki portları açın:

* 3306/tcp: MariaDB/MySQL istemci bağlantıları için.
* 4567/tcp: Galera Replication (IST/SST) için.
* 4568/tcp: State Snapshot Transfer (SST) için (rsync tabanlı SST kullanılıyorsa).
* 4444/tcp: State Snapshot Transfer (SST) için (mysqldump tabanlı SST kullanılıyorsa, ancak 10.1’de rsync daha yaygındır).
* Küme düğümlerinin IP aralığı: Tüm düğümlerin birbirine tüm portlardan erişebilmesi için.

Örnek güvenlik duvarı yapılandırması (kendi IP adreslerinizle değiştirin):

# MariaDB istemci bağlantıları için
sudo ufw allow 3306/tcp

Galera replication (IST) ve SST için

sudo ufw allow 4567/tcp sudo ufw allow 4568/tcp sudo ufw allow 4444/tcp

Küme düğümlerinin birbirine erişimi için (isteğe bağlı, daha güvenli bir yöntem)

Eğer tüm düğümler aynı ağdaysa, bu kurallar yeterli olabilir.

Daha daraltılmış kurallar için:

sudo ufw allow from 192.168.1.101 to any port 3306,4567,4568,4444 sudo ufw allow from 192.168.1.102 to any port 3306,4567,4568,4444 sudo ufw allow from 192.168.1.103 to any port 3306,4567,4568,4444

UFW'yi etkinleştirin

sudo ufw enable sudo ufw status verbose

Bu adımı kümedeki tüm düğümlerde uygulayın.

Adım 3: MariaDB Galera Küme Yapılandırması

Galera Kümesi’nin temel yapılandırması my.cnf dosyası üzerinden yapılır. MariaDB 10.1’de, Galera yapılandırmasını ayrı bir dosyada (örneğin /etc/mysql/conf.d/50-galera.cnf) tutmak daha düzenli bir yaklaşımdır.

Her sunucuda /etc/mysql/conf.d/50-galera.cnf dosyasını oluşturun veya düzenleyin:

sudo nano /etc/mysql/conf.d/50-galera.cnf

Dosyanın içeriği aşağıdaki gibi olmalıdır. Her düğüm için wsrep_node_address ve wsrep_node_name parametrelerini kendi IP adresi ve ana bilgisayar adına göre ayarlamayı unutmayın.

[mysqld]

Genel MariaDB ayarları

bind-address = 0.0.0.0 datadir=/var/lib/mysql socket=/var/run/mysqld/mysqld.sock log-error=/var/log/mysql/error.log pid-file=/var/run/mysqld/mysqld.pid

Galera için önemli ayarlar

binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 query_cache_size=0 query_cache_type=0

Eğer küme yazma çakışmaları yaşıyorsa, innodb_flush_log_at_trx_commit=0 veya 2 denenebilir

ancak veri güvenliği için varsayılan (1) önerilir.

Galera Sağlayıcı Ayarları

wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so

Ubuntu 16.04'te bu yol doğru olmalıdır. Farklı bir dağıtım veya versiyonda kontrol edin.

Galera Küme Ayarları

wsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"

Bu, kümedeki tüm düğümlerin IP adreslerini içerir.

İlk başlatmada boş bırakılabilir (gcomm://), ancak daha sonra tüm adresleri eklemek iyi bir uygulamadır.

wsrep_cluster_name="my_galera_cluster"

Kümenize bir isim verin. Tüm düğümlerde aynı olmalı.

wsrep_node_address="192.168.1.101" # node1 için: 192.168.1.101, node2 için: 192.168.1.102, vb. wsrep_node_name="node1" # node1 için: node1, node2 için: node2, vb.

State Snapshot Transfer (SST) Ayarları

wsrep_sst_method=rsync

Diğer seçenekler: mariabackup, xtrabackup, mysqldump. rsync genellikle en kolay başlangıçtır.

wsrep_sst_auth="sst_user:sst_password"

Eğer rsync dışı bir SST yöntemi kullanılıyorsa veya rsync için belirli bir kullanıcı isteniyorsa.

Bu durumda, MariaDB'de 'sst_user' ve 'sst_password' ile bir kullanıcı oluşturulmalıdır.

Örneğin: GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON . TO 'sst_user'@'localhost' IDENTIFIED BY 'sst_password';

Diğer Galera Ayarları

wsrep_slave_threads=4

CPU çekirdeği sayınıza göre ayarlayın. Genellikle CPU çekirdeği sayısı kadar veya 2 katı olabilir.

wsrep_cert_deps_distance=1

wsrep_provider_options="gcache.size=128M"

wsrep_debug=ON # Sorun giderme için yararlıdır, ancak üretimde KAPALI olmalı.

Yapılandırma Parametrelerinin Açıklaması:

* bind-address = 0.0.0.0: MariaDB’nin tüm ağ arayüzlerinden gelen bağlantıları kabul etmesini sağlar. Güvenlik duvarı ile birlikte kullanılmalıdır.
* binlog_format=ROW: Galera Kümesi için zorunlu bir ayardır. Satır tabanlı ikili günlükleme, veri tutarlılığını sağlar.
* default_storage_engine=InnoDB: Galera, yalnızca InnoDB depolama motorunu destekler.
* innodb_autoinc_lock_mode=2: Çoklu ana ortamda otomatik artan (auto-increment) değerlerin doğru şekilde işlenmesini sağlar.
* query_cache_size=0, query_cache_type=0: Galera Kümesi’nde sorgu önbelleği tutarsızlıklara yol açabileceği için devre dışı bırakılması önerilir.
* wsrep_on=ON: Galera eklentisini etkinleştirir.
* wsrep_provider=/usr/lib/galera/libgalera_smm.so: Galera kütüphanesinin yolunu belirtir.
* wsrep_cluster_address="gcomm://IP1,IP2,IP3": Kümedeki diğer düğümlerin IP adreslerini veya ana bilgisayar adlarını virgülle ayrılmış olarak belirtir. gcomm:// protokolünü kullanır. Küme ilk kez başlatılırken, bu parametre boş bırakılabilir (gcomm://) veya sadece ilk düğümün adresiyle başlatılabilir. Ancak küme tam olarak kurulduğunda, tüm düğümlerin adreslerini içermesi önerilir.
* wsrep_cluster_name="my_galera_cluster": Kümenin adıdır. Tüm düğümlerde aynı olmalıdır.
* wsrep_node_address="this_node_ip": Mevcut düğümün kendi IP adresini belirtir.
* wsrep_node_name="this_node_name": Mevcut düğümün benzersiz adını belirtir.
* wsrep_sst_method=rsync: State Snapshot Transfer (SST) yöntemini belirtir. Bir düğüm küme katıldığında veya senkronizasyonunu kaybettiğinde, diğer bir düğümden tam bir veri kopyası almak için kullanılır. rsync basit ve etkili bir yöntemdir. mariabackup (MariaDB 10.1’de mariabackup veya xtrabackup olarak bilinir) daha gelişmiş bir seçenektir ve sıcak yedekleme sağlar, ancak ek kurulum gerektirir.
* wsrep_sst_auth="sst_user:sst_password": Eğer SST yöntemi kimlik doğrulama gerektiriyorsa (örneğin mariabackup veya xtrabackup kullanılıyorsa), bu parametre ile bir kullanıcı adı ve şifre belirtilebilir. rsync için genellikle gerekli değildir.
* wsrep_slave_threads: Replikasyon olaylarını uygulamak için kullanılan iş parçacığı sayısını belirler. CPU çekirdeği sayısına göre optimize edilebilir.

Bu yapılandırma dosyasını her düğüm için, kendi wsrep_node_address ve wsrep_node_name değerlerini doğru şekilde ayarlayarak kaydedin.

Adım 4: Kümenin Başlatılması

Galera Kümesi’ni başlatma işlemi, ilk düğümün “önyüklenmesi” (bootstrap) ve diğer düğümlerin bu kümeye katılması şeklinde iki aşamadan oluşur.

1. İlk Düğümün Başlatılması (Bootstrap)

Sadece kümenin ilk düğümünde (örneğin node1) aşağıdaki komutu çalıştırarak kümeyi önyükleyin:

sudo galera_new_cluster

Bu komut, MariaDB servisini wsrep-new-cluster parametresiyle başlatır ve kümenin ilk üyesi olmasını sağlar.
Servisin durumunu kontrol edin:

sudo systemctl status mariadb

Servis çalışır durumda olmalı. MariaDB loglarını kontrol ederek küme durumunu doğrulayabilirsiniz:

sudo tail -f /var/log/mysql/error.log

Loglarda [Note] WSREP: Cluster UUID: ... ve [Note] WSREP: Flow Control interval: ... gibi mesajlar görmelisiniz.
MariaDB istemcisine bağlanın ve küme boyutunu kontrol edin:

mysql -u root -p

Şifrenizi girin ve ardından:

SHOW STATUS LIKE 'wsrep_cluster_size';

wsrep_cluster_size değeri 1 olmalıdır. Bu, ilk düğümün başarıyla başlatıldığını gösterir.

2. Diğer Düğümlerin Küme Katılması

Şimdi diğer düğümleri (node2, node3) sırasıyla başlatın. Bu düğümler, yapılandırma dosyasındaki wsrep_cluster_address parametresini kullanarak mevcut kümeye katılmaya çalışacaklardır.
Diğer düğümlerde (node2, node3) aşağıdaki komutu çalıştırın:

sudo systemctl start mariadb
sudo systemctl enable mariadb # Artık otomatik başlamasını sağlayabiliriz

Her düğümde MariaDB servisi başlatıldıktan sonra, logları kontrol edin:

sudo tail -f /var/log/mysql/error.log

Loglarda [Note] WSREP: Member ... joined cluster ... gibi mesajlar görmelisiniz. Ayrıca, State Transfer (SST veya IST) sürecini de gözlemleyebilirsiniz. Eğer düğüm ilk kez katılıyorsa, büyük olasılıkla bir SST (State Snapshot Transfer) gerçekleşecektir, yani kümenin mevcut bir üyesinden tam bir veri kopyası alacaktır.

Her düğümün başarıyla katıldığını doğrulamak için, herhangi bir düğümden MariaDB istemcisine bağlanın ve küme boyutunu tekrar kontrol edin:

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

Tüm düğümler katıldıktan sonra wsrep_cluster_size değeri 3 olmalıdır.

Adım 5: Küme Durumunun Kontrolü

Kümenin genel durumunu ve her düğümün replikasyon durumunu kontrol etmek için çeşitli SHOW STATUS komutlarını kullanabilirsiniz. Herhangi bir düğümden aşağıdaki komutları çalıştırın:

mysql -u root -p

Şifrenizi girin ve aşağıdaki komutları çalıştırın:

SHOW STATUS LIKE 'wsrep_cluster_size';
-- Kümedeki düğüm sayısını gösterir. Tüm düğümler katıldıysa 3 olmalı.

SHOW STATUS LIKE 'wsrep_cluster_status';
-- Kümenin durumunu gösterir. "Primary" olmalı. "Non-Primary" ise sorun var demektir.

SHOW STATUS LIKE 'wsrep_local_state_comment';
-- Mevcut düğümün durumunu gösterir. "Synced" olmalı.
-- "Donor/Desynced" veya "Joining" gibi durumlar geçicidir.

SHOW STATUS LIKE 'wsrep_ready';
-- Mevcut düğümün yazmaya hazır olup olmadığını gösterir. "ON" olmalı.

SHOW STATUS LIKE 'wsrep_connected';
-- Mevcut düğümün küme ağına bağlı olup olmadığını gösterir. "ON" olmalı.

SHOW STATUS LIKE 'wsrep_flow_control_paused';
-- Küme içindeki akış kontrolünün ne kadar süreyle durakladığını gösterir.
-- Yüksek değerler, kümenin yavaşladığını ve replikasyonun geride kaldığını gösterebilir.

SHOW STATUS LIKE 'wsrep_incoming_addresses';
-- Kümedeki diğer düğümlerin adreslerini gösterir.

Tüm düğümlerin wsrep_local_state_comment değerinin Synced ve wsrep_ready değerinin ON olduğundan emin olun.

Adım 6: Galera Kümesi İçin Kullanıcı Oluşturma ve Güvenlik

MariaDB kurulumu sırasında root şifresini ayarlamış olsanız bile, uygulama bağlantıları için ayrı kullanıcılar oluşturmak iyi bir güvenlik uygulamasıdır. Ayrıca, wsrep_sst_auth kullanıyorsanız, SST kullanıcısını da oluşturmanız gerekebilir.

1. Root Şifresinin Ayarlanması (Gerekirse)

Eğer kurulum sırasında root şifresi belirlenmediyse veya değiştirmek isterseniz:

sudo mysql_secure_installation

Bu komut, root şifresini ayarlama, anonim kullanıcıları kaldırma, uzaktan root girişini devre dışı bırakma ve test veritabanını kaldırma gibi güvenlik adımlarında size rehberlik edecektir. Bu adımı kümedeki sadece bir düğümde yapmanız yeterlidir, değişiklikler otomatik olarak diğer düğümlere yansıyacaktır.

2. Uygulama Kullanıcısı Oluşturma

Uygulamalarınızın veritabanına bağlanması için özel bir kullanıcı oluşturun.

CREATE USER 'app_user'@'%' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON your_database_name.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

your_database_name ve your_strong_password değerlerini kendi ihtiyaçlarınıza göre değiştirin. '%' yerine belirli bir IP adresi veya ağ aralığı belirterek güvenliği artırabilirsiniz.

3. SST Kullanıcısı Oluşturma (Eğer wsrep_sst_auth Kullanılıyorsa)

Eğer wsrep_sst_auth parametresini yapılandırma dosyasında kullandıysanız, bu kullanıcıyı oluşturmanız gerekir.

CREATE USER 'sst_user'@'localhost' IDENTIFIED BY 'sst_password';
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON . TO 'sst_user'@'localhost';
FLUSH PRIVILEGES;

Bu kullanıcıya localhost üzerinden erişim izni verilmesi yeterlidir, çünkü SST işlemi genellikle yerel olarak başlatılır.

Adım 7: Küme Testi

Kümenin düzgün çalıştığını doğrulamak için bazı testler yapalım.

1. Veri Senkronizasyonu Testi

* node1’de: Bir veritabanı ve tablo oluşturun, veri ekleyin.

CREATE DATABASE test_db;
    USE test_db;
    CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY, text VARCHAR(255));
    INSERT INTO messages (text) VALUES ('Hello from node1!');

* node2’de: Oluşturulan veritabanını ve tabloyu sorgulayarak verilerin senkronize olduğunu doğrulayın.

USE test_db;
    SELECT * FROM messages;

Hello from node1! mesajını görmelisiniz.
* node3’te: Aynı şekilde veri ekleyin.

USE test_db;
    INSERT INTO messages (text) VALUES ('Hello from node3!');

* node1’de veya node2’de: Tekrar sorgulayarak tüm verilerin göründüğünü doğrulayın.

USE test_db;
    SELECT * FROM messages;

Hem Hello from node1! hem de Hello from node3! mesajlarını görmelisiniz. Bu, çoklu ana yazma yeteneğini ve senkron replikasyonu doğrular.

2. Düğüm Arızası ve Geri Yükleme Testi (IST/SST Testi)

* node2’yi durdurun:

sudo systemctl stop mariadb

* node1 veya node3’ten küme boyutunu kontrol edin:

SHOW STATUS LIKE 'wsrep_cluster_size';

Boyut 2 olmalıdır. Küme çalışmaya devam ediyor.
* node2’yi tekrar başlatın:

sudo systemctl start mariadb

* node2’nin loglarını kontrol edin:

sudo tail -f /var/log/mysql/error.log

Düğümün küme katılırken IST (Incremental State Transfer) veya SST (State Snapshot Transfer) yaptığını görmelisiniz. Küçük bir veri değişikliği varsa IST, büyük bir fark varsa SST gerçekleşir.
* Tüm düğümlerden küme boyutunu kontrol edin:

SHOW STATUS LIKE 'wsrep_cluster_size';

Boyut tekrar 3 olmalıdır. wsrep_local_state_comment ve wsrep_ready değerlerinin Synced ve ON olduğunu doğrulayın.

Bu testler, kümenizin temel işlevselliğini ve hata toleransını doğrulamak için yeterlidir.

Adım 8: Yük Dengeleme ve Otomatik Hata Devralma (İsteğe Bağlı ama Önemli)

Galera Kümesi, yüksek erişilebilirlik sağlarken, uygulamaların kümedeki düğümlere nasıl bağlanacağını yönetmek için bir yük dengeleyiciye ihtiyaç duyar. Doğrudan bir düğüme bağlanmak yerine, bir yük dengeleyici veya veritabanı proxy’si kullanmak, uygulamanızın herhangi bir düğüm arızasından etkilenmemesini sağlar.

1. ProxySQL

ProxySQL, MySQL/MariaDB için özel olarak tasarlanmış yüksek performanslı, yüksek erişilebilir bir proxy’dir. Bağlantıları yönlendirebilir, sorguları önbelleğe alabilir ve arka uç düğümlerinin durumunu izleyerek arızalı düğümleri otomatik olarak trafikten çıkarabilir.
* Avantajları: Okuma/yazma ayırma, sorgu yeniden yazma, arka uç düğümlerinin otomatik tespiti ve izlenmesi.
* Kurulum: Ayrı bir sunucuya kurulur ve Galera düğümlerini arka uç olarak yapılandırılır.

2. HAProxy

HAProxy, genel amaçlı bir TCP/HTTP yük dengeleyicidir. MariaDB bağlantılarını kümedeki düğümler arasında dengelemek için kullanılabilir.
* Avantajları: Basit yapılandırma, geniş kullanım alanı.
* Dezavantajları: Veritabanı protokolüne özel bir anlayışı yoktur, sorgu yönlendirmesi yapamaz.

3. Keepalived (Sanal IP ile)

Keepalived, bir sanal IP adresi (VIP) kullanarak otomatik hata devralma (failover) sağlar. İki veya daha fazla sunucu arasında bir VIP’yi paylaşır ve birincil sunucu arızalandığında VIP’yi otomatik olarak yedek sunucuya taşır. Bu, uygulamaların her zaman aynı IP adresi üzerinden küme erişmesine olanak tanır. Keepalived genellikle bir yük dengeleyici (ProxySQL veya HAProxy) ile birlikte kullanılır.

Yük dengeleyici veya proxy çözümlerinin kurulumu bu makalenin kapsamını aşmakla birlikte, üretim ortamlarında Galera Kümesi’nin tam potansiyelini kullanmak için şiddetle tavsiye edilirler.

Sık Karşılaşılan Sorunlar ve Çözümleri

1. Kümenin Başlamaması veya Düğümlerin Katılamaması

* Güvenlik Duvarı: En yaygın sorundur. Gerekli tüm portların (3306, 4567, 4568, 4444) tüm düğümler arasında açık olduğundan emin olun.
* Yanlış IP Adresleri: wsrep_node_address ve wsrep_cluster_address parametrelerindeki IP adreslerinin doğru olduğundan emin olun.
* Yanlış Sağlayıcı Yolu: wsrep_provider yolunun (/usr/lib/galera/libgalera_smm.so) doğru olduğundan emin olun.
* Logları Kontrol Edin: /var/log/mysql/error.log dosyasını dikkatlice inceleyin. Hata mesajları sorunun kökenini genellikle açıklar.
* İlk Düğüm Bootstrap Edildi mi?: Diğer düğümler katılmadan önce ilk düğümün galera_new_cluster ile başarıyla bootstrap edildiğinden emin olun.

2. SST Hataları (State Snapshot Transfer)

* Yeterli Disk Alanı: SST sırasında kaynak düğümden hedef düğüme tam bir veri kopyası aktarılır. Hedef düğümde yeterli disk alanı olduğundan emin olun.
* SST Yöntemi ve Kullanıcı Yetkileri: Eğer rsync dışı bir SST yöntemi (örneğin mariabackup) kullanıyorsanız, SST kullanıcısının gerekli yetkilere sahip olduğundan ve wsrep_sst_auth parametresinin doğru yapılandırıldığından emin olun.
* Firewall: SST için kullanılan portların (4567, 4568, 4444) açık olduğundan emin olun.
* rsync’in Yüklü Olması: Eğer wsrep_sst_method=rsync kullanıyorsanız, rsync paketinin tüm düğümlerde yüklü olduğundan emin olun (sudo apt install rsync -y).

3. Performans Sorunları ve Yazma Çakışmaları

* binlog_format=ROW: Bu ayarın zorunlu ve doğru olduğundan emin olun.
* innodb_autoinc_lock_mode=2: Bu ayar, çoklu ana yazma ortamında otomatik artan değerlerin doğru işlenmesi için kritiktir.
* query_cache: Galera Kümesi’nde sorgu önbelleği kapatılmalıdır (query_cache_size=0, query_cache_type=0).
* Uygulama Tasarımı: Galera senkron replikasyon kullandığı için, aynı satır üzerinde sık sık çakışan yazma işlemleri (write conflicts) performans düşüşüne neden olabilir. Uygulamanızın mümkün olduğunca çakışmaları önleyecek şekilde tasarlanması önemlidir.
* Ağ Gecikmesi: Düğümler arasındaki ağ gecikmesi (latency), senkron replikasyon performansını doğrudan etkiler. Düğümlerin fiziksel olarak birbirine yakın olması veya düşük gecikmeli bir ağda bulunması önerilir.

4. Bölünmüş Beyin (Split-Brain) Senaryosu

Galera Kümesi, tek sayıda düğümle (genellikle 3 veya 5) çalışarak bölünmüş beyin senaryolarını önlemeye çalışır. Eğer küme iki eşit parçaya bölünürse (örneğin 4 düğümlü bir kümede 2+2), her iki taraf da “çoğunluğa” sahip olmadığını düşünerek kendini durdurabilir veya birisi yanlışlıkla birincil olarak devam edebilir. Tek sayıda düğümle, her zaman bir taraf çoğunluğa sahip olacak ve küme çalışmaya devam edecektir.

Sonuç

Bu makalede, Ubuntu 16.04 sunucuları üzerinde MariaDB 10.1 kullanarak yüksek erişilebilir bir Galera Kümesi’nin nasıl yapılandırılacağını ayrıntılı bir şekilde ele aldık. Galera Kümesi, senkron replikasyon, çoklu ana yazma yeteneği ve otomatik düğüm kurtarma özellikleriyle modern veritabanı altyapıları için güçlü bir çözüm sunar.

Başlangıçta ön koşulların sağlanması, MariaDB ve Galera paketlerinin doğru şekilde kurulması, güvenlik duvarının yapılandırılması ve my.cnf dosyasındaki kritik parametrelerin ayarlanması, başarılı bir küme kurulumunun temelini oluşturur. Kümenin önyüklenmesi ve diğer düğümlerin katılması, adım adım izlenmesi gereken hassas bir süreçtir. Kurulum sonrası küme durumunu kontrol etmek ve veri senkronizasyonunu test etmek, sistemin beklenen şekilde çalıştığını doğrulamak için hayati öneme sahiptir.

Üretim ortamlarında Galera Kümesi’nin tam potansiyelini kullanmak için ProxySQL veya HAProxy gibi bir yük dengeleyici entegrasyonu da düşünülmelidir. Bu tür araçlar, uygulamaların kümedeki herhangi bir düğüm arızasından etkilenmeden veritabanına erişmeye devam etmesini sağlar.

Galera Kümesi’nin sağladığı yüksek erişilebilirlik ve veri tutarlılığı, iş sürekliliği açısından büyük avantajlar sunar. Ancak, senkron replikasyonun doğası gereği, yüksek yazma yüklerinde veya coğrafi olarak dağınık düğümlerde ağ gecikmesi nedeniyle performans etkileri olabileceği unutulmamalıdır. Uygulama mimarisinin bu özellikleri göz önünde bulundurularak tasarlanması, Galera Kümesi’nden en iyi verimi almanızı sağlayacaktır. Bu rehberin, MariaDB Galera Kümesi’ni başarıyla yapılandırmanız için kapsamlı bir yol haritası sunmasını umuyoruz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.