ครั้งสุดท้ายที่เราพูดถึงความสามารถของ NSX Edge ในแง่ของการกำหนดเส้นทางแบบคงที่และไดนามิก และวันนี้เราจะจัดการกับโหลดบาลานเซอร์
ก่อนที่เราจะเริ่มการตั้งค่า ฉันอยากจะเตือนคุณสั้นๆ เกี่ยวกับประเภทหลักของการปรับสมดุล
ทฤษฎี
โซลูชันการปรับสมดุลเพย์โหลดในปัจจุบันส่วนใหญ่มักแบ่งออกเป็นสองประเภท: การปรับสมดุลที่ระดับที่สี่ (การขนส่ง) และระดับที่เจ็ด (แอปพลิเคชัน) ของโมเดล
- บาลานเซอร์ L4 ส่วนใหญ่มักจะเป็นพร็อกซีกลางที่อยู่ระหว่างไคลเอ็นต์และชุดของแบ็กเอนด์ที่มีอยู่ ซึ่งจะยุติการเชื่อมต่อ TCP (นั่นคือ ตอบสนองต่อ SYN อย่างอิสระ) เลือกแบ็กเอนด์และเริ่มเซสชัน TCP ใหม่ตามทิศทาง โดยส่ง SYN อย่างอิสระ ประเภทนี้เป็นหนึ่งในประเภทพื้นฐาน ตัวเลือกอื่น ๆ ที่เป็นไปได้
- บาลานเซอร์ L7 กระจายการรับส่งข้อมูลไปยังแบ็กเอนด์ที่มีอยู่ “ซับซ้อนกว่า” มากกว่าที่ L4 บาลานเซอร์ทำได้ สามารถตัดสินใจได้ว่าจะเลือกแบ็กเอนด์ใดโดยพิจารณาจากเนื้อหาของข้อความ HTTP (URL, คุกกี้ ฯลฯ)
ไม่ว่าจะเป็นประเภทใด บาลานเซอร์สามารถรองรับฟังก์ชันต่อไปนี้:
- การค้นพบบริการเป็นกระบวนการในการกำหนดชุดแบ็กเอนด์ที่มีอยู่ (คงที่, DNS, กงสุล, ฯลฯ)
- การตรวจสอบการทำงานของแบ็กเอนด์ที่ตรวจพบ (“ping” ที่ใช้งานอยู่ของแบ็กเอนด์โดยใช้คำขอ HTTP, การตรวจจับปัญหาในการเชื่อมต่อ TCP แบบพาสซีฟ, การมีอยู่ของรหัส HTTP 503 หลายรหัสในการตอบกลับ ฯลฯ)
- การปรับสมดุลตัวเอง (round robin, การเลือกแบบสุ่ม, แฮช IP ต้นทาง, URI)
- การยกเลิก TLS และการตรวจสอบใบรับรอง
- ตัวเลือกที่เกี่ยวข้องกับความปลอดภัย (การตรวจสอบสิทธิ์ การป้องกันการโจมตี DoS การจำกัดความเร็ว) และอื่นๆ อีกมากมาย
NSX Edge ให้การสนับสนุนโหมดการใช้งานโหลดบาลานเซอร์สองโหมด:
โหมดพร็อกซีหรือแขนเดียว. ในโหมดนี้ NSX Edge จะใช้ที่อยู่ IP เป็นที่อยู่ต้นทางเมื่อส่งคำขอไปยังแบ็กเอนด์ตัวใดตัวหนึ่ง ดังนั้น บาลานเซอร์จึงทำหน้าที่ของ NAT ต้นทางและปลายทางไปพร้อมๆ กัน แบ็กเอนด์จะมองเห็นการรับส่งข้อมูลทั้งหมดที่ส่งจากบาลานเซอร์ และตอบสนองต่อการรับส่งข้อมูลโดยตรง ในรูปแบบดังกล่าว บาลานเซอร์ต้องอยู่ในเซ็กเมนต์เครือข่ายเดียวกันกับเซิร์ฟเวอร์ภายใน
นี่คือวิธีการ:
1. ผู้ใช้ส่งคำขอไปยังที่อยู่ VIP (ที่อยู่ของบาลานเซอร์) ที่ได้รับการกำหนดค่าบน Edge
2. Edge เลือกหนึ่งในแบ็กเอนด์และดำเนินการ NAT ปลายทาง โดยแทนที่ที่อยู่ VIP ด้วยที่อยู่ของแบ็กเอนด์ที่เลือก
3. Edge ดำเนินการ NAT ต้นทาง โดยแทนที่ที่อยู่ของผู้ใช้ที่ส่งคำขอด้วยตนเอง
4. แพ็คเกจจะถูกส่งไปยังแบ็กเอนด์ที่เลือก
5. แบ็กเอนด์ไม่ตอบสนองต่อผู้ใช้โดยตรง แต่ตอบสนองกับ Edge เนื่องจากที่อยู่เดิมของผู้ใช้ถูกเปลี่ยนเป็นที่อยู่ของบาลานเซอร์
6. Edge ส่งการตอบสนองของเซิร์ฟเวอร์ไปยังผู้ใช้
แผนภาพอยู่ด้านล่าง
โหมดโปร่งใสหรืออินไลน์ ในสถานการณ์สมมตินี้ บาลานเซอร์มีอินเทอร์เฟซบนเครือข่ายภายในและภายนอก ในเวลาเดียวกันไม่มีการเข้าถึงเครือข่ายภายในโดยตรงจากเครือข่ายภายนอก โหลดบาลานเซอร์ในตัวทำหน้าที่เป็นเกตเวย์ NAT สำหรับเครื่องเสมือนบนเครือข่ายภายใน
กลไกมีดังนี้:
1. ผู้ใช้ส่งคำขอไปยังที่อยู่ VIP (ที่อยู่ของบาลานเซอร์) ที่ได้รับการกำหนดค่าบน Edge
2. Edge เลือกหนึ่งในแบ็กเอนด์และดำเนินการ NAT ปลายทาง โดยแทนที่ที่อยู่ VIP ด้วยที่อยู่ของแบ็กเอนด์ที่เลือก
3. แพ็คเกจจะถูกส่งไปยังแบ็กเอนด์ที่เลือก
4. แบ็กเอนด์ได้รับคำขอพร้อมที่อยู่เดิมของผู้ใช้ (ไม่ได้ดำเนินการ NAT ต้นทาง) และตอบกลับโดยตรง
5. โหลดบาลานเซอร์ยอมรับการรับส่งข้อมูลอีกครั้ง เนื่องจากในรูปแบบอินไลน์มักจะทำหน้าที่เป็นเกตเวย์เริ่มต้นสำหรับเซิร์ฟเวอร์ฟาร์ม
6. Edge ดำเนินการ NAT ต้นทางเพื่อส่งการรับส่งข้อมูลไปยังผู้ใช้ โดยใช้ VIP เป็นที่อยู่ IP ต้นทาง
แผนภาพอยู่ด้านล่าง
การปฏิบัติ
ม้านั่งทดสอบของฉันมีเซิร์ฟเวอร์ 3 เครื่องที่ใช้ Apache ซึ่งได้รับการกำหนดค่าให้ทำงานบน HTTPS Edge จะดำเนินการปรับสมดุลคำขอ HTTPS แบบ Round Robin โดยส่งคำขอใหม่แต่ละรายการไปยังเซิร์ฟเวอร์ใหม่
มาเริ่มกันเลย.
การสร้างใบรับรอง SSL ที่จะใช้โดย NSX Edge
คุณสามารถนำเข้าใบรับรอง CA ที่ถูกต้องหรือใช้ใบรับรองที่ลงนามด้วยตนเอง สำหรับการทดสอบนี้ ฉันจะใช้การลงนามด้วยตนเอง
- ในอินเทอร์เฟซ vCloud Director ให้ไปที่การตั้งค่าบริการ Edge
- ไปที่แท็บใบรับรอง จากรายการการดำเนินการ ให้เลือกการเพิ่ม CSR ใหม่
- กรอกข้อมูลในช่องที่ต้องกรอกแล้วคลิกเก็บ
- เลือก CSR ที่สร้างขึ้นใหม่และเลือกตัวเลือก CSR ลงนามด้วยตนเอง
- เลือกระยะเวลาที่มีผลบังคับใช้ของใบรับรองแล้วคลิกเก็บ
- ใบรับรองที่ลงนามด้วยตนเองจะปรากฏในรายการใบรับรองที่มีอยู่
การตั้งค่าโปรไฟล์แอปพลิเคชัน
โปรไฟล์แอปพลิเคชันช่วยให้คุณควบคุมการรับส่งข้อมูลเครือข่ายได้สมบูรณ์ยิ่งขึ้น และทำให้การจัดการง่ายและมีประสิทธิภาพ สามารถใช้เพื่อกำหนดพฤติกรรมสำหรับการรับส่งข้อมูลบางประเภท
- ไปที่แท็บโหลดบาลานเซอร์และเปิดใช้งานบาลานเซอร์ ตัวเลือกเปิดใช้งานการเร่งความเร็วที่นี่ช่วยให้บาลานเซอร์ใช้การปรับสมดุล L4 ที่เร็วขึ้นแทน L7
- ไปที่แท็บโปรไฟล์แอปพลิเคชันเพื่อตั้งค่าโปรไฟล์แอปพลิเคชัน คลิก +
- ตั้งชื่อโปรไฟล์และเลือกประเภทการรับส่งข้อมูลที่จะใช้โปรไฟล์ ให้ฉันอธิบายพารามิเตอร์บางอย่าง
การติดตา – จัดเก็บและติดตามข้อมูลเซสชัน เช่น เซิร์ฟเวอร์ใดในพูลที่ให้บริการตามคำขอของผู้ใช้ เพื่อให้แน่ใจว่าคำขอของผู้ใช้จะถูกส่งไปที่สมาชิกของพูลเดียวกันตลอดอายุของเซสชันหรือเซสชันต่อๆ ไป
เปิดใช้งานการส่งผ่าน SSL – เมื่อเลือกตัวเลือกนี้ NSX Edge จะหยุดยกเลิก SSL การยกเลิกเกิดขึ้นโดยตรงบนเซิร์ฟเวอร์ที่กำลังปรับสมดุลแทน
แทรกส่วนหัว X-Forwarded-For HTTP – ช่วยให้คุณสามารถกำหนดที่อยู่ IP ต้นทางของไคลเอนต์ที่เชื่อมต่อกับเว็บเซิร์ฟเวอร์ผ่านตัวโหลดบาลานเซอร์
เปิดใช้งาน SSL ริมสระน้ำ – ช่วยให้คุณระบุว่าพูลที่เลือกประกอบด้วยเซิร์ฟเวอร์ HTTPS
- เนื่องจากฉันจะปรับสมดุลการรับส่งข้อมูล HTTPS ฉันจึงต้องเปิดใช้งาน Pool Side SSL และเลือกใบรับรองที่สร้างไว้ก่อนหน้านี้ในแท็บใบรับรองเซิร์ฟเวอร์เสมือน -> ใบรับรองบริการ
- ในทำนองเดียวกันสำหรับใบรับรองพูล -> ใบรับรองการบริการ
เราสร้างพูลเซิร์ฟเวอร์ ซึ่งการรับส่งข้อมูลจะมีพูลที่สมดุล
- ไปที่แท็บพูล คลิก +
- เราตั้งชื่อพูล เลือกอัลกอริธึม (ฉันจะใช้ Round Robin) และประเภทของการตรวจสอบสำหรับแบ็กเอนด์การตรวจสอบความสมบูรณ์ ตัวเลือก โปร่งใส ระบุว่า IP ต้นทางเริ่มต้นของไคลเอ็นต์สามารถมองเห็นได้ในเซิร์ฟเวอร์ภายในหรือไม่
- หากปิดใช้งานตัวเลือกนี้ การรับส่งข้อมูลสำหรับเซิร์ฟเวอร์ภายในจะมาจาก IP ต้นทางของบาลานเซอร์
- หากเปิดใช้งานตัวเลือกนี้ เซิร์ฟเวอร์ภายในจะเห็น IP ต้นทางของไคลเอ็นต์ ในการกำหนดค่านี้ NSX Edge ต้องทำหน้าที่เป็นเกตเวย์เริ่มต้นเพื่อให้แน่ใจว่าแพ็กเก็ตที่ส่งคืนจะผ่าน NSX Edge
NSX รองรับอัลกอริธึมการปรับสมดุลต่อไปนี้:
- IP_HASH – การเลือกเซิร์ฟเวอร์ขึ้นอยู่กับผลลัพธ์ของฟังก์ชันแฮชสำหรับ IP ต้นทางและปลายทางของแต่ละแพ็กเก็ต
- น้อยที่สุด – การปรับสมดุลของการเชื่อมต่อขาเข้า ขึ้นอยู่กับจำนวนที่มีอยู่แล้วบนเซิร์ฟเวอร์เฉพาะ การเชื่อมต่อใหม่จะถูกส่งไปยังเซิร์ฟเวอร์ที่มีการเชื่อมต่อน้อยที่สุด
- ROUND_ROBIN – การเชื่อมต่อใหม่จะถูกส่งไปยังแต่ละเซิร์ฟเวอร์ตามลำดับ ตามน้ำหนักที่กำหนด
- URI – ส่วนด้านซ้ายของ URI (ก่อนเครื่องหมายคำถาม) จะถูกแฮชและหารด้วยน้ำหนักรวมของเซิร์ฟเวอร์ในกลุ่ม ผลลัพธ์จะระบุว่าเซิร์ฟเวอร์ใดได้รับคำขอ เพื่อให้มั่นใจว่าคำขอนั้นถูกส่งไปยังเซิร์ฟเวอร์เดียวกันเสมอ ตราบใดที่เซิร์ฟเวอร์ทั้งหมดยังคงพร้อมใช้งาน
- HTTPHEADER – การปรับสมดุลตามส่วนหัว HTTP เฉพาะซึ่งสามารถระบุเป็นพารามิเตอร์ได้ หากส่วนหัวหายไปหรือไม่มีค่าใดๆ จะใช้อัลกอริทึม ROUND_ROBIN
- URL – คำขอ HTTP GET แต่ละรายการจะค้นหาพารามิเตอร์ URL ที่ระบุเป็นอาร์กิวเมนต์ หากพารามิเตอร์ตามด้วยเครื่องหมายเท่ากับและค่า ค่าดังกล่าวจะถูกแฮชและหารด้วยน้ำหนักรวมของเซิร์ฟเวอร์ที่ทำงานอยู่ ผลลัพธ์จะระบุว่าเซิร์ฟเวอร์ใดได้รับการร้องขอ กระบวนการนี้ใช้เพื่อติดตาม ID ผู้ใช้ในคำขอ และตรวจสอบให้แน่ใจว่า ID ผู้ใช้เดียวกันจะถูกส่งไปยังเซิร์ฟเวอร์เดียวกันเสมอ ตราบใดที่เซิร์ฟเวอร์ทั้งหมดยังคงพร้อมใช้งาน
- ในบล็อกสมาชิก คลิก + เพื่อเพิ่มเซิร์ฟเวอร์ลงในพูล
ที่นี่คุณต้องระบุ:- ชื่อเซิร์ฟเวอร์;
- ที่อยู่ IP ของเซิร์ฟเวอร์
- พอร์ตที่เซิร์ฟเวอร์จะรับทราฟฟิก
- ท่าเรือตรวจสุขภาพ (Monitor healthcheck)
- น้ำหนัก – การใช้พารามิเตอร์นี้คุณสามารถปรับจำนวนการรับส่งข้อมูลตามสัดส่วนที่ได้รับสำหรับสมาชิกพูลเฉพาะได้
- การเชื่อมต่อสูงสุด – จำนวนการเชื่อมต่อสูงสุดไปยังเซิร์ฟเวอร์
- การเชื่อมต่อขั้นต่ำ – จำนวนการเชื่อมต่อขั้นต่ำที่เซิร์ฟเวอร์ต้องประมวลผลก่อนที่การรับส่งข้อมูลจะถูกส่งต่อไปยังสมาชิกพูลรายถัดไป
นี่คือลักษณะของพูลสุดท้ายของเซิร์ฟเวอร์ทั้งสามตัว
การเพิ่มเซิร์ฟเวอร์เสมือน
- ไปที่แท็บเซิร์ฟเวอร์เสมือน คลิก +
- เราเปิดใช้งานเซิร์ฟเวอร์เสมือนโดยใช้ Enable Virtual Server
เราตั้งชื่อ เลือกโปรไฟล์แอปพลิเคชัน พูล ที่สร้างไว้ก่อนหน้านี้ และระบุที่อยู่ IP ที่เซิร์ฟเวอร์เสมือนจะได้รับคำขอจากภายนอก เราระบุโปรโตคอล HTTPS และพอร์ต 443
พารามิเตอร์ทางเลือกที่นี่:
ขีดจำกัดการเชื่อมต่อ – จำนวนการเชื่อมต่อพร้อมกันสูงสุดที่เซิร์ฟเวอร์เสมือนสามารถประมวลผลได้
ขีดจำกัดอัตราการเชื่อมต่อ (CPS) – จำนวนคำขอที่เข้ามาใหม่สูงสุดต่อวินาที
เสร็จสิ้นการกำหนดค่าบาลานเซอร์ คุณสามารถตรวจสอบการทำงานของบาลานเซอร์ได้ เซิร์ฟเวอร์มีการกำหนดค่าอย่างง่ายที่ช่วยให้คุณเข้าใจว่าเซิร์ฟเวอร์ใดจากพูลที่ประมวลผลคำขอ ในระหว่างการตั้งค่า เราเลือกอัลกอริธึมการปรับสมดุล Round Robin และพารามิเตอร์ Weight สำหรับแต่ละเซิร์ฟเวอร์จะเท่ากับ XNUMX ดังนั้นคำขอที่ตามมาแต่ละรายการจะได้รับการประมวลผลโดยเซิร์ฟเวอร์ถัดไปจากพูล
เราป้อนที่อยู่ภายนอกของบาลานเซอร์ในเบราว์เซอร์และดู:
หลังจากรีเฟรชเพจแล้ว คำขอจะถูกประมวลผลโดยเซิร์ฟเวอร์ต่อไปนี้:
และอีกครั้ง - เพื่อตรวจสอบเซิร์ฟเวอร์ที่สามจากพูล:
เมื่อตรวจสอบ คุณจะเห็นว่าใบรับรองที่ Edge ส่งให้เรานั้นเป็นใบรับรองเดียวกับที่เราสร้างไว้ตอนเริ่มต้น
การตรวจสอบสถานะบาลานเซอร์จากคอนโซลเกตเวย์ Edge หากต้องการทำสิ่งนี้ ให้ป้อน แสดงพูลโหลดบาลานซ์ของบริการ.
การกำหนดค่า Service Monitor เพื่อตรวจสอบสถานะของเซิร์ฟเวอร์ในพูล
การใช้ Service Monitor เราสามารถตรวจสอบสถานะของเซิร์ฟเวอร์ในกลุ่มแบ็กเอนด์ได้ หากการตอบสนองต่อคำขอไม่เป็นไปตามที่คาดไว้ เซิร์ฟเวอร์สามารถนำออกจากพูลได้เพื่อไม่ให้รับคำขอใหม่
ตามค่าเริ่มต้น จะมีการกำหนดค่าวิธีการยืนยันสามวิธี:
- TCP-มอนิเตอร์
- จอภาพ HTTP
- จอภาพ HTTPS
มาสร้างใหม่กันเถอะ
- ไปที่แท็บการตรวจสอบบริการ คลิก +
- เลือก:
- ชื่อของวิธีการใหม่
- ช่วงเวลาที่คำขอจะถูกส่ง
- หมดเวลารอการตอบกลับ
- ประเภทการตรวจสอบ – คำขอ HTTPS โดยใช้วิธี GET, รหัสสถานะที่คาดหวัง – 200(OK) และ URL คำขอ
- นี่เป็นการเสร็จสิ้นการตั้งค่า Service Monitor ใหม่ ตอนนี้เราสามารถใช้มันเมื่อสร้างพูลได้
การตั้งค่ากฎการสมัคร
กฎของแอปพลิเคชันเป็นวิธีจัดการการรับส่งข้อมูลตามทริกเกอร์บางอย่าง ด้วยเครื่องมือนี้ เราสามารถสร้างกฎการปรับสมดุลโหลดขั้นสูงที่อาจเป็นไปไม่ได้ผ่านโปรไฟล์แอปพลิเคชันหรือบริการอื่น ๆ ที่มีอยู่ใน Edge Gateway
- หากต้องการสร้างกฎ ให้ไปที่แท็บกฎการใช้งานของบาลานเซอร์
- เลือกชื่อ สคริปต์ที่จะใช้กฎ แล้วคลิก Keep
- หลังจากสร้างกฎแล้ว เราจำเป็นต้องแก้ไข Virtual Server ที่กำหนดค่าไว้แล้ว
- ในแท็บขั้นสูง ให้เพิ่มกฎที่เราสร้างขึ้น
ในตัวอย่างด้านบน เราเปิดใช้งานการสนับสนุน tlsv1
ตัวอย่างเพิ่มเติมสองสามตัวอย่าง:
เปลี่ยนเส้นทางการรับส่งข้อมูลไปยังพูลอื่น
ด้วยสคริปต์นี้ เราสามารถเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังพูลสมดุลอื่นได้ หากพูลหลักหยุดทำงาน เพื่อให้กฎใช้งานได้ จะต้องกำหนดค่าหลายพูลบนบาลานเซอร์ และสมาชิกทั้งหมดของพูลหลักจะต้องอยู่ในสถานะดาวน์ คุณต้องระบุชื่อของพูล ไม่ใช่ ID
acl pool_down nbsrv(PRIMARY_POOL_NAME) eq 0
use_backend SECONDARY_POOL_NAME if PRIMARY_POOL_NAME
เปลี่ยนเส้นทางการรับส่งข้อมูลไปยังทรัพยากรภายนอก
ที่นี่เราจะเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังเว็บไซต์ภายนอก หากสมาชิกของพูลหลักทั้งหมดไม่ทำงาน
acl pool_down nbsrv(NAME_OF_POOL) eq 0
redirect location http://www.example.com if pool_down
ตัวอย่างเพิ่มเติม
นั่นคือทั้งหมดสำหรับฉันเกี่ยวกับบาลานเซอร์ หากคุณมีคำถามใด ๆ ถามฉันพร้อมที่จะตอบ
ที่มา: will.com