เมื่อคราวที่แล้วเขียนเรื่อง Load Balance ให้ Apache Web Serverv ง่ายๆ โดยใช้ DNS Round Robin ซึ่งสามารถทำ Load Balance ได้ง่ายๆ แต่มีปัญหาที่มีโอกาสเกิดขึ้นได้ คือ เมื่อ Web Server ตัวใดตัวหนึ่งมีปัญหา ผู้เข้าเว็บที่โชคดีได้ IP Address เครื่องนั้นไปก็จะไม่สามารถเข้าถึงเว็บได้ DNS Round Robin ช่วยเรื่อง Load Balance ได้จริง แต่จัดการเรื่อง fail over ไม่ได้ :) ครั้งนี้จะมาแนะนำการทำ Load Balance ง่ายๆ อีกเช่นเคย โดยใช้ Pound

Pound ทำหน้าที่

  • reverse proxy : ส่ง request จากเว็บเบราเซอร์ไปยัง back-end server ที่มีอยู่
  • load balancer : ส่ง request จากเว็บเบราเซอร์ไปยัง back-end server ที่มีอยู่และจัดการข้อมูล session ด้วย
  • SSL Wrapper : ถอดรหัส HTTPS จากเว็บเบราเซอร์และส่งไปยัง back-end server ที่มีอยู่
  • กลั่นกรอง HTTP/HTTPS : ตรวจสอบ request เพื่อความถูกต้องและรับ reuest ที่มีรูปแบบถูกต้องเท่านั้น
  • fail over-server : หากมี back-end server ตาย Pound จะจำเครื่อง server นั้นและหยุดส่ง request จนกว่าจะมีการแก้ไข
  • request redirector : request จาก Pound สามารถกระจายไปยัง back-end server ทั้งหมดได้ขึ้นอยู่กับ request URL

    Pound เป็นโปรแกรมเล็กๆ ง่ายในการจัดการ คุณสามารถสั่งให้ Pound ทำงานแบบ chroot jail ได้โดยการกำหนด uid/gid ได้ :) ก่อนจะติดตั้งและใช้งาน Pound มาทำความเข้าใจโครงสร้างการเชื่อมต่อกันก่อน

จากภาพข้างต้นเราใช้ Pound เป็น Balancer เพื่อกระจาย request จาก Client ไปยังเครื่องเซิร์ฟเวอร์ที่ต่อกับ Pound อยู่ มาติดตั้ง Pound กันเลย สำหรับท่านที่ใช้ Debian, Ubuntu ติดตั้งดังนี้

sudo apt-get install pound

จากนั้นแก้ไข config ที่ /etc/default/pound ดูตรงบรรทัด startup=0 เปลี่ยนเป็น startup=1 จากนั้นมาแก้ไข /etc/pound/pound.cfg ดูในส่วน ListenHTTP ดังนี้

ListenHTTP
Address 10.11.12.10
Port 80
Service
BackEnd
Address 10.11.12.11
Port 80
End
BackEnd
Address 10.11.12.12
Port 80
End
BackEnd
Address 10.11.12.13
Port 80
End
End
End

หากต้องการกำหนด Priority เพื่อกระจายโหลดไปยังเครื่องใดเครื่องหนึ่งมากกว่าเครื่องอื่นๆ ในกรณีที่มีเครื่องใดเครื่องหนึ่งมี Resource มากกว่าเครื่องอื่นๆ และสามารถรับโหลดได้มากกว่าเครื่องอื่นๆ เราสามารถกำหนด Priority เพื่อกระจายโหลดไปยังเครื่องนั้นๆ ได้ ยกตัวอย่าง เช่น เครื่อง Web Server 1 เพียงเพิ่ม Config เข้าไปอีก 1 บรรทัดเพื่อกำหนด Priority ดังนี้

ListenHTTP
Address 10.11.12.10
Port 80
Service
BackEnd
Address 10.11.12.11
Port 80
Priority 7
End
BackEnd
Address 10.11.12.12
Port 80
End
BackEnd
Address 10.11.12.13
Port 80
End
End
End

เพียงเท่านี้คุณก็สามารถจัดการ Load Balance ให้กับ Web Server ของคุณได้แล้วครับ ;)

Comments are closed.