How To Use HAProxy to Set Up HTTP Load Balancing on an Ubuntu

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