ค้นหาเว็บไซต์

วิธีใช้ 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