生命不息,test不止。

最近组里面修改了几个postgresql的bug,要进行回归测试,除了前面提到的WAL的RT测试和Mirroring Controller的RT测试,还要测试下postgresql的hot standby功能。

要进行该项测试,就要首先搭建hot standby环境。

本文主要记录下搭建hot standby环境的过程以及其中遇到的问题及解决方法。

首先介绍下系统环境:

操作系统:RHEL_6_x64
postgresql版本:9.5.4

首先至少要有两台机器,其次这两台机器都安装了postgresql(postgresql的编译安装见本人的这篇博客)。当然了,postgres账号也是要的。还有一些基础的软件包也是要安装的,这里不赘述了。

好的言归正传,进入hot standby环境的搭建。

我的实例环境如下:

主服务器:IP(192.168.2.130) 数据目录(/home/postgres/data)

从服务器:IP(192.168.2.128) 数据目录(/file1/database/data)

1 建立主数据库

mkdir -p /home/postgres/data                        #创建放置数据库的文件夹
initdb –D /home/postgres/data #初始化数据库

修改data文件夹下的postgresql.conf文件:


listen_addresses = '0.0.0.0'
port = 54321 #设置监听端口,只要不冲突即可
wal_level = hot_standby
max_wal_senders = 30

修改data/pg_hba.conf

host    replication     postgres             192.168.2.0/24         trust

注意,我这样是允许192.168.2.0/24这个网段的主机都可以连接到本台服务器。

如果你想指定某个特定用户,用xxx.xxx.xxx.xxx/32即可。


2 启动主数据库

输入以下命令启动数据库:

pg_ctl -D /file1/database/data -l logfile  start

输入命令后应该会显示以下消息:

我们测试下数据库是否启动成功:

psql -d postgres

如下图所示

说明数据库成功启动!


3 数据备份

数据备份的话有两种方法,一种是停库备份,即先让数据库进入备份模式再将数据库目录复制过去,另外一种是使用pg_basebackup命令,不用进入备份模式。

3.1 基础备份方式

进入psql命令行,执行:

postgres=# select pg_start_backup('databackup',true);

使用这个命令后,所有请求在写日志之后不会再刷新到磁盘。直到执行pg_stop_backup()这个函数。

这个时候就把主数据库上的data目录拷贝到从数据库上吧。

你可以直接拷贝过去,也可以使用scp命令:

scp -r /home/postgres/data postgres@192.168.2.128:/file1/database/



这里输入192.168.2.128上的postgres用户的密码。

拷贝过去后,例如拷贝到/file1/database/data目录,那么在从库的data目录下,修改postgresql.conf文件:

port = 54321       #改成你想要的端口,不一定要和主库一样
hot_standby = on #

同时,在从库的目录下增加一个recovery.conf文件,这个文件的模板可以在从库服务器的postgresql的安装目录下找到。修改recovery.conf文件:

standby_mode = on
primary_conninfo = 'host=192.168.2.130(就是主数据库的IP) port=54321(主数据库监听端口) user=postgres(登录用户)'

括号里的东西只是提示,不要真的写进文件哦~

最后,要删除从库目录下的postmaster.pid文件:

rm -f postmaster.pid

然后切换回主数据库,在psql命令行输入:

postgres=# select pg_stop_backup();

退出备份模式。

是不是感觉很麻烦,所以我推荐下面这种方法。

3.2 使用pg_basebackup命令备份

pg_basebackup命令是postgresql 9.x之后才有的命令,具体命令的语法和各个参数的意义见用户手册

在从数据库上的数据库目录(/file1/database/data)下使用pg_basebackup命令备份:

pg_basebackup -h 192.168.2.130 -U postgres -F p -P -x -R -D /file1/database/data -l backup20161021

拷贝完毕后,修改从库的postgresql.conf文件:

port = 54321       #改成你想要的端口,不一定要和主库一样
hot_standby = on #

因为在pg_basebackup命令中使用了-R参数,所以生成了recovery.conf文件,不需要我们再制作了。

这就OK了。


4 启动从数据库

在从库上使用pg_ctl 命令:

pg_ctl -D /file1/data  -l logfile start

这样环境就搭好了。

这里演示的是一台主数据库,一台从数据库的hot standby的环境搭建。你要搭建多个从服务器的话操作也是类似,这里不再赘述。

5 要注意的问题(坑)

5.1 环境变量

环境变量要设置好,例如:

PGPORT(数据库的监听端口)
PATH(可执行文件的路径)
LD_LIBRARY_PATH(链接库的路径)
PGDATA(数据库文件路径)

不设置好的话,可能会报一些奇怪的错误。

2016.11.14补充:请记得数据库文件夹的访问权限必须是700,否则服务无法启动!

5.2 参数设置

这里主要是指postgresql.conf文件和pg_hba.conf文件。这里面设置了postgresql里面大多数重要的参数。

一般在修改后要重启数据库或者reload下配置文件:

pg_ctl reload

5.3 操作顺序

还是建议严格按照操作顺序进行环境的搭建,尤其是在数据备份操作时尤其要小心,否则会导致很多“奇怪”的错误,尤其是WAL日志和archive的错误,这也是楼主走过的坑,希望大家不要再趟。还有最好使用脚本来进行操作,避免在大量重复的操作中出错,这里也引用一篇相关文章好了:

PostgreSQL系统级冷备份和archive备份(shell文件)

6 展望

本次简单的搭建了postgresql的异步流复制hot standby的环境,实际还有同步流复制,主备份切换等,这个留在后面的博客里面再写吧。

postgresql数据库异步流复制hot standby环境搭建的更多相关文章

  1. postgresql 异步流复制hot standby搭建

    先说说环境,主从库版本都是9.5,主库在CentOS物理机上,从库在Ubuntu虚拟机上 一.主库上的操作: 1.添加同步访问规则: host   replication     dbuser     ...

  2. Postgressql高可用(pgpool+异步流复制)

    文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...

  3. PostgreSQL主备流复制机制

    原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...

  4. Postgresql 9.6 搭建 异步流复制 和 同步流复制 详细教程

    Basic Replication If you’re feeling overwhelmed, try setting up a slave to see how easy it is! We’ll ...

  5. PostgreSQL异步主从流复制搭建

    1 总体规划   Master库 Slave库 操作系统 CentOS Linux release 7.5.1804 CentOS Linux release 7.5.1804 处理器 1 1 内存 ...

  6. 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署

    前言 在MySQL被收购之后,虽然有其替代品为: MariaDB,但是总感觉心里有点膈应.大家发现了另一款开源的数据库: PostgreSQL. 虽然centos自带版本9.2也可以用,但是最近的几次 ...

  7. 使用 Bitnami PostgreSQL Docker 镜像快速设置流复制集群

    bitnami-docker-postgresql 仓库 源码:bitnami-docker-postgresql https://github.com/bitnami/bitnami-docker- ...

  8. PostgreSQL流复制记录

    参考了别人的部分,添加了自己在实践中的内容,仅做记录. 1.同步流复制中 主机操作 1.1postgresql.conf wal_level = hot_standby # 这个是设置主为wal的主机 ...

  9. 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……

    热门资讯 1.Stackoverflow 2020年度报告出炉!开发者最喜爱的数据库是什么?[摘要]2020年2月,近6.5万名开发者参与了 Stackoverflow 的 2020 年度调查,这份报 ...

随机推荐

  1. hadoop 小知识点

    ------------------------------------------- 配置hadoop的最小blocksize,必须是512的倍数. [hdfs-site.xml] dfs.name ...

  2. linux rz -e

    linux shell rz和sz是终端下常用的文件传输命令,rz和sz通过shell被调用,其中rz用于从启用终端的系统上传文件到目标系统(终端登录的目标系统), 这里不过多介绍这些命令,只是记录一 ...

  3. ansible基本使用

    ansible介绍 基础概念 ansible是个配置管理工具,可以批量处理一些任务.ansible只需要依赖ssh即可使用,而不需要在受管主机上安装客户端工具. ansible具有幂等性,即以结果为导 ...

  4. Java字节码

    Java字节码 javap -c 反编译.class文件可得字节码 知乎讨论https://www.zhihu.com/question/27831730 栈和局部变量操作 将常量压入栈的指令 aco ...

  5. Uboot详细解析2

    1.第二阶段的主线函数位于u-boot-2010.06/arch/arm/lib/board.c. 第二阶段的功能: <1> 初始化本阶段要使用到的硬件设备. 设置时钟.初始化串口. bo ...

  6. Jsp页面中的中文乱码问题解决

    Jsp页面中的中文乱码问题解决 在编写Jsp页面的时候,发现写入其中的中文在浏览器浏览的时候会出现乱码的情况. 出现乱码的原因分析: 因为页面中对自己的编码格式的声明和页面的实际编码格式不相同,而浏览 ...

  7. Redis搭建(三):哨兵模式

    一.sentinel介绍 Redis 2.8中提供了“哨兵”工具来实现自动化的系统监控和故障恢复功能. Redis 2.6 版也提供了哨兵工具,但此时的哨兵是1.0版,存在非常多的问题,任何情况下都不 ...

  8. centos7 qt之程序编译 cant start process “cmake”

    之所以出现这个问题,是由于qt内置的cmake与系统已安装的cmake命令冲突.解决的方法是,在build里将cmake命令加上绝对路径. 问题得以解决.

  9. Adam:一种随机优化方法

    我们介绍Adam,这是一种基于一阶梯度来优化随机目标函数的算法. 简介: Adam 这个名字来源于 adaptive moment estimation,自适应矩估计.概率论中矩的含义是:如果一个随机 ...

  10. 构造方法概念,自定义构造(init)方法的用途, 类工厂方法(就是直接用类名 类调用)

    一. 构造方法 构造方法:在OC中init开头的方法, 我们称之为构造方法 构造方法的用途: 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值 // 比如我们定义一个Person的类,然后 ...