Slony のチュートリアルに従い、データベースを複製することができましたが、最初の起動時にしか機能しないことに気付きました。レプリケーションを実行したままにしておくと、新しいデータがスレーブに到達することはありません。これを解決する唯一の方法は、クラスター/ノードをアンインストールして元に戻すことです。その後、起動時にのみレプリケーションが行われます。
私はこのチュートリアルhereに従いました
私の現在の手順は次のとおりです。
マスターとスレーブの両方で postgres を開始します
このスクリプトを使用してクラスター/ノードをアンインストールします(ホストをノードとして使用するスレーブノード用に別のスクリプトがあります。
#!/bin/sh slonik <<_EOF_ cluster name = $CLUSTERNAME; node 1 admin conninfo = 'dbname=$TEST_DB host=$MASTERHOST user=test'; uninstall node ( id = 1 ); _EOF_
クラスターのセットアップ
#!/bin/sh slonik <<_EOF_ cluster name = $CLUSTERNAME; node 1 admin conninfo = 'dbname=$TEST_DB host=$MASTERHOST user=test'; node 2 admin conninfo = 'dbname=$TEST_DB host=$SLAVEHOST user=test'; init cluster (id=1, comment = 'Master Node'); create set (id=1, origin=1, comment='All test tables'); set add table (set id=1, origin=1, id=1, fully qualified name = 'test.amqp_status', comment='amqp status'); set add table (set id=1, origin=1, id=2, fully qualified name = 'test.corba_status', comment='corba status'); set add table (set id=1, origin=1, id=3, fully qualified name = 'test.icmp_status', comment='ping status'); set add table (set id=1, origin=1, id=4, fully qualified name = 'test.test_status', comment='teststatus'); set add table (set id=1, origin=1, id=5, fully qualified name = 'test.ntp_status', comment='ntp status'); set add table (set id=1, origin=1, id=6, fully qualified name = 'test.snmp_status', comment='snmp status'); set add table (set id=1, origin=1, id=7, fully qualified name = 'test.subsystem_service_status', comment='subsystem_service status'); set add table (set id=1, origin=1, id=8, fully qualified name = 'test.subsystem_status', comment='subsystem status'); set add table (set id=1, origin=1, id=9, fully qualified name = 'test.switch_device_file', comment='switch_device_file'); set add table (set id=1, origin=1, id=10, fully qualified name = 'test.host_status', comment='host status'); store node (id=2, comment = 'Slave Node', event node=1); store path (server = 1, client = 2, conninfo='dbname=$TEST_DB host=$MASTERHOST user=test'); store path (server = 2, client = 1, conninfo='dbname=$TEST_DB host=$SLAVEHOST user=test'); _EOF_
次のコマンドを使用して、各ノードで slon を実行します。
slon $CLUSTERNAME "dbname=$TEST_DB user=test host=$MASTERHOST"
マスターでレプリケーション スクリプトを実行します (いいえとはいを試してみましたが、違いはありませんでした。)
#!/bin/sh slonik <<_EOF_ cluster name = $CLUSTERNAME; node 1 admin conninfo = 'dbname=$TEST_DB host=$MASTERHOST user=test'; node 2 admin conninfo = 'dbname=$TEST_DB host=$SLAVEHOST user=test'; subscribe set (id = 1, provider = 1, receiver = 2, forward = yes); _EOF_
この最後のスクリプトが 1 秒以内に実行されると、テーブルがスレーブにコピーされ、各ホストの slon 出力で SYNC が発生していることがわかりますが、この SYNC メッセージが表示されたとしても、テーブルが更新されていることはわかりません。
手動で PostgreSQL にログインし、テーブルに挿入しました。また、代わりに PSQL コマンドを使用して、java を postgres に挿入しようとしました。最初のコピーを過ぎて Slony には何も見えないようです。
postgres の設定に関しては、レプリケーションを「replica」に設定していますが、Slony のドキュメントでは何も示唆されていないため、他にはあまり変更を加えていません。
基本的なものが足りないと思いますが、助けてください。