MariaDB Galera, ProxySQL, Keepalived ve Debian 13 kullanarak yüksek erişilebilirlikli 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 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/hosts Kullanarak (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/hosts dosyası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.

Info

Ö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

Info

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.

Keepalived küme doğrulama sonucu

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.

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