PostgreSQL stream repication can implement between FreeBSD and CentOS

环境 : 

主节点

CentOS 5.8 x64
PostgreSQL 9.3.2
编译器 : gcc
pg_config
BINDIR = /opt/pgsql9.3.2/bin
DOCDIR = /opt/pgsql9.3.2/share/doc
HTMLDIR = /opt/pgsql9.3.2/share/doc
INCLUDEDIR = /opt/pgsql9.3.2/include
PKGINCLUDEDIR = /opt/pgsql9.3.2/include
INCLUDEDIR-SERVER = /opt/pgsql9.3.2/include/server
LIBDIR = /opt/pgsql9.3.2/lib
PKGLIBDIR = /opt/pgsql9.3.2/lib
LOCALEDIR = /opt/pgsql9.3.2/share/locale
MANDIR = /opt/pgsql9.3.2/share/man
SHAREDIR = /opt/pgsql9.3.2/share
SYSCONFDIR = /opt/pgsql9.3.2/etc
PGXS = /opt/pgsql9.3.2/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/pgsql9.3.2' '--with-pgport=5432' '--with-perl' '--with-python' '--with-tcl' '--with-openssl' '--with-pam' '--without-ldap' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--with-wal-blocksize=16'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE -I/usr/include/libxml2
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL = -fpic
LDFLAGS = -L../../../src/common -Wl,-rpath,'/opt/pgsql9.3.2/lib',--enable-new-dtags
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lpgcommon -lxslt -lxml2 -lpam -lssl -lcrypto -lz -lreadline -ltermcap -lcrypt -ldl -lm
VERSION = PostgreSQL 9.3.2

standby 节点

FreeBSD 10 x64
PostgreSQL 9.3.4
编译器 : cc
pg_config
BINDIR = /opt/pgsql9.3.4/bin
DOCDIR = /opt/pgsql9.3.4/share/doc
HTMLDIR = /opt/pgsql9.3.4/share/doc
INCLUDEDIR = /opt/pgsql9.3.4/include
PKGINCLUDEDIR = /opt/pgsql9.3.4/include
INCLUDEDIR-SERVER = /opt/pgsql9.3.4/include/server
LIBDIR = /opt/pgsql9.3.4/lib
PKGLIBDIR = /opt/pgsql9.3.4/lib
LOCALEDIR = /opt/pgsql9.3.4/share/locale
MANDIR = /opt/pgsql9.3.4/share/man
SHAREDIR = /opt/pgsql9.3.4/share
SYSCONFDIR = /opt/pgsql9.3.4/etc
PGXS = /opt/pgsql9.3.4/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = 'CPPFLAGS=-I/usr/local/include' '--prefix=/opt/pgsql9.3.4' '--with-pgport=5432' '--with-perl' '--with-python' '--with-tcl' '--with-openssl' '--with-pam' '--without-ldap' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--with-wal-blocksize=16'
CC = cc
CPPFLAGS = -I/usr/local/include -I/usr/local/include/libxml2 -I/usr/include
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL = -fPIC -DPIC
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/usr/lib -Wl,--as-needed -Wl,-R'/opt/pgsql9.3.4/lib'
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lpgcommon -lxslt -lxml2 -lpam -lssl -lcrypto -lz -lreadline -lcrypt -lm
VERSION = PostgreSQL 9.3.4

以上环境libpq binary-compatible, 所以可以作为流复制的主备(已测试一台60G的数据库成功复制, 以及打开测试完全没有问题). 各位客官可模仿.

这里用到BSD, 主要为了用它的zfs, zfsonlinux目前存在一定的性能问题, 在等brain的回复, 具体是否可以通过模块的参数来优化请期待.

FreeBSD下的standby激活后的读写测试 :

postgres@digoal:~ % pg_ctl promote
server promoting
postgres@digoal:~ % psql
psql (9.3.4)
Type "help" for help.

postgres=> create table test(id int primary key, info text, crt_time timestamp);
CREATE TABLE
postgres=> create or replace function f(v_id int) returns void as $$
postgres$> declare
postgres$> begin
postgres$>   update test set info=md5(now()::text),crt_time=now() where id=v_id;
postgres$>   if not found then
postgres$>     insert into test values (v_id, md5(now()::text), now());
postgres$>   end if;
postgres$>   exception when others then
postgres$>     return;
postgres$> end;
postgres$> $$ language plpgsql strict;
sCREATE FUNCTION
postgres=> select f(1);
 f
---

(1 row)

postgres=> select * from test;
 id |               info               |          crt_time
----+----------------------------------+----------------------------
  1 | 9de5370fe00c7ed52b48080e2fb3efc9 | 2014-06-27 19:07:14.725201
(1 row)

postgres=> select f(1);
 f
---

(1 row)

postgres=> select * from test;
 id |               info               |          crt_time
----+----------------------------------+----------------------------
  1 | f91841b8d4a52cb4ce82e835aa161283 | 2014-06-27 19:07:20.969022
(1 row)

postgres@digoal:~ % cd
postgres@digoal:~ % vi test.sql
\setrandom v_id 1 50000000
select f(:v_id);

postgres@digoal:~ % pgbench -M prepared -n -r -f ./test.sql -c 16 -j 4 -T 30
transaction type: Custom query
scaling factor: 1
query mode: prepared
number of clients: 16
number of threads: 4
duration: 30 s
number of transactions actually processed: 1512165
tps = 50368.843235 (including connections establishing)
tps = 50416.031069 (excluding connections establishing)
statement latencies in milliseconds:
        0.001875        \setrandom v_id 1 50000000
        0.313934        select f(:v_id);

[参考]
1. http://blog.163.com/digoal@126/blog/static/163877040201451181344545/

2. http://blog.163.com/digoal@126/blog/static/1638770402014526992910/

3. http://blog.163.com/digoal@126/blog/static/16387704020145264116819/

时间: 2024-10-02 06:46:40

PostgreSQL stream repication can implement between FreeBSD and CentOS的相关文章

PostgreSQL on ECS多云盘的部署、快照备份和恢复

标签 PostgreSQL , ECS , 云盘 , 快照 , 一致性备份 , 时间点恢复 , zfs , lvm , raid , 并行计算 背景 随着阿里云云盘的发展,云盘的性能已经越来越好了.IOPS可以做到十万以上,读写吞吐也超过1GB/s了.相信随着网络的发展,SSD云盘IOPS突破40万,读写吞吐突破4GB/s也不远了. 不过这里的IOPS和吞吐是指并发的IO能力,单次IO的延迟与本地还是不能比(将来RDMA网络也许能解决这个问题). PostgreSQL 如何解决SSD云盘IO延迟

PostgreSQL 增量备份集的有效恢复位点

标签 PostgreSQL , 物理备份 , 时间点恢复 , PITR , 增量备份 , 归档 , 一致性 , 逻辑检查点 , 时间线 背景 PostgreSQL支持PITR即时间点恢复,为了支持时间点恢复,至少需要一次全量备份,然后需要归档日志. 这句话描述可能不够清晰,至少需要哪些归档日志,全量备份的时间点有没有要求呢? 本文要解答这个问题. 什么是全量备份 全量备份指的是对数据库的$PGDATA以及所有表空间文件(包括全局数据文件.事务日志文件.配置文件.控制文件.表空间数据文件等)进行一

PostgreSQL on ECS SLA 流复制备库+秒级快照+PITR+自动清理

标签 PostgreSQL , ECS , 阿里云 , 部署 , 物理镜像 , 流复制 , 快照备份 , 备份验证 , 自动清理 背景 介绍在阿里云ECS环境中,实现一个非常简单,但是可用性和可靠性满足一般企业要求的PostgreSQL环境. 包括: 1.自动启动数据库 2.包括一个物理流复制备库 3.包括自动的秒级快照备份 4.包括自动备份集有效性验证 5.包括自动清理N天以前的备份集.归档文件 6.监控请自建 部署环境介绍 1.ECS 111.111.111.199 (主) 111.111.

linux安装PostgreSQL并启动和关闭教程

操作系统版本 [root@web103 ~]# more /etc/issueCentOS release 5.9 (Final)Kernel \r on an \m[root@web103 ~]# uname -aLinux web103 2.6.18-348.el5 #1 SMP Tue Jan 8 17:53:53 EST 2013 x86_64 x86_64 x86_64 GNU/Linux 下载对应PostgreSQL对应rpm包因为操作系统版本为CentOS 5.9的64位Linux

linux安装PostgreSQL 9.4数据库并启动数据库

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES, Version 4.2为基础的对象关系型数据库管理系统(ORDBMS).POSTGRES开创的许多概念在很久以后才出现在商业数据库中.PostgreSQL是最初伯克利代码的一个开放源码的继承者.它支持大部分SQL标准并且提供了许多其它现代特性: 复杂查询 外键 触发器 可更新的视图 事务完整性 多版本并发控制 另外,PostgreSQL可以用许多方法进行扩展,比如通过增加新的: 数据类型 函数 操作符 聚合函数 索引方

数据库案例集锦 - 开发者的《如来神掌》

背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗手,无可柰何,惟隐居深谷,以雕为友.呜呼,生平求一敌手而不可得,诚寂寥难堪也.」 剑冢中,埋的是剑魔独孤求败毕生几个阶段中用过的几柄剑: 利剑无意:第一柄是青光闪闪的利剑,凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋. 软剑无常:第二柄是紫薇软剑,三十岁前所用,误伤义士不祥,悔恨不已,乃弃之深谷. 重剑无锋:第三柄是玄铁重剑,重剑无锋,大巧不工,四十岁之前恃之横行天下. 木剑无俦:第四柄是已腐朽的木剑. 无剑无招:四十岁后,不

.Net远程方法调用研究

简介远程方法调用发展到现在,已经有以下几种框架实现:DCE/RPC,CORBA,DCOM,MTS/COM+,Java RMI,Java EJB,Web Services/SOAP/XML-RPC,NET Remoting,本文主要介绍了.NET远程方法调用的原理,实现以及与微软COM/DCOM实现的异同点. 框架Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架.众所周知,Web服务仅仅提供了一种简单的容易理解的方法来实现跨平台,跨语言的交互

又来勒索,有完没完 - 数据库安全指南

背景 数据库在一个企业中通常都处于非常核心的位置,数据库安全是一个非常严肃的话题. 从机房.网络.服务器.数据交换设备.操作系统.应用程序.数据库本身,数据库所处的环境非常复杂,安全隐患也非常多. 所以本文将从各个层面帮助大家理解和避免一些常见的安全隐患问题. 本文是PostgreSQL使用安全指导性的文章,涉及详细的用法或原理请参考相关链接. 如何安全的使用PostgreSQL,让用户高枕无忧呢? 可以分为如下几个方面来加固你的数据库. 一.认证安全 认证前的安全,端口暴露度的把握. Post

使用 ssh -R 建立反向/远程TCP端口转发代理

ssh是一个非常棒的工具, 不但能建立动态转发, 例如chrome的Switchy插件用到的就是这个技术. http://blog.163.com/digoal@126/blog/static/163877040201141821810103/ 还能建立TCP的转发隧道, 例如我以前写过的关于使用ssh 隧道加密和加速WAN传输的几个例子. http://blog.163.com/digoal@126/blog/static/163877040201342383123592/ http://bl