0

Slony のチュートリアルに従い、データベースを複製することができましたが、最初の起動時にしか機能しないことに気付きました。レプリケーションを実行したままにしておくと、新しいデータがスレーブに到達することはありません。これを解決する唯一の方法は、クラスター/ノードをアンインストールして元に戻すことです。その後、起動時にのみレプリケーションが行われます。

私はこのチュートリアルhereに従いました

私の現在の手順は次のとおりです。

  1. マスターとスレーブの両方で postgres を開始します

  2. このスクリプトを使用してクラスター/ノードをアンインストールします(ホストをノードとして使用するスレーブノード用に別のスクリプトがあります。

    #!/bin/sh
    slonik <<_EOF_
    cluster name = $CLUSTERNAME;
    
    node 1 admin conninfo = 'dbname=$TEST_DB host=$MASTERHOST user=test';
    
    uninstall node ( id = 1 );
    _EOF_
    
  3. クラスターのセットアップ

    #!/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_
    
  4. 次のコマンドを使用して、各ノードで slon を実行します。

    slon $CLUSTERNAME "dbname=$TEST_DB user=test host=$MASTERHOST"
    
  5. マスターでレプリケーション スクリプトを実行します (いいえとはいを試してみましたが、違いはありませんでした。)

    #!/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 のドキュメントでは何も示唆されていないため、他にはあまり変更を加えていません。

基本的なものが足りないと思いますが、助けてください。

4

1 に答える 1