Round-Robin DNS นั้น“ ดีพอ” สำหรับการโหลดเนื้อหาคงที่หรือไม่?


66

เรามีชุดของที่ใช้ร่วมกันเนื้อหาคงที่เราให้บริการขึ้นระหว่างเว็บไซต์ของเราที่http://sstatic.net น่าเสียดายที่เนื้อหานี้ไม่ได้โหลดอย่างสมดุลในขณะนี้ - เนื้อหานี้ให้บริการจากเซิร์ฟเวอร์เดียว หากเซิร์ฟเวอร์นั้นมีปัญหาไซต์ทั้งหมดที่พึ่งพานั้นจะหมดประสิทธิภาพเนื่องจากทรัพยากรที่ใช้ร่วมกันเป็นไลบรารีและรูปภาพจาวาสคริปต์ที่ใช้ร่วมกัน

เรากำลังหาวิธีที่จะโหลดเนื้อหาสแตติกบนเซิร์ฟเวอร์นี้เพื่อหลีกเลี่ยงการพึ่งพาเซิร์ฟเวอร์เดี่ยว

ฉันรู้ว่า DNS round-robin นั้นดีที่สุดในระดับต่ำสุด (บางคนอาจบอกว่าสลัม ) แต่ฉันอดไม่ได้ที่จะสงสัย - round robin DNS เป็นโซลูชัน "ดีพอ" สำหรับการโหลดภาระพื้นฐานของเนื้อหาคงที่ ?

มีการถกเถียงเรื่องนี้ในแท็ก[dns] [load-balancing]และฉันได้อ่านบทความดีๆในหัวข้อนี้

ฉันตระหนักถึงข้อเสียของการโหลด DNS โดยทั่วไปในหลาย ๆ รอบ A:

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

แต่ DNS แบบวนรอบนั้นดีพอในฐานะผู้เริ่มต้นดีกว่าไม่มีอะไรเลย "ในขณะที่เราทำการวิจัยและใช้รูปแบบทางเลือกที่ดีกว่า" การปรับสมดุลภาระให้กับเนื้อหาแบบคงที่ของเราหรือไม่ หรือ DNS Round robin นั้นค่อนข้างไร้ค่าในกรณีใด ๆ ?


3
HAProxy ไม่ใช่ตัวเลือก?
Howiecamp

6
อย่างที่ฉันพูดในโพสต์คำถามนี้เป็นคำถามเฉพาะเกี่ยวกับวิธีแก้ปัญหานี้ - เราจะอยู่ในหัวข้อได้หรือไม่
Jeff Atwood

4
load-balancing ( en.wikipedia.org/wiki/Load_balancing_%28computing%29 ) นั้นแตกต่างกันอย่างมากจากความซ้ำซ้อน ( en.wikipedia.org/wiki/Redundancy_%28engineering%29 ) ดังที่เจฟฟ์กล่าวไว้ในย่อหน้าแรกของเขาเขากำลังมองหาวิธีที่จะลบจุดเดียวของความล้มเหลว (ความซ้ำซ้อน) ไม่ใช่การทำโหลดบาลานซ์จริง ใครบางคนสามารถ retag?
antony.trupe

3
@jeff - ตัวโหลดบาลานซ์ที่เป็นใบ้ (ซึ่งเป็น DNS รอบโรบินแบบธรรมดา) ไม่ได้ทำซ้ำซ้อน มันยิ่งยากขึ้นถ้าคุณกำลังพูดถึงการสร้างสมดุล / ความซ้ำซ้อนในหลาย ๆ ไซต์
Alnitak

2
@symcbean ฉันคุ้นเคยอย่างใกล้ชิดกับคำศัพท์ที่เป็นเอกสารใน RFC 2119 คุณบอกว่าเซิร์ฟเวอร์ DNS กำหนดรายการการตั้งค่า นอกจากว่าคุณจะมีคำจำกัดความที่ผิดปกติโดยเฉพาะอย่างยิ่งของ "รายการการตั้งค่า" ที่ไม่เป็นความจริง
Alnitak

คำตอบ:


57

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

DNS roundrobin นั้นยอดเยี่ยมในการเพิ่มความสามารถโดยการกระจายโหลดข้ามหลาย ๆ จุด (อาจกระจายไปตามพื้นที่ทางภูมิศาสตร์) แต่มันก็ไม่ได้ทำให้ล้มเหลว คุณต้องอธิบายความล้มเหลวประเภทใดที่คุณพยายามครอบคลุม ความล้มเหลวของเซิร์ฟเวอร์ต้องได้รับการครอบคลุมภายในเครื่องโดยใช้กลไกการครอบครองที่อยู่ IP มาตรฐาน (VRRP, CARP, ... ) ความล้มเหลวของสวิตช์ครอบคลุมโดยลิงก์ที่ยืดหยุ่นบนเซิร์ฟเวอร์ไปยังสวิตช์สองตัว ความล้มเหลวในการเชื่อมโยง WAN สามารถทำได้โดยการตั้งค่ามัลติลิงค์ระหว่างคุณและผู้ให้บริการของคุณโดยใช้โปรโตคอลการกำหนดเส้นทางหรือโซลูชันเลเยอร์ 2 (เช่น: multi-link PPP) ความล้มเหลวของเว็บไซต์ควรได้รับการคุ้มครองโดย BGP: ที่อยู่ IP ของคุณจะถูกทำซ้ำในหลาย ๆ ไซต์และคุณแจ้งให้พวกเขาทราบถึงสิ่งที่พวกเขามีอยู่สุทธิ

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

คุณถามว่า "จะทำอย่างไรถ้าเครื่อง haproxy ล้มเหลว" มันเหมือนกัน. ทุกคนที่ฉันรู้จักที่ใช้ haproxy สำหรับการทำ load balance และความพร้อมใช้งานสูงนั้นมีสองเครื่องและรันทั้ง ucarp, keepalived หรือ heartbeat ของพวกมัน

หวังว่านี่จะช่วยได้!


1
BTW คุณอาจสนใจในบทความที่ฉันเขียนเมื่อประมาณ 4 ปีก่อนในแนวคิดเหล่านี้: 1wt.eu/articles/2006_lb (ใช้ PDF อ่าน HTML ผ่านหน้าเว็บนั้นน่าเบื่อ)
Willy Tarreau

1
-1: "ไม่มีการล้มเหลว" - ใช่แล้ว - และใช้ในที่เดียวเท่านั้นที่ไม่สามารถตรวจสอบความพร้อมใช้งานได้อย่างน่าเชื่อถือ - ที่ไคลเอ็นต์
symcbean

7
ไม่ใช่เลย. มันจะทำงานถ้า DNS ไม่ได้ใช้แคช แต่นี่ไม่ใช่กรณีและลูกค้าไม่สามารถบังคับให้แคชรีเฟรช พูดคุยกับบุคคลใดก็ตามที่เปลี่ยนรายการ DNS เป็นประจำและพวกเขาจะบอกคุณว่าแม้ว่าพวกเขาจะสังเกตเห็นการเปลี่ยนแปลง 80% ใน 5 นาทีโดยทั่วไปแล้วจะใช้เวลามากกว่าหนึ่งสัปดาห์กว่าจะถึง 100% ดังนั้น DNS จึงไม่สามารถให้บริการได้
Willy Tarreau

12
ตัวอย่างง่ายๆของ "การทำโหลดบาลานซ์โดยไม่มีความซ้ำซ้อน" คือ RAID0
robbyt

1
คุณจะถูกต้องหรือไม่สำหรับระเบียน DNS ที่ใช้เวลานานในการอัปเดต แต่ RR-DNS พร้อมเบราว์เซอร์จะถูกจัดการที่ระดับเบราว์เซอร์ทดสอบ IP ทั้งหมดหลังจากอีกอันหนึ่งถ้าดูเหมือนว่ารายการแรกที่ DNS ส่งมานั้นดูไม่ลง ในกรณีนี้คุณจะไม่เปลี่ยนแปลงระเบียน DNS ของคุณดังนั้นจึงไม่มีการอัปเดตที่จะรอ
วาน

20

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

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

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

หากหนึ่งในสองเซิร์ฟเวอร์ที่ถูกล้อมรอบของคุณล้มเหลวลูกค้า 50% ของคุณจะล้มเหลว นี่เป็นความล้มเหลวที่ดีกว่า 100% โดยมีเพียงเซิร์ฟเวอร์เดียว แต่เกือบโซลูชันอื่น ๆ ใด ๆ ที่มีการล้มเหลวจริงจะดีกว่านี้

หากความน่าจะเป็นที่จะเกิดความล้มเหลวของเซิร์ฟเวอร์เดียวคือ N โดยมีสองเซิร์ฟเวอร์ความน่าจะเป็นของคุณคือ 2N หากไม่มีระบบอัตโนมัติล้มเหลวอย่างรวดเร็วระบบนี้จะเพิ่มความน่าจะเป็นที่ผู้ใช้บางรายของคุณจะประสบกับความล้มเหลว

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


3
โดยสิ้นเชิงนอกหัวข้อ แต่เรายังมีปัญหาในการต้องการอินสแตนซ์ของ HAProxy หลายตัวเพื่อล้มเหลว - หากเครื่อง HAProxy ล้มเหลว? ถึงแม้ว่าหัวข้อคำถามในอนาคตจะเป็นหัวข้อสำหรับคำถามนี้จริงๆ
Jeff Atwood

2
+1 - "ด้วยวิธีอัตโนมัติ ... มันจะกลายเป็นความล้มเหลวของสลัมด้วยตนเองมันไม่ได้เป็นอย่างนั้นด้วย" ควรเป็นตัวอักษรตัวใหญ่ DNS round-robin กลายเป็นความรับผิดชอบหากคุณไม่ได้ตรวจสอบเครื่องจักรและนำออกจาก DNS หากพวกเขาล้มเหลวและวิธีเดียวที่สมเหตุสมผลในการทำเช่นนี้ก็คือโซลูชันอัตโนมัติ มีวิธีแก้ปัญหาที่ดีกว่า DNS round-robin
Evan Anderson

1
ทั้งหมดเห็น แต่ 20% ของลูกค้าของคุณโทรหาคุณกับข้อร้องเรียนเป็นดีกว่า 100% ของพวกเขาเรียกร้องให้มีการร้องเรียน ..
เจฟฟ์แอด

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

1
The best part of true failover is getting to sleep through the night.นั่นคือคำจำกัดความที่ชัดเจน!
Basil Bourque

15

Round robin DNS ไม่ใช่สิ่งที่คนคิดกัน ในฐานะผู้เขียนซอฟต์แวร์เซิร์ฟเวอร์ DNS (คือBIND ) เราได้รับผู้ใช้ที่สงสัยว่าทำไมพวกโรบินรอบหยุดทำงานตามแผนที่วางไว้ พวกเขาไม่เข้าใจว่าถึงแม้จะมี TTL 0 วินาทีก็จะมีการแคชจำนวนหนึ่งอยู่เนื่องจากแคชบางตัวใช้เวลาน้อยที่สุด (มักจะ 30-300 วินาที) ไม่ว่าจะเกิดอะไรขึ้น

นอกจากนี้ในขณะที่เซิร์ฟเวอร์ AUTH ของคุณอาจทำแบบไม่เข้าเรื่องจะไม่มีการรับประกันกับคนที่คุณใส่ใจ กล่าวโดยสรุปคือ round robin ไม่รับประกันการสั่งซื้อใด ๆ จากมุมมองของลูกค้าเฉพาะเซิร์ฟเวอร์ auth ที่คุณให้กับแคชเท่านั้น

หากคุณต้องการ failover จริง DNS เป็นเพียงขั้นตอนเดียว ไม่ใช่ความคิดที่ดีที่จะแสดงรายการที่อยู่ IP มากกว่าหนึ่งแห่งให้กับสองกลุ่มที่แตกต่างกัน แต่ฉันจะใช้เทคโนโลยีอื่นที่นั่น (เช่น anycast เรียบง่าย) เพื่อทำการปรับสมดุลโหลดจริง ฉันเองดูถูกฮาร์ดแวร์โหลดบาลานซ์ฮาร์ดแวร์ซึ่ง mucks กับ DNS ตามปกติจะได้รับมันผิด และอย่าลืม DNSSEC กำลังจะมาดังนั้นหากคุณเลือกบางอย่างในพื้นที่นี้ถามผู้ขายของคุณว่าเกิดอะไรขึ้นเมื่อคุณลงชื่อโซนของคุณ


1
และเซิร์ฟเวอร์ DNS บางตัว (หรือแผงควบคุม) ได้รับการกำหนดค่าให้ TTL 7200 โดยไม่คำนึงถึงสิ่งที่คุณตั้งไว้ - บริษัท โฮสติ้งขนาดใหญ่บางรายทำ IIRC นี้
gbjbaanb

15

ฉันได้กล่าวไว้หลายครั้งก่อนและผมจะบอกอีกครั้ง - ถ้ามีความยืดหยุ่นที่เป็นปัญหาแล้วเทคนิค DNS เป็นไม่ได้คำตอบ

ระบบ HA ที่ดีที่สุดจะช่วยให้ลูกค้าของคุณใช้ที่อยู่ IP เดียวกันทุกครั้งที่ร้องขอ นี่เป็นวิธีเดียวที่จะทำให้มั่นใจได้ว่าลูกค้าจะไม่สังเกตเห็นความล้มเหลว

ดังนั้นกฎพื้นฐานคือความยืดหยุ่นที่แท้จริงต้องใช้เล่ห์เหลี่ยมระดับการกำหนดเส้นทาง IP ใช้เครื่องมือโหลดบาลานเซอร์หรือ OSPF "multi-path ต้นทุนเท่ากัน" หรือแม้แต่ VRRP

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

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


7

ฉันได้อ่านคำตอบทั้งหมดและสิ่งหนึ่งที่ฉันไม่เห็นคือเว็บเบราว์เซอร์ที่ทันสมัยส่วนใหญ่จะลองใช้ที่อยู่ IP สำรองหากเซิร์ฟเวอร์ไม่ตอบสนอง หากฉันจำอย่างถูกต้องแล้ว Chrome จะลองหลายที่อยู่ IP และดำเนินการกับเซิร์ฟเวอร์ที่ตอบกลับก่อน ดังนั้นในความเห็นของฉัน DNS Round Robin Load balancing นั้นดีกว่าเสมอไม่มีอะไร

BTW: ฉันเห็น DNS Round Robin เป็นโซลูชันกระจายโหลดง่าย


อ๊ะไม่เห็นคำตอบของคุณก่อนโพสต์ของฉันดังนั้น +1 กับคุณเพื่อให้ความจริงออกมา!
วาน

5

ฉันมาที่หัวข้อนี้ดังนั้นคำตอบของฉันอาจจะวางตัวอยู่คนเดียวที่ด้านล่างไม่ได้สูดดมและดมกลิ่น

ก่อนอื่นคำตอบที่ถูกต้องสำหรับคำถามไม่ใช่เพื่อตอบคำถาม แต่ต้องพูดว่า:

  1. "คุณอาจต้องการให้ Windows Network Load Balancingแทน" หรือ
  2. "ใช้เวลาวางเนื้อหาแบบคงที่ของคุณในบางสิ่งเช่นไฟล์ Cloud หรือ S3และมี CDN มิรเรอร์ทั่วโลก"

NLB เป็นผู้ใหญ่เหมาะสำหรับงานและตั้งค่าได้ง่าย โซลูชันคลาวด์มาพร้อมกับข้อดีและข้อเสียของตัวเองซึ่งอยู่นอกขอบเขตของคำถามนี้

คำถาม

DNS แบบวนรอบนั้นดีพอในฐานะผู้เริ่มต้นดีกว่าไม่มีอะไร "ในขณะที่เราทำการวิจัยและใช้ทางเลือกที่ดีกว่า" รูปแบบของการโหลดบาลานซ์สำหรับเนื้อหาแบบคงที่ของเรา

ระหว่างพูดเว็บเซิร์ฟเวอร์คงที่ 2 หรือ 3 ใช่มันดีกว่าไม่มีอะไรเพราะมีผู้ให้บริการ DNS ที่จะรวม DNS Round Robin เข้ากับการตรวจสุขภาพเซิร์ฟเวอร์และจะลบเซิร์ฟเวอร์ที่ไม่ทำงานออกจากระเบียน DNS ชั่วคราว ดังนั้นในวิธีนี้คุณจะได้รับที่ดีการกระจายโหลดและบางความพร้อมใช้งานสูง และใช้เวลาน้อยกว่า 5 นาทีในการตั้งค่า

แต่ข้อควรระวังที่ระบุโดยผู้อื่นในหัวข้อนี้มีผลบังคับใช้:

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

โซลูชั่นอื่น ๆ

HAProxy นั้นยอดเยี่ยม แต่เนื่องจาก Stack Overflow อยู่ในกองเทคโนโลยีของ Microsoft อาจใช้การปรับสมดุลโหลดของ Microsoft & เครื่องมือความพร้อมใช้งานสูงจะมีค่าใช้จ่ายของผู้ดูแลระบบน้อยลง Network Load Balancing ดูแลปัญหาส่วนหนึ่งและ Microsoft จริง ๆ แล้วมีL7 HTTP reverse proxy / load balancer ในขณะนี้

ฉันไม่เคยใช้ ARR ด้วยตัวเอง แต่เนื่องจากมันเป็นรุ่นใหญ่ครั้งที่สองและจาก Microsoft ฉันคิดว่ามันได้รับการทดสอบอย่างดีพอ มันมีเอกสารที่เข้าใจง่ายนี่คือหนึ่งในวิธีที่พวกเขาเห็นการกระจายเนื้อหาแบบคงที่และแบบไดนามิกบนเว็บโหนดและนี่คือส่วนหนึ่งเกี่ยวกับวิธีการใช้ARR กับ NLBเพื่อให้บรรลุทั้งการกระจายโหลดและความพร้อมใช้งานสูง


5

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

1) TTL บนระเบียน DNS ที่ใช้สำหรับ Round robin ควรสั้น - แต่ไม่ใช่ศูนย์ การให้ TTL ที่ศูนย์เป็นวิธีที่สำคัญที่ให้ความยืดหยุ่น

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

3) DNS RR ให้ความยืดหยุ่นตราบใดที่ไคลเอ็นต์ซอฟต์แวร์ใช้งานได้อย่างถูกต้อง (และทั้ง TTL และช่วงความสนใจของผู้ใช้ไม่สั้นเกินไป) นี่เป็นเพราะ DNS round robin จัดทำรายการสั่งซื้อของที่อยู่ IP ของเซิร์ฟเวอร์และซอฟต์แวร์ไคลเอนต์ควรพยายามติดต่อแต่ละรายการจนกว่าจะพบเซิร์ฟเวอร์ที่ยอมรับการเชื่อมต่อ

ดังนั้นหากเซิร์ฟเวอร์ตัวเลือกแรกหยุดทำงานการเชื่อมต่อ TCP / IP ของไคลเอ็นต์จะหมดเวลาและหากไม่มี TTL หรือ span span หมดอายุแล้วซอฟต์แวร์ไคลเอ็นต์จะพยายามเชื่อมต่ออีกครั้งกับรายการที่สองในรายการ - และต่อไปเรื่อย ๆ จนกระทั่ง TTL หมดอายุหรือเข้าสู่ตอนท้ายของรายการ (หรือผู้ใช้เลิกด้วยความรังเกียจ)

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

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

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

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

DNS round robin มีคุณสมบัติที่โดดเด่นสองประการที่ทำให้มันคุ้มค่ามากในสถานการณ์ที่หลากหลาย - ประการแรกคือฟรีและประการที่สองคือเกือบกระจายตามพื้นที่ทางภูมิศาสตร์เป็นฐานลูกค้าของคุณ

ไม่แนะนำ 'หน่วยความล้มเหลว' ใหม่ซึ่งระบบ 'ฉลาด' อื่น ๆ ทั้งหมดทำ ไม่มีส่วนประกอบเพิ่มเติมที่อาจประสบกับความล้มเหลวทั่วไปและพร้อมกันในการโหลดองค์ประกอบทั้งหมดที่เชื่อมโยงกัน

ระบบ 'ฉลาด' นั้นยอดเยี่ยมและนำเสนอกลไกที่ยอดเยี่ยมในการประสานงานและให้การทรงตัวอย่างราบรื่นและล้มเหลว แต่ในที่สุดวิธีการที่พวกเขาใช้เพื่อมอบประสบการณ์ที่ราบรื่นนั้นคือส้น Achilles ของพวกเขา - สิ่งที่ซับซ้อนเพิ่มเติมที่อาจผิดพลาด และเมื่อทำเช่นนั้นจะมอบประสบการณ์ที่ราบรื่นของระบบขัดข้อง

ดังนั้นใช่ DNS round robin นั้น "ดีพอ" สำหรับขั้นตอนแรกของคุณเกินกว่าเซิร์ฟเวอร์เดียวที่โฮสต์เนื้อหาคงที่ทั้งหมดของคุณไว้ในที่เดียว


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

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

เพียงความเห็นเพื่อขอบคุณคุณเกี่ยวกับคำตอบของคุณ ฉันไม่เข้าใจว่าทำไมคำตอบยอดนิยมไม่แนะนำ RR ซึ่งเป็นขั้นตอนแรกสำหรับโครงสร้างพื้นฐาน HA ซึ่งง่ายและใช้งานง่าย
Jérôme B

4

Windows Vista & Windows 7 ใช้การสนับสนุนไคลเอ็นต์สำหรับ robin แบบรอบต่างกันเนื่องจากพวกเขา backported การเลือกที่อยู่ IPv6 เป็น IPv4 ( RFC 3484 )

ดังนั้นหากคุณมีผู้ใช้ Vista, Windows 7 และ Windows 2008 จำนวนมากคุณอาจจะพบพฤติกรรมที่ไม่สอดคล้องกับความคิดที่คุณวางแผนไว้ในโซลูชั่นการปรับสมดุลโหลด ersatz ของคุณ


อ่าขอบคุณมากฉันกำลังมองหาลิงค์นี้ - ฉันเคยได้ยินเกี่ยวกับเรื่องนี้ แต่ไม่พบการอ้างอิง!
Jeff Atwood

2

ฉันมักจะใช้ Round-Robin DNS กับ TTL ที่มีความยาวเป็นโหลดบาลานซ์ มันทำงานได้ดีจริงๆสำหรับบริการ HTTP / HTTPS กับเบราว์เซอร์

ฉันเครียดกับเบราว์เซอร์เป็นอย่างมากเนื่องจากเบราว์เซอร์ส่วนใหญ่ใช้«ลองอีกครั้งบน IP อื่น ๆ "แต่ฉันไม่รู้ว่าไลบรารีหรือซอฟต์แวร์อื่น ๆ จะจัดการกับโซลูชัน IP ได้อย่างไร

เมื่อเบราว์เซอร์ไม่ได้รับการตอบกลับจากเซิร์ฟเวอร์หนึ่งมันจะเรียก IP ถัดไปโดยอัตโนมัติแล้วติดกับมัน (จนกว่ามันจะลง ... แล้วลองอีกครั้ง)

ย้อนกลับไปในปี 2550 ฉันได้ทำการทดสอบต่อไปนี้แล้ว:

  • เพิ่ม iframe บนเว็บไซต์ของฉันชี้ไปที่รายการ Round-Robin หนึ่งรายการเช่น http://roundrobin.test:10080/ping.php
  • หน้านี้ถูกเสิร์ฟโดยซ็อกเก็ต PHP 3 ฟังบน 3 differents IP ทั้งหมดบนพอร์ต 10080 (ฉันไม่สามารถทดสอบบนพอร์ต 80 ได้เนื่องจากเว็บไซต์ของฉันทำงานอยู่)
  • มีซ็อกเก็ตหนึ่งตัว (บอกว่าA ) อยู่ที่นั่นเพื่อตรวจสอบว่าเบราว์เซอร์สามารถเชื่อมต่อกับพอร์ต 10080 ได้ (เนื่องจาก บริษัท จำนวนมากอนุญาตให้ใช้พอร์ตมาตรฐานเท่านั้น)
  • อีกสองซ็อกเก็ต (พูดว่าBและC ) สามารถเปิดใช้งานหรือปิดการใช้งานได้ทันที

ฉันปล่อยให้มันทำงานหนึ่งชั่วโมงมีข้อมูลจำนวนมาก ผลลัพธ์คือ 99.5% ของการเข้าชมบนซ็อกเก็ตAฉันมีการเข้าชมทั้งซ็อกเก็ตBหรือC (ฉันไม่ได้ปิดใช้งานทั้งสองอย่างพร้อมกันในเวลาเดียวกัน) เบราว์เซอร์คือ: iPhone, Chrome, Opera, MSIE 6/7/8, BlackBerry, Firefox 3 / 3.5 ... ดังนั้นแม้แต่เบราว์เซอร์ที่ไม่เป็นไปตามนั้นก็จัดการได้อย่างถูกต้อง!

ถึงวันนี้ฉันไม่เคยทดสอบอีกเลย แต่บางทีฉันอาจจะตั้งค่าการทดสอบใหม่ในวันหนึ่งหรือปล่อยรหัสบน gitHub เพื่อให้ผู้อื่นสามารถทดสอบได้

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

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

หมายเหตุเพิ่มเติม:คุณสามารถทดสอบการทำงานบน IP iptablesของคุณเองโดยใช้ ตัวอย่างเช่นก่อนที่กฎไฟร์วอลล์ของคุณจะรับส่งข้อมูล HTTP ให้เพิ่ม:

iptables -A INPUT -p tcp --dport 80 --source 12.34.56.78 -j REJECT

( 12.34.56.78เห็นได้ชัดว่า IP ของคุณอยู่ที่ไหน)

อย่าใช้DROPเพราะจะปล่อยให้พอร์ตกรองออกและเบราว์เซอร์ของคุณจะรอจนกว่าจะหมดเวลา ดังนั้นตอนนี้คุณสามารถเปิดใช้งานหรือปิดการใช้งานเซิร์ฟเวอร์หนึ่งหรืออื่น ๆ การทดสอบที่ชัดเจนที่สุดคือปิดการใช้งานเซิร์ฟเวอร์ A โหลดหน้าเว็บจากนั้นเปิดใช้งานเซิร์ฟเวอร์ A และปิดการใช้งานเซิร์ฟเวอร์ B เมื่อคุณโหลดหน้าเว็บอีกครั้งคุณจะเห็นการรอจากเบราว์เซอร์เล็กน้อยจากนั้นจะโหลดจากเซิร์ฟเวอร์ อีกครั้ง ใน Chrome คุณสามารถยืนยัน IP ของเซิร์ฟเวอร์ได้โดยดูที่คำขอในแผงเครือข่าย ในGeneralแท็บของคุณจะเห็นส่วนหัวปลอมชื่อHeaders Remote Address:นี่คือ IP จากที่คุณได้รับคำตอบ

ดังนั้นหากคุณต้องการเข้าสู่โหมดบำรุงรักษาบนเซิร์ฟเวอร์หนึ่งเพียงปิดใช้งานทราฟฟิก HTTP / HTTPS ด้วยiptables REJECTกฎเดียวคำขอทั้งหมดจะไปที่เซิร์ฟเวอร์อื่น (ด้วยการรอเพียงครั้งเดียวแทบไม่สังเกตเห็นผู้ใช้)


1

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

อาจเป็นการง่ายกว่าที่จะชี้ไปยังที่อยู่ IP ทั่วไปที่ Windows NLB จัดการแทนเซิร์ฟเวอร์สองเครื่องที่อยู่ด้านหลัง ถ้าคุณใช้เซิร์ฟเวอร์ Linux สำหรับเนื้อหาสแตติกของคุณถ้าฉันจำได้ว่าอ่านมันที่ไหน?


NLB เป็นเพียงการปัดเศษที่เซิร์ฟเวอร์ NIC แทนที่จะเป็นเซิร์ฟเวอร์ DNS สำหรับสิ่งนี้บน Linux คุณต้องการโซลูชัน HA - RedHat มีหนึ่งตัวหรือดู UltraMonkey เพื่อดูรายละเอียดมากมาย
gbjbaanb

ฉันรู้ว่า NLB ทำอะไร ฉันขอแนะนำให้ใช้ DNS RR เพราะความล้มเหลวของเซิร์ฟเวอร์จะไม่ทำให้ผู้ใช้เสียครึ่ง
icelava

@gbjbaanb หรือใช้วิธีอื่น NLB คือ round robin ที่ Layer 2 DNS ตามรอบ robin อยู่ที่ (หรือขึ้นอยู่กับ) Layer 7
Alnitak

1

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

ดังที่กล่าวไว้ในหนึ่งในคำตอบอื่น ๆ ความชั่วร้ายที่ซ่อนอยู่ของ round-robin คือการแคช DNS ซึ่งสามารถเกิดขึ้นได้ทุกที่ระหว่างเซิร์ฟเวอร์ของคุณและไคลเอนต์ซึ่งลบล้างประโยชน์เล็ก ๆ ของโซลูชันนี้อย่างสมบูรณ์ แม้ว่าการตั้งค่า DNS TTL จะเป็นค่าที่ต่ำมากคุณก็สามารถควบคุมระยะเวลาที่ ISP หรือแคช DNS ของลูกค้าใช้งานได้แม้จะอยู่ IP ที่ไม่ทำงาน

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

คุณอาจมีเซิร์ฟเวอร์เดียวที่มีเนื้อหาคงที่ซ้ำกันใน S3 และเปลี่ยนเป็น S3 CNAME เมื่อเซิร์ฟเวอร์หลักของคุณหยุดทำงาน คุณจะจบลงด้วยความล่าช้าที่เหมือนกัน แต่ไม่มีค่าใช้จ่ายหลายเซิร์ฟเวอร์


1

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

นอกเหนือจากความล้มเหลวของฮาร์ดแวร์เป็นต้นเซิร์ฟเวอร์ของคุณมีเสถียรภาพแค่ไหน? "spikey" มีอัตราการเข้าชมเนื้อหานี้อย่างไร สมมติว่า Apache หรืออะไรบางอย่างและการจราจรค่อนข้างราบเรียบมันจะไม่พังมากและฉันจะบอกว่า round-robin นั้น "ดีพอ"

ฉันแน่ใจว่าฉันจะลงคะแนนเพราะฉันไม่ได้เทศนาวิธีการแก้ปัญหา 100% HA แต่นั่นไม่ใช่สิ่งที่คุณขอ มันขึ้นอยู่กับสิ่งที่คุณยินดีที่จะยอมรับว่าเป็นทางออกและความพยายามที่ใช้ไป


1

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

ดังที่โพสต์ก่อนหน้าบอกว่าคุณต้องการบางสิ่งบางอย่างในการตรวจจับการเต้นของหัวใจและหยุดกดปุ่มจนกว่ามันจะกลับมา

ข่าวดีก็คือ Heartbeat มีให้บริการในราคาถูกไม่ว่าจะเป็นสวิตช์หรือใน Windows

Dunno เกี่ยวกับระบบปฏิบัติการอื่น ๆ แต่ฉันคิดว่ามันมีเช่นกัน


1

ฉันขอแนะนำให้คุณกำหนดที่อยู่ IP เพิ่มเติมให้กับเซิร์ฟเวอร์แต่ละเครื่องของคุณ (นอกเหนือจาก IP แบบคงที่ที่คุณใช้พูดพูด ssh) และคุณนำสิ่งนั้นไปไว้ในพูล DNS จากนั้นคุณใช้ซอฟต์แวร์บางตัวเพื่อสลับรอบที่อยู่ IP เหล่านี้ในกรณีที่เซิร์ฟเวอร์ล้มเหลว Heartbeat หรือ CARP สามารถทำสิ่งนั้นได้เช่นกัน แต่มีวิธีแก้ไขปัญหาอื่น ๆ

นี่เป็นข้อได้เปรียบที่ลูกค้าของบริการของคุณไม่มีการเปลี่ยนแปลงในการตั้งค่าและคุณไม่ต้องกังวลเกี่ยวกับ DNS แคชหรือ TTL แต่คุณยังสามารถใช้ประโยชน์จาก DNS round-robin "load balancing" .


1

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

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

ตัวโหลดบาลานซ์ของฮาร์ดแวร์อาจทำงานได้ดีขึ้นทั้งการแชร์โหลดและการให้ "คลัสเตอร์เวลาทำงาน" ที่ดีกว่า DNS round-robin ในทางกลับกันนั่นคือหนึ่ง (หรือสองอย่างเนื่องจากคุณมีอุปกรณ์ LBs ในคลัสเตอร์ HA) ที่จะต้องซื้อการใช้พลังงานและการระบายความร้อนและ (อาจ) บางครั้งเพื่อทำความคุ้นเคยกับ (ถ้าคุณยังไม่ได้ มีโหลดบาลานเซอร์เฉพาะ)


1

เพื่อให้ชัดถ้อยชัดคำตอบคำถาม (เป็นรอบโรบิน DNS ดีพอเป็นเริ่มต้นที่ดีกว่าไม่มีอะไร "ในขณะที่เราวิจัยและดำเนินการตามทางเลือกที่ดีกว่า" รูปแบบของการโหลดสมดุลสำหรับเนื้อหาคงที่ของเราหรือไม่) ผมจะบอกว่ามันเป็นดีกว่าไม่มีอะไร แต่คุณควรศึกษาการทำ load balance แบบอื่นต่อไปอย่างแน่นอน


1

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

ข้อเสีย: คุณต้องมีเซิร์ฟเวอร์อย่างน้อย 4 เซิร์ฟเวอร์ (2 เซิร์ฟเวอร์ x 2 กลุ่ม)

ตอบความเห็นของ Jeff เกี่ยวกับคำตอบของ Schof มีวิธีไปสู่ ​​DNS round-robin ระหว่างเซิร์ฟเวอร์ HAProxy หรือไม่?


0

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

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


เนื้อหานั้นคงที่ 100% ดังนั้นการโหลดจึงไม่สำคัญ - แม้แต่บนเซิร์ฟเวอร์เดียว แบนด์วิดธ์เป็นส่วนใหญ่
Jeff Atwood

1
ทั้งหมดออกจากท่อเดียวกันหรือไม่
squillman

TTL เป็นเวลาส่วนใหญ่ที่ DNS ไม่เคยใช้งาน DNS แต่ละตัวจะทำสิ่งที่ผู้ดูแลระบบต้องการ และส่วนใหญ่จะไม่อนุญาตให้ TTL 5 นาทีซึ่งหมายถึงการโหลดข้อมูลจากแหล่ง DNS ทุก ๆ 5 นาทีวิธีที่ดีที่สุดในการดับเซิร์ฟเวอร์ DNS ด้วยเหตุผลที่ไม่ถูกต้อง และคุณผิดกับ« marginal use », Google ใช้มันสำหรับเซิร์ฟเวอร์การค้นหาทั้งหมด ... และฉันสงสัยจริงๆว่าพวกเขาเป็นคนเดียวที่ทำได้ RR-DNS ยอดเยี่ยมเมื่อคุณรู้ว่ามันทำอะไร
วาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.