การจำลองแบบหลายต้นแบบที่ใช้งานได้สำหรับ Postgres?


16
  1. ฉันลอง Postgres-XC และยังไม่ได้ใช้ SQL แบบเต็ม (เช่น SERIAL)

  2. Postgres-R ดูน่าสนใจ แต่มัน "ไม่พร้อมสำหรับการผลิต" ตามนักพัฒนา

ดังนั้นฉันจึงใช้ pgpool-II 3.0.1 ใช่มันใช้งานได้ดี แต่เท่าที่ฉันเห็นมันเป็นเพียง 2 โหน PG

มีอะไรที่จริงแล้วพร้อมใช้งานและสามารถทำงานกับหลาย ๆ โหนด PG ได้หรือไม่?


ไม่กี่ปีที่ผ่านมาเรามีปัญหาเดียวกัน ในที่สุดเราก็ย้ายข้อมูลทั้งหมดของเราไปยัง Oracle หวังว่าคุณจะพบการจำลองแบบ multimaster ที่ใช้งานได้ในปัจจุบันนี้ฉันไม่ได้ดู ... ขอให้โชคดีไม่มีน้อย
grufftech

2
เอกสารของPostgreSQLบอกว่าใช้มิดเดิลแวร์แอพพลิเคชั่น :) .. "การซิงโครนัส Multimaster Replication .. PostgreSQL ไม่ได้เสนอการจำลองแบบประเภทนี้แม้ว่า PostgreSQL แบบสองเฟสคอมมิชชัน (PREPARE TRANSACTION และ COMMIT PREPARED) รหัสแอปพลิเคชันหรือมิดเดิลแวร์ "
วอร์เรน

คุณไม่ จำกัด เพียงสองโหนด
foocorpluser

คำตอบ:


6

คุณคิดว่าBucardoหรือไม่? มันเป็นมัลติมิเตอร์แบบอะซิงโครนัส มันไม่ได้ติดอยู่อย่างสมบูรณ์และไม่ได้เป็นทางออกทั่วไป แต่มันอาจจะคุ้มค่าลอง


1
เห็นได้ชัดว่าฉันไม่เจาะจงมากพอ: ฉันต้องการการจำลองแบบซิงโครนัส นอกจากนี้ความหมายของคำถามนี้ใน FAQ คืออะไร? "Bucardo สามารถทำซ้ำระหว่างอาจารย์มากกว่าสองคนได้หรือไม่ไม่ได้ปัจจุบัน Bucardo รองรับเฉพาะผู้ชำนาญการเท่านั้น ดังนั้นมันเป็นแบบ multi-master หรือไม่?
mrkafk

4
เฉพาะในกรณีที่คำจำกัดความของคุณของ "หลาย" คือ "2"!
hmallett

โปรดทราบว่าเริ่มต้นด้วย Bucardo 5 ข้อ จำกัด ของเพียงแค่ 2 ท่านถูกยกขึ้น
Joril

3

ฉันได้เห็นด้วยกับการประเมินของปีเตอร์: ไม่มีจริงๆเป็นดีการจำลองแบบ Multi-Master สำหรับ Postgres ในขณะนี้ (การทำซ้ำหลายหลักจริงเป็นปัญหาที่ยากมากและฉันไม่ติดใจกับโซลูชั่นที่มีอยู่)

คัดลอกรายการโซลูชันที่อาจเป็นไปได้ของ Wikipedia ที่คุณอาจต้องการตรวจสอบ:

PostgreSQL นำเสนอโซลูชั่นที่หลากหลายสำหรับการจำลองแบบหลายต้นแบบรวมถึงโซลูชั่นที่ยึดตามการมอบหมายสองเฟส มี Bucardo, rubyrep, PgPool และ PgPool-II, PgCluster และ Sequoia รวมถึงโซลูชันที่เป็นกรรมสิทธิ์บางอย่าง แนวทางที่มีแนวโน้มอีกวิธีหนึ่งคือการนำ Postgres-R ไปใช้ (กระตือรือร้น) แบบจำลองอย่างไรก็ตามมันยังอยู่ในระหว่างการพัฒนา โครงการอื่นการใช้การทำแบบจำลองแบบซิงโครนัสคือ Postgres-XC Postgres-XC ยังอยู่ระหว่างการพัฒนา


ว้าวเพิ่งอ่านรายการที่ทำให้ตกใจและหวาดกลัวสำหรับฉัน :)
Peter Eisentraut

สำหรับฉันมันเป็นภาวะซึมเศร้าและความเกลียดชัง :-)
voretaq7

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

3

นี่เป็นจาวาที่เน้นหนัก แต่ API ไคลเอนต์ฐานข้อมูลดั้งเดิมสามารถเชื่อมต่อกับแหล่งข้อมูล JDBC Tungsten Myosotis เป็นตัวอย่างสำหรับ MySQL ดั้งเดิมในการเชื่อมโยง JDBC


  • Tungsten Enterpriese นั้นดีสำหรับแบบอะซิงโครนัสแบบหลายหลัก ฉันคิดว่ามันใช้งานได้กับ MySQL, PostgreSQL และ Oracle สามารถเรียกใช้แบบสแตนด์อโลนหรือฝังตัวในแอปพลิเคชัน Java ฉันเห็นว่ามันใช้งานได้กับ MySQL แต่พวกเขาอ้างว่า PostgreSQL ส่วนประกอบ Replicator ของพวกเขาคือโอเพ่นซอร์ส แต่โซลูชันเต็มรูปแบบมีส่วนเพิ่มเติมและต้องการค่าลิขสิทธิ์ อย่างต่อเนื่องในขั้นต้นมี Sequoia สำหรับการซิงโครนัสแบบหลายมาสเตอร์ แต่พวกเขาละทิ้งมันและสร้างทังสเตนแทนอะซิงโครนัสแบบหลายมาสเตอร์ - พวกเขาพิจารณาขยายธุรกิจเชิงกลยุทธ์มากกว่าความสอดคล้อง ACID แบบซิงโครนัส Tungsten ถูกเขียนใน Java ดังนั้นจึงเป็นเหตุผลว่าทำไมพวกเขาจึงนำเสนอ Myosotis เพื่อเชื่อมต่อฐานข้อมูลลูกค้าดั้งเดิม

  • SymmetricDS นั้นดีสำหรับการทำงานแบบอะซิงโครนัสแบบหลายมาสเตอร์ มันเป็นโอเพนซอร์ซ มันติดตั้ง / ถอนการติดตั้งทริกเกอร์ในการจับภาพการปรับปรุงแทนการบันทึกถัง สามารถเรียกใช้แบบสแตนด์อโลนหรือฝังตัวในแอปพลิเคชัน Java

  • HA-JDBC เหมาะสำหรับการซิงโครนัสแบบหลายหลัก มันเหนือกว่าซอฟต์แวร์ที่หมดอายุกว่าเช่น C-JDBC และ Sequoia มันเป็นโอเพนซอร์ซ มันใช้สองเฟสกระทำและทำงานสำหรับ PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase และอื่น ๆ อีกมากมายผ่านทางภาษา มันเป็นส่วนใหญ่สำหรับการฝังตัวดังนั้นฝังในแอปพลิเคชัน Java เพื่อเชื่อมโยงกับ PostgreSQL ล็อคแบบกระจายลำดับเวลา rand และอื่น ๆ ได้รับการจัดการโดย jGroups จาก Redhat / JBoss คุณสมบัติที่ดีอย่างหนึ่งคือโหมดการทำธุรกรรม "ซีเรียล" แทนที่จะเป็น "ขนาน" หากแอปของคุณมีการหยุดชะงักและไม่รองรับการย้อนกลับ ฉันใช้โหมด "serial" สำเร็จแล้วเพื่อติดตั้งแอปดั้งเดิมที่ไม่ได้รับรู้ถึง DB- คลัสเตอร์ดังนั้นจึงไม่มีรหัสลองธุรกรรมอีกครั้ง โหมดอนุกรมบันทึกวันและหลีกเลี่ยงการเขียนซ้ำที่น่ารังเกียจ

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

การเรพลิเคทแบบ JDBC ใด ๆ สำหรับ PostgreSQL และฐานข้อมูลอื่น ๆ นั้นจำเป็นต้องใช้เนทีฟบริดจ์ JDBC เว้นแต่ว่าแอปพลิเคชันของคุณจะถูกเขียนใน Java สำหรับ MySQL นั้น Tungsten Enterprise นำเสนอส่วนประกอบเพิ่มเติมที่เรียกว่า Myosotis ฉันใช้สิ่งนี้เพื่อเชื่อม PHP / Perl / C / mysqlclient กับ JDBC ซึ่งแหล่งข้อมูล JDBC เกิดขึ้นเป็นแหล่งข้อมูลพร็อกซี HA-JDBC ที่ชี้ไปยังคลัสเตอร์ MySQL / InnoDB 4 โหนด

Tungsten รองรับ PostgreSQL ในส่วนประกอบ Replicator และ Router แต่ไม่แน่ใจเกี่ยวกับองค์ประกอบ Myosotis อาจจะ. ส่วนประกอบของทังสเตนเรพลิเคเตอร์ / เราท์เตอร์มีไว้สำหรับการทำงานแบบอะซิงโครนัสแบบหลายหลัก แต่ Myosotis สามารถเชื่อมโยงคุณกับ JDBC แบ็คเอนด์ทางเลือกเช่น HA-JDBC หรือ H2 แบบซิงโครนัส

หากมี PostgreSQL ดั้งเดิมที่เป็น JDBC bridge ฉันอยากได้ยินเกี่ยวกับมัน ตามทฤษฎีแล้วฐานข้อมูลใด ๆ ที่มีไดร์เวอร์ JDBC Type 4 สามารถเชื่อมต่อได้ Type 4 JDBC พูดโพรโทคอลฐานข้อมูลเนทิฟเช่นเดียวกับอินเทอร์เฟซไคลเอ็นต์ดั้งเดิมสำหรับฐานข้อมูลนั้นดังนั้นควรมีการแม็พแบบหนึ่งต่อหนึ่งของการโทรเนทีฟกับการโทร JDBC


2

คำตอบคือไม่ดังก้อง


ไม่กี่ปีที่ผ่านมาตั้งแต่ฉันทำการวิจัย แต่ บริษัท ของฉันมาถึงข้อสรุปนี้เมื่อเราพยายาม
grufftech

1

ฉันใช้ londiste ในช่วง 2 ปีที่ผ่านมาสำหรับการจำลองแบบหลายต้นแบบใน postgresql

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

คุณสามารถอ่านเกี่ยวกับ londiste ได้ที่นี่ ( http://pgfoundry.org/projects/skytools/ ) นี่คือสิ่งที่ Skype ใช้สำหรับกลุ่มของพวกเขารวมถึงพวกเขาสร้างมันขึ้นมามันจึงเป็นสองเท่าที่ยอดเยี่ยม :)


อืมน่าสนใจ แต่จากสิ่งที่ฉันเคยเห็นที่นี่: wiki.postgresql.org/wiki/… , Londiste เป็น Master-Slave และ Asynchronous หรือไม่? ดังนั้นจะเป็นมัลติมาสเตอร์ได้อย่างไร? นอกจากนี้ฉันต้องการการจำลองแบบซิงโครนัสจริง ๆ : ธุรกรรมควรล้มเหลวหากมีโหนดคลัสเตอร์ใด ๆ (ใช้งานอยู่) ล้มเหลว
mrkafk

การจำลองแบบนี้เป็นการโพสต์ท
รานแซ

ฉันไม่ได้ตั้งใจฟังดูเหมือนเจ็บปวดในตูด (nitpicking) แต่ ... 1. ฉันเคยใช้ pgpool-II และการทำธุรกรรมผ่านไปอย่างรวดเร็ว (แม้ว่าฉันยังไม่ได้ทำเกณฑ์มาตรฐาน) และ 2 ถึงแม้ว่า ธุรกรรมแต่ละรายการอาจช้าลงฉันไม่เห็นเหตุผลที่ดีที่ทรูพุตของธุรกรรมโดยรวมจะต่ำ อย่างไรก็ตามบางทีจุดที่สำคัญกว่านั้นก็คือ Londiste multi-master เป็นอย่างไร? ฉันสามารถเขียนไปยังเซิร์ฟเวอร์ pg 1 และมีการจำลองแบบเป็น 2 และเขียนไปยังเซิร์ฟเวอร์ pg 2 และมีการจำลองแบบไปยังเซิร์ฟเวอร์ 1 ได้ไหม
mrkafk


-2

ฉันพบระบบการจำลองแบบ "multi-master" ที่ใช้งานได้:

  1. รับ RabbitMQ http://www.rabbitmq.com/ - เป็นมิดเดิลแวร์ข้อความ

  2. กำหนดค่าคลัสเตอร์ MQ กระต่ายใน Rabbit

  3. สร้างคิวสำหรับแต่ละโหนดในคลัสเตอร์และผูกไว้กับการแลกเปลี่ยนชนิด 'fanout'

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


2
@mrafk - คุณจะโพสต์ / เชื่อมโยง "รหัสการทำงาน" คุณมี?
วอร์เรน

2
สิ่งนี้เกี่ยวข้องกับการจำลองแบบด้วย postgres? สิ่งนี้จะกระจายข้อความ แต่คุณได้รับข้อความข้อมูล / อัพเดตจากฐานข้อมูลที่ไหนและมันอัพเดตโหนดที่รับข้อความในคิวข้อความได้อย่างไร
พระสงฆ์

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