|
|
|
|
移动端

PostgreSQL主备环境搭建

关于主备环境的搭建,我使用的基于流复制的方式搭建,这是在PG 9.0之后提供的对WAL传递日志的方法,是基于物理复制,在9.4开始有了逻辑解码,而细粒度的逻辑复制在PG 10中会有较大的改进。

作者:r15笔记第72天来源:杨建荣的学习笔记|2018-03-26 17:40

PostgreSQL主备环境搭建

记得在2年前写过一篇PostgreSQL的文章,当时处于兴趣,本来想在工作中接一下PG的业务,最后因为各种各样的原因就搁置了。

今天整理了下PostgreSQL的一些基础内容,参考的书是唐成老师的那本《PostgreSQL修炼之道》,有了Oracle和MySQL的基础,看起来会比从零开始要容易一些,总体的感觉,PG功能确实很多很全,功能上像Oracle看齐,技术风格和MySQL很像,在做一些总结的时候,不停的在两个数据库之间来回切换。

关于主备环境的搭建,我使用的基于流复制的方式搭建,这是在PG 9.0之后提供的对WAL传递日志的方法,是基于物理复制,在9.4开始有了逻辑解码,而细粒度的逻辑复制在PG 10中会有较大的改进。

1.安装部署数据库软件

安装部署还是得啰嗦几句,使用的是9.5版本的源码安装,源码包很小,就几十兆。

1)解压

  1. tar -zxvf  postgresql-9.5.0.tar.gz 

2)切换到解压目录,尝试编译准备

  1. cd postgresql-9.5.0  
  2. ./configure -prefix /usr/local/pgsql  

这个过程很可能有问题,比如下面的错误。

  1. configure: error: zlib library not found  
  2. If you have zlib already installed, see config.log for details on the  
  3. failure.  It is possible the compiler isn't looking in the proper directory.  
  4. Use --without-zlib to disable zlib support.  

类似的错误还有readline,实际的情况zlib包和readline包都是有的。

这里需要注意一点:

redhat 系列下这个软件包叫  readline-devel     ubuntu 下叫readline-dev    细分又分为libreadline5-dev   和 libreadline6-dev

所以我们需要安装的是readline-devel和zlib-devel的包即可搞定,而不要只是怀疑,然后把--without-zlib选项给启用了。

接下来的步骤就简单了。

3)开始编译安装

这两个过程耗时相对会多一些,大概几分钟吧,比MySQL的源码编译要快很多。

  1. make  
  2. make install  

4)创建用户和组

  1. useradd postgres  
  2. mkdir -p /data/pgsql9.5  
  3. chown -R postgres:postgres /data/pgsql9.5  
  4. su - postgres  

5)初始化部署

  1. /usr/local/pgsql/bin/initdb -D  /data/pgsql9.5 

至此,数据库软件部署就搞定了,在这里我们只做了功能,还没有涉及性能层面的调整和优化。

2.配置主库

使用的环境是两台服务器

192.168.179.128  主库

192.168.253.134  备库

1)创建一个复制角色

CREATE ROLE replica login replication encrypted password 'replica';

2)配置访问权限文件gp_hba.conf

添加一条记录,使得备库可以访问,修改后需要重启

  1. host   replication  replica   192.168.253.134/24   trust 

因为是跨网段,我额外补充了一条网关的记录

  1. host   replication  replica   192.168.179.1/24   trust 

3)修改参数配置文件postgresql.conf

修改如下的几个参数设置,端口还是保留默认的5432

  1. listen_addresses = '*"  
  2. port = 5432  
  3. wal_level = hot_standby  
  4. max_wal_senders = 2  
  5. wal_keep_segments = 32  
  6. wal_sender_timeout =60s  
  7. max_connections =100 

这些步骤完成后,切记要重启一下PG使得配置生效

4)重启PG

  1. $ /usr/local/pgsql/bin/pg_ctl -D /data/pgsql9.5 -l logfile restart 

3.配置备库

备库需要同样的步骤来部署数据库软件,参考第一部分即可。

这个时候备库上还没有初始化数据,我们模拟客户端的方式来访问,可能会有如下的错误。

  1. $ psql -Ureplica -h192.168.179.128 -p5432 --password  
  2. Password for user replica:   
  3. psql: FATAL:  no pg_hba.conf entry for host "192.168.179.1"user "replica"database "replica"  

1)使用pg_basebackup还原数据

先不必担心,我们可以使用pg_basebackup或者命令行的方式来做备份恢复

  1. $ pg_basebackup -F p --progress -D /data/pgsql9.5 -h 192.168.179.128 -p 5432 -U replica --password  
  2. Password:   
  3. 22484/22484 kB (100%), 1/1 tablespace  
  4. NOTICE:  WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup 

2)配置恢复配置recovery.conf

这个步骤是关键,和Oracle里面的归档参数或者和MySQL里的change master的设置类似。

recovery.conf文件可以从模板里拿到:

  1. cp /usr/local/pgsql/share/recovery.conf.sample  /data/pgsql9.5/recovery.conf 

recovery.conf文件的内容改动参考如下:

  1. standby_mode = on  
  2. primary_conninfo = 'host=192.168.179.128 port=5432 user=replica password=replica'  
  3. recovery_target_timeline = 'latest'  
  4. trigger_file = '/data/pgsql9.5/trigger_activestb' 

3)修改参数文件postgresql.conf的配置

postgresql.conf文件的内容修改如下,配置和主库差别较大,需要注意。

  1. listen_addresses = '*'  
  2. port = 5432  
  3. wal_level = minimal  
  4. max_wal_senders = 0  
  5. wal_keep_segments = 0  
  6. max_connections = 1000  
  7.  
  8.  
  9. synchronous_commit = off  
  10. synchronous_standby_names = ''  
  11. hot_standby = on  
  12. max_standby_streaming_delay = 30  
  13. wal_receiver_status_interval = 1s  
  14. hot_standby_feedback = on  

4)启动PG备库

  1. $ /usr/local/pgsql/bin/pg_ctl -D /data/pgsql9.5 -l logfile start 

5)查看复制状态

可以在主库端查看复制状态,参考pg_stat_replication视图,在查看的过程中,这个视图字段较大,看起来会有些乱,我们可以使用类似MySQL \G的方式来查看,即\x的扩展模式。

  1. postgres=# \x  
  2. Expanded display is on 
  3. postgres=# select * from pg_stat_replication;   
  4. -[ RECORD 1 ]----+------------------------------  
  5. pid              | 20539  
  6. usesysid         | 16384  
  7. usename          | replica  
  8. application_name | walreceiver  
  9. client_addr      | 192.168.179.1  
  10. client_hostname  |   
  11. client_port      | 49374  
  12. backend_start    | 2018-03-25 05:19:15.215181+08  
  13. backend_xmin     | 1756  
  14. state            | streaming  
  15. sent_location    | 0/302F600  
  16. write_location   | 0/302F600  
  17. flush_location   | 0/302F600  
  18. replay_location  | 0/302F600  
  19. sync_priority    | 0  
  20. sync_state       | async   

【编辑推荐】

  1. 以MySQL为例,带你从原理上理解那些所谓的数据库军规
  2. StackOverflow 调查:2018 年最流行的数据库分析
  3. 2018年数据库流行度排行榜出炉,Oracle居然没有进前三!
  4. PostgreSQL里面的一些命令小结
  5. 几类关系型数据库的数据解决方案
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Visual C++编程从基础到实践

Visual C++ 6.0是Microsoft公司的Visual Studio开发组件中最强大的编程工具,利用它可以开发出高性能的应用程序。本书由浅入深,从基础到实...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊