PostgreSQL主备环境搭建

PG学习初体验--源码安装和简单命令(r8笔记第97天)

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

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

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

1

3

安装部署数据库软件

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

1)解压

tar -zxvf postgresql-9.5.0.tar.gz

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

cd postgresql-9.5.0

./configure -prefix /usr/local/pgsql

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

configure: error: zlib library not found

If you have zlib already installed, see config.log for details on the

failure. It is possible the compiler isn't looking in the proper directory.

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的源码编译要快很多。

make

make install

4)创建用户和组

useradd postgres

mkdir -p /data/pgsql9.5

chown -R postgres:postgres /data/pgsql9.5

su - postgres

5)初始化部署

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

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

2

3

配置主库

使用的环境是两台服务器

192.168.179.128 主库

192.168.253.134 备库

1)创建一个复制角色

CREATE ROLE replica login replication encrypted password 'replica';

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

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

host replication replica 192.168.253.134/24 trust

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

host replication replica 192.168.179.1/24 trust

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

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

listen_addresses = '*"

port = 5432

wal_level = hot_standby

max_wal_senders = 2

wal_keep_segments = 32

wal_sender_timeout =60s

max_connections =100

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

4)重启PG

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

3

3

配置备库

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

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

$ psql -Ureplica -h192.168.179.128 -p5432 --password

Password for user replica:

psql: FATAL: no pg_hba.conf entry for host "192.168.179.1", user "replica", database "replica"

1)使用pg_basebackup还原数据

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

$ pg_basebackup -F p --progress -D /data/pgsql9.5 -h 192.168.179.128 -p 5432 -U replica --password

Password:

22484/22484 kB (100%), 1/1 tablespace

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文件可以从模板里拿到:

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

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

standby_mode = on

primary_conninfo = 'host=192.168.179.128 port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

trigger_file = '/data/pgsql9.5/trigger_activestb'

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

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

listen_addresses = '*'

port = 5432

wal_level = minimal

max_wal_senders = 0

wal_keep_segments = 0

max_connections = 1000

synchronous_commit = off

synchronous_standby_names = ''

hot_standby = on

max_standby_streaming_delay = 30

wal_receiver_status_interval = 1s

hot_standby_feedback = on

4)启动PG备库

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

5)查看复制状态

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

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication; 
-[ RECORD 1 ]----+------------------------------
pid              | 20539
usesysid         | 16384
usename          | replica
application_name | walreceiver
client_addr      | 192.168.179.1
client_hostname  | 
client_port      | 49374
backend_start    | 2018-03-25 05:19:15.215181+08
backend_xmin     | 1756
state            | streaming
sent_location    | 0/302F600
write_location   | 0/302F600
flush_location   | 0/302F600
replay_location  | 0/302F600
sync_priority    | 0
sync_state       | async

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-03-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成长之路

线程的实现方式

本文主要介绍线程的3种实现方式和java线程的实现方式。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配 和执行调度分开,各个进程既可以...

1235
来自专栏Java工程师日常干货

【SpringBoot专题】监控健康状况前言监控插件:actuatorSpring Boot Admin:可视化后台管理系统总结

想一想,我们以前是如何监控一个Java应用的监控状况的?一般而言,我们会在Linux服务器上通过一些命令,比如通过jstat来统计堆内存的使用情况/垃圾回收的情...

4872
来自专栏吴伟祥

FinderWeb2.4.9 程序员的看日志利器

http://www.finderweb.net/download/finder-web-2.4.9.war

1942
来自专栏后端技术探索

让nginx更安全的几点注意事项

Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器,我愿意部署它。 下面是一个常见安全...

792
来自专栏Seebug漏洞平台

DeDeCMS v5.7 密码修改漏洞分析

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的...

4628
来自专栏PHP在线

单点登录方案[学习]

引子 昨天在网上看到一个帖子,帖子的内容大概是说领导要求一个苦B程序员实现一个单点登录的系统,将各个业务系统联系起来,但不能修改其他业务系统的源码。 其实,在企...

44615
来自专栏Linyb极客之路

如何打造一个高并发,处理海量数据,高性能,易扩展,可伸缩,高可用的网站?

简而言之,采用分布式系统,分布式应用和服务,分布式数据和存储,分布式静态资源,分布式计算,分布式配置和分布式锁。

1713
来自专栏PHP实战技术

想要成为Linux大神,你应该和我一样这样做!

大神终究是孤独的,在Linux这条路上,有太多的人,而我们走着走着就分离了,我们在各自的道路上按照我们自己的方法去寻找着属于我们的道路,属于我们的那一片领土! ...

3308
来自专栏Youngxj

最新Kangle一键安装脚本免费发布PHP5.2-7.0

5476
来自专栏tiane12

由于Mysql产生大量日志文件导致的502 Bad Gateway错误解决方法

1882

扫码关注云+社区