Score:1

ส่งต่อทราฟฟิกไปยังคอนเทนเนอร์สำรองหากมาสเตอร์ทำงานล้มเหลวใน Kubernetes

ธง cn

ฉันมีคลัสเตอร์ k8 พร้อมบริการแบ็กเอนด์ (BS) และบริการฐานข้อมูล (DS)

DS มีพ็อดที่มีคอนเทนเนอร์ PgBouncer เดียว (พร็อกซีสำหรับเซิร์ฟเวอร์ Postgres) BS ส่งคำขอฐานข้อมูลไปยัง DS ซึ่งกำหนดเส้นทางกลับไปยังพ็อดเดี่ยวนี้

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

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

ขอบคุณล่วงหน้า!

Mikolaj S. avatar
cn flag
คุณใช้ Kubernetes เวอร์ชันใด และตั้งค่าคลัสเตอร์อย่างไร คุณใช้การติดตั้งแบบ Bare Metal หรือผู้ให้บริการคลาวด์บางรายหรือไม่
Mikolaj S. avatar
cn flag
ฉันคิดว่าคุณกำลังค้นหาวิธีแก้ปัญหาเพื่อกำหนดเส้นทางคำขอฐานข้อมูลเฉพาะเมื่อพ็อดหลักหยุดทำงาน ถูกต้องหรือไม่?
Eranga Heshan avatar
cn flag
@MikolajS. ฉันใช้บริการ Azure Kubernetes มันอยู่บน v1.19.11 ใช่ ฉันต้องการกำหนดเส้นทางคำขอฐานข้อมูลไปยังพ็อดหลักเมื่อกำลังทำงาน และเมื่อไม่ได้ใช้งาน ให้กำหนดเส้นทางคำขอไปยังพ็อดสำรองคุณพอจะทราบแหล่งข้อมูลที่ฉันสามารถค้นหาวิธีแก้ปัญหาได้หรือไม่
Score:1
ธง ng

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

ขึ้นอยู่กับ เอกสารนี้ PgBouncer ไม่มีการกำหนดค่าหลายโฮสต์ภายใน ในการสืบค้นโหลดบาลานซ์ระหว่างเซิร์ฟเวอร์หลายเครื่องสามารถใช้เครื่องมือภายนอกได้ เช่น:

  1. DNS ปัดเศษ. ใช้ IP หลายตัวหลังชื่อ DNS เดียว PgBouncer ไม่ค้นหา DNS ทุกครั้งที่มีการเชื่อมต่อใหม่ แต่จะแคช IP ทั้งหมดและทำการปัดเศษภายในแทน หมายเหตุ: หากมีมากกว่า 8 IP ตามหลังชื่อเดียว แบ็กเอนด์ DNS จะต้องรองรับโปรโตคอล EDNS0 ดูรายละเอียด README

  2. ใช้ ตัวโหลดบาลานซ์การเชื่อมต่อ TCP. ทั้ง แอล.วี.เอส หรือ HAProxy ดูจะเป็นทางเลือกที่ดี ในด้าน PgBouncer อาจเป็นความคิดที่ดีที่จะทำ server_lifetime เล็กลงและเลี้ยวด้วย server_round_robin เปิด: ตามค่าเริ่มต้น การเชื่อมต่อที่ไม่ได้ใช้งานจะถูกใช้ซ้ำโดยอัลกอริทึม LIFO ซึ่งอาจทำงานได้ไม่ดีนักเมื่อต้องการโหลดบาลานซ์

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

แม้ว่า pgbouncer จะดีกว่าสำหรับการรวมการเชื่อมต่อของ postgres แต่อาจดีกว่าหากใช้ daemon ขนาดเล็กที่ทำงานหนึ่งงานได้อย่างสมบูรณ์แบบ แทนที่จะใช้ daemon ขนาดใหญ่ที่ทำงานสองงาน แต่แย่กว่านั้น

เป็นความคิดที่ดีที่จะใช้ PgPool ดูสิ่งนี้ด้วย คำตอบนี้.

ที่นี่ ยังเป็นบทความที่เปรียบเทียบ PgBouncer และ PgPool ส่วนเล็ก ๆ ของสิ่งนั้น: | | PGBOUNCER | PGPOOL-II | |--|--|--| | ความพร้อมใช้งานสูง |ไม่รองรับ |ความพร้อมใช้งานสูงของ PostgreSQL ได้รับการสนับสนุนผ่านกระบวนการเฝ้าดูที่สร้างขึ้นใน Pgpool-II ผู้ชนะ! | |โหลดบาลานซ์|ไม่รองรับ - PgBouncer แนะนำให้ใช้ HAProxy เพื่อความพร้อมใช้งานสูงและโหลดบาลานซ์| รองรับโหลดบาลานซ์อัตโนมัติ - ฉลาดพอที่จะเปลี่ยนเส้นทางคำขออ่านไปยังสแตนด์บาย และเขียนไปยังมาสเตอร์ ผู้ชนะ! |

Wytrzymały Wiktor avatar
it flag
สวัสดี @ErangaHeshan ความคืบหน้าใด ๆ ?
Eranga Heshan avatar
cn flag
@kkopczak ขอบคุณสำหรับข้อมูลเชิงลึก ฉันหวังว่าจะมีวิธีแก้ปัญหานอกกรอบสำหรับเรื่องนี้ ฉันจะลองทำตามที่คุณแนะนำเมื่อฉันมีเวลา
Eranga Heshan avatar
cn flag
@WytrzymaÅyWiktor ขออภัย ฉันไม่มีเวลาทดสอบคำตอบ

โพสต์คำตอบ

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