Sobes.tech
Senior

Туркии, ки ба таҷҳизоти хориҷӣ барои овоздиҳӣ барои роҳбар дар кластер Galera танзим кардан чӣ таҷриба доред?

sobes.tech AI

Ҷавоб аз AI

ประสบการณ์ในการตั้งค่าระบบเครื่องมือภายนอกสำหรับการลงคะแนนเสียงเพื่อผู้นำในคลัสเตอร์ Galera ไม่มีอยู่ ใน Galera ผู้นำไม่ได้ถูกกำหนดโดยเครื่องมือภายนอก; โหนดทั้งหมดในคลัสเตอร์มีสิทธิเท่าเทียมกันและสามารถประมวลผลคำขอเขียนพร้อมกัน (โดยปฏิบัติตามกฎของการทำซ้ำ) กลไกการเลือก "ผู้นำ" หรือโหนดหลักสำหรับงานเฉพาะ (เช่น การตรวจสอบหรือการดำเนินการทางการบริหาร) มักจะถูกดำเนินการในระดับของแอปพลิเคชัน ตัวโหลดบาลานเซอร์ หรือโดยใช้เครื่องมือภายนอกสำหรับการตรวจสอบและการจัดการลำดับขั้น แต่ไม่ใช่เป็นเครื่องมือในตัวสำหรับ การลงคะแนนเสียงเพื่อผู้นำในบริบทของการทำงานของ Galera

สำหรับการจัดการคลัสเตอร์ Galera และการเลือกโหนดสำหรับงานเฉพาะ สามารถใช้:

  • ProxySQL / HAProxy: ตัวโหลดบาลานเซอร์ที่สามารถส่งเส้นทางทราฟฟิกไปยังโหนดที่กำหนดตามสถานะของมัน
  • Keepalived / Pacemaker: เครื่องมือสำหรับรับประกันความพร้อมใช้งานสูงที่สามารถกำหนด IP เสมือนให้กับโหนดที่ใช้งานอยู่
  • เครื่องมือสำหรับการตรวจสอบ (เช่น Prometheus + Alertmanager): ช่วยในการติดตามสถานะของโหนดและตัดสินใจ (เช่น การเปลี่ยนเส้นทางทราฟฟิก)

ในบริบทของ Galera สิ่งสำคัญคือ:

  • การมีเสียงข้างมาก (quorum) เพื่อหลีกเลี่ยงสถานการณ์ split-brain
  • การตั้งค่า wsrep_cluster_address และ wsrep_sst_auth อย่างถูกต้อง
  • การทำ SST (State Snapshot Transfer) เมื่อเพิ่มโหนดใหม่

ถ้าหน้าที่คือการกำหนด "โหนดที่ healthiest" สำหรับการดำเนินการทางการบริหาร นี่เป็นเรื่องของการตรวจสอบและการเลือกตามเมตริก มากกว่าการลงคะแนนเสียงเพื่อผู้นำใน 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.