Postgres-XL使用说明文档 下载本文

Postgres-XL使用说明文档

一、知识点介绍

Postgres-XL是一个基于PostgreSQL数据库的横向扩展开源SQL数据库集群,XL代表eXtensible Lattice,即可扩展的PG“格子”之意,以下简称PGXL。官方称其既适合写操作压力较大的OLTP1应用,又适合读操作为主的大数据应用。它的前身是Postgres-XC(简称PGXC),PGXC是在PG的基础上加入了集群功能,主要适用于OLTP2应用;PGXL是在PGXC的基础上的升级产品,加入了一些适用于OLAP应用的特性,如 Massively Parallel Processing (MPP) 特性。通俗的说PGXL的代码是包含PG代码的,使用PGXL安装PG集群并不需要单独安装PG。

总体感觉PGXL这款工具还是相当成熟的,有官方网站http://www.postgres-xl.org/,文档也比较完善,也有商业公司2ndQuadrant在支持。

上面这张图就是PGXL集群的架构图,来自官方网站。所有节点中分为三种角色:GTM(全局事务管理器)、Coordinator(协调器)和Datanode(数据节点)。需要注意一点是图 1

OLTP联机事务处理过程(On-Line Transaction Processing),也称为面向交易的处理过程,其基本特

征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。OLTP系统强调数据库内存效率,强调内存各种指标的命令率,强调

绑定变量,强调并发操作; 2

OLAP,也叫联机分析处理(On-line Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,因为一条语句的执行时间可能会非常长,读取的数据也非常多。所以,在这样的系统中,考核的标准往往是磁盘子系统的吞吐量(带宽),如能达到多少MB/s的流量。OLAP系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。

中的Load Balance组件并不属于PGXL集群本身,需要其他负载均衡工具实现。

GTM:

全局事务控制节点,保证集群数据的一致性,与Coordinator节点和Datanode节点不断通信,是整个集群的核心节点,只存在一个,可以存在一个GTM Standby节点,对GTM实时备份。GTM一旦故障,整个集群立刻无法访问,此时可以切换到GTM Standby节点上。如果部署了GTM Standby节点,就应该同时部署GTM Proxy,一般和Coordinator、Datanode部署在同一台服务器上。GTM Proxy的作用代理Coordinator和Datanode对GTM的访问,起到减轻GTM负载的作用,另外一个重要的作用是帮助完成GTM的故障切换,当GTM节点发生故障后,GTM Standby成为新的GTM,此时Coordinator和Datanode节点并不需要重新指定GTM地址,只需要GTM Proxy重新连接到新的GTM地址即可。

Coordinator:

接收数据访问请求的节点,本质上是由PG后台进程组成。接收的一条查询后,Coordinator节点执行查询计划,然后会根据查询数据涉及的数据节点将查询分发给相关的数据节点。写入数据时,也会根据不同的数据分布策略将数据写入相关的节点。可以说Coordinator节点上保存着集群的全局数据位置。Coordinator节点可以任意扩展,各个节点之间除了访问地址不同以外是完全对等的,通过一个节点更新的数据可以在另一个节点上立刻看到。每个Coordinator节点可以配置一个对应的standby节点,避免单点故障。

Datanode:

实际存取数据的节点,接收Coordinator的请求并执行SQL语句存取数据,节点之间也会互相通信。一般的,一个节点上的数据并不是全局的,数据节点不直接对外提供数据访问。一个表的数据在数据节点上的分布存在两种模式:复制模式和分片模式,复制模式下,一个表的数据在指定的节点上存在多个副本;分片模式下,一个表的数据按照一定的规则分布在多个数据节点上,这些节点共同保存一份完整的数据。这两种模式的选择是在创建表的时候执行CREATE TABLE语句指定的,具体语法如下: CREATETABLE table_name(...) DISTRIBUTEBY HASH(col)|MODULO(col)|ROUNDROBIN|REPLICATION TO NODE(nodename1,nodename2...) 可以看到,如果DISTRIBUTE BY 后面是REPLICATION,则是复制模式,其余则是分片模式,HASH指的是按照指定列的哈希值分布数据,MODULO指的是按照指定列的取摩运算分布数据,ROUNDROBIN指的是按照轮询的方式分布数据。TO NODE指定了数据分布的节点范围,如果没有指定则默认所有数据节点参与数据分布。如果没有指定分布模式,即使用普通的CREATE TABLE语句,PGXL会默认采用分片模式将数据分布到所有数据节点。

二、安装说明 1. 下载安装包

https://www.postgres-xl.org/download/

当前最新版本为:postgres-xl-9.5r1.6.tar.bz2

2. 主机规划

服务器分配:(手动配置分配) 操作系统 IP地址 Kylin3.2 Kylin3.2 Kylin3.2 192.168.51.2 主机名称 scada_server1 节点类型 gtm,coordinator1,coordinator2 datanode1,datanode2 datanode3,datanode4 节点类型 gtm coordinator1,datanode1,datanode2 coordinator2,datanode3,datanode4 节点类型 gtm coordinator coordinator datanode datanode datanode datanode 节点类型 gtm gtm_proxy coordinator gtm_proxy coordinator datanode datanode datanode datanode 端口号 6666 5301 5302 5401 5402 5401 5402 端口号 20001 20001 20004 20001 20004 20008 20009 20008 20009 其他 其他 192.168.51.125 scada_server2 192.168.51.120 scada_server3 主机名称 scada_server1 服务器分配:(自动配置分配) 操作系统 IP地址 Kylin3.2 Kylin3.2 Kylin3.2 节点名称 gtm coord1 coord2 dn1 dn2 dn3 dn4 节点名称 gtm gtm_pxy coord1 gtm_pxy coord2 dn1 dn2 dn3 dn4 192.168.51.2 192.168.51.125 scada_server2 192.168.51.120 scada_server3 所在机器 scada_server1@192.168.51.2 scada_server1@192.168.51.2 scada_server1@192.168.51.2 scada_server2@192.168.51.125 scada_server2@192.168.51.125 scada_server3@192.168.51.120 scada_server4@192.168.51.120 所在机器 scada_server1@192.168.51.2 scada_server2@192.168.51.125 scada_server2@192.168.51.125 scada_server3@192.168.51.120 scada_server3@192.168.51.120 scada_server2@192.168.51.125 scada_server2@192.168.51.125 scada_server3@192.168.51.120 scada_server4@192.168.51.120 各个节点划分:(手动配置划分) 连接池端口号 6701 6702 6801 6802 6801 6802 连接池端口号 20010 20010 20012 20013 20012 20013 各个节点划分:(自动配置划分) 3. 修改节点Host配置

每个节点已root用户执行下面操作: # vi /etc/hosts

在文件后面追加以下内容: 192.168.51.2 scada_server1 192.168.51.125 scada_server2 192.168.51.120 scada_server3

4. 安装依赖软件包

需要安装的依赖包:

openssh-clients,flex,bison,readline-devel,zlib-devel,openjade,docbook-style-dsssl,gcc 检查需要依赖的包: # rpm -qa |grep xxx

如果上述命令能够输出包的信息则说明该包已经存在。(kylin3.2操作系统自带上述所有包!)

5. 卸载系统自带PostgreSQL数据库

以root用户执行:

查询系统是否安装自带软件: 查询:

#rpm -qa |grep postgresql 若有则删除已安装软件: 删除:

#rpm -qa |grep postgresql | xargs rpm -e --nodeps 查询是否删除干净: 查询:

#rpm -qa |grep postgresql

6. 每个节点添加postgres用户

以root用户执行: 建立组:

#groupadd postgres 建立用户:

#useradd -m -d /home/postgres postgres -g postgres 初始化密码: #passwd postgres

输入密码:abcd.135(举例)

注:如果需要删除postgres用户,可以以root用户执行命令: