PostgreSQL流式复制

PostgreSQL流式复制,postgresql,replication,Postgresql,Replication,我正在尝试在一台机器上设置两台PostgreSQL服务器并执行流式复制。我曾经成功过一次,但当我按照完全相同的步骤再次尝试时,它不起作用。。这些是步骤: 我有$PGDATA=home/postgresql/9.1/data 和$STANDBY=home/postgresql/9.1/data2 设置两个节点: initdb-D$PGDATA initdb-D$STANDBY 在主节点中,创建用于复制的用户。我在pgAdmin中这样做(它确实具有超级用户权限) 在pg_hba.conf的主节点中,

我正在尝试在一台机器上设置两台PostgreSQL服务器并执行流式复制。我曾经成功过一次,但当我按照完全相同的步骤再次尝试时,它不起作用。。这些是步骤: 我有$PGDATA=home/postgresql/9.1/data 和$STANDBY=home/postgresql/9.1/data2

  • 设置两个节点:
  • initdb-D$PGDATA

    initdb-D$STANDBY

  • 在主节点中,创建用于复制的用户。我在pgAdmin中这样做(它确实具有超级用户权限)

  • 在pg_hba.conf的主节点中,添加允许待机连接的部分:

  • host replication repuser 127.0.0.1/0 md5

  • 在postgresql.conf集合的主节点中:
  • max\u wal\u senders=1

    archive\u mode=on

    archive\u命令='cp%p~/postgresql/backup/archivedir/%f'

    wal\u level=archive

    wal\u keep\u segments=32

  • 启动主节点并执行基本备份:
  • psql-d dellstore2-c“选择pg\u启动\u备份('backup for replication',true)”

    rsync-av${PGDATA}/$STANDBY——不包括postmaster.pid

    psql-d dellstore2-c“选择pg\u stop\u backup()”

    pg_stop_备份说一切正常,所有WAL文件都存档了

  • 在备用(data2)节点中,我使用以下命令创建recovery.conf:
  • 待机模式='on'

    primary\u conninfo='host=127.0.0.1 port=5432 user=repuser password=haslo'

    trigger\u file='/home/michau/postgresql/replication.trigger'

    restore\u命令='cp/home/michau/postgresql/backup/archivedir/%f“%p”

  • 启动主节点,然后启动备用节点—复制应该启动,备用节点应该赶上主节点。这正是第一次发生的事情。 现在,当我启动待机时,我得到:“地址已在使用”错误。 当然,standby和master都具有postgresql.conf中指定的相同端口(它们具有完全相同的postgresql.conf文件)。如果我将待机状态下的端口更改为5433,则会得到:
  • 日志:数据库系统在2012-06-12 19:48:01 CEST恢复时关闭

    LOG:进入待机模式

    cp:cannot stat/home/michau/postgresql/backup/archivedir/0000000 100000000000007:没有这样的文件或目录

    LOG:在0/700070时达到一致恢复状态

    LOG:0/700070处长度为零的记录

    cp:cannot stat/home/michau/postgresql/backup/archivedir/0000000 100000000000007:没有这样的文件或目录

    LOG:流式复制已成功连接到主服务器

    LOG:redo从0/700070开始

    它就挂在这里。运行ps-ef | grep postgresql产生:

    michau 24911898 0 19:46分/0 00:00:00 postgres-D/home/michau/postgresql/9.1/data

    michau 24932491019:46?00:00:01 postgres:编写程序

    michau 24942491019:46?00:00:00 postgres:wal writer进程

    michau 24952491019:46?00:00:00 postgres:自动真空发射器过程

    michau 24962491019:46?00:00:00 postgres:archiver进程最后一次是0000000 100000000000008

    michau 24972491019:46?00:00:00 postgres:stats收集器进程

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

    michau 25722571019:49?00:00:01 postgres:启动进程恢复0000000 100000000000009

    michau 2575 2571 0 19:49?00:00:01 postgres:编写程序

    michau 2578 2571 0 19:49?00:00:02 postgres:wal接收器处理流式处理0/99782DC

    michau 25792491019:49?00:00:00 postgres:wal发件人处理repuser 127.0.0.1(42142)流式处理0/99782DC

    michau 25862491019:51?00:00:00 postgres:michau postgres::1(49941)空闲

    michau 25872491019:51?00:00:01 postgres:michau dellstore2::1(49942)空闲

    正在恢复的100000000009会有一段时间发生变化,但半个小时后不会再发生变化


    我肯定有一些事情是我第一次做的,没有写下来,但我完全不知道那是什么。非常感谢您的帮助。

    您的待机状态正在持续恢复,这正是PostgreSQL中流式复制的工作方式。您是否能够登录到待机状态并运行查询?如果是这样的话,恭喜你,它正在发挥作用。如果没有,请发布发生的情况。

    我完成了您上面发布的步骤,得到了您发布的确切错误,但我能够解决问题

    我试图将您的步骤与此站点中发布的步骤合并

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

    • 先删除备用服务器中的所有文件和文件夹,然后从主服务器重新同步这些文件和文件夹
    • 在master的postgresql.conf中,将wal_级别设置为hot_standby而不是archive,并将hot_standby设置为on

    我想你会有更多的机会在“谢谢”上找到答案,我不知道有这样的事情存在。