Postgres-X2

PostgreSQL分布式集群
授权协议 BSD
开发语言 C/C++
所属分类 数据库相关、 数据库调整和优化
软件类型 开源软件
地区 不详
投 递 者 杭涵映
操作系统 Linux
开源组织
适用人群 未知
 软件概览

基于PostgreSQL的分布式数据库集群,同时适合OLTP 和OLAP应用。该项目的目标是整合Postgres-XC 和 Postgres-XL。Postgres-XC/XL/X2是一个开源项目。它提供了一个多主同步、透明的PostgreSQL的集群解决方案。不同于其它集群工具(如:Greenplum)重点突出OLAP,而Postgres-XC/XL/X2则更强调OLTP,在写入数据的时候具有很强的可扩展性,很好的引入了“多主架构”的集群环境概念。多主意味着在写入数据的时候不再受单一主节点的限制,在写入速度上将有很好的提升。

Postgres-XC/XL/X2数据库安装手册

Postgres-XC有三个主要的组件,即GTM(Global Transaction Manager)、Coordinator和Datanode。

其中GTM是最关键的一个组件,提供统一的事务处理管理和透明的组件控制。该事务管理技术是基于MVCC而来。任何一个Postgres-XC组件的处理管理都是基于单一的全局状态。

Coordinator是一个针对于应用程序的接口,犹如传统PostgreSQL数据库的后台进程。coordinator不存储实际的数据,只存储关于数据的描述性信息,实际的数据会被存储在datanode上。

Datanode存储实际的数据。表会在所有的datanode之间被分发或者被复制到所有的节点。由于datanode没有全局的数据库视图,所以它只会关心自己本地存储的数据。coordinator对接收的语句进行检查描述,然后重新组装后在有关的datanode上执行。再接着根据需要将数据转储到其它的datanode上。

系统规划

先准备6台机器。1台使用LVS进行负荷分担、1台作GTM、1台作GTM_Standby、剩下的3台作为Coordinator和Datanode节点。

操作系统信息:

[root@localhost ~]# cat /etc/issue
    CentOS release 6.3 (Final)
    Kernel \r on an \m 
    [root@localhost ~]# uname -a
    Linux localhost.localdomain 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

安装用户: pgxc

安装根目录: /home/pgxc

IP资源分配如下:

功能 主机名 IP地址
LVS lvs_master 192.168.18.160
Global Transaction Manager gtm 192.168.18.164
Global Transaction Manager Standby gtm_standby 192.168.18.165
Coordinator1/Datanode1/GTM Proxy cd1 192.168.18.166
Coordinator2/Datanode2/GTM Proxy cd2 192.168.18.167
Coordinator3/Datanode3/GTM Proxy cd3 192.168.18.168

安装存储目录:

主机名 目录
gtm ~/gtm
gtm_standby ~/ gtm
cd1 ~/ coordinator ~/datanode ~/ coordinator_s ~/datanode_s
cd2 ~/ coordinator ~/datanode ~/ coordinator_s ~/datanode_s
cd3 ~/ coordinator ~/datanode ~/ coordinator_s ~/datanode_s

端口规划:

主机名 端口
gtm 6666
gtm_standby 6666
datanode1/datanode2_s 15432
datanode2/datanode3_s 15433
datanode3/datanode1_s 15434
coordinator1/coordinator2_s 5432
coordinator2/coordinator3_s 5433
coordinator3/coordinator4_s 5434
coordinator1 poolerPorts 20010
coordinator2 poolerPorts 20011
coordinator3 poolerPorts 20012
datanode1 poolerPorts 20013
datanode2 poolerPorts 20014
datanode3 poolerPorts 20015

LVS软件信息:ipvsadm-1.24.tar

数据库软件信息:postgres-xl-v9.2-src.tar

注意:数据库的环境搭建、安装、维护等均在数据库所在的主机上进行操作,即gtm、gtm_standby、cd1、cd2、cd3。LVS安装、维护均在lvs_master上。

环境准备 (所有主机)

  1. 安装依赖包

在数据库安装前需要确认如下依赖包已经安装,推荐在安装操作系统时使用完全安装,完全安装将会包含postgres所需的依赖包。需要的依赖包如下:

yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl;
  1. 新建pgxc用户

因为分布式数据库是不能再root用户下运行的,所以在每台机器上都新建pgxc用户以及用户组:

#groupadd pgxc           ----新建用户组
    #useradd -g pgxc pgxc     ----新建用户
    #passwd pgxc             ----修改新用户密码(为了后续方便操作,我将所有密码都设置为pgxc)
  1. 添加所有主机的域名信息

因为在使用pgxc_ctl的配置信息中会涉及,本次以192.168.18.160~168为例:

#vi /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.18.160  lvs_master
    192.168.18.164  gtm
    192.168.18.165  gtm_standby
    192.168.18.166  cd1
    192.168.18.167  cd2
    192.168.18.168  cd3

并且,以GTM为例,在各自的主机上进行如下设置:

[root@localhost ~]# hostname gtm
    [root@localhost ~]# vi /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=gtm
  1. 建立信任关系

在所有机器上执行如下命令

# su - pgxc
    $ssh-keygen -t rsa

---提示需要输入时,全部回车即可,执行完该命令后将会生成id_rsa.pub文件。

选择其中一台机器(任意一台,以164为例),以pgxc用户在其上执行如下命令,根据提示输入密码等信息,生成authorized_keys文件:

$cd ~/.ssh
    $ scp pgxc@192.168.18.164:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/authorized_keys
    $ scp pgxc@192.168.18.165:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
    $cat temp >> authorized_keys
    $ scp pgxc@192.168.18.166:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
    $cat temp >> authorized_keys
    $ scp pgxc@192.168.18.167:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
    $cat temp >> authorized_keys
    $ scp pgxc@192.168.18.168:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
    $cat temp >> authorized_keys

把authorized_keys拷贝到其他主机上

$scp ./authorized_keys pgxc@192.168.18.165:/home/pgxc/.ssh/
    $scp ./authorized_keys pgxc@192.168.18.166:/home/pgxc/.ssh/
    $scp ./authorized_keys pgxc@192.168.18.167:/home/pgxc/.ssh/
    $scp ./authorized_keys pgxc@192.168.18.168:/home/pgxc/.ssh/

进行如上操作后便建立起了所有机器间的信任关系,可以用如下方式进行测试信任关系是否建立成功,在pgxc用户下执行如下命令:

$ssh pgxc@192.168.18.165 --如果不再提示输入密码,表示信任关系建立成功

数据库安装(所有主机)

  1. 安装数据库

目前本数据库采用的是编译安装的方式(也可以使用rpm安装)。

首先将postgres-xl-v9.2-src.tar.gz拷贝到指定目录,然后进行解压,下面以拷贝到/home/pgxc目录下为例,在所有机器上进行如下操作:

[pgxc@gtm ~]$ tar -zxf postgres-xl-v9.2-src.tar.gz
    [pgxc@gtm ~]$ cd postgres-xl
    [pgxc@gtm postgres-xl]$ ./configure  --prefix=/home/pgxc/pgxl  ---指定安装路径
    [pgxc@gtm postgres-xl]$ make
    [pgxc@gtm postgres-xl]$ make install
    [pgxc@gtm postgres-xl]$ cd contrib/
    [pgxc@gtm postgres-xl]$ make
    [pgxc@gtm postgres-xl]$ make install
  1. 添加环境变量

在/home/pgxc/.bashrc中添加如下环境变量,添加完成后以pgxc用户执行source命令使其立即生效。

export PGHOME=/home/pgxc/pgxl
    export PGUSER=pgxc
    export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
    export PATH=$PGHOME/bin:$PATH
    [pgxc@gtm postgres-xl]$ source ~/.bashrc
  1. 放开防火墙限制

使用root权限,在所有数据库服务器上进行放开防火墙限制操作。

关闭防火墙的命令如下:

---永久关闭

#chkconfig iptables on   --重启后生效

--暂时关闭

#service iptables stop    --重启后失效

使用端口放通的方法如下:

[root@cd2 ~]# vi /etc/sysconfig/iptables

增加如下信息:

-A OUTPUT -p tcp --sport 5432 -j ACCEPT
    -A INPUT -p tcp --dport 5432 -j ACCEPT
    -A OUTPUT -p tcp --sport 5433 -j ACCEPT
    -A INPUT -p tcp --dport 5433 -j ACCEPT
    -A OUTPUT -p tcp --sport 5434 -j ACCEPT
    -A INPUT -p tcp --dport 5434 -j ACCEPT
    -A OUTPUT -p tcp --sport 15432 -j ACCEPT
    -A INPUT -p tcp --dport 15432 -j ACCEPT
    -A OUTPUT -p tcp --sport 15433 -j ACCEPT
    -A INPUT -p tcp --dport 15433 -j ACCEPT
    -A OUTPUT -p tcp --sport 15434 -j ACCEPT
    -A INPUT -p tcp --dport 15434 -j ACCEPT
    -A OUTPUT -p tcp --sport 20010 -j ACCEPT
    -A INPUT -p tcp --dport 20010 -j ACCEPT
    -A OUTPUT -p tcp --sport 20011 -j ACCEPT
    -A INPUT -p tcp --dport 20011 -j ACCEPT
    -A OUTPUT -p tcp --sport 20012 -j ACCEPT
    -A INPUT -p tcp --dport 20012 -j ACCEPT
    -A OUTPUT -p tcp --sport 20013 -j ACCEPT
    -A INPUT -p tcp --dport 20013 -j ACCEPT
    -A OUTPUT -p tcp --sport 20014 -j ACCEPT
    -A INPUT -p tcp --dport 20014 -j ACCEPT
    -A OUTPUT -p tcp --sport 20015 -j ACCEPT
    -A INPUT -p tcp --dport 20015 -j ACCEPT
    -A OUTPUT -p tcp --sport 20016 -j ACCEPT
    -A INPUT -p tcp --dport 20016 -j ACCEPT
    :wq!
    [root@cd2 ~]# service iptables restart
  1. 配置节点信息

选择一个主机,以GTM为例,进入/home/pgxc/postgres-xl/contrib/pgxc_ctl目录中,执行pgxc_ctl命令:

[pgxc@gtm_standby pgxc_ctl]$ ./pgxc_ctl
    Installing pgxc_ctl_bash script as /home/pgxc/pgxc_ctl/pgxc_ctl_bash.
    ERROR: File "/home/pgxc/pgxc_ctl/pgxc_ctl.conf" not found or not a regular file. No such file or directory
    Installing pgxc_ctl_bash script as /home/pgxc/pgxc_ctl/pgxc_ctl_bash.
    Reading configuration using /home/pgxc/pgxc_ctl/pgxc_ctl_bash --home /home/pgxc/pgxc_ctl --configuration /home/pgxc/pgxc_ctl/pgxc_ctl.conf
    Finished to read configuration.
       ******** PGXC_CTL START ***************
    Current directory: /home/pgxc/pgxc_ctl
    PGXC prepare    ---执行该命令将会生成一份配置文件模板
    PGXC ^C

pgxc_ctl有自己的工作目录,一般为$HOME/pgxc_ctl/。在该目录下存有刚才生成的配置模板文件pgxc_ctl.conf以及一些日志信息。

在pgxc_ctl.conf中配置需要安装的节点信息,具体请根据配置文件中的说明进行修改。

修改完成后,执行命令初始化所有数据库:

$pgxc_ctl  -c pgxc_ctl.conf init all    --初始化完成后会自动启动

初始化完成后需要重启整个集群:

$pgxc_ctl  -c pgxc_ctl.conf stop all   ---停止整个分布式集群
    $pgxc_ctl  -c pgxc_ctl.conf start all   --启动整个分布式集群

注意:初始化信息如果返回错误,需要检查错误原因,常见错误时端口冲突、网络不通等待,请仔细检查。然后在所有主机上,停止运行的GTM进程和Postgres进程,并且删除安装文件/home/pgxc/pgxc。修改配置文件后重新初始化和重新启动。

数据库参数配置 (所有主机,可选)

安装完成后的目录信息如下:

[pgxc@cd1 nodes]$ pwd
    /home/pgxc/pgxc/nodes
    [pgxc@cd1 nodes]$ ls
    coordinator  coordinator_archlog  coordinator_s  datanode  datanode_archlog  datanode_s  gtm_pxy

数据库的参数主要涉及到两个配置文件:postgres.conf (配置数据库的基本信息)、pg_hba.conf(配置数据库的访问权限信息)。这两个配置文件的路径在对应的节点子目录中。

postgres.conf常用修改项: listen_addresses : 监听地址 port:监听端口 max_connections:支持最大连接数

pg_hba.conf配置项:

host    all    all             127.0.0.1/32            trust

第一个域host:一般情况下使用host(有local和host两种) 第二个域all:表示数据库 第三个域all:表示用户 第四个域IP地址:将会对ip地址进行过滤,满足过滤规则的可以连接,如:192.168.1.0/24表示192.168.1.0网段的可以进行连接,192.168.1.0/16表示192.168.0.0网段的可以连接。 第五个域trust:表示鉴权方式,此处为完全信任,可以是"trust", "md5", "password"等。

LVS配置(可选)

LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统。VS/NAT、VS/TUN、VS/DR技术是LVS集群中实现的三种IP负载均衡技术。本次数据库搭建采用VS/DR模式。

下面的操作,除掉特殊说明外,都是在LVS主备服务器上进行。

  1. 搭建准备

确认操作系统已经打好的LVS的补丁,目前的操作系统一般都已经包含了该补丁:

[root@localhost ~]# modprobe -l |grep ipvs
    kernel/net/netfilter/ipvs/ip_vs.ko
    kernel/net/netfilter/ipvs/ip_vs_rr.ko
    kernel/net/netfilter/ipvs/ip_vs_wrr.ko
    kernel/net/netfilter/ipvs/ip_vs_lc.ko
    kernel/net/netfilter/ipvs/ip_vs_wlc.ko
    kernel/net/netfilter/ipvs/ip_vs_lblc.ko
    kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
    kernel/net/netfilter/ipvs/ip_vs_dh.ko
    kernel/net/netfilter/ipvs/ip_vs_sh.ko
    kernel/net/netfilter/ipvs/ip_vs_sed.ko
    kernel/net/netfilter/ipvs/ip_vs_nq.ko
    kernel/net/netfilter/ipvs/ip_vs_ftp.ko

创建连接:

[root@localhost ~]# ln -s /usr/src/kernels/2.6.32-279.el6.x86_64/ /usr/src/linux/
  1. 安装ipvsadmin
[root@localhost ~]# tar -zxf ipvsadm-1.24.tar.gz 
    [root@localhost ~]# cd ipvsadm-1.24
    [root@localhost ipvsadm-1.24]# make && make install
  1. 配置ipvsadmin

在主备LVS服务器上运行lvsdr.sh脚本,以配置VS/DR模式的调度器。在每台coordinator上运行relserver.sh脚本。这两个脚本的配置参数请根据实际的配置情况进行修改。

数据库连接及简单测试

通过coordinator连接数据库:

$ psql -h 192.168.18.206 -p 5432 -d postgres -U pgxc

格式说明:

psql  -h hostname/ip  -d database_name  -p port -U username

hostname/ip:为安装有数据库的主机名称或IP地址 database_name:数据库名称 port:端口号,端口号为5432时可省略 username:连接该数据库使用的用户名

Postgres#create table test(id integer);
    Postgres#insert into test values(1);
    。。。。
    Postgres#insert into test values(9);
    Postgres#execute direct on(datanode1) ‘select * from test’;
    Postgres#execute direct on(datanode2) ‘select * from test’;
    Postgres#execute direct on(datanode3) ‘select * from test’;
    Postgres#execute direct on(datanode4) ‘select * from test’;

可以看出该数据分布到不同的数据节点上。

  • 本文首发于 2016-03-15 19:56:52 注意:本篇文章成文时 Postgres-XC 还未改名为 Postgres-X2 。 1. 下载源码 git clone git@github.com:postgres-x2/postgres-x2.git 2. 安装依赖 对于 Ubuntu/Debian: apt-get install -y git-core apt-get install

  • 1引言 Postgres-XL 是一个通用的 ACID 开源的、可方便进行水平扩展的 SQL 数据库解决方案。基于 PostgreSQL 数据库构建。Postgres-XL 可用于商业智能、大数据分析、Web 2.0、传统应用等场合。 此搭建过程是基于pgxc_ctl进行的安装的,除此外还有手动安装。 搭建过程参考: http://blog.chinaunix.net/uid-20498361-i

  • 数据库版本:postgresxc 1.1(postgresql 9.2.4) 作者:高铭杰 邮箱:jackgo73@outlook.com 日期:2017年4月8日 Postgres-XC集群部署实例(单机调试)   开始接触神奇的xc :),边学变记录单机部署pgxc集群的方法,仅供娱乐与调试。后面的实例会继续补充。(使用单用户+切换pg环境变量的脚本在调试代码的时候很方便) 版本 链接 Pos

  • 简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。 数据类型 数值类型 名字 存储长度 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer 4

 相关资料
  • 集群策略插件化 分布式集群策略采用插件的方式实现,通过SPI的形式发布,通过配置文件激活。 zookeeper分布式策略

  • Map Redisson 分布式的 Map 对象,实现了 java.util.concurrent.ConcurrentMap 和 java.util.Map 接口。 Map 的大小由 Redis 限制为 4 294 967 295。 RMap<String, SomeObject> map = redisson.getMap("anyMap"); SomeObject prevObject =

  • 我有两个节点的完全分布式Hadoop和Hbase实例。HDFS在主机和从机上工作良好。但是HBase shell只在节点名格式化之后工作一次,并且集群是新的,之后我得到错误:error:org.apache.hadoop.HBase.PleaseHoldException:Master is initializing HBase 我也不能通过hbase shell从slave连接我总是得到错误连接

  • 5.3 ABP分布式服务 - 集成OData 5.3.1 简介 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务。你可以在Abp中使用OData,只需要通过Nuget来安装Abp.Web.Api.OData. 5.3.2 安装 1. 使用Nuget安装 首先应该使用Nuget安装Abp.Web.Api.OData到我们的WebApi项目

  • 一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基本可用 软状态 最终一致性 五、Paxos 执行过程 约束条件 六、Raft 单个 Candidate 的竞选 多个 Candidate 竞选 数据同步 参考 一、分

  • 5.4 ABP分布式服务 - 集成SwaggerUI 5.4.1 简介 从官网得知,开启Swagger,你可以获得一个交互式的文档,生成和发现客户端SDK。 5.4.2 ASP.NET Core 1. 安装 你可以很容易的集成Swagger到基于ASP.NET Core的 ABP项目。 2. 安装Nuget包 安装 Swashbuckle nuget包到你的Web项目。 3. 配置 在 Start

  • 本文将介绍基于Spring Cloud + feign 如何集成 Seata(1.4.0)的TCC模式。实际上,Seata的AT模式基本上能满足我们使用分布式事务80%的需求,但涉及不支持事务的数据库与中间件(如redis)等的操作,或AT模式暂未支持的数据库(目前AT支持Mysql、Oracle与PostgreSQL)、跨公司服务的调用、跨语言的应用调用或有手动控制整个二阶段提交过程的需求,则需

  • 主要内容:并行化集合,外部数据集RDD(弹性分布式数据集)是Spark的核心抽象。它是一组元素,在集群的节点之间进行分区,以便我们可以对其执行各种并行操作。 有两种方法可以用来创建RDD: 并行化驱动程序中的现有数据 引用外部存储系统中的数据集,例如:共享文件系统,HDFS,HBase或提供Hadoop InputFormat的数据源。 并行化集合 要创建并行化集合,请在驱动程序中的现有集合上调用的方法。复制集合的每个元素以形成