Galera кластеринде лидер үчүн добуш берүү үчүн тышкы инструментти орнотууда кандай тажрыйбаңыз бар?
sobes.tech AI
AIден жооп
Galera кластери үчүн лидерге добуш берүүчү тышкы инструмент орнотуу тажрыйбасы жок. Galeraда лидерлик тышкы инструмент менен аныкталбайт; бардык түйүндөр тең укуктуу жана бир мезгилде жазуу суроолорун иштетип турушу мүмкүн (репликация эрежелерин сактоо менен). "Лидер" же биринчи түйүндү белгилөө механизми белгилүү тапшырмалар үчүн (мисалы, мониторинг же административдик операциялар) көбүнесе колдонмо деңгээлинде, жүктөм теңдешкич же тышкы мониторинг жана оркестрация инструменттерин колдонуу менен ишке ашырылат, ал эми Galera иштөө контекстинде лидерге добуш берүүчү түзмөк катары эмес.
Galera кластерин башкаруу жана белгилүү тапшырмалар үчүн түйүндү тандоо үчүн колдонулушу мүмкүн:
- ProxySQL / HAProxy: жүктөмдү теңдештирүүчү, ал белгилүү абалдарга негизделген түйүнгө трафикти багыттай алат.
- Keepalived / Pacemaker: жогорку жеткиликтүүлүк үчүн каражаттар, алар виртуалдык IP даректи активдүү түйүнгө белгилейт.
- Мониторинг инструменттери (мисалы, Prometheus + Alertmanager): түйүндөрдүн абалын көзөмөлдөөгө жана чечим кабыл алууга мүмкүндүк берет (мисалы, трафикти которуу).
Galera контекстинде маанилүү:
- Split-brain сценарийлеринен алдын алуу үчүн кворум түзүү.
- wsrep_cluster_address жана wsrep_sst_auth туура орнотуу.
- жаңы түйүндөрдү кошуу учурунда SST (State Snapshot Transfer).
Эгер максат "эң ден соолукта" болгон түйүндү аныктоо болсо, бул көбүнесе мониторинг жана метрикаларга негизделген тандоо, лидерге добуш берүү эмес.
ProxySQL колдонуу мисалы, белгилүү тапшырмалар үчүн бир түйүнгө трафикти багыттоо:
-- Бардык Galera түйүндөрүн ProxySQLге кошуу
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);
-- Окуу суроолорун бардык түйүндөргө (hostgroup 10) багыттоо үчүн эрежени түзүү
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);
-- "Административдик" түйүн үчүн өзүнчө hostgroup түзүү (мисалы, node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);
-- Белгилүү суроолорду (мисалы, SHOW STATUS) "административдик" түйүнгө (hostgroup 20) багыттоо үчүн эрежени түзүү
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);
-- Өзгөртүүлөрдү runtimeга жүктөө жана сактоо
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;
Бул мисалда биз "лидерге" добуш бербестен, трафикти белгилүү түйүнгө багыттоо үчүн ProxySQL колдонобуз, ал тандоону белгилүү тапшырмалар үчүн түйүндү тандоого окшоштуруу мүмкүн.
Keepalived колдонуу мисалы, виртуалдык IP үчүн:
#!/bin/bash
# Keepalived үчүн ден соолук текшерүү скриптинин псевдо-коддору
# Бул скрипт Galeraнын ар бир түйүндө иштейт
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
# Түйүн синхрондошту (4) жана негизги топто
exit 0 # Саламат
else
exit 1 # Саламат эмес
fi
# Keepalived конфигурациясынын псевдо-коддору (vrrp_script блок)
vrrp_script check_galera {
script "/etc/keepalived/scripts/check_galera.sh"
interval 2 # 2 секунд сайын текшерүү
timeout 3 # 3 секунддан кийин мөөнөтү бүтөт
weight 50 # скрипт ийгиликтүү болсо артыкчылыкты 50ге көбөйтөт
}
vrrp_instance VI_1 {
state BACKUP # алдын ала абал
interface eth0 # тармак интерфейси
virtual_router_id 51 # VRRP инстанциясынын уникалдуу ID
priority 100 # ушул түйүндүн артыкчылыгы (жогорку = көбүрөөк мүмкүнчүлүк менен MASTER)
advert_int 1 # жарнама интервалу
authentication {
auth_type PASS
auth_pass your_password
}
virtual_ipaddress {
192.168.1.100 # виртуалдык IP дарек
}
track_script {
check_galera # текшерүү скрипти
}
}
Бул жерде Keepalived скрипт аркылуу Galeraнын абалын текшерет жана виртуалдык IPди "саламат" түйүнгө гана белгилейт, ал эң жогорку артыкчылыкка ээ, бул кластерге жазуу үчүн бирдиктүү кирүү чекитин түзүүгө мүмкүндүк берет, бирок бул Galera ичиндеги лидерге добуш берүү системасы эмес. Бул виртуалдык IP үчүн активдүү түйүндү тандоо системасы.
Менин тажрыйбам бул механизмдерди конфигурациялоо жана тейлөө менен байланыштуу, алардын жогорку жеткиликтүүлүк жана трафикти башкаруу үчүн Galera кластерлеринде колдонулушу.