HAProxy(High Availability Proxy) เป็นโปรแกรมโหลดบาลานซ์แบบโอเพนซอร์ส ซึ่งสามารถทำการโหลดบาลานซ์บนเซอร์วิสแบบ HTTP และ HAProxy จะเหมาะสมกับการปรับโหลดบาลานซ์แบบ HTTP ในขณะที่ตัวโปรแกรมนี้สามารถสนับสนุนเซสชั่นแบบดำเนินการต่อได้ทันทีเมื่อหลุดจากเซสชั่นและการประมวลผลบน Layer 7
การเตรียมการเบื้องต้น
เตรียม VPS (Vitual Private Server) ทั้งหมด 3 เครื่อง
โดยลง OS ในที่จะลง OS เป็น Ubuntu 14.04 และกำหนด IP address ให้เรียบร้อย
- Load Balance Server : IP address : 192.168.1.2
- Web Server1 : IP address : 192.168.1.3
- Web Server2 : IP address : 192.168.1.4

Installing HAProxy
ใช้คำสั่ง apt-get ในการลงโปรแกรม HAProxy
| $sudo apt-get install haproxy |
เมื่อลงเสร็จแล้ว ให้ไปเปิดการใช้งาน startup ที่ไฟล์
| $sudo nano /etc/default/haproxy |
โดยให้ไปกำหนดค่า ENABLED
โดยใส่ค่า 1 เข้าไป
| ENABLED = 1 |
Configuring HAProxy
ขั้นตอนการตั้งค่านั้น เริ่มแรกให้ backup ไฟล์ config เดิมไว้ เผื่อการตั้งค่าที่ใส่เข้าไปผิดพลาด จะได้ดึงไฟล์นี้ไปแทนได้
| $sudo mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup |
จากนั้นให้สร้างไฟล์ใหม่ขึ้นมา
| $sudo nano /etc/default/haproxy |
โดยให้ config ตามภาพที่ให้ไว้
| globallog 127.0.0.1 local0 noticemaxconn 2000user haproxygroup haproxy |
จากคอนฟิคนั้น logนั้นได้อ้างอิงถึง syslog server ซึ่งข้อความ logทั้งหมดจะถูกส่งออก แต่ในที่นี้ logได้ถูกส่งเข้า Ubuntu syslog เพราะจากคอนฟิคไม่ได้อ้างอิงถึง IP address ของ Log Server ใดๆ หากมี IP address Log Server ก็สามารถมาเปลี่ยนได้ในภายหลัง
maxconnคือการกำหนดการใช้งานพร้อมกันของ server ตัวนั้น
| defaultslog globalmode httpoption httplogoption dontlognullretries 3option redispatchtimeout connect 5000timeout client 10000
timeout server 10000 |
ส่วนนี้จะไม่มีการเปลี่ยนแปลงค่า โดยจะคงค่า default ไว้ แต่ควรจะแก้ไขในส่วน timeout connect
ให้สอดคล้องกับ VPS และส่วนของ client timeoutและ server timeoutควรจะตั้งให้เลขทั้งสองส่วนเหมือนกัน เพื่อเวลา timeout ของทั้งสองฝั่งจะได้สอดคล้องกัน option redispatchจะเป็นส่วนเสริม หากมีการเชื่อมต่อผิดพลาด หากมีส่วนนี้จะทำการเชื่อมต่อจากจุดเดิมได้ทันที
| listen appname 0.0.0.0:80mode httpstats enablestats uri /haproxy?statsstats realm Strictly\ Privatestats auth A_Username:YourPasswordstats auth Another_User:passwdbalance roundrobinoption httpclose
option forwardfor server web server1 192.168.1.3:80 check server web server2 192.168.1.4:80 check |
ในส่วนนี้จะมีส่วนที่สามารถปรับเปลี่ยนได้ คือส่วนที่เป็น balance {roundrobin, static-rr, leastconn, source, uri and url_param}และส่วนของserverก็ใส่ IP address ที่เป็นของ web server ซึ่งอาจจะมีได้มากกว่านี้ ก็ให้ใส่เพิ่มเข้าไปดังภาพ
| $sudo service haproxy start |
Testing Load Balancing and Failover
การทดสอบการใช้งานนั้น ให้เขียนหน้าเว็บ HTML ที่มีข้อความที่แตกต่างกันบน Web Server ทั้งสองตัว เมื่อเขียนเสร็จแล้วให้ทำการเรียกผ่าน IP address หรือ URL ของ Loadbalancer ที่ทำไว้ หากผู้ใช้ตั้งค่าแบบ roundrobin หน้าเว็บนั้นจะสลับกันเรียกบน Web Server1 และ Web Server2
Reference by : https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-http-load-balancing-on-an-ubuntu-vps