การจำลองแบบ PostgreSQL


45

เราปัดสิ่งนี้รอบ ๆ สำนักงานอย่างต่อเนื่องและคำถามก็ยังคงเกิดขึ้น คุณจัดการกับการจำลองแบบ PostgreSQL อย่างไร ฉันไม่จำเป็นต้องพูดถึงกลุ่มขั้นสูงเพียงทำให้มันง่ายขึ้นด้วย Master-Slave, Master-MultiSlave และ Master-Master ฉันพบว่าการตั้งค่าสำหรับ MySQL นั้นค่อนข้างง่าย Failover ตรงไปตรงมาหากไม่สมบูรณ์โดยเฉพาะอย่างยิ่งการกำหนดค่าที่ง่าย เราได้เล่นกับ Slony แล้ว แต่มันก็ค่อนข้างง่ายเกินไป (การเปลี่ยนแปลง schema ต้องการการแทรกแซงฐานข้อมูลใหม่จำเป็นต้องมีการแทรกแซง ฯลฯ ) PGPool2 นั้นค่อนข้างดีจนกระทั่งโหนดหยุดทำงานและเราไม่สามารถหาวิธีที่สง่างามได้ (นอกเหนือจากการนำทุกอย่างลงมาและดำเนินการต่อโหนดที่ล้ม) เพื่อรับการจำลองแบบกลับคืน โดยทั่วไปนี่คือสิ่งที่ฉันมักจะมองหา:

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

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


3
ฉันสนใจคำตอบของสิ่งนี้ มาจากพื้นหลังของ MySQL ตัวเลือกการจำลองแบบสำหรับ PSQL นั้นเป็นเรื่องที่พูดได้น้อยที่สุด
Dave Cheney

ใช่จนถึงทุก ๆ ทางเลือกที่ฉันเล่นด้วยมีข้อเสียอย่างมาก หวังว่าฉันจะขาดอะไรบางอย่างที่เห็นได้ชัด .. แต่ฉันไม่คิดว่าฉันจะเป็นเช่นนั้น
f4nt

ฉันสงสัยว่ามีอะไรอย่างอื่น แต่ฉันอยากให้ใครสักคนที่จะพิสูจน์ว่าฉันผิด
Vinko Vrsalovic

BTW คุณลอง pgsql-general@postgresql.org แล้วหรือยัง?
Vinko Vrsalovic

คำตอบ:


9

คำตอบสั้น ๆ - ยังไม่มีวิธีแก้ปัญหาดังกล่าวสำหรับ PostgreSQL หากคุณต้องการทาสแบบอ่านอย่างเดียวออนไลน์

ปัจจุบันมีโครงการพัฒนาสำคัญสองโครงการที่ดำเนินการในพื้นที่นี้ซึ่งรวมอยู่ใน PostgreSQL 9.0 (Spring / Summer 2010) ได้แก่ :

  • การจำลองแบบซิงโครนัส:

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • อ่านทาสสแตนร้อนเท่านั้น:

http://wiki.postgresql.org/wiki/Hot_Standby

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

ทั้งหมดนี้ถูกเตะออกโดยรายการจากทีมหลัก PostgreSQL ในปี 2008:

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

โซลูชันการจำลองแบบของ PostgreSQL ที่มีฐานผู้ใช้มากที่สุดในปัจจุบันคือ Slony-I (แพงกว่าสำหรับการเขียนทำให้ schema เปลี่ยนเป็นเที่ยวบิน), WAL shipping / walmgr (Slaves ไม่สามารถใช้งานออนไลน์) และ pgQ / londiste จาก Skype / Skytools ( เครื่องมือ / การสร้างบล็อกมากกว่าโซลูชันที่เสร็จสิ้นแล้ว)

ฉันได้เขียนบางสิ่งเกี่ยวกับ Log Shipping, walmgr และ Slony-I ดู

http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20สำหรับข้อมูลเพิ่มเติม


6
การจำลองแบบซิงโครนัส + การสแตนด์บายสุดฮอตมีให้บริการแล้ว - ดูwiki.postgresql.org/wiki/…สำหรับการสรุปเทคนิคที่มีอยู่อย่างดี
David Fraser

5

และโยนสารละลายอื่นลงในวงแหวน: rubyrep

เปรียบเทียบกับความต้องการของคุณ:

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

4

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

อย่างจริงจังมันเป็นทางออกที่ดีที่สุดหากคุณไม่ต้องการทาสอ่าน สิ่งที่เก็บถาวรของ WAL เป็นสิ่งที่ดีที่สุดและคุณต้องตั้งค่าทุกอย่างอีกครั้งหากคุณขัดขวางกระบวนการจัดส่งสำหรับการรีบูทเซิร์ฟเวอร์ slony และ londiste อย่าตัดมัสตาร์ด หากคุณต้องการที่จะอยู่บนต้นกำเนิดหลักและไม่ไปทำการค้า Heartbeat เป็นทางออกที่ดีที่สุดของคุณ


2

จากความต้องการของคุณดูเหมือนว่า PITR เป็นวิธีที่ง่ายที่สุดในการแก้ปัญหาของคุณ:

การสำรองข้อมูลออนไลน์และการกู้คืน ณ จุดเวลา (PITR)

คุณไม่ได้บอกว่าคุณต้องค้นหาเซิร์ฟเวอร์ทาสดังนั้น PITR อาจจะถูกต้อง

เป็นส่วนมาตรฐานของ PostgreSQL จากเวอร์ชัน 8.0 ดังนั้นคุณอาจมีทุกสิ่งที่จำเป็นสำหรับการเริ่มต้นใช้งาน

หากคุณพบคำแนะนำที่ละเอียดเกินไปให้ดูที่SkyTools WalMgrซึ่งจะทำให้กระบวนการสร้าง / failover ไปที่งานคำสั่งเดียวข้อมูลแบบสแตนด์บาย

สำหรับสถานการณ์การจำลองแบบที่ซับซ้อนมากขึ้นฉันมีประสบการณ์ที่ดี Slony-1 แต่ PostgreSQL มีตัวเลือกการจำลองแบบ / HA จำนวนมากที่ดี


และตัวเลือกเหล่านั้นคือ ... ?
Dave Cheney

... อยู่ในบล็อกโพสต์blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.htmlอ้างอิงในคำตอบหนึ่งใน ...
dpavlin

2

ถ้าคุณต้องการให้การจำลองแบบต้นแบบ / ทาสแบบอะซิงโครนัสพิจารณา Londiste (ส่วนหนึ่งของแพ็คเกจ skytools จาก Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

ง่ายต่อการติดตั้งเพิ่มฐานข้อมูลใหม่เป็นเรื่องง่ายการจำลองแบบเพียง "จับได้"

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

การเปลี่ยนแปลงสคีมาบางอย่างง่ายดาย คนอื่นยากกว่า ขึ้นอยู่กับใบสมัครของคุณ skytools เวอร์ชันถัดไป (เวอร์ชั่น 3.0) ควรจะจัดการ DDL และรวมถึงสิ่งอำนวยความสะดวกเพื่อให้ failover ง่ายขึ้น

เราย้ายไปที่ Londiste หลังจากพบว่าสโทนี่เจ็บปวดเกินกว่าจะใช้



1

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

ตอนนี้ก็เป็นไปได้ที่จะเรียงลำดับของการจำลองแบบม้วนของคุณเองด้วย Postgres ใช้ล็อกแบบเขียนหัว (WAL) การจัดส่งสินค้า:

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

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

อย่างไรก็ตามนั่นไม่อนุญาตให้คุณทำการจำลองแบบต้นแบบและ / หรือวงกลม

ไม่ว่าในกรณีใดมันใช้งานได้อย่างดีเยี่ยม แต่ฉันจะไม่เรียกมันว่า "การตั้งค่าง่าย" "การล้มเหลวอย่างง่าย" "ไร้รอยต่อ" หรืออะไรทำนองนั้น


คำตอบนี้เป็นซ้ำของข้อเสนอแนะ PITR ตั้งแต่ PITR ใช้ WAL :-)
dpavlin

1

ยกเว้นการ 'เพิ่มฐานข้อมูลใหม่' คุณสามารถลอง Mammoth Replicator ( https://projects.commandprompt.com/public/replicator ) มันเป็นโอเพ่นซอร์สติดตั้งง่ายและรองรับความล้มเหลว ข้อ จำกัด ที่สำคัญคือฐานข้อมูลเดียวและไม่สามารถทำซ้ำการเปลี่ยนแปลง DDL ทั้งสองอยู่ในรายการสิ่งที่ต้องทำ



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