, HAProxy (High Availability Proxy) เป็นซอฟต์แวร์โอเพ่นซอร์สที่ทำหน้าที่เป็น load balancer และ reverse proxy โดยออกแบบมาให้ทำงานได้เร็ว มีเสถียรภาพสูง และสามารถรองรับการเชื่อมต่อจำนวนมากได้อย่างมั่นคง ทั้งในระดับ Layer 4 (TCP) และ Layer 7 (HTTP), บทความนี้จะพาคุณไปรู้จักกับ HAProxy ตั้งแต่พื้นฐาน วิธีการทำงาน ตัวอย่างการใช้งานจริง ประโยชน์ที่ได้ และแนวทางในการนำไปใช้ในระบบ production อย่างมีประสิทธิภาพ
1. HAProxy คืออะไร?
HAProxy คือซอฟต์แวร์ประเภท load balancer และ proxy server ที่ออกแบบมาสำหรับกระจายโหลดจากผู้ใช้งาน (clients) ไปยังเซิร์ฟเวอร์ด้านหลัง (backend servers) โดยอัตโนมัติ และยังสามารถทำหน้าที่เป็น reverse proxy ได้
HAProxy สามารถทำงานได้ทั้งในระดับ Layer 4 (Transport layer) และ Layer 7 (Application layer) ซึ่งช่วยให้คุณสามารถกำหนดกลยุทธ์การ load balancing ได้อย่างยืดหยุ่น เช่น ตาม IP address, HTTP headers, หรือ URL path
2. หลักการทำงานของ HAProxy
มื่อมีผู้ใช้ส่ง request เข้ามายัง HAProxy:
- HAProxy จะรับ request แทน backend server
- เลือก backend ที่เหมาะสมตามกฎที่กำหนดไว้
- ส่ง request ไปยัง backend และรับ response กลับมา
- จากนั้นส่ง response กลับให้ client
- Round-robin: แจกจ่ายแบบวนรอบ
- Least connections: ส่งไปยังเซิร์ฟเวอร์ที่มี connection น้อยที่สุด
- Source: เลือก backend ตาม IP ผู้ใช้ (เหมาะกับ session persistence)
- URI หรือ Header-based routing: สำหรับ Layer 7
3.1 Reverse Proxy สำหรับ Web Server
โค้ด: เลือกทั้งหมด
frontend http-in
bind *:80
default_backend webservers
backend webservers
balance roundrobin
server web1 192.168.1.101:80 check
server web2 192.168.1.102:80 check
3.2 ใช้กับ PostgreSQL Cluster (เช่น Patroni)
โค้ด: เลือกทั้งหมด
listen pgsql_cluster
bind *:5432
mode tcp
option tcplog
balance roundrobin
server pg1 192.168.1.201:5432 check
server pg2 192.168.1.202:5432 check backup
- pg1 เป็น leader
- pg2 เป็น replica (backup)
- หาก leader ล่ม HAProxy จะ redirect ไป replica ทันที
HAProxy รองรับ SSL termination ช่วยลดภาระ backend ในการจัดการ TLS:
โค้ด: เลือกทั้งหมด
frontend https-in
bind *:443 ssl crt /etc/ssl/certs/haproxy.pem
default_backend app-backend
1. เพิ่มความเสถียรของระบบ (High Availability)
เมื่อมีหลาย backend หากเครื่องใดเครื่องหนึ่งล่ม HAProxy จะหยุดส่งทราฟฟิกไปยังเครื่องนั้นโดยอัตโนมัติ และส่งต่อไปยังเครื่องที่ยังทำงานได้ ทำให้ระบบไม่ล่มทั้งหมด
2. กระจายโหลดอย่างมีประสิทธิภาพ (Load Balancing)
ช่วยป้องกันปัญหาเครื่องใดเครื่องหนึ่งรับโหลดมากเกินไป ลดปัญหา bottleneck หรือระบบตอบสนองช้า
3. ปรับแต่ง routing ได้ตามต้องการ
สามารถกำหนดการเปลี่ยนเส้นทางได้จาก path, hostname, headers ฯลฯ
โค้ด: เลือกทั้งหมด
acl is_api path_beg /api
use_backend api_backend if is_api
- ปิดช่องโหว่บางประเภทได้ เช่น DOS ด้วย rate limiting
- ซ่อน IP จริงของ backend
- ทำ TLS termination และ redirect HTTP → HTTPS
HAProxy สามารถตรวจสอบว่า backend ทำงานอยู่หรือไม่ (health check) โดยไม่ต้องรอให้มี error จากผู้ใช้ก่อน
6. รองรับระบบขนาดใหญ่
HAProxy ใช้ resource ต่ำ และสามารถรองรับ connection จำนวนมากได้ เช่น ระบบ CDN, API Gateway, Cluster databases
5. ใช้งาน HAProxy อย่างไร?
5.1 การติดตั้ง (บน Ubuntu)
โค้ด: เลือกทั้งหมด
sudo apt update
sudo apt install haproxy
โค้ด: เลือกทั้งหมด
global
log /dev/log local0
maxconn 2048
daemon
defaults
log global
mode http
option httplog
timeout connect 5s
timeout client 30s
timeout server 30s
5.3 การตรวจสอบสถานะผ่าน web UI
HAProxy มี status page เพื่อติดตามการทำงาน
โค้ด: เลือกทั้งหมด
listen stats
bind *:8404
mode http
stats enable
stats uri /stats
stats refresh 10s
6. คำแนะนำเมื่อนำ HAProxy ไปใช้งานจริง
6.1 ใช้กับ TLS เสมอ
แนะนำให้ใช้ HTTPS (TLS termination) โดยกำหนด SSL certificates และ redirect HTTP ไป HTTPS
6.2 ปรับ timeout ให้เหมาะสม
ถ้าค่าต่ำเกินไปอาจทำให้ connection หลุด ถ้าสูงเกินไปอาจทำให้ system idle โดยไม่จำเป็น
6.3 ใช้ ACL สำหรับ routing ที่ยืดหยุ่น
เช่น API routing, backend ตาม path หรือ subdomain
6.4 ตั้งค่า log สำหรับ debugging
เปิด log mode และส่ง log ไปยังระบบกลาง เช่น ELK, Graylog เพื่อดูปริมาณ traffic, error, health check ฯลฯ
6.5 ใช้ร่วมกับระบบ HA
เช่นระบบ database ที่มี leader/follower (PostgreSQL + Patroni), HAProxy สามารถเลือกส่ง traffic ไปเฉพาะ leader ได้ โดยตรวจสอบผ่าน REST API
6.6 สำรองไฟล์ config และตั้งค่าตรวจสอบ syntax
ก่อน reload HAProxy ควรตรวจสอบ syntax เสมอ
โค้ด: เลือกทั้งหมด
haproxy -c -f /etc/haproxy/haproxy.cfg
ในบางระบบ HAProxy เป็นชั้นแรกก่อนจะถึงระบบ Gateway เช่น Kong, Envoy เพื่อกรอง request, ทำ TLS termination หรือ redirect แบบ global
สรุป
HAProxy เป็นเครื่องมือที่ช่วยเพิ่มประสิทธิภาพ เสถียรภาพ และความปลอดภัยให้กับระบบที่ต้องรองรับการเชื่อมต่อจำนวนมากในระดับ production ไม่ว่าจะเป็น Web App, API Service หรือระบบฐานข้อมูลแบบ cluster ก็ตาม, คุณสมบัติเด่นของ HAProxy ได้แก่ ความเร็วสูง รองรับ load balancing ทั้ง TCP และ HTTP มีระบบ health check, สามารถ routing ตามกฎที่ยืดหยุ่น และใช้ resource ต่ำ ซึ่งเหมาะกับทั้งระบบขนาดเล็กและระบบขนาดใหญ่ในองค์กร, การใช้งาน HAProxy อาจเริ่มต้นได้ง่าย ๆ ด้วยการเป็น reverse proxy หรือ load balancer ธรรมดา แล้วค่อยเพิ่มฟีเจอร์ต่าง ๆ เมื่อระบบเติบโตขึ้น ไม่ว่าจะเป็น HTTPS, ACL Routing หรือ Integration กับระบบ HA, หากคุณกำลังมองหาเครื่องมือที่จะทำให้ระบบของคุณรับโหลดได้มากขึ้น มีความเสถียรสูง และสามารถขยายระบบในอนาคตได้ง่าย HAProxy คือตัวเลือกที่ไม่ควรมองข้าม
อ้างอิง
https://docs.haproxy.org/3.1/intro.html
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/load_balancer_administration/install_haproxy_example1#install_haproxy_example1
https://www.atlantic.net/dedicated-server-hosting/how-to-install-haproxy-on-ubuntu-22-04/