Load balance web server (nginx)
Load Balance
Load Balance คือ เกิดจากการนำเซิร์ฟเวอร์หลายๆเครื่องที่มีหน้าที่การทำงานเดียวกันมาทำงานร่วมกันเพื่อกระจายปริมาณงานไปยังแต่ละเครื่องทำให้ระบบสามารถรองรับการทำงานหนักๆ ได้เป็นอย่างดี มีความยืดหยุ่นในการออกแบบระบบให้เหมาะกับทุกๆ สถานการณ์เพื่อตอบสนองความต้องการของผู้ใช้
Nginx
Nginx หรืออ่านว่า Engine-X เป็นเว็บเซิร์ฟเวอร์ที่สามารถรองรับผู้ใช้งานได้หลากหลาย และมีประสิทธิภาพสูง เป็น Open-Source รองรับ Reverse Proxying, Caching, Load Balancing สำหรับเซิร์ฟเวอร์ HTTP, TCP และ UDP, และการทำ Media Streaming โดยส่วนใหญ่แล้วใช้ในการ Streamingสามารถรองรับการเชื่อมต่อในปริมาณมาก จัดการ Traffic ได้อย่างมีประสิทธิภาพและรวดเร็ว
ทำไมต้องใช้ Load Balance
เพราะความต้องการใช้งานที่เพิ่มขึ้น ทำให้ต้องหาวิธีการรองรับ เพื่อไม่ให้เกิดปัญหา Over Load จนเครื่อง Web Server ไม่สามารถให้บริการได้ การทำ Server Load Balance จะสามารถช่วยแก้ปัญหาได้ โดยที่ไม่จำเป็นต้องซื้อเครื่องที่ Spec สูงมากๆ แต่สามารถใช้เครื่องที่ Spec เท่า ๆ กันหลายเครื่อง มาทำงานร่วมกันแทน โดยการทำ Load Balance ในบางกรณีจะทำให้ได้ ระบบมีประสิทธิภาพสูงและความเสถียรมากกว่าการใช้เครื่องใหญ่ๆ เครื่องเดียว
หลักการทำ load balance
load balance จะทำโดยเอา server หลาย ๆ เครื่องมาทำงานร่วมกัน กระจาย load ไปแต่ละเครื่อง เพื่อให้มีประสิทธิภาพในการรับงานที่เข้ามาจาก User จำนวนมากๆ ได้ ดังนั้นจึงทำงานได้มากกว่าในเวลาเท่ากัน และโดยทั่วไปผู้ใช้ทั้งหมดได้รับบริการเร็วขึ้น load balance สามารถใช้กับฮาร์ดแวร์ ซอฟต์แวร์ หรือการผสมทั้งคู่ นอกจากนี้ยังมีคุณสมบัติของ Fail Over คือหากมีคอมพิวเตอร์ภายในกลุ่มไม่สามารถทางานได้ เช่น Down อยู่ หรือไม่สามารถรับงานหรือ user เพิ่มได้เนื่องจาก Resource ที่ใช้ทำงานไม่พอ ตัว load balance ที่เป็นตัวแจก Load ให้คอมพิวเตอร์ภายในกลุ่มก็จะส่ง load ไปยังคอมพิวเตอร์เครื่องอื่นๆ แทน จนกว่าคอมพิวเตอร์เครื่องนั้นจะกลับมาใช้งานได้ใหม่
โดยปกติระบบ load balance จะนิยมใช้กับเว็บไซด์, เครือข่ายสำหรับการแช็ตขนาดใหญ่, เว็ปไซด์สำหรับส่งไฟล์ที่ใช้ bandwidth สูงๆ, NNTPเซิร์ฟเวอร์ และDNSเซิร์ฟเวอร์ ขณะที่จะมีประโยชน์ในการรักษาความปลอดภัยโดยการซ่อนโครงสร้างของเครือข่ายภายใน และยับยั้งการเข้าถึงแกนกลางของเครือข่ายหรือบริการที่ทำงานอยู่พอร์ตอื่น
การทำ load balance สามารถทำได้หลากหลายวิธี ไม่ว่าจะเป็นการใช้ DNS ในลักษณะแบบ round robin (มี A record หลายอัน) หรือจะเป็นการใช้ Load Balancer เช่น HAProxy หรือ Ultra Monkey โดยเราจะมี Load Balancer หนึ่งตัว ข้างหน้า เซิร์ฟเวอร์ภายในกลุ่ม เพื่อรอรับการร้องขอจากผู้ใช้ เมื่อมีร้องขอเข้ามาตัว Load Balancer จะทำการ ส่งต่อการร้องขอนั้นไปยังเซิร์ฟเวอร์ภายในกลุ่ม โดยการทำงานจะเป็นการเปรียบเทียบสมรรถนะของเครื่องแล้วกระจายงานสู่เครื่องเซิร์ฟเวอร์ เพื่อให้เซิร์ฟเวอร์แต่ละเครื่องมีทำงานที่สมดุลกัน
การทำ load balance ปัจจุบันที่ใช้กันมีอยู่ 3 วิธี คือ
- Round-robin เป็นการส่ง traffic ไปยัง Server ภายในกลุ่มวนไปเรื่อยๆ ตามปกติแล้ว 1 domain name จะมีแค่ 1 ip address แต่ในการทำ DNS Round Robin ใน 1 domain name จะมีหลาย ip address สามารถทดลองได้โดยการทำ nslookup หรือ ลอง ping ไปยัง domain นั้นหลายๆรอบ จะเห็นว่า ip ที่เรา ping ไปแต่ละรอบนั้นไม่เหมือนกัน (ลองกับ facebook หรือ google ก็ได้) ข้อดีของวิธีนี้คือง่ายที่สุดและใช้งบประมาณน้อยที่สุด แต่เป็นวิธีนี้มีข้อเสียค่อนข้างมากข้อเสียที่สำคัญคือไม่สามารถควบคุมการทำงานได้ เนื่องจากการทำงานด้วยวิธีนี้จะมีแต่การทำ Round Robin เท่านั้น ไม่กระจายงานสู่เครื่องเซิร์ฟเวอร์ให้เท่าเทียมกันได้
- Sticky เป็นการส่ง traffic โดยยึดติดกับ Session ที่ user เคยเข้าไปใช้งาน เช่น ถ้า user เคยเข้าไปใช้ใน server ที่ 1 ภายในกลุ่ม traffic ของ user คนนั้นก็จะถูกส่งไปยัง server 1 เท่านั้น
- Work load เป็นการส่ง traffic โดยดูที่ performance ของ server ภายในกลุ่มเป็นสำคัญ เช่นหาก server 1 มีงานมากกว่า server 2 ตัว load balancer ก็จะส่ง traffic ไปยัง server 2
วิธีคอนฟิก
เครื่องที่เป็น web server (Client)
ติดตั้งแพ็คเกจ nginx ด้วยคำสั่งต่อไปนี้
- sudo -i
- apt update
- apt install nginx
ทดลองใช้ browser เข้าเว็บไซต์ โดยระบุ IP ของเครื่องเซิร์ฟเวอร์โดยใช้คำสั่ง
- ip a
browser เข้าเว็บเซิร์ฟเวอร์โดยการระบุ IP ของตัวเซิร์ฟเวอร์ แต่ไม่ได้ระบุพาธ หรือชื่อไฟล์ใดๆ ต่อท้าย เพราะฉะนั้น เว็บเซิร์ฟเวอร์ nginx จะไปเรียกไฟล์ที่อยู่ในไดเรคทอรีที่ระบุเป็น root แล้วไล่หาไฟล์ที่อยู่ในคอนฟิก index ตามลำดับ
ตัวอย่างหน้าจอเว็บดีฟอลต์ของ เว็บเซิร์ฟเวอร์ nginx
- cd /var/www/html/
- ll
ทำการแก้ไขไฟล์ index.nginx-debian.html เพื่อดูการเปลี่ยนแปลงของเว็บ โดยใช้คำสั่ง
- nano inden.nginx-debian.html
แก้ไขไฟล์เพื่อที่จะไว้สำหรับทดสอบ Load balance แต่ละเครื่องควรแตกต่างกัน เพื่อดูความเปลี่ยนแปลงตอนทดสอบ Load balance
สร้าง server อีก 2 เครื่องโดยการ clone
- cd /var/www/html/
- ll
- nano inden.nginx-debian.html
แก้ไขไฟล์
เข้าเว็บเซิร์ฟเวอร์โดยการระบุ IP ของตัวเซิร์ฟเวอร์
- ip a
เครื่องที่เป็น Load balance (Server)
ติดตั้งแพ็คเกจ nginx โดยใช้คำสั่งต่อไปนี้
- sudo -i
- apt update
- apt install nginx
แก้ไขไฟล์ default ที่พาธ /etc/nginx/sites-available/ โดยใช้คำสั่ง
- nano /etc/nginx/sites-available/default
และเพิ่มข้อความต่อไปนี้ลงไป
upstream myapp1 {
server 192.168.221.129(IP ของเครื่องเว็บเซิร์ฟเวอร์):80;
server 192.168.221.130(IP ของเครื่องเว็บเซิร์ฟเวอร์):80;
server 192.168.221.131(IP ของเครื่องเว็บเซิร์ฟเวอร์):80;
}
และเพิ่มข้อความนี้ในส่วน location
proxy_pass http://myapp1;
บันทึกไฟล์ default และทำการรีสตาร์ท nginx โดยใช้คำสั่ง
- systemctl restart nginx
ทดลองใช้ browser โดยระบุ IP ของเครื่องเซิร์ฟเวอร์ Load balance เมื่อรีเฟรชหน้า browser จะเห็นการเปลี่ยนแปลงตามที่ได้แก้ไขไว้
อ้างอิง: สาขาวิทยาการคอมพิวเตอร์
จัดทำโดย
นางสาวชลินดา กระแชร์รัมย์ รหัสนักศึกษา 620112230032
นางสาวพิมพ์ประภา ประสงค์ทรัพย์ รหัสนักศีกษา 620112230038
สาขาวิชาวิทยาการคอมพิวเตอร์