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