posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

PostgreSQL 10 主从同步配置

Posted on 2020-08-27 17:06 魔のkyo 阅读(813) 评论(0)  编辑 收藏 引用
我进行的配置有:
改大wal_keep_segments值到64,即保留1GB的WAL缓存
主库的postgresql.conf文件中:
archive_mode = on
archive_command = 'rsync -zaq %p postgres@pg-slave:/var/lib/postgresql/wal_restore/%f && test ! -f /var/lib/postgresql/archivedir/%f && cp %p /var/lib/postgresql/archivedir/%f'
备库的recovery.conf文件中:
结尾追加
restore_command = 'cp /var/lib/postgresql/wal_restore/%f %p'
archive_cleanup_command = 'pg_archivecleanup /var/lib/postgresql/wal_restore/ %r'
归档命令不加入rsync也可以,只需要在建立主从同步时手动把完整同步之后的归档复制到从库,比如复制最近一天内修改过的归档
cd /var/lib/postgresql/archivedir find -mtime -1|xargs -n 1 -I{} scp /var/lib/postgresql/archivedir/{} postgres@192.168.1.150:/var/lib/postgresql/wal_restore/
其中核心就是红字部分,即用主库的归档来还原从库
相当于整体上从库建立起同步需要的数据 = 完整备份 + 归档文件 + WAL缓存主服务器:192.168.1.99
从服务器:192.168.1.150
在主服务器上:
在主服务器创建repl用户
CREATE ROLE repl login replication password 'd71ea3';
配置repl用户访问权限
vim /etc/postgresql/10/main/pg_hba.conf
host replication repl 192.168.1.150/32 md5
配置主服务器
vim /etc/postgresql/10/main/postgresql.conf
wal_level = replica max_wal_senders = 10 wal_keep_segments = 16 wal_sender_timeout = 60s
重启服务
service postgresql restart
在从服务器上:
停止服务
service postgresql stop
删除所有数据
cd /var/lib/postgresql/10/main
rm -rf *
配置从服务器
vim /etc/postgresql/10/main/postgresql.conf
hot_standby = on
切换到postgres用户
sudo su - postgres
从主服务器创建初始备份,上面切换用户就不用调整文件权限了
pg_basebackup -h 192.168.1.99 -U repl -D /var/lib/postgresql/10/main -F p -X stream -P -R -p 5432
Password: d71ea3
会自动生成 recovery.conf 启动之后会读取里面的配置进行主从同步
切回root
sudo su -
启动服务
service postgresql start

补充:

FATAL: requested WAL segment00800002A0 has already been removed

我进行的配置有:
改大wal_keep_segments值到64,即保留1GB的WAL缓存
主库的postgresql.conf文件中:
archive_mode = on
archive_command = 'rsync -zaq %p postgres@pg-slave:/var/lib/postgresql/wal_restore/%f && test ! -f /var/lib/postgresql/archivedir/%f && cp %p /var/lib/postgresql/archivedir/%f'
备库的recovery.conf文件中:
结尾追加
restore_command = 'cp /var/lib/postgresql/wal_restore/%f %p'
archive_cleanup_command = 'pg_archivecleanup /var/lib/postgresql/wal_restore/ %r'
归档命令不加入rsync也可以,只需要在建立主从同步时手动把完整同步之后的归档复制到从库,比如复制最近一天内修改过的归档
cd /var/lib/postgresql/archivedir find -mtime -1|xargs -n 1 -I{} scp /var/lib/postgresql/archivedir/{} postgres@192.168.1.150:/var/lib/postgresql/wal_restore/
其中核心就是红字部分,即用主库的归档来还原从库
相当于整体上从库建立起同步需要的数据 = 完整备份 + 归档文件 + WAL缓存


只有注册用户登录后才能发表评论。