由于工作需要,最近开始接触各种数据库,并尝试各种数据库产品的高可用方案。今天分享的是postgresSQL的主从配置,其实还是蛮简单的,跟随本文的步骤,保证能实现PG主从的搭建。
1. 安装环境
192.168.0.136 主库
192.168.0.160 从库
PORT: 5432
USR: postgres
2. 主库已经运行一段时间,检查主库的version,保证主从数据库的version相同。
# psql --version
psql (PostgreSQL) 9.4.11
# rpm -qa|grep postgres
postgresql94-libs-9.4.11-1PGDG.rhel6.x86_64
postgresql94-server-9.4.11-1PGDG.rhel6.x86_64
postgresql94-9.4.11-1PGDG.rhel6.x86_64
3. 在从库上安装相同版本的软件
检查安装情况,已经安装和primary相同的软件版本
# rpm -qa|grep postgres
postgresql94-libs-9.4.11-1PGDG.rhel6.x86_64
postgresql94-server-9.4.11-1PGDG.rhel6.x86_64
postgresql94-9.4.11-1PGDG.rhel6.x86_64
4. 查询主库的数据库位置
# su - postgres
$ echo $PGDATA
/var/lib/pgsql/9.4/data
$ cd /var/lib/pgsql/9.4/data
$ ls
base pg_clog pg_hba.conf pg_log pg_multixact
pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION
postgresql.auto.conf postmaster.opts global pg_dynshmem pg_ident.conf
pg_logical pg_notify pg_serial pg_stat pg_subtrans
pg_twophase pg_xlog postgresql.conf postmaster.pid
确认配置文件位置
postgres=# show config_file;
config_file
-----------------------------------------
/var/lib/pgsql/9.4/data/postgresql.conf
查看数据文件目录
postgres=# show data_directory;
data_directory
-------------------------
/var/lib/pgsql/9.4/data
5. 准备修改主库的参数文件,先查询一下pg_hba.conf已有的参数内容
$ cat pg_hba.conf|grep -v '^#'
local all all peer
host all all 0.0.0.0/0 trust
host all all ::1/128 ident
6. 在主库的pg_hba.conf中添加
$ more pg_hba.conf
host replication replica 192.168.0.160 md5
这样,就设置了replica这个用户可以从192.168.0.160 对应的网段进行流复制请求。
7. 在主库给postgres设置密码,登录和备份权限。
$psql
postgres# CREATE ROLE replica login replication encrypted password 'replica123'
8. 修改postgresql.conf,注意设置下下面几个地方:
wal_level = hot_standby # 这个是设置主为wal的主机
max_wal_senders = 10 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.4/archive/%f'
9. 创建对应archive log存放路径
mkdir -p /var/lib/pgsql/9.4/archive/
10. 重启主库,让配置生效
# service postgresql-9.4 start
Starting postgresql-9.6 service: [ OK ]
11. 在从库远程连接主数据库,验证replica用户是否可以正常访问
psql -h IP-address -p 5432 dbname usename
psql -h 192.168.0.136 -p 5432 postgres replica
12. 然后在主库做一次基础备份(后面的Hot-standby主要使用data目录下文件):
postgres=# SELECT pg_start_backup('bak20170905');
$tar czvf /var/lib/pgsql/9.4/backups/backup_data.tar.gz.20170905 /var/lib/pgsql/9.4/data
postgres=# SELECT pg_stop_backup();
13. 将备份文件sftp到从库,并解压,替换原有的data目录
cd /var/lib/pgsql/9.4/
mv data data_bk
mv backup_data.tar.gz.20170905 backup_data.tar.gz
tar -xzvf backup_data.tar.gz
14. 删除一些就的身份信息,归档日志文件等
rm -rf data/pg_xlog/
mkdir -p data/pg_xlog/archive_status
rm data/postmaster.pid
15. 查找并拷贝recovery.conf.sample文件到data目录下