Postgres-XL 10 集群搭建

简介

Postgres-XL是一个横向扩展的开源数据库集群,具备足够的灵活性来处理不一样的数据库工做负载。Postgres-XL的最终目标是提供横跨全部类型数据库工做负载的ACID一致性的数据库可伸缩性html

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具备这四种特性,不然在事务过程(Transaction processing)当中没法保证数据的正确性,交易过程很可能达不到交易方的要求。node

Postgres-XL主要组件

Postgres-XL由三个主要组件组成:GTM (Global Transaction Manager)、Coordinator和 Datanode。sql

GTM (Global Transaction Manager)

负责ACID,保证分布式数据库全局事务一致性。益于此,就算数据节点是分布的,可是你在主节点操做增删改查事务时,就如同只操做一个数据库同样简单。shell

GTM Standby

GTM的备节点,增长该备用节点。当GTM出现问题时,GTM Standby能够升级为GTM,保证集群正常工做。数据库

GTM-Proxy

GTM须要与全部的Coordinators通讯,为了下降压力,能够在每一个Coordinator机器上部署一个GTM-Proxy。vim

Coordinator

负责处理每一个来自Application的SQL任务,而且决定由哪一个Datanode执行,而后将任务计划派发给相应的Datanode,根据须要收集结果返还给Application;centos

Datanode

负责存储表的数据和本地执行由Coordinator派发的SQL任务。ruby

快速入门

模拟环境

本次的模拟环境使用的系统是centos7.2bash

hostname IP function
gtm 192.168.72.150 gtm
node1 192.168.72.151 coordinator & datanode
node2 192.168.72.152 coordinator & datanode

为方便测试,全部节点关闭防火墙和SELINUXssh

配置hosts

全部节点添加如下解析:

# vim /etc/hosts
192.168.72.150	gtm
192.168.72.151	node1
192.168.72.152	node2

建立用户

全部节点建立用户

useradd postgres
passwd postgres

ssh免密登陆

#在gtm节点建立key
su postgres
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

#复制key到其它节点
scp ~/.ssh/authorized_keys postgres@node1:~/.ssh/
scp ~/.ssh/authorized_keys postgres@node2:~/.ssh/

安装postgres-xl

如下全部配置,在每一个节点都须要运行

安装所需依赖包:

yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl gcc bzip2

安装postgres-xlpgxc_ctl

#下载解压
wget https://www.postgres-xl.org/downloads/postgres-xl-10alpha2.tar.bz2
tar -jxvf postgres-xl-10alpha2.tar.bz2


#安装
./configure --prefix=/home/postgres/pgxl/
make
make install
cd contrib/	
make
make install

编辑环境变量

# vim ~/.bashrc
export PGHOME=/home/postgres/pgxl
export PGUSER=postgres
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH

运行生效:

source ~/.bashrc

配置群集

接下来,就要配置群集,在gtm节点,运行pgxc_ctl,生成配置文件:

[postgres@gtm ~]$ pgxc_ctl
PGXC$  prepare config empty #生成一个空的配置文件/home/postgres/pgxc_ctl/pgxc_ctl.config
PGXC$  exit

修改配置文件

# vim ~/pgxc_ctl/pgxc_ctl.config
# 修改如下三项
pgxcInstallDir=$HOME/pgxl
pgxcOwner=postgres
dataDirRoot=$HOME/DATA/pgxl/nodes

# 添加如下配置
#===================================================
# gtm
gtmName=gtm
gtmMasterServer=gtm
gtmMasterPort=20001
gtmMasterDir=$dataDirRoot/gtm
#----End of reconfiguration -------------------------
#===================================================

# coordinator
coordNames=( coord1 coord2  )
coordMasterServers=( node1 node2  )
coordPorts=( 30001 30001  )
poolerPorts=( 30011 30011 )
coordPgHbaEntries=(0.0.0.0/0)	
coordMasterDirs=( $dataDirRoot/coord_master.1 $dataDirRoot/coord_master.2  )
coordMaxWALSenders=( 5 5  )
coordSlave=n
coordSlaveServers=( none none  )
coordSlavePorts=( none none  )
coordSlavePoolerPorts=( none none  )
coordSlaveDirs=( none none  )
coordArchLogDirs=( none none  )
coordSpecificExtraConfig=( none none  )
coordSpecificExtraPgHba=( none none  )
#----End of reconfiguration -------------------------
#===================================================
# database

datanodeNames=( dn1 dn2  )
datanodeMasterServers=( node1 node2  )
datanodePorts=( 40001 40001 )
datanodePoolerPorts=( 40011 40011  )
datanodePgHbaEntries=(0.0.0.0/0)
datanodeMasterDirs=( $dataDirRoot/dn_master.1 $dataDirRoot/dn_master.2  )
datanodeMasterWALDirs=( none none  )
datanodeMaxWALSenders=( 5 5  )
datanodeSpecificExtraConfig=( none none  )
datanodeSpecificExtraPgHba=( none none  )
#----End of reconfiguration -------------------------

初始化全部配置:

[postgres@gtm ~]$ pgxc_ctl init all

查看运行状态:

[postgres@gtm ~]$ pgxc_ctl
PGXC$ monitor all
Running: gtm master
Running: coordinator master coord1
Running: coordinator master coord2
Running: datanode master dn1
Running: datanode master dn2

测试集群

链接安装了coordinator节点的主机,建立数据库,查看同步状况。

# 在node1节点上
$  psql -p 30001 postgres
postgres=# CREATE DATABASE testdb;
CREATE DATABASE
postgres=# \q

#在node2节点,刚才建立的数据库是否同步过来
$  psql -p 30001 testdb
testdb=# SELECT * FROM pgxc_node;
 node_name | node_type | node_port | node_host | nodeis_primary | nodeis_preferred |   node_id   
-----------+-----------+-----------+-----------+----------------+------------------+-------------
 coord1    | C         |     30001 | node1     | f              | f                |  1885696643
 coord2    | C         |     30001 | node2     | f              | f                | -1197102633
 dn1       | D         |     40001 | node1     | f              | t                |  -560021589
 dn2       | D         |     40001 | node2     | f              | f                |   352366662
(4 rows)

能够看到,在node2节点上,已经把在node1建立的数据库同步过来。

参考连接: https://blog.csdn.net/yeruby/article/details/48996027 https://www.biaodianfu.com/postgres-xl.html https://www.postgres-xl.org/overview/ https://www.2ndquadrant.com/en/resources/postgres-xl/

相关文章
相关标签/搜索