简介
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-xl
和pgxc_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/