MariaDB Galera, ProxySQL, Keepalived ve Debian 13 kullanarak yüksek kullanılabilirlikli veritabanı kümesi kurma | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

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/hosts dosyası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.

Info

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

Info

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.

Keepalived cluster verification result

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.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA