Postgres-X2 PostgreSQL分布式集群开源项目

我要开发同款
匿名用户2015年11月16日
61阅读
开发技术C/C++
所属分类数据库相关、数据库调整和优化
授权协议BSD

作品详情

基于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(GlobalTransactionManager)、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/issueCentOSrelease6.3(Final)Kernel\ronan\m[root@localhost~]#uname-aLinuxlocalhost.localdomain2.6.32-279.el6.x86_64#1SMPFriJun2212:19:21UTC2012x86_64x86_64x86_64GNU/Linux

安装用户:pgxc

安装根目录:/home/pgxc

IP资源分配如下:

功能主机名IP地址LVSlvs_master192.168.18.160GlobalTransactionManagergtm192.168.18.164GlobalTransactionManagerStandbygtm_standby192.168.18.165Coordinator1/Datanode1/GTMProxycd1192.168.18.166Coordinator2/Datanode2/GTMProxycd2192.168.18.167Coordinator3/Datanode3/GTMProxycd3192.168.18.168

安装存储目录:

主机名目录gtm~/gtmgtm_standby~/gtmcd1~/coordinator~/datanode~/coordinator_s~/datanode_scd2~/coordinator~/datanode~/coordinator_s~/datanode_scd3~/coordinator~/datanode~/coordinator_s~/datanode_s

端口规划:

主机名端口gtm6666gtm_standby6666datanode1/datanode2_s15432datanode2/datanode3_s15433datanode3/datanode1_s15434coordinator1/coordinator2_s5432coordinator2/coordinator3_s5433coordinator3/coordinator4_s5434coordinator1poolerPorts20010coordinator2poolerPorts20011coordinator3poolerPorts20012datanode1poolerPorts20013datanode2poolerPorts20014datanode3poolerPorts20015

LVS软件信息:ipvsadm-1.24.tar

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

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

环境准备(所有主机)

1 安装依赖包

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

yuminstall-yflexbisonreadline-develzlib-developenjadedocbook-style-dsssl;2 新建pgxc用户

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

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

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

#vi/etc/hosts127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6192.168.18.160lvs_master192.168.18.164gtm192.168.18.165gtm_standby192.168.18.166cd1192.168.18.167cd2192.168.18.168cd3

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

[root@localhost~]#hostnamegtm[root@localhost~]#vi/etc/sysconfig/networkNETWORKING=yesHOSTNAME=gtm4 建立信任关系

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

#su-pgxc$ssh-keygen-trsa

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

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

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

把authorized_keys拷贝到其他主机上

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

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

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

数据库安装(所有主机)

1 安装数据库

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

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

[pgxc@gtm~]$tar-zxfpostgres-xl-v9.2-src.tar.gz[pgxc@gtm~]$cdpostgres-xl[pgxc@gtmpostgres-xl]$./configure--prefix=/home/pgxc/pgxl---指定安装路径[pgxc@gtmpostgres-xl]$make[pgxc@gtmpostgres-xl]$makeinstall[pgxc@gtmpostgres-xl]$cdcontrib/[pgxc@gtmpostgres-xl]$make[pgxc@gtmpostgres-xl]$makeinstall2 添加环境变量

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

exportPGHOME=/home/pgxc/pgxlexportPGUSER=pgxcexportLD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATHexportPATH=$PGHOME/bin:$PATH[pgxc@gtmpostgres-xl]$source~/.bashrc3 放开防火墙限制

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

关闭防火墙的命令如下:

---永久关闭

#chkconfigiptableson--重启后生效

--暂时关闭

#serviceiptablesstop--重启后失效

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

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

增加如下信息:

-AOUTPUT-ptcp--sport5432-jACCEPT-AINPUT-ptcp--dport5432-jACCEPT-AOUTPUT-ptcp--sport5433-jACCEPT-AINPUT-ptcp--dport5433-jACCEPT-AOUTPUT-ptcp--sport5434-jACCEPT-AINPUT-ptcp--dport5434-jACCEPT-AOUTPUT-ptcp--sport15432-jACCEPT-AINPUT-ptcp--dport15432-jACCEPT-AOUTPUT-ptcp--sport15433-jACCEPT-AINPUT-ptcp--dport15433-jACCEPT-AOUTPUT-ptcp--sport15434-jACCEPT-AINPUT-ptcp--dport15434-jACCEPT-AOUTPUT-ptcp--sport20010-jACCEPT-AINPUT-ptcp--dport20010-jACCEPT-AOUTPUT-ptcp--sport20011-jACCEPT-AINPUT-ptcp--dport20011-jACCEPT-AOUTPUT-ptcp--sport20012-jACCEPT-AINPUT-ptcp--dport20012-jACCEPT-AOUTPUT-ptcp--sport20013-jACCEPT-AINPUT-ptcp--dport20013-jACCEPT-AOUTPUT-ptcp--sport20014-jACCEPT-AINPUT-ptcp--dport20014-jACCEPT-AOUTPUT-ptcp--sport20015-jACCEPT-AINPUT-ptcp--dport20015-jACCEPT-AOUTPUT-ptcp--sport20016-jACCEPT-AINPUT-ptcp--dport20016-jACCEPT:wq![root@cd2~]#serviceiptablesrestart4 配置节点信息

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

[pgxc@gtm_standbypgxc_ctl]$./pgxc_ctlInstallingpgxc_ctl_bashscriptas/home/pgxc/pgxc_ctl/pgxc_ctl_bash.ERROR:File"/home/pgxc/pgxc_ctl/pgxc_ctl.conf"notfoundornotaregularfile.NosuchfileordirectoryInstallingpgxc_ctl_bashscriptas/home/pgxc/pgxc_ctl/pgxc_ctl_bash.Readingconfigurationusing/home/pgxc/pgxc_ctl/pgxc_ctl_bash--home/home/pgxc/pgxc_ctl--configuration/home/pgxc/pgxc_ctl/pgxc_ctl.confFinishedtoreadconfiguration.********PGXC_CTLSTART***************Currentdirectory:/home/pgxc/pgxc_ctlPGXCprepare---执行该命令将会生成一份配置文件模板PGXC^C

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

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

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

$pgxc_ctl-cpgxc_ctl.confinitall--初始化完成后会自动启动

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

$pgxc_ctl-cpgxc_ctl.confstopall---停止整个分布式集群$pgxc_ctl-cpgxc_ctl.confstartall--启动整个分布式集群

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

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

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

[pgxc@cd1nodes]$pwd/home/pgxc/pgxc/nodes[pgxc@cd1nodes]$lscoordinatorcoordinator_archlogcoordinator_sdatanodedatanode_archlogdatanode_sgtm_pxy

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

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

pg_hba.conf配置项:

hostallall127.0.0.1/32trust

第一个域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是LinuxVirtualServer的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统。VS/NAT、VS/TUN、VS/DR技术是LVS集群中实现的三种IP负载均衡技术。本次数据库搭建采用VS/DR模式。

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

1 搭建准备

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

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

创建连接:

[root@localhost~]#ln-s/usr/src/kernels/2.6.32-279.el6.x86_64//usr/src/linux/2 安装ipvsadmin[root@localhost~]#tar-zxfipvsadm-1.24.tar.gz[root@localhost~]#cdipvsadm-1.24[root@localhostipvsadm-1.24]#make&&makeinstall3 配置ipvsadmin

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

数据库连接及简单测试

通过coordinator连接数据库:

$psql-h192.168.18.206-p5432-dpostgres-Upgxc

格式说明:

psql-hhostname/ip-ddatabase_name-pport-Uusername

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

Postgres#createtabletest(idinteger);Postgres#insertintotestvalues(1);。。。。Postgres#insertintotestvalues(9);Postgres#executedirecton(datanode1)‘select*fromtest’;Postgres#executedirecton(datanode2)‘select*fromtest’;Postgres#executedirecton(datanode3)‘select*fromtest’;Postgres#executedirecton(datanode4)‘select*fromtest’;

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

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论