Sobes.tech
Senior

Ինչ փորձ ունեք 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);

-- Լիցքավորել փոփոխությունները ռնտայմում և պահպանել
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 կլաստերում։