ต่อจาก 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
ขั้นตอนการติดตั้ง
- ที่ 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;"
- ที่ 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
- จากนั้นก็สามารถพัฒนา 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