Sobes.tech
Senior

Galera klasterida lider uchun ovoz berish uchun tashqi vositani sozlash bo'yicha tajribangiz qanday?

sobes.tech AI

AIdan javob

Galera klasterida lider uchun tashqi ovoz berish vositasini sozlash tajribasi mavjud emas. Galera'da liderlik tashqi vosita bilan aniqlanmaydi; barcha klaster tugunlari teng huquqlidir va yozuv so'rovlarini bir vaqtning o'zida bajarishi mumkin (replikatsiya qoidalariga rioya qilish sharti bilan). "Lider" yoki birinchi tugunni tanlash mexanizmi (masalan, monitoring yoki administrativ operatsiyalar uchun) odatda ilova, balanslovchi yoki uchinchi tomon monitoring va orkestratsiya vositalari yordamida amalga oshiriladi, lekin Galera ish faoliyatida "lider uchun ovoz berish" uchun o'rnatilgan vosita sifatida emas.

Galera klasterini boshqarish va maxsus vazifalar uchun tugunni tanlash uchun quyidagilar ishlatilishi mumkin:

  • ProxySQL / HAProxy: Trafikni muayyan tugunga yo'naltiradigan yuk balanslovchilar.
  • Keepalived / Pacemaker: Yuqori mavjudlikni ta'minlovchi vositalar, ular virtual IP manzilini faol tugunga tayinlaydi.
  • Monitoring vositalari (masalan, Prometheus + Alertmanager): Tugunlarning holatini kuzatish va qarorlar qabul qilish (masalan, trafikni o'tkazishni boshqarish).

Galera kontekstida muhim bo'lganlar:

  • Split-brain holatlarini oldini olish uchun kvorum.
  • wsrep_cluster_address va wsrep_sst_auth ni to'g'ri sozlash.
  • Yangi tugunlar qo'shilganda SST (State Snapshot Transfer).

Agar vazifa "eng sog'lom" tugunni aniqlash bo'lsa, bu ko'proq monitoring va metrikalar asosida tanlash masalasi bo'lib, Galera'da lider uchun ovoz berish emas.


ProxySQL yordamida ma'lum bir tugunga trafikni yo'naltirish misoli (maxsus vazifalar uchun):

-- Galera tugunlarini ProxySQL ga qo'shish
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);

-- O'qish uchun so'rovlarni barcha tugunlarga yo'naltirish uchun qoidani yaratish (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);

-- "Ma'muriy" tugun uchun alohida hostgroup yaratish (masalan, node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);

-- Ba'zi so'rovlarni (masalan, SHOW STATUS) "ma'muriy" tugunga yo'naltirish uchun qoidani yaratish
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);

-- O'zgarishlarni runtime ga yuklash va saqlash
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
LOAD MYSQL REPLICATION HOSTGROUPS TO RUNTIME;
SAVE MYSQL REPLICATION HOSTGROUPS TO DISK;

Bu misolda biz "lider uchun ovoz berish" emas, balki ProxySQL yordamida trafikni muayyan tugunga yo'naltirishni amalga oshiramiz, bu esa muayyan vazifalarni bajarish uchun tugunni tanlash sifatida talqin qilinishi mumkin.


Keepalived yordamida virtual IP manzilini sozlash misoli:

#!/bin/bash
# Keepalived uchun healthcheck skripti pseudo-kod
# Bu skript har bir Galera tugunida ishlaydi

GALERA_STATUS=$(mysql -h 127.0.0.1 -e "SHOW STATUS LIKE 'wsrep_local_state';" | grep wsrep_local_state | awk '{print $2}')
GALERA_QUORUM=$(mysql -h 127.0.0.1 -e "SHOW STATUS LIKE 'wsrep_cluster_status';" | grep wsrep_cluster_status | awk '{print $2}')

if [ "$GALERA_STATUS" -eq 4 ] && [ "$GALERA_QUORUM" == "Primary" ]; then
  # Tugun sinxronlangan (4) va asosiy bo'limda
  exit 0 # Sog'lom
else
  exit 1 # Sog'lom emas
fi
# Keepalived konfiguratsiyasi uchun pseudo-kod (vrrp_script blok)
vrrp_script check_galera {
  script "/etc/keepalived/scripts/check_galera.sh"
  interval 2 # har 2 sekundda tekshirish
  timeout 3 # 3 sekunddan so'ng timeout
  weight 50 # skript muvaffaqiyatli bo'lsa, prioritetni 50 ga oshirish
}

vrrp_instance VI_1 {
  state BACKUP # Standart holat
  interface eth0 # Tarmoq interfeysi
  virtual_router_id 51 # VRRP instansiyasi uchun noyob ID
  priority 100 # Bu tugunning prioriteti (balandroq = ko'proq MASTER bo'lish ehtimoli)
  advert_int 1 # E'lon qilish intervali

  authentication {
    auth_type PASS
    auth_pass your_password
  }

  virtual_ipaddress {
    192.168.1.100 # Virtual IP manzili
  }

  track_script {
    check_galera # Sog'liqni tekshirish skriptini kuzatish
  }
}

Bu yerda Keepalived skript yordamida Galera holatini tekshiradi va sog'lom tugunni, eng yuqori prioritetga ega bo'lgan tugunni virtual IP bilan ta'minlaydi, bu esa yozuv uchun yagona kirish nuqtasini ta'minlaydi, lekin bu Galera ichida lider uchun ovoz berish tizimi emas. Bu virtual IP uchun faol tugunni tanlash tizimidir.