web-dev-qa-db-ja.com

マスターからスレーブへ、およびスレーブからマスターへの複製

マスターマシンと複数のスレーブマシンがあります。マスターノードでのすべてのSQL操作は、スレーブノードに送信する必要があります。ただし、スレーブノードのテーブルはローカルに書き込むこともできます。スレーブノードでのこれらのローカル変更は、マスターノードに反映される必要があります。

たとえば、マスターマシンがあり、それを「M」と呼び、2台のスレーブマシンがそれらを「A」と「B」と呼ぶとします。

これらのマシンにはすべて、「id」という名前の列を持つtest_tableという名前のテーブルがあります。

Mマシンのtest_tableにデータを挿入します。

(M)test_table
   |id|
   |1 |

(A)test_table
   |id|

(B)test_table
   |id|

現在、この変更はスレーブに反映されています。

(M)test_table
   |id|
   |1 |

(A)test_table
   |id|
   |1 |

(B)test_table
   |id|
   |1 |

スレーブAで、ローカル変更を行います。

(M)test_table
   |id|
   |1 |

(A)test_table
   |id|
   |2 |

(B)test_table
   |id|
   |1 |

これで、この変更がマスターサーバーに反映されます。

(M)test_table
   |id|
   |2 |

(A)test_table
   |id|
   |2 |

(B)test_table
   |id|
   |1 |

そして、マスターサーバーはこの変更をスレーブに複製します。

(M)test_table
   |id|
   |2 |

(A)test_table
   |id|
   |2 |

(B)test_table
   |id|
   |2 |

この種のレプリケーションの名前は何ですか?そして、どうすればpostgresqlでこれを達成できますか?

1
Alptugay

探しているのはマルチマスターレプリケーションです。マルチマスターレプリケーションには多数の潜在的な問題があるため、提供できる最善の方法は、保証されたソリューションではなくツールキットです(異なるサーバーの同じ行で2つの同時更新を想像してください)。

Bucardoは、3台ではなく、2台のサーバーに対してマルチマスターレプリケーションを実行します。 Slonyとテーブルパーティションでいくつかの楽しいトリックをプレイすることもできますが、これは複雑になり、間違いなく専門家の領域です。

可能な限り、マルチマスターレプリケーションを避けることをお勧めします。単一のシステムよりも障害が発生しやすくなることなく、常に機能させることは数学的に不可能です。あなたがそれを必要としないように設計するように一生懸命に努力してください。

それが必要な場合は、それが2番目の目であるかコンサルタント(別のコンサルタントに設計をレビューしてもらうこともできます)であるかどうかにかかわらず、専門家の助けを得るのを検討してください。ここでうまくいかないことがたくさんあるので、問題にさらに目を向けたいと思うでしょう。

4
Chris Travers