PostgreSQL 流复制

4
我正在尝试在一台机器上设置两个PostgreSQL服务器并执行流复制。我已经成功地做过一次,但是当我按照完全相同的步骤再次尝试时,它不起作用了。这些是步骤:
我有$PGDATA = home/postgresql/9.1/data和$STANDBY = home/postgresql/9.1/data2
1.设置两个节点: initdb -D $PGDATA initdb -D $STANDBY
2.在主节点中创建一个用于复制的用户。我在pgAdmin中完成(它具有超级用户特权)。 3.在主节点的pg_hba.conf中添加允许备用连接的部分: host replication repuser 127.0.0.1/0 md5
4.在主节点的postgresql.conf中设置: max_wal_senders = 1 archive_mode = on archive_command = 'cp %p ~/postgresql/backup/archivedir/%f' wal_level = archive wal_keep_segments = 32
5.启动主节点并进行基本备份: psql -d dellstore2 -c "SELECT pg_start_backup('backup for replication', true)" rsync -av ${PGDATA}/ $STANDBY --exclude postmaster.pid psql -d dellstore2 -c "select pg_stop_backup()" pg_stop_backup表示一切正常,所有WAL文件都已存档。
6.在备用(data2)节点中创建recovery.conf: standby_mode = 'on' primary_conninfo = 'host=127.0.0.1 port=5432 user=repuser password=haslo' trigger_file = '/home/michau/postgresql/replication.trigger' restore_command = 'cp /home/michau/postgresql/backup/archivedir/%f "%p"'
7.启动主节点,然后启动备用节点-复制应该开始,并且备用节点应该赶上主节点。这正是第一次发生的事情。 现在,当我启动备用时,我收到“地址已在使用”的错误。当然,备用和主服务器在postgresql.conf中指定了相同的端口(它们具有完全相同的postgresql.conf文件)。如果我将备用端口更改为5433,那么我会得到:

日志:数据库系统在2012-06-12 19:48:01 CEST时处于恢复状态下关闭

日志:进入热备模式

cp:无法查找/home/michau/postgresql/backup/archivedir/000000010000000000000007文件或目录

日志:一致的恢复状态已经达到0/7000070

日志:0/7000070位置上记录长度为零

cp:无法查找/home/michau/postgresql/backup/archivedir/000000010000000000000007文件或目录

日志:流复制成功连接到主服务器

日志:重做从0/7000070开始

程序陷入死循环。 运行ps -ef | grep postgresql命令返回:

michau 2491 1898 0 19:46 pts/0 00:00:00 postgres -D /home/michau/postgresql/9.1/data

michau 2493 2491 0 19:46 ? 00:00:01 postgres: writer process

michau 2494 2491 0 19:46 ? 00:00:00 postgres: wal writer process

michau 2495 2491 0 19:46 ? 00:00:00 postgres: autovacuum launcher process

michau 2496 2491 0 19:46 ? 00:00:00 postgres: archiver process last was 000000010000000000000008

michau 2497 2491 0 19:46 ? 00:00:00 postgres: stats collector process

michau 2571 2214 0 19:49 pts/1 00:00:00 postgres -D /home/michau/postgresql/9.1/data2

michau 2572 2571 0 19:49 ? 00:00:01 postgres: startup process recovering 000000010000000000000009

michau 2575 2571 0 19:49 ? 00:00:01 postgres: writer process

michau 2578 2571 0 19:49 ? 00:00:02 postgres: wal receiver process streaming 0/99782DC

michau 2579 2491 0 19:49 ? 00:00:00 postgres: WAL发送进程repuser 127.0.0.1(42142) 流式传输 0/99782DC

michau 2586 2491 0 19:51 ? 00:00:00 postgres: michau postgres ::1(49941) 空闲

michau 2587 2491 0 19:51 ? 00:00:01 postgres: michau dellstore2 ::1(49942) 空闲

正在恢复的0000000010000009一度在变化,但已经半个小时没有变化了。

我确定第一次肯定做了什么事情,但没有记录下来或者其他什么原因,我完全不知道是什么。希望能得到任何帮助。


我认为你在http://dba.stackexchange.com/上会有更多获得答案的机会。 - rantanplan
谢谢,我不知道有这样的东西存在。 - michauwilliam
2个回答

3

我按照您发布的步骤操作时,出现了您所述的完全相同的错误,但我成功解决了这个问题。

我尝试将您的步骤与此网站发布的步骤进行合并: http://www.debian-administration.org/article/How_to_setup_Postgresql_9.1_Streaming_Replication_Debian_Squeeze

除了您发布的步骤之外,我还从我提供的网站上添加了两个步骤。这两个步骤如下:

  • 在rsync主服务器的文件和文件夹到备用服务器之前,删除备用服务器中的所有文件和文件夹。
  • 在主服务器的postgresql.conf文件中,将wal_level设置为hot_standby而不是archive,并将hot_standby设置为on。

0

你的备用服务器正在持续恢复,这正是PostgreSQL中流复制的工作原理。你能够登录到备用服务器并运行查询吗?如果可以,那么恭喜,它正在工作。如果不能,请发布发生了什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接