背景:出于各种原因,我将 PostgreSQL Slave 从流复制切换到热备用复制。
使用本指南设置流复制:http: //technology.trapeze.com/journal/postgresql-streaming-replication-ubuntu-1004/
要切换到热备用:我在此处 (1) https://wiki.postgresql.org/wiki/Warm_Standby和此处 (2) http://www.postgresql.org/docs/遵循有关热备用的说明当前/静态/pgstandby.html
我发现在从属服务器上的日志文件pg_xlog/
比在 wal_archive/ (从主服务器发送的文件)中更多。这怎么可能?我认为这阻碍了我的温暖设置。
- 在Master的/var/lib/postgresql/9.3/main/pg_xlog/中,我有从000000010000000000000001到00000001000000000000001A.backup到00000001000000000000001C的文件
- 在 /var/lib/postgresql/wal_archive/ 的Slave我有文件从 000000010000000000000001 到 00000001000000000000001A.backup 到 00000001000000000000001B
- 在 /var/lib/postgresql/9.3/main/pg_xlog/ 的Slave我有文件从 00000001000000000000001C 到 000000010000000000000023
recovery.conf
包含:
restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5442 [/wal_archive] %f %p %r 2>>standby.log'
当我重新启动从属设备时,它抱怨它缺少xxx1C
日志文件
第一个问题,Slave 怎么可能拥有pg_xlog/
比 Master 更多的日志文件?
第二个问题,在热备模式下重新同步服务器:我是否必须pg_basebackup
再次(基本上复制主服务器/data
和/pg_xlog
目录)到从服务器?
只是想了解 PostgreSQL :) 在此先感谢!!
我在这里发现了一个非常相似的问题,似乎从未得到回答:http ://www.postgresql.org/message-id/CAE7ByhgTJ6xOe4f3aa42Kn0_5gfEzWW1F[email protected]
将主服务器上的 WAL 归档到某个外部位置的全部目的是让主服务器将其删除以释放其 中的空间
pg_xlog
,而副本可能仍需要它。pg_xlog
如果副本由于无法跟上重放速度而落后于主副本,则副本可以拥有比主副本和更旧的存档更多的存档。但是,pg_standby
这种情况不应该发生 -存档可能包含更多 xlog,但副本应该只按需读取它们。很难具体说明,因为您给出了问题的广泛描述而不是实际的目录列表,并且没有解释您设置副本所遵循的确切步骤。或者显示副本的确切日志文件输出。所以我能做的最好的就是“听起来副本设置被破坏了”。
假设这里
/data
是主数据目录,包含global
、base
、pg_clog
等,这pg_xlog
是来自不同磁盘的事务日志:是的,没错。但是,您必须使用该
pg_basebackup
命令,或者按照手册中的说明使用pg_start_backup()
和 rsync/cp 进行正确的文件系统级副本。您还必须确保首先停止了副本。在它运行时覆盖它的 datadir 会让它非常不安。
流式复制与热备用
热备与热备与流式与日志传送复制正交。
您要做的是使用日志传送而不是流式复制。副本是热备用还是热备用,即它是否接受查询,这无关紧要。
就我个人而言,我建议同时使用这两种方法 - 使用流式传输,如果流式传输存在问题,则回退到日志传送。如果两者都配置了,PostgreSQL 会自动执行此操作。