Linux
น้องๆ เคยเจอปัญหาเว็บเข้าไม่ได้ไหม? หรือเข้าได้แต่โหลดช้าสุดๆ? นั่นแหละ! ปัญหาที่ Load Balancer เข้ามาช่วยแก้ สมัยผมทำร้านเน็ต SiamCafe นี่เจอบ่อยมาก เว็บเกมดังๆ เปิดตัวทีนึง เด็กๆ แห่กันเข้าไปเล่น Server ล่มระเนระนาด
Load Balancer เหมือนเป็น "Traffic Cop" คอยจัดสรรการจราจรของ Data Traffic ไม่ให้ Server ตัวใดตัวหนึ่งทำงานหนักเกินไป กระจายงานไปให้ Server ตัวอื่นที่ว่างกว่า ทำให้เว็บเราเข้าได้ตลอดเวลา ไม่ว่าจะ User เยอะแค่ไหน
Haproxy กับ Nginx ก็คือโปรแกรม Load Balancer ยอดนิยม ที่เขาใช้กันทั่วโลก Nginx นอกจากเป็น Load Balancer ได้แล้ว ยังเป็น Web Server ชั้นดีอีกด้วยนะ เดี๋ยวเรามาดูกันว่าแต่ละตัวมันเจ๋งยังไง
ก่อนจะไปลุยเรื่อง Haproxy กับ Nginx เราต้องเข้าใจพื้นฐานพวกนี้ก่อนนะ จะได้ไม่งงเวลาเขียน Config
TCP/IP ก็คือภาษาที่คอมพิวเตอร์ใช้คุยกันบน Internet นั่นแหละ ถ้าเราไม่รู้เรื่องนี้ ก็เหมือนเราจะสร้างบ้าน แต่ไม่รู้จักอิฐ หิน ปูน ทราย ไปอ่านเพิ่มเติมได้ที่ SiamCafe Blog นะ
HTTP/HTTPS คือ Protocol ที่ใช้สำหรับส่งข้อมูลบน Web Browser เวลาเราพิมพ์ www.google.com Browser เราจะส่ง Request ไปหา Server ของ Google ด้วย Protocol HTTP หรือ HTTPS นี่แหละ
Reverse Proxy คือตัวกลางที่คอยรับ Request จาก Client แล้วส่งต่อไปยัง Server ที่แท้จริง ซึ่ง Load Balancer ส่วนใหญ่มักจะทำงานเป็น Reverse Proxy ด้วย เพื่อซ่อน Server จริงของเราจากโลกภายนอก
เอาล่ะ! มาถึงส่วนที่สำคัญที่สุด นั่นก็คือการลงมือทำ สมัยผมทำร้านเน็ตนี่ต้อง Config เองทุกอย่าง ไม่มี Docker ไม่มี Cloud แบบสมัยนี้
ผมจะยกตัวอย่างการ Config Haproxy แบบง่ายๆ ให้ดูก่อนนะ ส่วน Nginx เดี๋ยวค่อยว่ากัน
อันดับแรก เราต้องติดตั้ง Haproxy ก่อน บน Linux Server ของเรา
sudo apt update
sudo apt install haproxy
หลังจากติดตั้งเสร็จแล้ว เราต้อง Config Haproxy ให้รู้จัก Server ของเรา โดยแก้ไขไฟล์ /etc/haproxy/haproxy.cfg
frontend http_front
bind *:80
mode http
default_backend http_back
backend http_back
balance roundrobin
server web1 192.168.1.101:80 check
server web2 192.168.1.102:80 check
Code นี้หมายความว่า Haproxy จะรับ Request ที่ Port 80 แล้วกระจายไปยัง Server 192.168.1.101 และ 192.168.1.102 โดยใช้ Algorithm roundrobin ซึ่งจะวน Server ไปเรื่อยๆ
อย่าลืม Restart Haproxy หลังจากแก้ไข Config นะ
sudo systemctl restart haproxy
Haproxy กับ Nginx ไม่ได้มีแค่สองตัวนะ ยังมี Load Balancer ตัวอื่นๆ อีกเยอะแยะ แต่สองตัวนี้เป็นที่นิยมที่สุดแล้ว
สมัยผมทำร้านเน็ต ก็เคยลองใช้ Load Balancer ตัวอื่นเหมือนกัน แต่สุดท้ายก็กลับมาใช้ Haproxy กับ Nginx เพราะมันเสถียรและ Config ง่าย
| คุณสมบัติ | Haproxy | Nginx |
|---|---|---|
| ประเภท | Load Balancer | Web Server / Load Balancer |
| Algorithm | หลากหลาย เช่น roundrobin, leastconn, source IP | roundrobin, leastconn, IP Hash |
| Protocol Support | HTTP, HTTPS, TCP | HTTP, HTTPS, TCP, UDP |
| Config | ซับซ้อนกว่า | ง่ายกว่า |
| เหมาะกับ | Load Balancing โดยเฉพาะ | Load Balancing และ Web Server |
ถ้าเราต้องการ Load Balancer ที่เน้นประสิทธิภาพและความยืดหยุ่น Haproxy คือตัวเลือกที่ดี แต่ถ้าเราต้องการ Web Server ที่ทำ Load Balancing ได้ด้วย Nginx ก็เป็นตัวเลือกที่น่าสนใจ
สุดท้ายแล้ว การเลือก Load Balancer ขึ้นอยู่กับความต้องการและ Skill ของเรา ถ้าอยากรู้เรื่อง IT ลึกๆ ตามไปอ่านที่ SiamCafe Blog ได้เลย
เฮ้ น้องๆ มาถึงตรงนี้ แสดงว่าเริ่มสนใจ Load Balancer จริงจังแล้วสินะ สมัยผมทำร้านเน็ต SiamCafe เนี่ย บอกเลยว่า Load Balancer ช่วยชีวิตไว้หลายครั้ง จากเครื่องพัง กลายเป็นแค่ลูกค้าสะดุดแป๊บเดียว
ไม่ได้โม้! เพราะว่าถ้า Server ตัวนึงเดี้ยง อีกตัวก็ยังทำงานต่อได้ ลูกค้าแทบไม่รู้ตัวเลยว่ามีอะไรเกิดขึ้น นี่แหละคือหัวใจของการทำ High Availability ที่แท้จริง
1. Health Check ให้ละเอียด: อย่าแค่ ping! ต้องเช็คให้ลึกถึงระดับ Application ว่ามันยังทำงานได้จริงไหม สมัยก่อนผมเคยเจอ Server ที่ตอบ ping ได้ แต่ Application ค้าง ต้อง reboot อย่างเดียว เสียลูกค้าไปหลายคนเลย
# Example HAProxy health check
option httpchk GET /healthcheck.php
http-check expect status 200
2. Sticky Session (Cookie): ถ้า Application ของน้องมันต้องจำ Session ของ User (เช่น Login) ให้ใช้ Sticky Session หรือ Cookie Based Persistence ไม่งั้น User จะ Login วนไปวนมา เพราะถูกส่งไป Server คนละตัวตลอด
# Example HAProxy sticky session
cookie SERVERID insert indirect nocache
server server1 192.168.1.10:80 cookie SERVER1 check
server server2 192.168.1.11:80 cookie SERVER2 check
3. Monitor อย่างสม่ำเสมอ: ตั้งระบบ Monitor ที่คอยเช็ค Load ของ Server แต่ละตัว รวมถึง Load Balancer เองด้วย ถ้า Load สูงเกินไป ต้องรีบหาสาเหตุ สมัยก่อนผมใช้ Nagios กับ Cacti ช่วยชีวิตไว้เยอะ
4. Backup and Restore: อย่าลืม Backup Configuration ของ Load Balancer ไว้เสมอ เผื่อวันดีคืนดีมันพังขึ้นมา จะได้ Restore กลับมาได้เร็วๆ
อันนี้ตอบยาก มันแล้วแต่ Use Case เลย HAProxy เก่งเรื่อง TCP Load Balancing ส่วน Nginx เก่งเรื่อง HTTP Load Balancing ถ้าไม่แน่ใจ ลองทำ Benchmark ดูเลยว่าตัวไหนตอบโจทย์มากกว่ากัน
ถ้า Web Site น้องเล็กๆ Traffic ไม่เยอะ Server ตัวเดียวก็อาจจะพอ แต่ถ้าอยากให้ Web Site มันเสถียรจริงๆ การมี Load Balancer ก็เป็นทางเลือกที่ดี ถึงแม้ว่ามันจะ Overkill ไปบ้างก็ตาม
Load Balancer ช่วยได้ในระดับนึง แต่ไม่ใช่ Silver Bullet มันช่วยกระจาย Traffic ทำให้ Server แต่ละตัวรับ Load น้อยลง แต่ถ้าโดน DDoS หนักๆ ยังไงก็ต้องมีระบบป้องกัน DDoS เฉพาะทางอยู่ดี
พื้นฐาน Linux ต้องแน่นพอสมควรเลยนะ ต้อง Config Network ได้ แก้ไข File Config ได้ ใช้ Command Line เป็น ถ้าไม่คล่อง Linux แนะนำให้ไปศึกษาเพิ่มเติมก่อน
Load Balancer เป็นเครื่องมือที่สำคัญมากในการทำ High Availability และ Scalability แต่ก็ต้อง Config ให้ถูก ต้อง Monitor ให้ดี และต้องเข้าใจ Use Case ของตัวเองด้วย ถ้าทำได้ตามนี้ รับรองว่า Web Site ของน้องจะเสถียรขึ้นเยอะเลย SiamCafe Blog มีบทความดีๆ อีกเยอะ ลองเข้าไปอ่านดูนะ
อย่าลืมว่าการทำ Server ให้เสถียร มันคือการลงทุนระยะยาวนะน้องๆ ลองดู iCafeForex เป็นตัวอย่างสิ เขาก็ต้องใช้ระบบที่เสถียรเหมือนกัน