ฉันจะสร้างความสมดุลให้ปริมาณการใช้เว็บขาเข้าระหว่างเซิร์ฟเวอร์ N apache ได้อย่างไร


12

ฉันกำลังมองหาที่จะใช้บางสิ่งบางอย่างเช่น Heartbeat / Squid / Varnish / etc เพื่อปรับสมดุลปริมาณการรับส่งข้อมูลระหว่างอินสแตนซ์ apache ภายใน สิ่งนี้จะต้องเป็นซอฟต์แวร์ไม่ใช่ฮาร์ดแวร์เนื่องจากข้อมูลทั้งหมดของฉันทำงานบน VPS ฉันไม่ได้มีประสบการณ์มากมายในพื้นที่นี้ดังนั้นขออภัยถ้าฉันใช้คำศัพท์ที่ผิดและเลือกแพ็คเกจที่ไม่ถูกต้อง

ฉันวาดบางสิ่งบางอย่างเพื่ออธิบายสิ่งที่ฉันเป็น ด้านสีเขียวคือลักษณะการตั้งค่าเริ่มต้นและด้านสีฟ้าคือลักษณะที่ปรากฏหลังจากเพิ่มอินสแตนซ์ apache เพิ่มเติมเนื่องจากการรับส่งข้อมูลเพิ่มขึ้น นี่อาจไม่ใช่สิ่งที่สิ่งเหล่านี้ทำงานได้ แต่โดยหลักแล้วฉันจะเพิ่ม IP ของตัวสร้างสมดุล / s ไปยัง DNS ของโดเมน จากนั้น balancer / s จะเห็นจำนวนการเชื่อมต่อที่อยู่ในแต่ละอินสแตนซ์ apache (ผ่านรายการการกำหนดค่าบางอย่างของ IP ภายในหรือ IP นิรันดร์) และกระจายการเชื่อมต่ออย่างเท่าเทียมกัน ในสีฟ้ามีบาลานเซอร์แห่งที่สองเพราะผมมั่นใจว่าในบางจุดบาลานเซอร์ก็ต้องการความช่วยเหลือเช่นกัน

บางทีฉันอาจจะผิดเกี่ยวกับเรื่องนี้ แต่ฉันกำลังมองหาความช่วยเหลือเกี่ยวกับสิ่งที่ "balancer / s" ควรและแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับวิธีการตั้งค่าพวกเขา

ความช่วยเหลือใด ๆ จะดีมาก ข้อความแสดงแทน


1
ให้อภัยฉัน แต่คุณใช้โปรแกรมอะไรในการเขียนแบบของคุณ
Prix

1
@Prix - ดูเหมือน visio ( office.microsoft.com/en-us/visio )
malonso

คำตอบ:


4

พร็อกซีย้อนกลับใด ๆ จะทำสิ่งที่คุณถาม

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

คุณอาจอ่านบทความเกี่ยวกับ load balancer ได้ดีที่สุดเพื่อช่วยคุณตัดสินใจว่าคุณต้องการประเภทใด: http://1wt.eu/articles/2006_lb/

นอกจากนี้คุณอาจลองใช้บริการที่สร้างไว้ล่วงหน้าสำหรับสิ่งนี้ - เช่นการใช้งานซอฟต์แวร์ของคุณบน Elastic Compute Cloud ของ Amazon และการใช้ Elastic Load Balancing


2

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

  • ไม่จำเป็นต้องใช้เซสชัน : ในกรณีนี้คุณควรใช้โปรแกรมnginx ที่มีประสิทธิภาพเป็นตัวปรับสมดุลโหลด การกำหนดค่านั้นง่ายต่อการตั้งค่าโดยที่คุณเพียงแค่ต้องระบุรายการของเว็บเซิร์ฟเวอร์ในupstream upstream_name { server1, ..., serverN }คำสั่งจากนั้นสำหรับโดเมนที่กำหนดคุณต้องมีproxy_pass upstream_nameคำสั่งง่ายๆ
    ดูNginx วิกิพีเดีย

  • ต้องมีการตั้งค่าเซสชันที่คล้ายกันสำหรับปอนด์ซึ่งคุณระบุชื่อของคุกกี้ที่จะโฮสต์ ID เซสชัน ( ID MYCOOKIENAME) จากนั้นรายการของBACKENDเซิร์ฟเวอร์ทั้งหมดของคุณ
    ดูตัวอย่างการตั้งค่าปอนด์กันตัวอย่าง

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


1

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

โหลดบาลานซ์กลม - โรบิน

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

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

จุดเดียวที่ฉันจะยอมรับก็คือ

  1. ที่อยู่ IPV4 นั้นหายากและมีราคาแพง แต่ก็ยังมีมาก ราคาถูกกว่า Cisco CSS มาก

  2. เพิ่มมากขึ้นอินเทอร์เน็ตวิ่งบนเว็บบริการ - และไม่พัฒนาทั้งหมดดำเนินการสนับสนุน DNS ตามรายละเอียดที่ แต่เบราว์เซอร์ทุกตัวที่ฉันเคยใช้ทำงานได้อย่างที่ควรจะเป็น


"ไม่ต้องใช้ซอฟต์แวร์เพิ่มเติม" - ดีต้องมี webapp ที่มีสถานะเซสชันที่ใช้ร่วมกัน (เข้าสู่ระบบสิ่งที่อยู่ในตะกร้าช้อปปิ้ง ฯลฯ ) และ DNS RR สามารถสร้างสมดุลให้โหลดไม่สม่ำเสมอเป็นเวลานาน ใช่ DNS RR เป็นวิธีการทำงานได้ แต่ก็แทบจะไม่ได้อย่างชัดเจนดีกว่าทางเลือก ...
Jesper M


0

สำหรับนักเต้นบัลเลต์คุณสามารถดู LVS ได้ที่http://www.linuxvirtualserver.org/ซึ่งอาจใช้ ldirectord และ heartbeat เพื่อรับส่งข้อมูลโดยตรงและดำเนินการ failover


0

Nginxนั้นยอดเยี่ยมในฐานะ upstream proxy ฉันได้ใช้มันกับความสำเร็จที่ยิ่งใหญ่ในการกำหนดค่าโดยใช้ 1M + ที่ไม่ซ้ำกันทุกวัน


0

ตกลงนี่ถูกถามสักครู่แล้วฉันก็ไปงานปาร์ตี้ช้า ยังมีบางสิ่งที่จะเพิ่มที่นี่

แจ็กกี้คุณจับมันได้สวยมาก ภาพประกอบของคุณแสดงวิธีจัดการสมดุลภาระในการติดตั้งขนาดเล็กและขนาดกลางส่วนใหญ่

คุณควรอ่านบทแนะนำการปรับสมดุลโหลดโดย Willy Tarreauซึ่ง Nakedible เชื่อมโยงกับ ยังคงใช้ได้และเป็นการแนะนำที่ดี

คุณต้องพิจารณาว่าสิ่งเหล่านี้เหมาะสมกับความต้องการของคุณอย่างไร:

  • ตัวโหลดบาลานซ์ TCP / IP ระดับ (Linux Virtual Server และคณะ) ค่าใช้จ่ายต่ำสุดต่อการเชื่อมต่อความเร็วสูงสุดไม่สามารถ "เห็น" HTTP
  • ตัวโหลดบาลานซ์ระดับ HTTP (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR และอื่น ๆ ) ค่าโสหุ้ยที่สูงขึ้นสามารถเห็น HTTP, สามารถ gzip HTTP, สามารถทำ SSL, สามารถทำสมดุลเซสชันการโหลดได้
  • HTTP reverse proxies (Apache Traffic Server, วานิช, Squid) สามารถจัดเก็บวัตถุที่แคชได้ (บางหน้าเว็บ, css, js, รูปภาพ) ใน RAM และส่งต่อไปยังไคลเอนต์ที่ตามมาโดยไม่ต้องเกี่ยวข้องกับเว็บเซิร์ฟเวอร์แบ็กเอนด์ มักจะทำสิ่งเดียวกันกับที่ L7 HTTP load balancer ทำ

มีบาลานเซอร์ที่สองเพราะผมมั่นใจในบางประเด็นบาลานเซอร์ก็ต้องการความช่วยเหลือเช่นกัน

แน่นอน แต่สมดุลภาระเป็นเรื่องง่ายและมักจะ balancer โหลดเดียวสามารถไปได้อย่างรวดเร็ว ฉันเชื่อมโยงไปยังบทความนี้ซึ่งเป็นจุดสนใจในเว็บเป็นเพียงตัวอย่างของballpark ประสิทธิภาพที่เซิร์ฟเวอร์สมัยใหม่เดียวสามารถให้ได้ อย่าใช้ LB หลายตัวก่อนที่คุณจะต้องการ เมื่อคุณต้องการวิธีการทั่วไปคือตัวปรับสมดุลโหลด IP ระดับแนวหน้า (หรือ DNS Round Robin) ไปที่ตัวโหลดบาลานซ์ระดับ HTTP ไปยังพร็อกซีและเว็บเซิร์ฟเวอร์

ช่วยในสิ่งที่ "balancer / s" ควรและวิธีปฏิบัติที่ดีที่สุดในการตั้งค่า

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

หากคุณเพิ่งใช้เซิร์ฟเวอร์เว็บแอปพลิเคชัน 2-4 แบ็กเอนด์การแฮชแบบสแตติกตามที่อยู่ IP ต้นทางสามารถใช้งานได้ สิ่งนี้หลีกเลี่ยงความต้องการสถานะเซสชันที่ใช้ร่วมกันระหว่างเซิร์ฟเวอร์เว็บแอป แต่ละโหนดของเว็บแอพเห็น 1 / N ของปริมาณการใช้โดยรวมและการแมปลูกค้ากับเซิร์ฟเวอร์นั้นเป็นแบบคงที่ในการทำงานปกติ มันไม่เหมาะสำหรับการติดตั้งที่ใหญ่กว่า

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

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

balancer / s จะเห็นจำนวนการเชื่อมต่อในแต่ละอินสแตนซ์ apache (ผ่านรายการการกำหนดค่าบางอย่างของ IP ภายในหรือ IP นิรันดร์) และกระจายการเชื่อมต่ออย่างเท่าเทียมกัน

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

สิ่งสุดท้าย:อย่าลืมว่าผู้ค้าหลายราย (F5, Cisco และคนอื่น ๆ ในระดับ high-end, fx Coyote Point และ Kemp Technologies ในราคาที่สมเหตุสมผลมากขึ้น) นำเสนออุปกรณ์ปรับสมดุลภาระที่ครบกำหนด

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