MariaDB Galera, ProxySQL, Keepalived ve Debian 13 kullanarak yüksek kullanılabilirlikli veritabanı kümesi kurma
Giriş
Uygulamalarınızın ölçeği ve önemi arttıkça, kesintisiz kullanılabilirliği sağlamak kritik bir önem kazanır. Veritabanı kesintileri, gelir kaybına, kullanıcıların memnuniyetsizliğine ve itibarınızın zedelenmesine yol açabilir. Bu kılavuz, Debian üzerinde Galera replikasyonu, akıllı sorgu yönlendirme için ProxySQL ve sanal IP yönetimi için Keepalived'i kullanarak yüksek kullanılabilirliğe (HA) sahip bir MariaDB kümesi oluşturmayı gösterir.
Bu mimari, her bir teknolojinin güçlü yönlerini bir araya getirerek sağlam ve dayanıklı bir veritabanı ortamı sunar. MariaDB Galera, senkron çoklu ana sunucu replikasyonu sağlayarak birden fazla düğüm arasında veri tutarlılığını garanti eder. ProxySQL, sorgu yönlendiricisi ve yük dengeleyici olarak işlev görür; akıllı trafik yönetimi sağlar ve veritabanı sunucularının yükünü hafifletir. Keepalived, sanal IP adresini yönetir; kümeye tek bir erişim noktası sağlar ve düğüm arızaları durumunda yük devretmeyi otomatikleştirir.
Bu kılavuz, Linux sistem yönetimi ve temel ağ kavramları (TCP/IP, DNS) konusunda deneyim sahibi olunduğunu ve veritabanı yönetimine aşina olunduğunu varsaymaktadır. Debian ortamında bu teknolojilerin yapılandırılması ve entegrasyonuna odaklanacağız.
Bu mimarinin temel avantajları:
- Yüksek Kullanılabilirlik: Otomatik yedekleme, kesinti süresini en aza indirir.
- 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 olan şeyler:
- Üç adet Debian 13 VPS veya sunucu.
- Tüm sunuculara root veya sudo erişimi.
- Komut satırı arayüzüne aşina olmak.
- TCP/IP ağları ve DNS hakkında temel bilgi.
Ön Koşullar
Düğümlerin birbirine bağlanması
Kümenin doğru çalışması için doğru ana bilgisayar adı çözümlemesi şarttır. Her sunucunun diğer sunucuları adlarına göre bulabilmesi gerekir. Yönetimi kolaylaştırmak için ana bilgisayar adları 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 (slave düğüm): 192.168.10.11
- galera2 (slave düğümü): 192.168.10.12
Ana bilgisayar adı çözümlemesini /etc/hosts dosyasını veya DNS'yi kullanarak gerçekleştirebilirsiniz.
-
/etc/hosts dosyasınıkullanma (Daha Basit Kurulum): Bu yöntem, test ve geliştirme ortamları için uygundur. Her sunucuda,/etc/hostsdosyasına sunucunun ana bilgisayar adını statik IP adresine eşleyen girdiler ekleyin. - DNS Kullanımı (Üretim Ortamları İç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, ping komutunu kullanarak her sunucunun diğer sunucuların ana bilgisayar adlarını çözümleyebildiğini doğrulayın. Örneğin, galera0'dan ping galera1 komutunu çalıştırın. Bir yanıt almanız gerekir.
Gerekli Paketlerin Kurulumu
Galera kümesini yapılandırmadan önce, her düğüme gerekli MariaDB paketlerini yüklemeniz gerekir. Bu bölümde, Debian tabanlı sistemler için gerekli adımlar özetlenmiştir.
Gerekli depoların eklenmesi
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 bir düğümde root olarak aşağıdaki komutu çalıştırın:
apt update && apt upgrade -y
Paketleri yükleyin
Bu komutu kullanarak her bir düğümde gerekli paketleri yükleyin:
apt install rsync mariadb-server mariadb-client galera-4 proxysql keepalived -y
MariaDB kurulumunu güvenli hale getirme
Her bir düğümde güvenlik komut dosyasını çalıştırın:
sudo mariadb-secure-installation
Bu komut dosyası iki önemli adımı gerçekleştirir: MariaDB sunucusu için güçlü bir root şifresi belirlemenizi ister ve güvenli olmayan 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 bir düğümde uzaktan erişimi etkinleştirmek için şu 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 senkronize çoğaltılmasını sağlar. Bu, bir düğümdeki veritabanında yapılan her değişikliğin otomatik olarak ve eşzamanlı bir şekilde diğer tüm düğümlere yansıdığı anlamına gelir. Bu kurulumda Galera'nın temel avantajları:
- Yüksek Kullanılabilirlik: Bir düğüm arızalanırsa, diğer düğümler kesintiye uğramadan veri sunmaya devam eder. Küme, çalışır durumda kalan bir düğümü otomatik olarak birincil düğüm olarak atar.
- Veri Tutarlılığı: Senkron replikasyon sayesinde, veriler tüm düğümlerde her zaman 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 çoğaltıldığı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 kullanılabilirlik, tutarlılık ve ölçeklenebilirlik özelliklerini korumasını sağlar; bunlar birçok uygulama için hayati öneme sahip 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] # Basic MariaDB settings binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Binds to all network interfaces. Adjust if you have a specific private IP for cluster traffic. # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Adjust path if different (e.g., /usr/lib64/galera-4/libgalera_smm.so) # Galera Cluster Configuration wsrep_cluster_name="my_galera_cluster" # A unique name for your cluster # IP addresses of ALL nodes in the cluster, comma-separated. # Use private IPs if available for cluster communication. wsrep_cluster_address="gcomm://galera0,galera1,galera2" # This node's specific configuration wsrep_node_name="<node_name>" # Must be unique for each node (e.g., node1, node2, node3) wsrep_node_address="<node_address>" # This node's own IP address
Her düğümde <node_name> ve <node_address> değerlerini değiştirin. İlk düğüm için galera0'ı kullanın ve diğerleri için de aynı şekilde devam edin.
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 (örn. galera0, galera1, galera2).
wsrep_node_address — yapılandırdığınız düğümün ana bilgisayar adına ayarlayın.
Kümeyi başlatın
Aşağıdaki komutu kullanarak ilk düğümde kümeyi 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üğümden 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üğümlerinin durumunu kontrol edin:
SHOW STATUS LIKE 'wsrep_cluster_size';
wsrep_cluster_size değeri, düğüm sayımızla eşit olmalıdır.
MariaDB [galtest]> SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.001 sec) MariaDB [galtest]>
Çoğaltmayı 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!');
Ardından, MariaDB kabuğu üzerinden aşağıdaki SQL sorgusunu kullanarak diğer düğümlerdeki verileri doğrulayın:
USE galtest; SELECT * FROM messages;
Test mesajı görünmelidir:
MariaDB [galtest]> USE galtest; Database changed MariaDB [galtest]> SELECT * FROM messages; +----+--------------------+ | id | text | +----+--------------------+ | 7 | Test from galera0! | +----+--------------------+ 1 row in set (0.001 sec) MariaDB [galtest]>
ProxySQL
Bu küme kurulumundaki ProxySQL, basit bir aracıdan çok daha fazlasıdır; veritabanınızın performansını, güvenilirliğini ve yönetilebilirliğini önemli ölçüde artırır. ProxySQL, uygulamalarınız ile Galera kümeniz arasında hayati bir katman görevi görür. Başlıca amaçları şunlardır:
- Sorgu Önbellekleme: ProxySQL, sık sık yürütülen sorguları aktif 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; böylece veritabanı yükünü önemli ölçüde azaltır ve yanıt sürelerini iyileştirir. Bu, özellikle okuma yoğunluğu yüksek uygulamalar için faydalıdır.
- Bağlantı Havuzu: ProxySQL, Galera kümesine kalıcı bağlantıların bulunduğu bir havuz tutar. Veritabanı bağlantısı kurmak, kaynak yoğun bir işlemdir. Bağlantı havuzu, mevcut bağlantıları yeniden kullanarak bu ek yükü ortadan kaldırır ve performansı daha da artırır.
- Yük Dengeleme ve Sorgu Yönlendirme: ProxySQL, sunucu yükü, sorgu türü veya veri yakınlığı gibi faktörlere göre sorguları Galera kümenizde farklı düğümlere 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 getirmek için yeniden yazabilir ve optimum yürütme için Galera’nın yeteneklerinden yararlanabilir.
- Arıza Algılama ve Yönlendirme: ProxySQL, Galera düğümlerinizin durumunu sürekli olarak izler. Bir düğüm arızalanırsa, ProxySQL sorguları otomatik olarak çalışır durumdaki düğümlere yeniden yönlendirir ve kesintisiz hizmet sağlar.
Esasen ProxySQL, Galera kümeniz için akıllı bir trafik yöneticisi ve performans optimize edici görevi görür; böylece kümenizin verimliliğini ve dayanıklılığını önemli ölçüde artırır.
Önlemler
Aşağıdaki kullanıcı adları ve şifreler yalnızca eğitim amaçlıdır. Üretim ortamında kurulum için güçlü şifreler kullanın.
Kullanıcı Kurulumu
İzleme kullanıcısı
ProxySQL içindeki izleme kullanıcısı, izleme araçlarının dahili istatistiklere ve metriklere güvenli bir şekilde erişmesi için özel olarak ayrılmış bir veritabanı hesabıdır. Yalnızca SELECT erişimi gibi minimum izinlerle yapılandırılmıştır; bu sayede kapsamlı performans izlemeyi mümkün kılarken verilerinizin bütünlüğünü ve güvenliğini sağlar.
İzleme kullanıcısını eklemek için ana düğümdeki MariaDB kabuğunda şu 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 altta yatan 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 veritabanıyla doğrudan etkileşime girerek verileri alır ve işler.
Uygulama kullanıcısını eklemek için ana düğümdeki MariaDB kabuğunda şu sorguyu çalıştırın:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION; FLUSH PRIVILEGES;
Doğrulama
Bu komutu kullanarak tüm düğümlerde kullanıcı oluşturma işlemini 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 } )
Aşağıdaki komutları kullanarak ProxySQL'i etkinleştirin ve başlatın:
sudo systemctl start proxysql sudo systemctl enable proxysql sudo proxysql --reload
Bu komutu kullanarak ProxySQL kurulumunuzu 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öneterek kümeye tek bir erişim noktası sağlar ve düğüm arızaları durumunda yedeklemeyi otomatikleştirir. MariaDB düğümlerinin durumunu izler ve bir arıza meydana geldiğinde trafiği sağlıklı bir düğüme yönlendirerek yüksek kullanılabilirliği korur. Yapılandırma, Sanal Yönlendirici Kimliği 51'i tanımlar ve eth0 arayüzünü kullanır. Ana düğümde durum, öncelik 100 olarak MASTER olarak ayarlanır. Yedek düğümler, sırasıyla 90 ve 80 öncelik değerlerine sahip BACKUP durumu ile yapılandırılır. virtual_ipaddress, tüm düğümlerde 192.168.10.50 olarak ayarlanır. VIP ve düğümler aynı alt ağda olmalıdır. Barındırma hizmeti, VPS için VIP'yi desteklemelidir. Kimlik doğrulama, 1234 ortak şifre ile etkinleştirilir. advert_int ayarı, ana düğümün VRRP duyurularını ne sıklıkla göndereceğini belirler. Daha düşük bir değer, daha sık ilan gönderilmesi anlamına gelir ve bu da yük devretme algılamasını hızlandırabilir; daha yüksek bir değer ise daha seyrek ilan gönderilmesi anlamına gelir ve bu da yük devretmeyi geciktirebilir ancak ağ yükünü azaltabilir.
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 } }
Yukarıda açıklandığı gibi <NODE_STATE> ve <NODE_PRIORITY> değerlerini 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 bağlantı noktasını 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 | +--------------------+-------+
Artık düğümleri rastgele yeniden başlatabilir, küme boyutunu ve veri kullanılabilirliğini kontrol edebilirsiniz.

Sonuç
Bu kılavuz, Debian üzerinde Galera replikasyonu, sorgu yönlendirme için ProxySQL ve sanal IP yönetimi için Keepalived kullanılarak yüksek kullanılabilirliğe sahip bir MariaDB kümesinin nasıl oluşturulacağını göstermiştir. Bu mimari, otomatik yük devretme ile yüksek kullanılabilirlik, senkron replikasyon yoluyla veri tutarlılığı ve ProxySQL sayesinde iyileştirilmiş performans dahil olmak üzere birçok önemli avantaj sunar. Bu teknolojileri bir araya getirerek, artan iş yüklerini yönetebilen ve kesinti sürelerini en aza indirebilen sağlam ve dayanıklı bir veritabanı ortamı oluşturabilirsiniz.