MariaDB Galera, ProxySQL, Keepalived ve Debian 13 kullanarak yüksek erişilebilirlikli veritabanı kümesi kurma.
Giriş
Uygulamalarınızın ölçeği ve önemi arttıkça, sürekli erişilebilirliği sağlamak kritik hale gelir. Veritabanı kesintileri, gelir kaybına, kullanıcıların hayal kırıklığına uğramasına ve itibarınıza zarar verebilir. Bu kılavuz, Galera replikasyonunu, akıllı sorgu yönlendirmesi için ProxySQL'i ve Debian üzerinde sanal IP yönetimi için Keepalived'i kullanarak yüksek erişilebilirlik (HA) sağlayan bir MariaDB kümesi oluşturmayı gösterir.
Bu mimari, her teknolojinin güçlü yönlerini birleştirerek sağlam ve dayanıklı bir veritabanı ortamı sunar. MariaDB Galera, birden fazla düğüm arasında veri tutarlılığını sağlayarak senkron çoklu ana replikasyon sağlar. ProxySQL, sorgu yönlendirici ve yük dengeleyici olarak hareket eder, akıllı trafik yönetimi sağlar ve veritabanı sunucularını hafifletir. Keepalived, kümeye tek bir erişim noktası sağlayan ve düğüm hataları durumunda otomatik geçişi sağlayan sanal bir IP adresini yönetir.
Bu kılavuz, Linux sistem yönetimi, temel ağ kavramları (TCP/IP, DNS) ve veritabanı yönetimi konusunda deneyim sahibi olunduğunu varsayar. Debian ortamında bu teknolojilerin yapılandırılması ve entegrasyonuna odaklanacağız.
Bu mimarinin temel faydaları:
- Yüksek Erişilebilirlik: Otomatik geçiş, minimum kesinti süresi sağlar.
- Veri Tutarlılığı: Senkron replikasyon, tüm düğümler arasında veri tutarlılığını garanti eder.
- Geliştirilmiş Performans: ProxySQL, sorgu yönlendirmesini optimize eder ve veritabanı sunucularındaki yükü azaltır.
- Basitleştirilmiş Yönetim: Tek bir sanal IP adresi, uygulama yapılandırmasını ve erişimi basitleştirir.
İhtiyacınız olanlar:
- Üç Debian 13 VPS veya sunucu.
- Tüm sunuculara root veya sudo erişimi.
- Komut satırı arayüzüne aşinalık.
- TCP/IP ağ ve DNS hakkında temel bilgi.
Ön Koşullar
Düğümler arası bağlantı
Kümenin doğru çalışabilmesi için uygun ana bilgisayar adı çözümlemesi gereklidir. Her sunucu, diğer sunucuları isimle bulabilmelidir. Yönetimi basitleştirmek için ana bilgisayar adlarını kullanıyoruz. Düğüm IP adresleri aynı alt ağda olmalıdır.
Ana Bilgisayar Adı ve IP Adresi Eşlemesi
- galera0 (ana düğüm): 192.168.10.10
- galera1 (yedek düğüm): 192.168.10.11
- galera2 (yedek düğüm): 192.168.10.12
Ana bilgisayar adı çözümlemesini /etc/hosts veya DNS kullanarak gerçekleştirebilirsiniz.
/etc/hostsKullanarak (Daha Basit Kurulum): Bu, test ve geliştirme ortamları için uygundur. Her sunucuda, sunucunun ana bilgisayar adını statik IP adresine eşleyen girdileri/etc/hostsdosyasına ekleyin.- DNS Kullanarak (Üretim için Önerilir): Daha büyük veya daha karmaşık ortamlar için, sunucu ana bilgisayar adlarını ilgili IP adreslerine eşleyen DNS kayıtlarını (A kayıtları) yapılandırın.
Doğrulama
Ana bilgisayar adı çözümlemesini yapılandırdıktan sonra, her sunucunun diğer sunucuların ana bilgisayar adlarını ping komutunu kullanarak çözümleyebildiğini doğrulayın. Örneğin, galera0 üzerinden ping galera1 çalıştırın. Bir yanıt almalısınız.
Gerekli Paketlerin Kurulumu
Galera kümesini yapılandırmadan önce, her düğümde gerekli MariaDB paketlerini yüklemeniz gerekecek. Bu bölüm, Debian tabanlı sistemler için gerekli adımları özetler.
Gerekli depoları ekleyin
Aşağıdaki komutları kullanarak gerekli depoları ekleyin:
apt-get update && apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates
wget -nv -O /usr/share/keyrings/proxysql-3.0.x-keyring.gpg 'https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key.gpg'
echo "deb [signed-by=/usr/share/keyrings/proxysql-3.0.x-keyring.gpg] https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/bookworm/ ./" | tee /etc/apt/sources.list.d/proxysql.list
Sistem güncellemesi
Öncelikle, paket listelerinizi ve paketlerinizi güncelleyin. Her düğümde root olarak şu komutu çalıştırın:
apt update && apt upgrade -y
Paketleri yükleyin
Her düğümde gerekli paketleri şu komutla yükleyin:
apt install rsync mariadb-server mariadb-client galera-4 proxysql keepalived -y
MariaDB kurulumunu güvenli hale getirin
Her düğümde güvenlik betiğini çalıştırın:
sudo mariadb-secure-installation
Bu betik iki önemli adımı gerçekleştirir: MariaDB sunucusu için güçlü bir root parolası belirlemenizi ister ve güvensiz varsayılan yapılandırmaları kaldırır. Bu işlemi tamamlamak için ekrandaki talimatları izleyin.
MariaDB'ye uzaktan erişimi etkinleştirin
Her düğümde uzaktan erişimi etkinleştirmek için bu komutları çalıştırın:
sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl restart mariadb
Galera
Galera, kümedeki tüm düğümler arasında verilerin senkron replikasyonunu sağlar. Bu, bir düğümde veritabanında yapılan her değişikliğin otomatik ve eşzamanlı olarak diğer tüm düğümlere yayılması anlamına gelir. Bu yapılandırmadaki Galera'nın temel faydaları:
- Yüksek Erişilebilirlik: Bir düğüm arızalanırsa, diğer düğümler kesintisiz veri sunmaya devam eder. Küme, hayatta kalan bir düğümü otomatik olarak birincil hale getirir.
- Veri Tutarlılığı: Senkron replikasyon sayesinde, veriler her zaman tüm düğümler arasında tutarlıdır. Bu, eski verilerin okunması riskini ortadan kaldırır – her zaman verilerin en güncel sürümünü okursunuz.
- Okuma Ölçeklenebilirliği: Veriler birden fazla düğüme kopyalandığından, okuma performansını artırmak için okuma sorgularını küme genelinde dağıtabilirsiniz.
Özetle, Galera, MariaDB veritabanınızın yüksek erişilebilir, tutarlı ve ölçeklenebilir kalmasını sağlar – birçok uygulama için kritik gereksinimlerdir.
Yapılandırma
Her düğümde /etc/mysql/conf.d/galera.cnf adlı bir yapılandırma dosyası oluşturun. İçerik, her düğümün adı ve adresi dışında aynı olacaktır. Bu şablonu yapıştırın:
[mysqld] # Temel MariaDB ayarları binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Sağlayıcı Yapılandırması wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Küme Yapılandırması wsrep_cluster_name="my_galera_cluster" wsrep_cluster_address="gcomm://galera0,galera1,galera2" # Bu düğümün özel yapılandırması wsrep_node_name="<node_name>" wsrep_node_address="<node_address>"
Her düğümde <node_name> ve <node_address> değiştirin. İlk düğüm için galera0 kullanın ve devam edin.
Önemli: wsrep_cluster_address — her düğümde kümedeki tüm düğümlerin ana bilgisayar adlarını listeleyin. wsrep_node_name — her düğüm için benzersiz olmalıdır (örneğin, galera0, galera1, galera2). wsrep_node_address — yapılandırdığınız düğümün ana bilgisayar adına ayarlayın.
Kümeyi Başlat
İlk düğümde kümeyi şu komutla başlatın:
sudo systemctl stop mariadb && sudo galera_new_cluster
Diğer düğümlerde MariaDB'yi yeniden başlatın:
sudo systemctl restart mariadb
Kurulumu Doğrulayın
Küme boyutunu kontrol edin
Herhangi bir düğümde MariaDB'ye bağlanın ve küme durumunu kontrol edin. Veritabanına bağlanın:
sudo mariadb -u root -p
MariaDB kabuğunda küme düğümleri durumunu kontrol edin:
SHOW STATUS LIKE 'wsrep_cluster_size';
wsrep_cluster_size düğüm sayımıza eşit olmalıdır.
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.001 sec)
Replikasyonu Test Edin
Herhangi bir düğümde bir test veritabanı oluşturun ve bir test mesajı ekleyin. MariaDB kabuğundan aşağıdaki komutları çalıştırın:
CREATE DATABASE galtest;
USE galtest;
CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY, text VARCHAR(255));
INSERT INTO messages (text) VALUES ('Test from galera0!');
Daha sonra diğer düğümlerdeki verileri MariaDB kabuğu aracılığıyla aşağıdaki SQL sorgusunu kullanarak doğrulayın:
USE galtest;
SELECT * FROM messages;
Test mesajı görünmelidir:
+----+--------------------+ | id | text | +----+--------------------+ | 7 | Test from galera0! | +----+--------------------+ 1 row in set (0.001 sec)
ProxySQL
Bu küme yapılandırmasında ProxySQL, basit bir aracıdan daha fazlasıdır; veritabanınızın performansını, güvenilirliğini ve yönetilebilirliğini önemli ölçüde artırır. ProxySQL, uygulamanız ile Galera kümeniz arasında kritik bir katman olarak yer alır. Ana amaçları şunlardır:
- Sorgu Önbellekleme: ProxySQL, sıkça yürütülen sorguları agresif bir şekilde önbelleğe alır. Aynı veriler için Galera kümesine tekrar tekrar sorgu göndermek yerine, önbelleğe alınmış sonucu sunar, bu da veritabanı yükünü önemli ölçüde azaltır ve yanıt sürelerini iyileştirir. Bu, özellikle okuma ağırlıklı uygulamalar için faydalıdır.
- Bağlantı Havuzu: ProxySQL, Galera kümesine kalıcı bağlantılardan oluşan bir havuz tutar. Bir veritabanı bağlantısı kurmak kaynak yoğun bir işlemdir. Bağlantı havuzu, mevcut bağlantıları yeniden kullanarak bu yükü önler ve performansı daha da artırır.
- Yük Dengeleme ve Sorgu Yönlendirme: ProxySQL, sorguları Galera kümenizdeki farklı düğümlere sunucu yükü, sorgu türü veya veri yakınlığı gibi faktörlere göre akıllıca yönlendirebilir. Bu, iş yükünü dağıtmanıza ve kümenizin performansını en üst düzeye çıkarmanıza olanak tanır.
- Sorgu Optimizasyonu: ProxySQL, sorguları daha verimli hale getirebilir ve potansiyel olarak Galera'nın yeteneklerinden yararlanarak optimal bir şekilde çalıştırabilir.
- Hata Tespiti ve Yönlendirme: ProxySQL, Galera düğümlerinizin sağlığını sürekli izler. Bir düğüm arızalanırsa, ProxySQL otomatik olarak sorguları sağlıklı düğümlere yönlendirir ve kesintisiz hizmet sağlar.
Özetle, ProxySQL, Galera kümeniz için akıllı bir trafik yöneticisi ve performans optimizasyoncusu olarak hareket eder, verimliliğini ve dayanıklılığını önemli ölçüde artırır.
Önlemler
Aşağıdaki giriş bilgileri ve parolalar yalnızca eğitim amaçlıdır. Üretim kurulumu için güçlü parolalar kullanın.
Kullanıcılar kurulumu
Monitör kullanıcısı
ProxySQL içindeki monitör kullanıcısı, izleme araçlarının dahili istatistiklere ve metriklere güvenli bir şekilde erişmesi için özel bir veritabanı hesabıdır. Minimum izinlerle – sadece SELECT erişimi – yapılandırılmıştır, bu da verilerinizin bütünlüğünü ve güvenliğini sağlarken kapsamlı performans izlemeyi mümkün kılar.
Monitör kullanıcısını eklemek için ana düğümde MariaDB kabuğunda bu sorguyu çalıştırın:
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT SELECT ON *.* TO 'monitor'@'%';
FLUSH PRIVILEGES;
Uygulama kullanıcısı
ProxySQL içindeki uygulama kullanıcısı, uygulamalarınızın temel Galera kümesine bağlanmak ve sorguları yürütmek için kullandığı standart bir veritabanı hesabıdır. Uygulamanız bu kullanıcı aracılığıyla doğrudan veritabanı ile etkileşime girer, verileri alır ve işler.
Uygulama kullanıcısını eklemek için ana düğümde MariaDB kabuğunda bu sorguyu çalıştırın:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Doğrulama
Tüm düğümlerde kullanıcı oluşturulmasını bu komutla doğrulayın:
mariadb -u root -e "SELECT user, host FROM mysql.user;"
Yapılandırma
Her düğümde /etc/proxysql.cnf adlı bir yapılandırma dosyası oluşturun ve aşağıdaki içeriği yapıştırın:
datadir="/var/lib/proxysql" admin_variables={ admin_credentials="admin:admin" mysql_ifaces="127.0.0.1:6032" } mysql_variables={ threads=4 max_connections=2048 monitor_username="monitor" monitor_password="monitor" } mysql_servers=( { address="galera0" , port=3306 , hostgroup=0 }, { address="galera1" , port=3306 , hostgroup=0 }, { address="galera2" , port=3306 , hostgroup=0 }) mysql_users=( { username = "test" , password = "test" , default_hostgroup = 0 , active = 1 }) mysql_query_rules=( { rule_id=2 active=1 match_pattern="^SELECT.*" destination_hostgroup=0 apply=1 })
ProxySQL'i bu komutlarla etkinleştirin ve başlatın:
sudo systemctl start proxysql
sudo systemctl enable proxysql
sudo proxysql --reload
ProxySQL kurulumunuzu bu komutla kontrol edin:
mysql -u admin -padmin -h 127.0.0.1 -P6032 -e "SELECT hostname,status FROM mysql_servers;"
Tüm düğümler çevrimiçi olmalıdır:
+----------+--------+ | hostname | status | +----------+--------+ | galera0 | ONLINE | | galera1 | ONLINE | | galera2 | ONLINE | +----------+--------+
Keepalived
Keepalived, sanal bir IP adresini yönetir, kümeye tek bir erişim noktası sağlar ve düğüm hataları durumunda otomatik geçişi sağlar. MariaDB düğümlerinin sağlığını izler ve bir hata meydana gelirse trafiği sağlıklı bir düğüme yönlendirir, yüksek erişilebilirliği korur. Yapılandırma, Sanal Yönlendirici Kimliği 51'i tanımlar ve eth0 arayüzünü kullanır. Ana düğümde, state MASTER olarak ayarlanmış ve öncelik 100'dür. Yedek düğümler, state BACKUP olarak yapılandırılmış ve sırasıyla 90 ve 80 önceliklerine sahiptir. virtual_ipaddress tüm düğümlerde 192.168.10.50 olarak ayarlanmıştır. VIP ve düğümler aynı alt ağda olmalıdır. VPS için barındırma VIP'yi desteklemelidir. Kimlik doğrulama, 1234 paylaşılan parolası ile etkinleştirilmiştir. advert_int ayarı, ana düğümün VRRP reklamlarını ne sıklıkla gönderdiğini tanımlar. Daha düşük bir değer, daha sık reklamlar anlamına gelir ve potansiyel olarak geçiş algılamayı hızlandırır; daha yüksek bir değer, daha az sık reklamlar anlamına gelir ve potansiyel olarak geçişi geciktirir ancak ağ yükünü azaltır.
Yapılandırma
Her düğümde /etc/keepalived/keepalived.conf adlı bir yapılandırma dosyası oluşturun ve aşağıdaki içeriği yapıştırın:
vrrp_instance VI_1 { state <NODE_STATE> interface eth0 virtual_router_id 51 priority <NODE_PRIORITY> advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.10.50/24 } }
<NODE_STATE> ve <NODE_PRIORITY> yukarıda açıklandığı gibi değiştirin. Keepalived hizmetini etkinleştirin ve başlatın:
sudo systemctl enable keepalived && sudo systemctl start keepalived
Doğrulama
Kurulumu doğrulamak için, Keepalived aracılığıyla yapılandırılan VIP'yi ve ProxySQL aracılığıyla yapılandırılan portu kullanın. Örneğin, küme boyutunu kontrol edin:
mariadb -u test -ptest -h 192.168.10.50 -P6033 -D galtest -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Beklenen yanıt, Galera doğrulamasıyla eşleşmelidir:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Şimdi düğümleri rastgele yeniden başlatabilir, küme boyutunu ve veri erişilebilirliğini kontrol edebilirsiniz.

Sonuç
Bu kılavuz, Galera replikasyonunu, sorgu yönlendirmesi için ProxySQL'i ve Debian üzerinde sanal IP yönetimi için Keepalived'i kullanarak yüksek erişilebilirlik sağlayan bir MariaDB kümesi oluşturmayı göstermiştir. Bu mimari, otomatik geçiş ile yüksek erişilebilirlik, senkron replikasyon yoluyla veri tutarlılığı ve ProxySQL aracılığıyla geliştirilmiş performans gibi birkaç önemli fayda sağlar. Bu teknolojileri birleştirerek, artan iş yüklerini karşılayabilen ve kesinti sürelerini en aza indirebilen sağlam ve dayanıklı bir veritabanı ortamı oluşturabilirsiniz.