PostgreSQL 10 主从同步配置
主服务器:192.168.1.99
从服务器:192.168.1.150
配置主服务器
在主服务器创建repl用户
1 | CREATE ROLE repl login replication password 'd71ea3'; |
配置repl用户访问权限
1 | vim /etc/postgresql/10/main/pg_hba.conf |
1 | host replication repl 192.168.1.150/32 md5 |
配置主服务器
1 | vim /etc/postgresql/10/main/postgresql.conf |
1 | wal_level = replica |
归档命令不加入rsync也可以,只需要在建立主从同步时手动把完整备份之后的归档复制到从库,后面配置从库时候会提到。
我实际使用的归档命令还加入了自动删除旧数据
1 | archive_command = 'DIR=/var/lib/postgresql/archivedir; test ! -f $DIR/%f && cp --preserve=timestamps %p $DIR/%f; find $DIR -type f -mtime +31|xargs rm -f' |
重启服务
1 | service postgresql restart |
配置从服务器
停止服务
1 | service postgresql stop |
删除所有数据
1 | cd /var/lib/postgresql/10/main |
配置从服务器
1 | vim /etc/postgresql/10/main/postgresql.conf |
1 | hot_standby = on |
切换到postgres用户
1 | sudo su - postgres |
在从服务器上从主服务器创建初始备份,上面切换用户是为了不用调整文件权限
1 | 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 启动之后会读取里面的配置进行主从同步
编辑recovery.conf 在结尾追加
1 | restore_command = 'cp /var/lib/postgresql/wal_restore/%f %p' |
切回root
1 | sudo su - |
回到主服务器,如果前面主服务器归档命令没有加入rsync,那么我们现在在主服务器上 复制最近一天内修改过的归档文件到从服务器
1 | cd /var/lib/postgresql/archivedir |
相当于整体上从库建立起同步需要的数据 = 完整备份 + 归档文件 + WAL缓存
从服务器启动服务
1 | service postgresql start |
从主服务器查看从服务器同步状态
1 | select application_name, sync_state from pg_stat_replication; |