所以我遵循了 Slony 教程并能够复制我的数据库,但我注意到它仅在第一次启动时才有效。如果我让复制运行任何新数据永远不会进入从属。我发现解决此问题的唯一方法是卸载集群/节点并恢复它们,然后再次复制仅在启动时发生。
我在这里按照本教程
我目前的步骤是:
在 Master 和 Slave 上启动 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"
在 Master 上运行复制脚本(我已经尝试过 no 和 yes 没有区别。)
#!/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_
一旦最后一个脚本在一秒钟内运行,我的表已经复制到从服务器,我可以看到每个主机的 slon 输出中发生同步,但即使我看到这个同步消息,我也看不到表正在更新。
我已经手动登录到 PostgreSQL 并插入到表中。我也尝试过使用 PSQL 命令代替并将 java 插入到 postgres 中。Slony 似乎在最初的副本之后没有看到任何东西。
至于 postgres 设置,我将复制设置为“副本”,但其他方面没有太大变化,因为 Slony 文档没有提出任何建议。
我想我缺少一些基本的东西,但请帮助我,谢谢。