基于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(Global Transaction Manager)、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/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地址 |
LVS | lvs_master | 192.168.18.160 |
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 |
LVS软件信息:ipvsadm-1.24.tar
数据库软件信息:postgres-xl-v9.2-src.tar
注意:数据库的环境搭建、安装、维护等均在数据库所在的主机上进行操作,即gtm、gtm_standby、cd1、cd2、cd3。LVS安装、维护均在lvs_master上。
环境准备 (所有主机)
在数据库安装前需要确认如下依赖包已经安装,推荐在安装操作系统时使用完全安装,完全安装将会包含postgres所需的依赖包。需要的依赖包如下:
yum install -y flex bison readline-devel zlib-devel openjade docbook-style-dsssl;
因为分布式数据库是不能再root用户下运行的,所以在每台机器上都新建pgxc用户以及用户组:
#groupadd pgxc ----新建用户组 #useradd -g pgxc pgxc ----新建用户 #passwd pgxc ----修改新用户密码(为了后续方便操作,我将所有密码都设置为pgxc)
因为在使用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.160 lvs_master 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
在所有机器上执行如下命令
# su - pgxc $ssh-keygen -t rsa
---提示需要输入时,全部回车即可,执行完该命令后将会生成id_rsa.pub文件。
选择其中一台机器(任意一台,以164为例),以pgxc用户在其上执行如下命令,根据提示输入密码等信息,生成authorized_keys文件:
$cd ~/.ssh $ scp pgxc@192.168.18.164:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/authorized_keys $ scp pgxc@192.168.18.165:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp $cat temp >> authorized_keys $ scp pgxc@192.168.18.166:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp $cat temp >> authorized_keys $ scp pgxc@192.168.18.167:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp $cat temp >> authorized_keys $ scp pgxc@192.168.18.168:/home/pgxc/.ssh/id_rsa.pub /home/pgxc/.ssh/temp $cat temp >> authorized_keys
把authorized_keys拷贝到其他主机上
$scp ./authorized_keys pgxc@192.168.18.165:/home/pgxc/.ssh/ $scp ./authorized_keys pgxc@192.168.18.166:/home/pgxc/.ssh/ $scp ./authorized_keys pgxc@192.168.18.167:/home/pgxc/.ssh/ $scp ./authorized_keys pgxc@192.168.18.168:/home/pgxc/.ssh/
进行如上操作后便建立起了所有机器间的信任关系,可以用如下方式进行测试信任关系是否建立成功,在pgxc用户下执行如下命令:
$ssh pgxc@192.168.18.165 --如果不再提示输入密码,表示信任关系建立成功
数据库安装(所有主机)
目前本数据库采用的是编译安装的方式(也可以使用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
在/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
使用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
选择一个主机,以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。修改配置文件后重新初始化和重新启动。
数据库参数配置 (所有主机,可选)
安装完成后的目录信息如下:
[pgxc@cd1 nodes]$ pwd /home/pgxc/pgxc/nodes [pgxc@cd1 nodes]$ ls coordinator coordinator_archlog coordinator_s datanode datanode_archlog datanode_s gtm_pxy
数据库的参数主要涉及到两个配置文件:postgres.conf (配置数据库的基本信息)、pg_hba.conf(配置数据库的访问权限信息)。这两个配置文件的路径在对应的节点子目录中。
postgres.conf常用修改项: listen_addresses : 监听地址 port:监听端口 max_connections:支持最大连接数
pg_hba.conf配置项:
host all all 127.0.0.1/32 trust
第一个域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是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统。VS/NAT、VS/TUN、VS/DR技术是LVS集群中实现的三种IP负载均衡技术。本次数据库搭建采用VS/DR模式。
下面的操作,除掉特殊说明外,都是在LVS主备服务器上进行。
确认操作系统已经打好的LVS的补丁,目前的操作系统一般都已经包含了该补丁:
[root@localhost ~]# modprobe -l |grep ipvs kernel/net/netfilter/ipvs/ip_vs.ko kernel/net/netfilter/ipvs/ip_vs_rr.ko kernel/net/netfilter/ipvs/ip_vs_wrr.ko kernel/net/netfilter/ipvs/ip_vs_lc.ko kernel/net/netfilter/ipvs/ip_vs_wlc.ko kernel/net/netfilter/ipvs/ip_vs_lblc.ko kernel/net/netfilter/ipvs/ip_vs_lblcr.ko kernel/net/netfilter/ipvs/ip_vs_dh.ko kernel/net/netfilter/ipvs/ip_vs_sh.ko kernel/net/netfilter/ipvs/ip_vs_sed.ko kernel/net/netfilter/ipvs/ip_vs_nq.ko kernel/net/netfilter/ipvs/ip_vs_ftp.ko
创建连接:
[root@localhost ~]# ln -s /usr/src/kernels/2.6.32-279.el6.x86_64/ /usr/src/linux/
[root@localhost ~]# tar -zxf ipvsadm-1.24.tar.gz [root@localhost ~]# cd ipvsadm-1.24 [root@localhost ipvsadm-1.24]# make && make install
在主备LVS服务器上运行lvsdr.sh脚本,以配置VS/DR模式的调度器。在每台coordinator上运行relserver.sh脚本。这两个脚本的配置参数请根据实际的配置情况进行修改。
数据库连接及简单测试
通过coordinator连接数据库:
$ psql -h 192.168.18.206 -p 5432 -d postgres -U pgxc
格式说明:
psql -h hostname/ip -d database_name -p port -U username
hostname/ip:为安装有数据库的主机名称或IP地址 database_name:数据库名称 port:端口号,端口号为5432时可省略 username:连接该数据库使用的用户名
Postgres#create table test(id integer); Postgres#insert into test values(1); 。。。。 Postgres#insert into test values(9); Postgres#execute direct on(datanode1) ‘select * from test’; Postgres#execute direct on(datanode2) ‘select * from test’; Postgres#execute direct on(datanode3) ‘select * from test’; Postgres#execute direct on(datanode4) ‘select * from test’;
可以看出该数据分布到不同的数据节点上。
本文首发于 2016-03-15 19:56:52 注意:本篇文章成文时 Postgres-XC 还未改名为 Postgres-X2 。 1. 下载源码 git clone git@github.com:postgres-x2/postgres-x2.git 2. 安装依赖 对于 Ubuntu/Debian: apt-get install -y git-core apt-get install
1引言 Postgres-XL 是一个通用的 ACID 开源的、可方便进行水平扩展的 SQL 数据库解决方案。基于 PostgreSQL 数据库构建。Postgres-XL 可用于商业智能、大数据分析、Web 2.0、传统应用等场合。 此搭建过程是基于pgxc_ctl进行的安装的,除此外还有手动安装。 搭建过程参考: http://blog.chinaunix.net/uid-20498361-i
数据库版本:postgresxc 1.1(postgresql 9.2.4) 作者:高铭杰 邮箱:jackgo73@outlook.com 日期:2017年4月8日 Postgres-XC集群部署实例(单机调试) 开始接触神奇的xc :),边学变记录单机部署pgxc集群的方法,仅供娱乐与调试。后面的实例会继续补充。(使用单用户+切换pg环境变量的脚本在调试代码的时候很方便) 版本 链接 Pos
简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。 数据类型 数值类型 名字 存储长度 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer 4
集群策略插件化 分布式集群策略采用插件的方式实现,通过SPI的形式发布,通过配置文件激活。 zookeeper分布式策略
Map Redisson 分布式的 Map 对象,实现了 java.util.concurrent.ConcurrentMap 和 java.util.Map 接口。 Map 的大小由 Redis 限制为 4 294 967 295。 RMap<String, SomeObject> map = redisson.getMap("anyMap"); SomeObject prevObject =
我有两个节点的完全分布式Hadoop和Hbase实例。HDFS在主机和从机上工作良好。但是HBase shell只在节点名格式化之后工作一次,并且集群是新的,之后我得到错误:error:org.apache.hadoop.HBase.PleaseHoldException:Master is initializing HBase 我也不能通过hbase shell从slave连接我总是得到错误连接
5.3 ABP分布式服务 - 集成OData 5.3.1 简介 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务。你可以在Abp中使用OData,只需要通过Nuget来安装Abp.Web.Api.OData. 5.3.2 安装 1. 使用Nuget安装 首先应该使用Nuget安装Abp.Web.Api.OData到我们的WebApi项目
一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基本可用 软状态 最终一致性 五、Paxos 执行过程 约束条件 六、Raft 单个 Candidate 的竞选 多个 Candidate 竞选 数据同步 参考 一、分
5.4 ABP分布式服务 - 集成SwaggerUI 5.4.1 简介 从官网得知,开启Swagger,你可以获得一个交互式的文档,生成和发现客户端SDK。 5.4.2 ASP.NET Core 1. 安装 你可以很容易的集成Swagger到基于ASP.NET Core的 ABP项目。 2. 安装Nuget包 安装 Swashbuckle nuget包到你的Web项目。 3. 配置 在 Start
本文将介绍基于Spring Cloud + feign 如何集成 Seata(1.4.0)的TCC模式。实际上,Seata的AT模式基本上能满足我们使用分布式事务80%的需求,但涉及不支持事务的数据库与中间件(如redis)等的操作,或AT模式暂未支持的数据库(目前AT支持Mysql、Oracle与PostgreSQL)、跨公司服务的调用、跨语言的应用调用或有手动控制整个二阶段提交过程的需求,则需
主要内容:并行化集合,外部数据集RDD(弹性分布式数据集)是Spark的核心抽象。它是一组元素,在集群的节点之间进行分区,以便我们可以对其执行各种并行操作。 有两种方法可以用来创建RDD: 并行化驱动程序中的现有数据 引用外部存储系统中的数据集,例如:共享文件系统,HDFS,HBase或提供Hadoop InputFormat的数据源。 并行化集合 要创建并行化集合,请在驱动程序中的现有集合上调用的方法。复制集合的每个元素以形成