ทำความเข้าใจ HAProxy: วิธีทำ Load Balancing และ Reverse Proxy อย่างมีประสิทธิภาพ

แชร์ความรู้ Linux Ubuntu Web Server บทความ การ config server Linux FreeBSD Apache
การติดตั้ง XAMPP Mysql PHP ใครต้องการแชร์ความรู้เรื่องต่างๆ เหล่านี้ให้ ท่านหรืออื่น โพสที่หมวดนี้ได้

Moderator: mindphp, ผู้ดูแลกระดาน

Bundith
PHP Super Member
PHP Super Member
โพสต์: 298
ลงทะเบียนเมื่อ: 06/05/2025 9:23 am

ทำความเข้าใจ HAProxy: วิธีทำ Load Balancing และ Reverse Proxy อย่างมีประสิทธิภาพ

โพสต์ที่ยังไม่ได้อ่าน โดย Bundith »

ในยุคที่ระบบออนไลน์ต้องรองรับผู้ใช้งานจำนวนมาก และมีความต้องการความต่อเนื่อง (availability) ตลอด 24 ชั่วโมง การบริหารจัดการทราฟฟิกอย่างมีประสิทธิภาพจึงเป็นหัวใจสำคัญของระบบขนาดใหญ่ หนึ่งในเครื่องมือที่ได้รับความนิยมสูงมากในแวดวง DevOps และสถาปัตยกรรมระบบสมัยใหม่คือ HAProxy
, HAProxy (High Availability Proxy) เป็นซอฟต์แวร์โอเพ่นซอร์สที่ทำหน้าที่เป็น load balancer และ reverse proxy โดยออกแบบมาให้ทำงานได้เร็ว มีเสถียรภาพสูง และสามารถรองรับการเชื่อมต่อจำนวนมากได้อย่างมั่นคง ทั้งในระดับ Layer 4 (TCP) และ Layer 7 (HTTP), บทความนี้จะพาคุณไปรู้จักกับ HAProxy ตั้งแต่พื้นฐาน วิธีการทำงาน ตัวอย่างการใช้งานจริง ประโยชน์ที่ได้ และแนวทางในการนำไปใช้ในระบบ production อย่างมีประสิทธิภาพ
HAProxy
HAProxy
Linux - Web Server-1.png (57.88 KiB) Viewed 593 times
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
Load Balancing Algorithms ที่รองรับ:
  • Round-robin: แจกจ่ายแบบวนรอบ
  • Least connections: ส่งไปยังเซิร์ฟเวอร์ที่มี connection น้อยที่สุด
  • Source: เลือก backend ตาม IP ผู้ใช้ (เหมาะกับ session persistence)
  • URI หรือ Header-based routing: สำหรับ Layer 7
3. ตัวอย่างการใช้งาน HAProxy
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
เมื่อมีคนเข้าผ่าน port 80, HAProxy จะสลับการส่ง traffic ไปยัง web1 และ web2

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 ทันที
3.3 HTTPS Termination (SSL Offloading)
HAProxy รองรับ SSL termination ช่วยลดภาระ backend ในการจัดการ TLS:

โค้ด: เลือกทั้งหมด

frontend https-in
    bind *:443 ssl crt /etc/ssl/certs/haproxy.pem
    default_backend app-backend
4. ประโยชน์ของการใช้ HAProxy
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
4. ป้องกันการโจมตีเบื้องต้น (Security Layer)
  • ปิดช่องโหว่บางประเภทได้ เช่น DOS ด้วย rate limiting
  • ซ่อน IP จริงของ backend
  • ทำ TLS termination และ redirect HTTP → HTTPS
5. รองรับการตรวจสอบสุขภาพ (Health Check)
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
5.2 ไฟล์คอนฟิกพื้นฐาน /etc/haproxy/haproxy.cfg

โค้ด: เลือกทั้งหมด

global
    log /dev/log local0
    maxconn 2048
    daemon

defaults
    log     global
    mode    http
    option  httplog
    timeout connect 5s
    timeout client  30s
    timeout server  30s
จากนั้นสามารถเพิ่ม frontend และ backend ได้ตามต้องการ

5.3 การตรวจสอบสถานะผ่าน web UI
HAProxy มี status page เพื่อติดตามการทำงาน

โค้ด: เลือกทั้งหมด

listen stats
    bind *:8404
    mode http
    stats enable
    stats uri /stats
    stats refresh 10s
เปิดเบราว์เซอร์ไปที่ http://<IP>:8404/stats

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
6.7 ใช้ HAProxy เป็น Layer ของ API Gateway
ในบางระบบ 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/
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 5