基础信息
PostgreSQL
版本:10.4
主库db:master 监听端口5432
备库db:slave 监听端口5432
机器信息
1 | # cat /etc/redhat-release |
配置主库
创建复制用户
1 | CREATE USER repl REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD 'xxxxx'; |
创建.pgpass
1 | su postgres |
配置pg_hba.conf
增加如下信息
1 | host replication repl slave trust |
配置postgresql.conf
主要配置信息
1 | wal_level = replica # 增加wal归档信息,包括只读服务器需要的信息 |
重启数据库
1 | systemctl restart postgresql-10.service |
配置备库
创建.pgpass
1 | su postgres |
使用pg_backendup生成备库
-D 为备库的数据目录
1 | su postgres |
这时表空间目录和$PGDATA目录已经复制过来了
配置备库recovery.conf
首先执行如下命令生成recovery.conf文件
1 | find / -name "recovery.conf.sample" |
然后在recovery.conf中添加如下内容
1 | recovery_target_timeline = 'latest' |
启动备库
1 | systemctl start postgresql-10.service |
测试主备同步
执行如下命令查看备库进程中有”postgres: wal receiver process”,确认主库中进程有”postgres: wal sender process”
1 | ps -ef | grep postgres |
进入测试数据库testdb,主库上执行如下命令返回f,备库上返回t
1 | select pg_is_in_recovery(); |
执行如下命令查看快照,它返回主库记录点、备库记录点;主库每增加一条写入,记录点的值就会加1。
1 | testdb=# select txid_current_snapshot(); |
在主库执行如下命令可以查看主备同步状态。
1 | select * from pg_stat_replication; |
字段state显示的同步状态有:startup(连接中)、catchup(同步中)、streaming(同步);字段sync_state显示的模式有:async(异步)、sync(同步)、potential(虽然现在是异步模式,但是有可能升级到同步模式)
主库执行创建数据库
1 | postgres=# create database testdb; |
备库查看数据库已经同步成功
1 | testdb=# \l |
参考
1. https://www.postgresql.org/docs/10/static/warm-standby.html#STREAMING-REPLICATION
2. https://www.mtyun.com/library/postgresql-stream-replication
3. https://dreamer-yzy.github.io/2015/01/24/-翻译-手把手教你配置流复制/
4. https://www.jianshu.com/p/12bc931ebba3