我已使用以下存档命令启用了WAL存档:
wal_keep_segments = 32
archive_mode = on
archive_command = 'gzip < %p > /mnt/nfs/archive/%f'
并且在Slave上我将恢复命令作为:
restore_command = 'gunzip < /mnt/nfs/archive/%f > %p'
archive_cleanup_command = '/opt/PostgreSQL/9.4/bin/pg_archivecleanup -d /mnt/nfs/archive %r'
在Master上我可以看到许多文件被卡住了。大约327个文件尚未归档。理想情况下,它应该只有32。
px命令显示:
-bash-4.1$ ps x
PID TTY STAT TIME COMMAND
3302 ? S 0:00 /opt/PostgreSQL/9.4/bin/postgres -D /opt/PostgreSQL/9.4/data
3304 ? Ss 0:00 postgres: logger process
3306 ? Ss 0:09 postgres: checkpointer process
3307 ? Ss 0:00 postgres: writer process
3308 ? Ss 0:06 postgres: wal writer process
3309 ? Ss 0:00 postgres: autovacuum launcher process
3311 ? Ss 0:00 postgres: stats collector process
3582 ? S 0:00 sshd: postgres@pts/1
3583 pts/1 Ss 0:00 -bash
3628 ? Ss 0:00 postgres: archiver process archiving 000000010000002D000000CB
3673 ? S 0:00 sh -c gzip < pg_xlog/000000010000002D000000CB > /mnt/nfs/archive/000000010000002D000000CB
3674 ? D 0:00 gzip
3682 ? S 0:00 sshd: postgres@pts/0
3683 pts/0 Ss 0:00 -bash
4070 ? Ss 0:00 postgres: postgres postgres ::1(34561) idle
4074 ? Ss 0:00 postgres: postgres sorriso ::1(34562) idle
4172 pts/0 S+ 0:00 vi postgresql.conf
4192 pts/1 R+ 0:00 ps x
-bash-4.1$ ls | wc -l
327
-bash-4.1$
答案 0 :(得分:0)
gzip
和gunzip
期望使用文件,就地压缩或解压缩它们。您正在尝试将它们用作流处理器。那不行。
您想使用gzip -c
和zcat
(或gunzip -c
)告诉他们使用stdio。
此外,您应该使用一个简单的脚本作为archive_command
:
gzip -c
写入临时文件mv
这确保副本不会读取文件,直到主文件完全写入该文件。
此外,除非主服务器和副本服务器共享相同的网络文件系统(或者两者都在同一主机上),否则实际上可能需要使用scp
或类似工具来传输存档文件。 restore_command
使用副本上的路径,而不是主服务器上的路径,因此除非副本服务器可以通过NFS / CIFS / etc访问WAL存档,否则您将需要复制文件。