Nginx คือแพ็คเกจที่เใช้ติดตั้งเพื่อที่จำทำให้เครื่อง Server สามารถทำงานเป็นเว็บเซิร์ฟเวอร์ที่กำลังได้รับความนิยมอยู่ในขณะนี้เป็นคู๋แข่งของ Apache ที่หลายคนรู้จักดี ความสามารถของ Nginx สามารถอ่านเพิ่มเติมได้ที่ http://nginx.org/en/ ใน How-To ครั้งนี้จะมาทำการเปิดใช้งานความสามรถหนึ่งของ Nginx กันนั่นก็คือ Nginx Load Balancing
Nginx Load Balancing เป็นวิธีการกระจายภาระการทำงานของเครื่อง Server ที่มีอยู่หลายเครื่องให้ช่วยกันรับภาระการทำงานใน How-To ครั้งนี้จะเป็นการทำงานแบบ Round Robin ซึ่งกำหนดให้มีเครื่อง Server 3 เครื่อง ดังนี้
- backend1.example.com
- backend2.example.com
- backend3.example.com
ติดตั้ง Nginx ด้วยคำสั่ง
sudo apt-get install nginx
ทำการแก้ไขไฟล์ default ใน /etc/nginx/sites-available เพื่อเพิ่มความสามารถ Upstream Module (Load Balancing) ให้กับ Nginx ด้วยคำสั่ง
sudo nano /etc/nginx/sites-available/default
ทำการเพิ่มเนื้อหาไฟล์ดังนี้
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; }
และทำการเพิ่ม proxy_pass http://backend; ในส่วนของ server ดังนี้
server { location / { proxy_pass http://backend; } }
ทำการบันทึกไฟล์และสั่ง Restart Nginx ด้วยคำสั่ง
sudo service nginx restart
เท่านี้ก็สามารถทำ Load Balancing ให้ Nginx ได้แล้วแต่ความสามารถของ Upstream Module สามารถอื่นอีกคือ
Weight การกำหนดบริมาณของการใช้งานให้แต่ละเครื่อง Server โดยทำการเพิ่ม weight=x โดยทำการเปลี่ยนค่า x เป็นจำนวนตัวเลขโดยค่ามาตราฐานจะเป็น 1 และแนะนำให้เพิ่มที่ละสองเท่าเช่น
upstream backend { server backend1.example.com weight=1; server backend2.example.com weight=2; server backend3.example.com weight=4; }
ซึ่งจะมีความหมายว่าเครื่อง backend2.example.com ที่มี weight=2 จะรับภาระการทำงานเป็น 2 เท่าของเครื่อง backend1.example.com และเครื่อง backend3.example.com ที่มีค่า weight=4 จะรับภาระการทำงานมากกว่าเครื่อง backend2.example.com เป็นสองเท่า
Hash คือจัดการเมื่อต้องการจัดการเครื่อง Server เครื่องใดเครื่องหนึ่งชั่วคราวและมีผลกระทบทำให้ไม่สามารถทำงานได้ให้ทำการข้ามการให้ภาระงานกับเครื่องนั้นไป โดยทำการเพิ่ม ip_hash; และไปใส่ค่า down ในเครื่อง Server ที่ไมสามารถใช้งานได้
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; }
Max Fails คือการกำหนดจำนนครั้งและเวลาที่ใช้ในการเชื่อมต่อถ้าไม่สามารถเชื่อต่อได้ภายในจำนนวนครั้งที่กำหนดให้ทำการข้ามไปเครื่องอื่น โดยมีการกำหนดค่า 2 อย่างคือ max_fails จำนวนครั้งในการเชื่อมต่อสูงสุด และ fail_timeout คือระยะเวลาในการเชื่อมต่อในแต่ละครั้งต้องไม่เกินค่านี้ ตัวอย่างเช่น
upstream backend { server backend1.example.com max_fails=3 fail_timeout=15s; server backend2.example.com weight=2; server backend3.example.com weight=4;
หมายความว่ากำหนดให้การเชื่อมต่อที่เข้ามาทาง backend1.example.com จะมีการเชื่อมต่อได้ไม่เกิน 3 ครั้งและครั้งละไม่เกิน 15 วินาทีถึงจะถือว่าการเชื่อต่อนั้นสำเร็จถ้านอกเหนือจากนั้นให้ทำการนำการเชื่อมต่อนั้นไปยังเครื่องอื่น