PostgreSQL stream repication can implement between FreeBSD and CentOS

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:
环境 : 
主节点
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);


[参考]
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
4月前
|
SQL 关系型数据库 Linux
搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)
搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)
145 7
|
4月前
|
关系型数据库 测试技术 数据库
在 PostgreSQL 中使用 BETWEEN 操作符
【8月更文挑战第12天】
334 0
|
SQL 关系型数据库 Linux
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
1011 0
|
7月前
|
关系型数据库 Linux Shell
Centos系统上安装PostgreSQL和常用PostgreSQL功能
Centos系统上安装PostgreSQL和常用PostgreSQL功能
|
7月前
|
缓存 负载均衡 关系型数据库
postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用
postgresql|数据库|centos7下基于postgresql-12的主从复制的pgpool-4.4的部署和使用
187 0
|
存储 Oracle 关系型数据库
「PostgreSQL 」如何在CentOS 7 / CentOS 8上安装PostgreSQL 12
「PostgreSQL 」如何在CentOS 7 / CentOS 8上安装PostgreSQL 12
|
关系型数据库 Linux 网络安全
CentOS 7 源码编译安装 PostgreSQL 11.2
CentOS 7 源码编译安装 PostgreSQL 11.2
402 0
CentOS 7 源码编译安装 PostgreSQL 11.2
|
关系型数据库 Linux PostgreSQL
|
关系型数据库 网络安全 数据库