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 วินาทีถึงจะถือว่าการเชื่อต่อนั้นสำเร็จถ้านอกเหนือจากนั้นให้ทำการนำการเชื่อมต่อนั้นไปยังเครื่องอื่น

Comments are closed.