Postgres-XC/XL/X2是一个开源项目。它提供了一个多主同步、透明的PostgreSQL的集群解决方案。不同于其它集群工具的特点是它在写入数据的时候具有很强的可扩展性,很好的引入了多主架构的集群环境概念。多主意味着在写入数据的时候不再受单一主节点的限制,在写入速度上将有很好的提升。
Postgres-XC有三个主要的组件,即GTM(Global Transaction Manager)、Coordinator和Datanode。
其中GTM是最关键的一个组件,提供统一的事务处理管理和透明的组件控制。该事务管理技术是基于MVCC而来。任何一个Postgres-XC组件的处理管理都是基于单一的全局状态。
Coordinator是一个针对于应用程序的接口,犹如传统PostgreSQL数据库的后台进程。coordinator不存储实际的数据,只存储关于数据的描述性信息,实际的数据会被存储在datanode上。
Datanode存储实际的数据。表会在所有的datanode之间被分发或者被复制到所有的节点。由于datanode没有全局的数据库视图,所以它只会关心自己本地存储的数据。coordinator对接收的语句进行检查描述,然后重新组装后在有关的datanode上执行。再接着根据需要将数据转储到其它的datanode上。
先准备5台机器。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地址 |
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 |
分布式数据库软件信息:postgres-xl-v9.2-src.tar
注意:分布式数据库的环境搭建、安装、维护等均在数据库所在的主机上进行操作,即gtm、gtm_standby、cd1、cd2、cd3。
1. 安装依赖包
在数据库安装前需要确认如下依赖包已经安装,推荐在安装操作系统时使用完全安装,完全安装将会包含postgres所需的依赖包。需要的依赖包如下:
yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl
2. 新建pgxc用户
因为分布式数据库是不能再root用户下运行的,所以在每台机器上都新建pgxc用户以及用户组:
#groupadd pgxc ----新建用户组
#useradd -g pgxc pgxc ----新建用户
#passwd pgxc ----修改新用户密码(为了后续方便操作,我将所有密码都设置为pgxc)
3. 添加所有主机的域名信息
因为在使用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.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
4. 建立信任关系
在所有机器上执行如下命令
# su - pgxc
$ssh-keygen -t rsa
---提示需要输入时,全部回车即可,执行完该命令后将会生成id_rsa.pub文件。
选择其中一台机器(任意一台,以164为例),以pgxc用户在其上执行如下命令,根据提示输入密码等信息,生成authorized_keys文件:
$cd ~/.ssh
$ scp [email protected]:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/authorized_keys
$ scp [email protected]:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
$cat temp >> authorized_keys
$ scp [email protected]:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
$cat temp >> authorized_keys
$ scp [email protected]:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
$cat temp >> authorized_keys
$ scp [email protected]:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp
$cat temp >> authorized_keys
把authorized_keys拷贝到其他主机上
$scp ./authorized_keys [email protected]:/home/pgxc/.ssh/
$scp ./authorized_keys [email protected]:/home/pgxc/.ssh/
$scp ./authorized_keys [email protected]:/home/pgxc/.ssh/
$scp ./authorized_keys [email protected]:/home/pgxc/.ssh/
进行如上操作后便建立起了所有机器间的信任关系,可以用如下方式进行测试信任关系是否建立成功,在pgxc用户下执行如下命令:
$ssh [email protected] --如果不再提示输入密码,表示信任关系建立成功
(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
(2) 添加环境变量
在/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
(3) 放开防火墙限制
使用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
(4) 配置节点信息
选择一个主机,以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。修改配置文件后重新初始化和重新启动。