Postgres-XL 10 集群搭建

简介

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

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

Postgres-XL主要组件

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

GTM (Global Transaction Manager)

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

GTM Standby

GTM的备节点,增加该备用节点。当GTM出现问题时,GTM Standby可以升级为GTM,保证集群正常工作。

GTM-Proxy

GTM需要与所有的Coordinators通信,为了降低压力,可以在每个Coordinator机器上部署一个GTM-Proxy。

Coordinator

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

Datanode

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

快速入门

模拟环境

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

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

为方便测试,所有节点关闭防火墙和SELINUX

配置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/

猜你喜欢

转载自www.cnblogs.com/saltyorange/p/9283374.html
今日推荐