วิธีใช้ Nginx เป็น HTTP Load Balancer ใน Linux
เมื่อพูดถึงการตั้งค่าเซิร์ฟเวอร์แอปพลิเคชันหลายตัวเพื่อความซ้ำซ้อน การทำโหลดบาลานซ์เป็นกลไกที่ใช้กันทั่วไปในการกระจายคำขอบริการขาเข้าหรือการรับส่งข้อมูลเครือข่ายผ่านกลุ่มเซิร์ฟเวอร์แบ็คเอนด์อย่างมีประสิทธิภาพ
การปรับสมดุลโหลดมีข้อดีหลายประการ รวมถึงการเพิ่มความพร้อมใช้งานของแอปพลิเคชันผ่านการสำรอง ความน่าเชื่อถือที่เพิ่มขึ้น และความสามารถในการขยายขนาด (สามารถเพิ่มเซิร์ฟเวอร์ได้มากขึ้นในการผสมเมื่อปริมาณการรับส่งข้อมูลเพิ่มขึ้น) นอกจากนี้ยังนำมาซึ่งประสิทธิภาพของแอปพลิเคชั่นที่ได้รับการปรับปรุงและคุณประโยชน์อื่น ๆ อีกมากมาย
แนะนำให้อ่าน: สุดยอดแนวทางในการรักษาความปลอดภัย เสริมประสิทธิภาพ และปรับปรุงประสิทธิภาพของเว็บเซิร์ฟเวอร์ Nginx
Nginx สามารถปรับใช้เป็น ตัวจัดสรรภาระงาน HTTP ที่มีประสิทธิภาพเพื่อกระจายการรับส่งข้อมูลเครือข่ายขาเข้าและภาระงานระหว่างกลุ่มของแอปพลิเคชันเซิร์ฟเวอร์ ในแต่ละกรณีจะส่งคืนการตอบสนองจากเซิร์ฟเวอร์ที่เลือกไปยัง ลูกค้าที่เหมาะสม
วิธีการปรับสมดุลโหลดที่ Nginx รองรับ ได้แก่:
- round-robin – ซึ่งกระจายคำขอไปยังเซิร์ฟเวอร์แอปพลิเคชันในลักษณะ Round-robin มันถูกใช้เป็นค่าเริ่มต้นเมื่อไม่ได้ระบุวิธีการ
- เชื่อมต่อน้อยที่สุด - กำหนดคำขอถัดไปให้กับเซิร์ฟเวอร์ที่ไม่ว่าง (เซิร์ฟเวอร์ที่มีจำนวนการเชื่อมต่อที่ใช้งานน้อยที่สุด)
- ip-hash – โดยที่ฟังก์ชันแฮชใช้เพื่อกำหนดเซิร์ฟเวอร์ที่ควรเลือกสำหรับคำขอถัดไปโดยอิงตามที่อยู่ IP ของลูกค้า วิธีการนี้ช่วยให้เซสชันคงอยู่ได้ (ผูกไคลเอ็นต์กับแอปพลิเคชันเซิร์ฟเวอร์เฉพาะ)
นอกจากนี้ คุณยังสามารถใช้น้ำหนักเซิร์ฟเวอร์เพื่อควบคุมอัลกอริธึมการปรับสมดุลโหลด Nginx ในระดับที่สูงขึ้นได้ Nginx ยังสนับสนุนการตรวจสอบสภาพเพื่อทำเครื่องหมายเซิร์ฟเวอร์ว่าล้มเหลว (สำหรับระยะเวลาที่กำหนดได้ ค่าเริ่มต้นคือ 10 วินาที) หากการตอบสนองล้มเหลวโดยมีข้อผิดพลาด จึงหลีกเลี่ยงการเลือกสิ่งนั้น เซิร์ฟเวอร์สำหรับการร้องขอที่เข้ามาในภายหลังในบางครั้ง
คู่มือที่ใช้งานได้จริงนี้แสดงวิธีใช้ Nginx เป็น ตัวจัดสรรภาระงาน HTTP เพื่อกระจายคำขอของไคลเอ็นต์ขาเข้าระหว่างเซิร์ฟเวอร์สองเครื่อง โดยแต่ละเซิร์ฟเวอร์มีอินสแตนซ์ของแอปพลิเคชันเดียวกัน
เพื่อวัตถุประสงค์ในการทดสอบ แต่ละอินสแตนซ์ของแอปพลิเคชันจะมีป้ายกำกับ (บนอินเทอร์เฟซผู้ใช้) เพื่อระบุเซิร์ฟเวอร์ที่อินสแตนซ์กำลังทำงานอยู่
การทดสอบการตั้งค่าสภาพแวดล้อม
Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8
บนเซิร์ฟเวอร์แอปพลิเคชันแต่ละรายการ แต่ละอินสแตนซ์ของแอปพลิเคชันได้รับการกำหนดค่าให้เข้าถึงได้โดยใช้โดเมน tecmintapp.lan
สมมติว่านี่เป็นโดเมนที่จดทะเบียนโดยสมบูรณ์ เราจะเพิ่มสิ่งต่อไปนี้ในการตั้งค่า DNS
A Record @ 192.168.58.7
บันทึกนี้จะบอกคำขอของลูกค้าว่าโดเมนควรนำทางไปยังที่ใด ซึ่งในกรณีนี้คือ ตัวจัดสรรภาระงาน (192.168.58.7) ระเบียน DNS A
ยอมรับเฉพาะค่า IPv4 เท่านั้น หรืออีกทางหนึ่ง ไฟล์ /etc/hosts บนเครื่องไคลเอ็นต์สามารถใช้เพื่อการทดสอบได้ด้วย โดยมีรายการต่อไปนี้
192.168.58.7 tecmintapp.lan
การตั้งค่า Nginx Load Balancing ใน Linux
ก่อนที่จะตั้งค่าการปรับสมดุลโหลด Nginx คุณต้องติดตั้ง Nginx บนเซิร์ฟเวอร์ของคุณโดยใช้ตัวจัดการแพ็คเกจเริ่มต้นสำหรับการแจกจ่ายของคุณดังที่แสดง
sudo apt install nginx [On Debian/Ubuntu]
sudo yum install nginx [On CentOS/RHEL]
จากนั้น สร้างไฟล์บล็อกเซิร์ฟเวอร์ชื่อ /etc/nginx/conf.d/loadbalancer.conf
(ตั้งชื่อตามที่คุณต้องการ)
sudo vi /etc/nginx/conf.d/loadbalancer.conf
จากนั้นคัดลอกและวางการกำหนดค่าต่อไปนี้ลงไป การกำหนดค่านี้จะมีค่าเริ่มต้นเป็นแบบ Round-Robin เนื่องจากไม่มีการกำหนดวิธีการปรับสมดุลโหลด
upstream backend {
server 192.168.58.5;
server 192.168.58.8;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name tecmintapp.lan;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://backend;
}
}
ในการกำหนดค่าข้างต้น คำสั่ง proxy_pass
(ซึ่งควรระบุภายในตำแหน่ง /
ในกรณีนี้) ใช้เพื่อส่งคำขอไปยังเซิร์ฟเวอร์พร็อกซี HTTP ที่อ้างอิงโดยใช้ แบ็กเอนด์คำใน คำสั่งอัปสตรีม (ใช้เพื่อกำหนดกลุ่มของเซิร์ฟเวอร์) นอกจากนี้ คำขอจะถูกกระจายระหว่างเซิร์ฟเวอร์โดยใช้กลไกการปรับสมดุลแบบ Round-Robin แบบถ่วงน้ำหนัก
หากต้องการใช้กลไกการเชื่อมต่อน้อยที่สุด ให้ใช้การกำหนดค่าต่อไปนี้
upstream backend {
least_conn;
server 192.168.58.5;
server 192.168.58.8;
}
และหากต้องการเปิดใช้งานกลไกการคงอยู่ของเซสชัน ip_hash
ให้ใช้:
upstream backend {
ip_hash;
server 192.168.58.5;
server 192.168.58.8;
}
คุณยังสามารถมีอิทธิพลต่อการตัดสินใจเรื่องการปรับสมดุลโหลดโดยใช้ น้ำหนัก ของเซิร์ฟเวอร์ เมื่อใช้การกำหนดค่าต่อไปนี้ หากมีคำขอหกคำขอจากไคลเอนต์ แอปพลิเคชันเซิร์ฟเวอร์ 192.168.58.5 จะได้รับการมอบหมาย 4 คำขอ และ 2 รายการจะไปที่ 192.168.58.8
upstream backend {
server 192.168.58.5 weight=4;
server 192.168.58.8;
}
บันทึกไฟล์และออกจากมัน จากนั้นตรวจสอบให้แน่ใจว่าโครงสร้างการกำหนดค่า Nginx ถูกต้องหลังจากเพิ่มการเปลี่ยนแปลงล่าสุด โดยการรันคำสั่งต่อไปนี้
sudo nginx -t
หากการกำหนดค่าเป็นปกติ ให้รีสตาร์ทและเปิดใช้งานบริการ Nginx เพื่อใช้การเปลี่ยนแปลง
sudo systemctl restart nginx
sudo systemctl enable nginx
การทดสอบ Nginx Load Balancing ใน Linux
หากต้องการทดสอบการปรับสมดุลโหลด Nginx ให้เปิดเว็บเบราว์เซอร์แล้วใช้ที่อยู่ต่อไปนี้เพื่อนำทาง
http://tecmintapp.lan
เมื่ออินเทอร์เฟซของเว็บไซต์โหลดแล้ว ให้จดบันทึกอินสแตนซ์ของแอปพลิเคชันที่โหลดไว้ จากนั้นรีเฟรชหน้าอย่างต่อเนื่อง ในบางจุด ควรโหลดแอปจากเซิร์ฟเวอร์ตัวที่สองซึ่งระบุถึงการปรับสมดุลโหลด
คุณเพิ่งเรียนรู้วิธีตั้งค่า Nginx เป็นตัวจัดสรรภาระงาน HTTP ใน Linux เราต้องการทราบความคิดเห็นของคุณเกี่ยวกับคู่มือนี้ และโดยเฉพาะอย่างยิ่งเกี่ยวกับการจ้าง Nginx เป็นตัวจัดสรรภาระงาน ผ่านทางแบบฟอร์มคำติชมด้านล่าง สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสาร Nginx เกี่ยวกับการใช้ Nginx เป็นตัวจัดสรรภาระงาน HTTP