Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

ในวันที่สองของคริสต์มาส ObjectRocket มอบให้ฉัน:แบบจำลอง PostgresSQL ที่มีความพร้อมใช้งานสูงสองตัว

เผยแพร่ครั้งแรกเมื่อวันที่ 12 ธันวาคม 2019 ที่ ObjectRocket.com/blog

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

ในวันที่สองของคริสต์มาส ObjectRocket มอบให้ฉัน:แบบจำลอง PostgresSQL ที่มีความพร้อมใช้งานสูงสองตัว

เหตุใด HA จึงมีความสำคัญ

ถ้าคำว่า HA คุณไม่คุ้นเคย เรามาทบทวนกันว่าทำไม HA จึงมีความสำคัญ ประการแรก ประโยชน์หลักสามประการของ HA คือ:

  • การหยุดทำงานเป็นศูนย์หรือลดลงอย่างมาก
  • การป้องกันข้อมูลสูญหาย
  • เพิ่มประสิทธิภาพฐานข้อมูล

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

  1. ตรวจพบปัญหาที่ไม่คาดคิดในหลัก
  2. เลือกแบบจำลองที่เหมาะสมเพื่อเลื่อนระดับเป็นหลัก
  3. ซ่อมแซมหลักที่ล้มเหลวและสร้างแบบจำลองใหม่ (เพื่อแทนที่แบบจำลองที่คุณเลื่อนระดับ)

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

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

เทคโนโลยีที่เราใช้

ตอนนี้เราได้ตรวจสอบองค์ประกอบหลักแล้ว มาเจาะลึกว่าเรานำเสนอองค์ประกอบก่อนหน้านี้อย่างไร:

การจำลองแบบ

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

ความล้มเหลวและการเลื่อนตำแหน่ง

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

  • รองรับ Kubernetes® ดั้งเดิม: เราใช้แพลตฟอร์มใหม่ของเราบน Kubernetes ดังนั้นคุณจึงสามารถปรับใช้เครื่องมือที่เพียงแค่เสียบเข้ากับ Kubernetes แทนที่จะต้องใช้กลไกสถานะหรือฉันทามติอื่น ตัวเลือกนี้เป็นกุญแจสำคัญ
  • การพัฒนาและชุมชนเชิงรุก: ชุมชนรอบๆ Patroni มีความกระตือรือร้นอย่างมาก และช่วยให้สามารถทำงานร่วมกันและสนับสนุนส่วนเพิ่มเติมของเราเมื่อฟังก์ชันการทำงานเติบโตขึ้น นอกจากนี้ยังมีแหล่งข้อมูลมากมาย ตั้งแต่การบรรยายและเอกสารประกอบการประชุมไปจนถึงตัวอย่างผู้ปฏิบัติงานจาก Zalando เพื่อช่วยให้เราเรียนรู้เทคโนโลยี
  • สถาปัตยกรรมที่เรียบง่าย: เครื่องมืออื่นๆ ที่มีอยู่จำนวนมากต้องการทรัพยากรเฉพาะภายนอกอินสแตนซ์ Postgres เพื่อจัดการการจัดสรรภาระงานและการเลื่อนขั้นหลัก Patroni ครอบคลุม Postgres และใช้คอมโพเนนต์ Kubernetes ดั้งเดิมเพื่อจัดการกับฟังก์ชันอื่นๆ ดังนั้นเราจึงไม่ได้จัดสรรทรัพยากรเพิ่มเติมให้กับ HA

แม้ว่าระยะทางของคุณอาจแตกต่างกันไป แต่เราพบว่า Patroni นั้นง่ายต่อการกำหนดค่าและรักษาความเหมาะสมในสภาพแวดล้อมของเรา คุณบอก Patroni ว่าโหนดใดเป็นส่วนหนึ่งของกลุ่ม HA และส่วนที่เหลือจะดำเนินการเอง มันกำหนดค่าการจำลองแบบ ตรวจจับความล้มเหลวหลัก ส่งเสริมแบบจำลอง สร้างแบบจำลองใหม่ และแม้กระทั่งทำงานกับ Kubernetes ในส่วนสุดท้ายของกระบวนการ

ขอเส้นทาง

ในที่สุด Patroni และโครงสร้าง Kubernetes ดั้งเดิมที่เรียกว่า บริการ เป็นตัวแทนของชิ้นส่วนสุดท้ายของปริศนา บริการ inKubernetes ทำงานเหมือนพร็อกซีที่กำหนดเส้นทางการรับส่งข้อมูลตามป้ายกำกับบนกลุ่มคอนเทนเนอร์ (พ็อด) Patroni ติดป้ายกำกับ activeprimary ด้วย master label และ Kubernetes จะดูแลการกำหนดเส้นทางการรับส่งข้อมูลฐานข้อมูลไปยังพ็อดที่มีมาสเตอร์เลเบลเท่านั้น โปรดจำไว้ว่านี่เป็นคำอธิบายระดับสูง แต่ในทางปฏิบัตินั่นคือวิธีการทำงาน นอกจากนี้ยังสามารถขยายกระบวนการนี้เพื่อให้พอร์ตรองที่ส่งคำขออ่านฐานข้อมูลไปยังแบบจำลอง (เพื่อลดภาระในหลัก)

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

ลองใช้เลย!

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

ในวันที่สองของคริสต์มาส ObjectRocket มอบให้ฉัน:แบบจำลอง PostgresSQL ที่มีความพร้อมใช้งานสูงสองตัว

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

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