Какъв опит имате в настройването на външен инструмент за гласуване за лидер в клъстера 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) при добавяне на нови възли.
Ако задачата е да се определи "най-здравият" възел за административни операции, това по-скоро е въпрос на мониторинг и избор въз основа на метрики, а не гласуване за лидер в Galera.
Пример за използване на 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 # уникален ID за VRRP инстанция
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.