โหลดเซิร์ฟเวอร์ DNS ที่สมดุล: UDP / TCP


10

ฉันถูกขอให้สร้างโครงสร้างพื้นฐานการทำโหลดบาลานซ์ของเราในศูนย์ข้อมูล

คำขอเดิมคือการโหลดเซิร์ฟเวอร์ FTP ที่สมดุล ฉันพยายามทำสิ่งนั้นโดยใช้ load balancer ปัจจุบัน ( Piranha / LVS) แต่ไม่ได้ใช้แล้วทำงาน ไม่ใช่เพียงเพราะมีเอกสารประกอบเล็กน้อยสำหรับซอฟต์แวร์นี้ เนื่องจากPiranhaถือว่าเลิกที่ผมไปหลังจากสองสามวันพยายามซึ่งทำหน้าที่ในส่วนของเวลาที่ใช้ในการHAProxyPiranha

ดังนั้นฉันจึงมีการปรับสมดุลโหลด FTP (โหมดพาสซีฟ) ให้เข้าที่ ตอนนี้ฉันถูกขอให้แทนที่ Piranha Load Balancer ทั้งหมดในศูนย์ข้อมูล ในการกำหนดค่าปิรันย่าปัจจุบันเรามีเว็บเซิร์ฟเวอร์หลายเซิร์ฟเวอร์ IIS .... aaaand DNS

ไม่มีนี่คือสิ่งที่:
HAProxyดูเหมือนว่าจะเป็น LB ที่ใช้กันทั่วไป แต่มันไม่สามารถจัดการUDP load balancingได้ นี่เป็นคนเกียจคร้านเพราะฉันชอบวิธีการHAProxyทำงาน ดังนั้นฉันจึง googled มากและเจอหลายสิ่ง คนส่วนใหญ่ดูเหมือนจะใช้LVSเป็น LB สำหรับ DNS (TCP / UDP) บางคนใช้dlbDNSการใช้งานบางส่วนและการใช้งานบางอย่างlbnamednetfilter / iptables

เนื่องจากฉันต้องการติดกับHAProxyเซิร์ฟเวอร์ FTP, HTTP, IIS ฉันจึงสับสนในการใช้งานแบบเคียงข้างLVSกัน

ข้อกำหนด:
อินสแตนซ์ 2 LB ที่มี failover
2 เซิร์ฟเวอร์ DNS (มีอยู่แล้ว) ที่มี failover
เซิร์ฟเวอร์หลายแบ็กเอนด์ (http, แอปพลิเคชัน, ฯลฯ ... )

คำถาม:
เป็นไปได้ไหม การทำโหลดบาลานซ์ UDP บนเซิร์ฟเวอร์ DNS จำเป็นหรือไม่ มีทรัพยากรประเภทใดบ้างที่อาจแสดงให้ฉันเห็นว่าจะเริ่มต้นอย่างไร หรือมีโซลูชัน LB ที่สามารถไม่เพียงจัดการ TCP / HTTP แต่ยังปรับสมดุลโหลด UDP ได้หรือไม่

PS:โซลูชัน LB ควรไม่ใช่อุปกรณ์และใบอนุญาตโอเพ่นซอร์ส / GPL / ไม่มีค่าใช้จ่าย

ความช่วยเหลือหรือนำไปสู่ทรัพยากรที่เกี่ยวข้องมีความนิยมมาก!


ตรวจสอบ Nginx nginx.com/blog/announcing-udp-load-balancingสิ่งนี้ดูเหมือนว่าจะตอบคำถาม DNS ของคุณ
user433519

คำตอบ:


15

อย่าโหลดยอดเงิน DNS ของคุณ

มันเป็นโปรโตคอลเบาอย่างไม่น่าเชื่อ - คุณต้องมีปริมาณการรับส่งข้อมูลจำนวนมากเพื่อต้องการมากกว่าหนึ่งกล่อง (ซึ่งในกรณีนี้คุณจะเป็นปัญหาคอขวดใน load balancer ของคุณ) และมีความยืดหยุ่นในตัวเพราะคุณสามารถใช้ระเบียน NS หลายรายการ ในการมอบหมายของคุณ (เซิร์ฟเวอร์อื่นจะถูกใช้หากระบบล่ม)


ใช้เรคคอร์ด NS หลายรายการอย่างแน่นอนเนื่องจาก TCP กลายเป็นเรื่องปกติมากขึ้นสำหรับ DNS เพียงให้มันทำการโหลดบาลานซ์เอง การประดิษฐ์ล้อขึ้นใหม่นั้นเจ็บปวดด้วยเหตุผล
cpt_fink

เซิร์ฟเวอร์ DNS หลายตัวเสนอความซ้ำซ้อนและป้องกันความล้มเหลวทั้งหมด แต่เซิร์ฟเวอร์ DNS ที่ถูกดาวน์จะยังคงทำให้เกิดการหน่วงเวลาในการแก้ไขชื่อ
200_success

โอเคเหมาะสมสำหรับฉัน สิ่งหนึ่งคือฉันยังคงต้องการ IP เสมือนสำหรับจุดประสงค์ในการเข้าแทนที่หากฉันไม่เข้าใจผิดเพราะเราจะมี 2 เครื่องที่จะมี HAProxy และ LVS สำหรับการกำหนดเส้นทาง ฉันจะเข้าใกล้สิ่งนี้อย่างไร
Mosh Pit

2
@MoshPit vrrpd หรือ keepalived เป็นตัวเลือกที่ดี
เชนแมดเดน

ฉันถือว่าคุณกำลังพูดถึงการตั้งค่า Active - Active Hot Standby ใช่ไหม?
Mosh Pit

11

ฉันรู้สึกไม่สบายใจกับคำถามและคำตอบนี้เพราะยังไม่ได้รับการยอมรับว่าคุณใช้เซิร์ฟเวอร์ DNS ประเภทใด มีความเข้าใจผิดที่สำคัญบางประการเมื่อพูดถึงความยืดหยุ่นของ DNS แบบเรียกซ้ำและเป็นสิ่งสำคัญที่ผู้คนที่ล่องเรือผ่านเครื่องมือค้นหาจะไม่เดินออกจากการสนทนานี้ด้วยความปลอดภัยที่ผิดพลาด

  • DNS ที่มีสิทธิ์: สำหรับเซิร์ฟเวอร์ DNS ที่มีสิทธิ์ความรู้ทั่วไปเกี่ยวกับความยืดหยุ่นของ DNS นั้นเป็นสิ่งที่ดี ตราบใดที่คุณมีเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หลายตัวที่มีความซ้ำซ้อนทางภูมิศาสตร์คุณก็ใช้ได้ เหตุผลหลักสำหรับการเพิ่มความพร้อมใช้งานสูงสำหรับ IP แต่ละรายการคือถ้าคุณโฮสต์หลายโซนที่เชื่อถือได้ สิ่งนี้ช่วยให้คุณเพิ่มจำนวนเซิร์ฟเวอร์โดยไม่ต้องเปลี่ยนการตั้งค่าผู้รับจดทะเบียนสำหรับทุกโดเมนที่โฮสต์

  • Recursive DNS : ใช้รูปแบบการแก้ปัญหาความพร้อมใช้งานสูงทุกรูปแบบเสมอ (BGP อุปกรณ์ ฯลฯ ) นี่คือที่ที่คุณจะได้รับปัญหาร้ายแรงบางอย่าง ไลบรารีตัวแก้ปัญหาทั้งหมดไม่ได้สร้างเท่ากับ: ไคลเอนต์ Windows DNS จะปัด robin เซิร์ฟเวอร์เริ่มต้นที่ใช้ระหว่างการสืบค้น แต่ระบบที่ใช้ Unix ส่วนใหญ่จะวนรอบรายการตามลำดับ สิ่งที่เป็นที่รู้จักกันน้อยคือไลบรารี Unix เหล่านี้จะต้องหมดเวลาในการรวมโดเมนการค้นหาทุกครั้งก่อนที่จะย้ายไปยังเซิร์ฟเวอร์ถัดไป หากคุณมีการกำหนดค่าโดเมนการค้นหาหลายโดเมนและเซิร์ฟเวอร์แรกในลำดับการค้นหาตัวแก้ไขไม่สามารถใช้งานได้สิ่งนี้อาจสร้างความล่าช้าอย่างมากในการแก้ไข DNS สำหรับทุกคำขอเดียว: มีมากพอที่จะทำให้เกิดปัญหาภายในแอปพลิเคชันที่สำคัญของคุณ

เมื่อพูดถึง DNS แบบเรียกซ้ำอีกครั้งโปรดจำไว้ว่าโครงสร้างพื้นฐานเซิร์ฟเวอร์ของคุณนั้นยืดหยุ่นได้เหมือนกับการกำหนดค่าไคลเอนต์ที่ดีที่สุด เมื่อ บริษัท ของคุณเติบโตขึ้นนี่คือสิ่งที่คุณไม่สามารถควบคุมได้ อย่าตั้งสมมติฐานการออกแบบใด ๆ บนพื้นฐานของสภาพแวดล้อมระบบปฏิบัติการเซิร์ฟเวอร์ที่เป็นเนื้อเดียวกันเนื่องจากสิ่งที่ไม่ค่อยเหมือนกันใน บริษัท ที่กำลังเติบโต นี้จะกัดใครสักคนแน่นอนถ้าคุณไม่ได้วางแผนล่วงหน้า


เราใช้การเชื่อมโยง / ตั้งชื่อเป็นบริการ DNS แล้ว
Mosh Pit

จุดดี - ฉันสมมติว่ามีอำนาจในคำตอบของฉัน แต่คุณพูดถูกมันอาจจะเป็นผู้เรียกซ้ำ
เชนแมดเดน

1
@MoshPit ความคิดเห็น "บริการ DNS" ของคุณไม่ได้ชี้แจงว่าเรื่องนี้เกิดซ้ำหรือมีสิทธิ์ สิทธิ์คือเมื่อคุณโฮสต์โดเมน การเรียกซ้ำเป็นสิ่งที่คุณจะใช้เพื่อรับที่อยู่ IP ของโดเมนที่คุณไม่ได้โฮสต์ เซิร์ฟเวอร์ที่ทำทั้งสองอย่างนั้น "ผสมกัน" ซึ่งขัดกับแนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุด
Andrew B

1
ฉันขอโทษที่สังเกตเห็นว่าเมื่อคุณโพสต์ความคิดเห็นที่ เราเป็นผู้ควบคุมเซิร์ฟเวอร์ DNS ของเราเองและมีสิทธิ์
Mosh Pit

อย่าใช้ตัวโหลดบาลานซ์สำหรับความพร้อมใช้งานสูง
womble

2

วันนี้คุณสามารถใช้dnsdistโดย PowerDNS

จาก README

dnsdist เป็นตัวโหลดบาลานซ์ DNS-, DoS- และตระหนักถึงการละเมิด เป้าหมายในชีวิตคือการกำหนดเส้นทางการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ที่ดีที่สุดมอบประสิทธิภาพสูงสุดแก่ผู้ใช้ที่ถูกกฎหมายในขณะเดียวกันก็หลีกเลี่ยงหรือปิดกั้นการรับส่งข้อมูลที่ไม่เหมาะสม

dnsdist เป็นแบบไดนามิกในแง่ที่ว่าการกำหนดค่าสามารถเปลี่ยนแปลงได้ที่รันไทม์และสถิติของมันสามารถสอบถามจากอินเทอร์เฟซเหมือนคอนโซล

https://github.com/PowerDNS/pdns/tree/master/pdns/dnsdistdist

มีที่เก็บสำหรับระบบปฏิบัติการทั่วไป: https://repo.powerdns.com/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.