ผู้เขียน หัวข้อ: HAproxy Load balancing Mariadb Galera Custer  (อ่าน 11109 ครั้ง)

ออฟไลน์ ผู้ดูแลระบบ

  • Administrator
  • Jr. Member
  • *****
  • กระทู้: 66
  • +0/-0
    • ดูรายละเอียด
HAproxy Load balancing Mariadb Galera Custer
« เมื่อ: กันยายน 04, 2017, 01:58:29 pm »
How To Use HAProxy to Set Up Mariadb Load Balancing
สิ่งที่ต้องเตรียม
เครื่องทำ HAProxy 1 เครื่อง
เครื่อง Database Server 2 เครื่องเป็นอย่างน้อยในที่นี้ใช้ 3 เครื่องที่ทำ cluster มาเรียบร้อยแล้ว
ip DB1 =192.168.30.154
ip DB2 =192.168.30.155
ip DB3 =192.168.30.156
ip HAProxy =192.168.30.153

ต้องจัดเตรียม user สำหรับตรวจสอบสถานะเซิร์ฟเวอร์ MySQL โดยการสร้างผู้ใช้นี้จำเป็นต้องไปสร้างในทุกๆโหนดของ cluster (สร้างในแต่ละโหนดเอง)


sudo -s
เพื่อใช้งานใน mode root

mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('192.168.30.153','haproxy_check'); FLUSH PRIVILEGES;"
//ip 192.168.30.153 คือ ip ของเครื่อง hpproxy

ผู้ใช้ MySQL จำเป็นต้องมีสิทธิ์ root เมื่อเข้าถึงกลุ่ม MySQL จาก HAProxy ผู้ใช้ root ที่เป็นค่าเริ่มต้นบนเซิร์ฟเวอร์ทั้งหมดจะได้รับอนุญาตให้เข้าสู่ระบบภายในเครื่องเท่านั้น
แม้ว่าจะสามารถแก้ไขได้โดยการให้สิทธิ์เพิ่มเติมแก่ผู้ใช้ root คุณควรมีผู้ใช้ที่แยกกันซึ่งมีสิทธิ์ของ root

mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'192.168.30.172' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES"

แทนที่ haproxy_root และรหัสผ่านโดยใช้ค่าความปลอดภัยของคุณเอง ก็เพียงพอที่จะรันคำสั่งเหล่านี้บน MySQL
ทำซ้ำกับเครื่องที่เหลือ


Install MySQL Client
ติดตั้ง MySQL Client บน HAProxy เพื่อทดสอบการเชื่อมต่อ

apt-get install mysql-client

เมื่อติดตั้งเสร็จให้ทดลองเรียกใช้งานผ่าน user ที่ชื่อ haproxy_root
mysql -h 192.168.30.154 -u haproxy_root -p -e "SHOW DATABASES"

ถ้า connet ได้ก็จะแสดงชื่อตารางออกมาประมาณนี้ ถ้าไม่ได้ให้ไปตรวจสอบขั้นตอนว่ามีอะไรผิดพลาดไหม
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| playground         |
+--------------------+

Installing HAProxy
บนเครื่อง HAProxy ให้ติดตั้ง package สำหรับ HAProxy

apt-get install haproxy

เปิดใช้ HAProxy เพื่อเริ่มต้นโดยสคริปต์ init

sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/haproxy

หากต้องการตรวจสอบว่าการเปลี่ยนแปลงนี้ทำถูกต้องหรือไม่ให้รันสคริปต์ init ของ HAProxy โดยไม่มีพารามิเตอร์ใด ๆ
service haproxy
output
Usage: /etc/init.d/haproxy {start|stop|reload|restart|status}

Configuring HAProxy
เปลี่ยนชื่อไฟล์การกำหนดค่าเดิม

mv /etc/haproxy/haproxy.cfg{,.original}

สร้างและแก้ไขใหม่

nano /etc/haproxy/haproxy.cfg

บล็อกแรกคือบล็อกการกำหนดค่าเริ่มต้นและค่าเริ่มต้น

global
    log 127.0.0.1 local0 notice
    user haproxy
    group haproxy

defaults
    log global
    retries 2
    timeout connect 3000
    timeout server 5000
    timeout client 5000

ข้อมูลเพิ่มเติมเกี่ยวกับแต่ละตัวเลือกเหล่านี้จะอยู่ท้ายเรื่องนี้ต่อไป
เรากำหนด HAProxy เพื่อส่งข้อความบันทึกไปยัง 127.0.0.1
เราจึงต้องกำหนดค่า rsyslog เพื่อรับฟัง

ต่อไปการกำหนดค่าหลัก
#สำหรับ mysql
listen mysql-cluster
    bind 127.0.0.1:3306 # ถ้าต้องการเป็น ip อื่นให้เปลี่ยนเป็นอย่างอื่น เช่น bind 192.168.30.153:3306
    mode tcp
    option mysql-check user haproxy_check
    balance roundrobin
    server mysql-1 192.168.30.154:3306 check
    server mysql-2 192.168.30.155:3306 check
    server mysql-3 192.168.30.156:3306 check


หมายเหตุ: จากการใช้ อัลกอลิทึม    balance roundrobin กับ cluster 3 ตัวที่ แสปคเครื่องไม่เหมือนกันพบว่าเกิดข้อผิดพลาดในการทำ transection พร้อมกันจำนวนมาก จึงต้องแก้เป็น
   balance source แทน เพื่อให้ haproxy จ่ายงานให้ client ต่อ 1 node cluster


ไม่เหมือนกับ HTTP load balancing HAProxy ไม่มีโหมด "เฉพาะ" สำหรับ MySQL
ดังนั้นเราจึงใช้ tcp เราได้ตั้งค่า HAProxy ให้ฟังเฉพาะที่อยู่ย้อนกลับ (สมมติว่าแอ็พพลิเคชันอยู่บนเซิร์ฟเวอร์เดียวกัน)


เมื่อคุณเสร็จสิ้นการกำหนดค่าเริ่มต้นบริการ HAProxy แล้ว

service haproxy start



ทดสอบการทำงาน typing:
mysql -h192.168.30.153 -u haproxy_root -p -e "SHOW STATUS LIKE 'wsrep_gcomm_uuid'"

+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| wsrep_gcomm_uuid | 7ac6c9cf-9147-11e7-8551-fadd7d0556e7 |
+------------------+--------------------------------------+


ซ้ำคำสั่งเดิม

mysql -h192.168.30.153 -u haproxy_root -p -e "SHOW STATUS LIKE 'wsrep_gcomm_uuid'"
+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| wsrep_gcomm_uuid | dabbb080-9146-11e7-b657-bbd07239e766 |
+------------------+--------------------------------------+

ซ้ำคำสั่งเดิม
mysql -h192.168.30.153 -u haproxy_root -p -e "SHOW STATUS LIKE 'wsrep_gcomm_uuid'"
+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| wsrep_gcomm_uuid | 0d275234-9148-11e7-b0bf-836e0f43d6a2 |
+------------------+--------------------------------------+


ถ้าต้องการให้ haproxy จ่ายงานให้กับเครื่องใดเครื่องหนึ่งมากกว่า เครื่องอื่นๆให้แก้ไขที่ file

sudo nano /etc/haproxy/haproxy.cfg
server mysql-2 192.168.30.154.:3306 check weight 2


sudo systemctl restart haproxy

test














« แก้ไขครั้งสุดท้าย: กันยายน 20, 2017, 11:04:57 pm โดย ผู้ดูแลระบบ »