Juju #06 – เชื่อม MySQL Master-Master เข้ากับ HAProxy

ต่อจาก Juju #05 – วิธีกระจายงานไปยัง MySQL แบบ Master-Master เมื่อสร้าง MySQL แบบ Master-Master Replication ได้แล้ว ก็มาเชื่อมกับ HAProxy เพื่อให้ Application ที่เขียน มองเห็นทั้งระบบเป็นชิ้นเดียว

IP Address ของระบบต่างๆเป็นดังนี้
haproxy : 10.107.107.71

mysql-master1: 10.107.107.35

mysql-master1: 10.107.107.83

ขั้นตอนการติดตั้ง

  1. ที่ mysql-master1 ต้องสร้าง 2 Users ขึ้นมา ชื่อ haproxy_check และ haproxy_root ด้วยคำสั่งต่อไปนี้
    mysql -u root -p$(cat /var/lib/mysql/mysql.passwd) -e "INSERT INTO mysql.user (Host,User) values ('10.107.107.71','haproxy_check'); FLUSH PRIVILEGES;"
    
    mysql -u root -p$(cat /var/lib/mysql/mysql.passwd) -e "GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'10.107.107.71' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES;"
  2. ที่ haproxy
    ติดตั้ง mysql-client ด้วยคำสั่ง

    sudo apt-get install mysql-client

    ทดสอบด้วยคำสั่ง

    mysql -h 10.107.107.35 -u haproxy_root -ppassword -e "SHOW DATABASES;"
    mysql -h 10.107.107.83 -u haproxy_root -ppassword -e "SHOW DATABASES;"

    แก้ไขไฟล์ /etc/haproxy/haproxy.cfg โดยเพิ่มบรรทัดต่อไปนี้ท้ายไฟล์ [3]

    frontend mysql-cluster
     bind *:3306
     mode tcp
     default_backend mysql-backend
    
    backend mysql-backend
     mode tcp
     balance roundrobin
     server mysql-master1 10.107.107.35:3306 check
     server mysql-master2 10.107.107.83:3306 check

    และสุดท้าย ทดสอบด้วยคำสั่งต่อไปนี้

    for i in `seq 1 6`; do 
       mysql -h 127.0.0.1 -u haproxy_root -ppassword -e "show variables like 'server_id'"; 
    done
    

    ควรจะได้ผลประมาณนี้

  3. จากนั้นก็สามารถพัฒนา Application โดยใช้ IP Address ของ haproxy ซึ่งในที่นี้คือ 10.107.107.71 และ Port 3306 ได้แล้ว ซึ่งเบื้องหลัระบบจะทำการ Replication กันเองทั้งหมด

Reference:

[1] https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication

[2] https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing–3

[3] https://serversforhackers.com/load-balancing-with-haproxy