目录
章节一:介绍Greenplum
章节二:预估存储容量
章节三:系统环境配置
章节四:安装前环境配置
章节五:安装Greenplum
章节六:检查批量安装情况
章节七、创建数据存储区域
章节八:验证你的系统环境
章节十:验证你的硬件性能
章节十一:字符集问题
章节十二:初始化GreenPlum
章节十三:设置环境变量
章节十四:操作数据库
章节十五:增加Segment镜像
章节一:介绍Greenplum
Greenplum的数据库是一个大规模并行处理(MPP)数据库服务器架构,该架构是专为管理大规模的数据仓库和商业智能设计的。由Pivotal公司开源,之前是商业的。
MPP(也称为shared nothing架构)是指系统具有两个或更多个处理机合作执行操作,每个处理机有它自己的内存,操作系统和磁盘。Greenplum使用这种高性能的系统架构来分布式加载multi-terabyte数据仓库,并且可以使用所有的系统资源并行处理查询。
Greenplum的数据库是基于PostgreSQL的开源技术,它本质上是几个PostgreSQL数据库实例一起协作当做一个有凝聚力数据库管理系统(DBMS)使用。GREENPLUM 数据库是基于PostgreSQL 8.2.15的,在SQL支持、产品特点、配置选项和终端用户功能方面,大多数情况下是与Postgres非常相似的。与Greenplum数据库的用户交互也类似一个普通的PostgreSQL数据库管理系统。
PostgreSQL的内部已被修改或补充,以支持Greenplum数据库的并行结构。例如,该系统目录,优化器,查询执行器,和事务管理器组件已被修改和改进,以支持能够在所有并行的PostgreSQL数据库实例同时执行查询。Greenplum Interconnect可使不同的PostgreSQL实例之间进行通信,并且使系统表现为一个逻辑数据库。
Greenplum数据库也有特有的特征,如优化的PostgreSQL商业智能功能(BI)与工作负载。另外,Greenplum增加了并行数据加载(外部表)、资源管理、查询优化、存储增强等功能,这些功能在标准PostgreSQL中都是没有的。由Greenplum开发的许多功能和优化也进入PostgreSQL的社区。例如,表分区是首先由Greenplum的开发了一种功能,它现在也在标准的PostgreSQL中了。
Greenplum数据存储和处理大数据量,是通过跨多个服务器和主机分配数据和负载。Greenplum数据库是基于PostgreSQL8.2单个数据库的阵列,这些数据库像单个数据库一样共同工作。master主机是Greenplum数据库系统的入口点,它是客户端连接并提交SQL语句的接口数据库实例。 Master协调系统中其他数据库实例(称为Segment)的工作负载,处理数据和存储。 分段通过互连,Greenplum数据库的网络层互相通信和主控。
Greenplum数据库是一个纯软件解决方案,硬件和数据库软件不耦合。 Greenplum数据库在Greenplum认证的硬件供应商的各种服务器平台上运行。 性能取决于安装硬件的硬件。 由于数据库分布在Greenplum数据库系统中的多台机器上,硬件的正确选择和配置对于实现最佳性能至关重要。
本章介绍了Greenplum数据库系统的主要组件以及与每个组件关联的硬件注意事项和概念:Greenplum Master,Segments和Interconnect。此外,系统可能具有用于数据加载的可选ETL主机和用于监视查询工作负载和性能的Greenplum性能监视器。
1.1 Greenplum Master
Master是Greenplum数据库系统的入口点,数据库服务器进程接受客户端连接并处理系统用户发出的SQL命令。用户使用PostgreSQL兼容的客户端程序(如psql或ODBC)通过主服务器连接到Greenplum数据库。
Master维护系统目录(一组包含有关Greenplum数据库系统本身的元数据的系统表),但是该主机不包含任何用户数据。数据仅驻留在Segment主机上。Master验证客户端连接,处理传入的SQL命令,在Segment主机之间分配工作负载,协调每个Segment返回的结果,并将最终结果呈现给客户端程序。
因为Master不包含任何用户数据,所以它的磁盘负载很少。Master需要一个快速专用的CPU来进行数据加载,连接处理和查询计划,因为登陆加载文件和备份文件通常需要额外的空间,特别是在生产环境中。客户可能决定在主机上运行ETL和报告工具,这需要更多的磁盘空间和处理能力。
1.1.1 Master冗余
你可以选择部署Master实例的备份,如果Master主机变为非运行状态,则备用主机(Standby)将作为热备份。你可以在指定的冗余主机或其中一个Segment主机上部署备用主机。
Standby通过事务日志复制进程保持最新状态,该进程在备用主机(Standby)上运行,并同步Master主机和Standby主机之间的数据。如果Master主机失败,日志复制过程将关闭,管理员可以激活Standby。当Standby处于活动状态时,复制日志重建用于上一次成功提交事务时Master主机的状态。
由于Master不包含任何用户数据,因此只需要在Master和Standby之间同步系统目录表。当这些表被更新时,更改会自动复制到Standby,以便始终与主站同步。
1.2 Greenplum Segment
在Greenplum数据库中,Segment是存储数据的地方,并且发生大多数查询处理。 用户定义的表及其索引分布在Greenplum数据库系统中的可用Segment; 每个Segment包含数据的不同部分。用户不直接与Greenplum数据库系统中的segment进行交互,而是通过Master进行交互。
在参考Greenplum数据库硬件配置中,每个segment主机的segment实例数由有效的CPU或CPU内核的数量决定。 例如,如果你的segment主机有两个双核处理器,则每个主机可能有两个或四个主要segment。 如果你的segment主机有三个四核处理器,则每个主机可能有三个,六个或十二个segment。性能测试将有助于确定所选硬件平台的最佳segment。
1.2.1 Segment冗余
部署你的Greenplum数据库系统时,你可以选择配置镜像segment。如果primary segment变得不可用,则镜像segment允许数据库查询故障切换到镜像segment。
镜像segment必须始终位于与primary不同的主机上。镜像segment可以通过两种标准配置中的一种或你设计的自定义配置在系统中的主机之间进行布置。默认配置(称为组镜像)将所有primary segment的镜像放置在另一主机上的主机上。另一种称为扩展镜像的选项,在其他主机上为每个主机的主要segment传播镜像。在具有多个网络接口的主机上,主接口和镜像接口间平均分配。下图:Greenplum数据库中的数据镜像数据库显示如何配置默认组镜像选项,表格数据如何分布在各个segment中。
1.2.2 Segment故障切换和恢复
当在Greenplum数据库系统中启用镜像时,如果primary segment不可用,系统将自动故障转移到镜像副本。如果segment实例或主机只有在剩余活动segment上的所有数据部分都可用时,Greenplum数据库系统才能保持运行状态。
如果Master服务器无法连接到segment实例,则会在Greenplum数据库系统目录中将该segment实例标记为无效。Segment实例保持无效并停止运行,直到管理员将该Segment重新联机。管理员可以在系统启动并运行时恢复故障Segment,恢复过程仅复制该Segment不工作时遗漏的更改。
如果你没有启用镜像并且Segment变得无效,系统将自动关闭,管理员必须在启动之前恢复所有故障Segment。
1.2.3 示例Segment主机硬件堆栈
不管你选择的硬件平台如何,生产Greenplum数据库处理节点(Segment主机)通常按本节所述进行配置。
Segment主机执行大部分数据库处理,因此配置好Segment主机服务器,以便从你的Greenplum数据库系统获得最佳性能。Greenplum数据库的性能将与数组中最慢的Segment服务器一样快,也就是性能以最慢的Segment为准。因此,确保运行Greenplum数据库的基础硬件和操作系统都以最佳性能水平运行非常重要。还建议,Greenplum数据库阵列中的所有Segment主机都具有相同的硬件资源和配置。
Segment主机也应专用于Greenplum数据库操作,要获得最佳查询性能,你不希望Greenplum数据库与其他应用程序竞争机器或网络资源。
下图显示了Greenplum数据库Segment主机的硬件堆栈,主机上有效CPU的数量是确定每个Segment主机部署多少个Segment实例的基础。该示例显示了一个具有两个有效CPU(一个双核CPU)的主机。请注意,每个CPU内核有一个primary segment实例。
1.2.4 示例Segment磁盘布局
每个CPU通常映射到逻辑磁盘,逻辑磁盘由一个主文件系统(可选的镜像文件系统)组成,通过I/O通道或磁盘控制器访问物理磁盘池。逻辑磁盘和文件系统由操作系统提供。大多数操作系统提供了逻辑磁盘驱动器使用RAID阵列中安排的物理磁盘组的功能。
根据你选择的硬件平台,不同的RAID配置提供不同的性能和容量级别。Greenplum支持并认证了许多参考硬件平台和操作系统,请在你选择的平台上与你的销售客户代表联系,了解推荐的配置。
1.2.5 网络互连
网络互连是Greenplum数据库的网络层,当用户连接到数据库并发出查询时,会在每个Segment上创建进程以处理该查询的工作。网络互连是指Segment之间的进程间通信以及该通信所依赖的网络基础设施,网络互连使用标准的10千兆以太网交换结构。
默认情况下,Greeplum数据库互连使用具有流量控制的UDP(用户数据报协议)协议发送消息。 Greenplum软件做了附加分组验证和检查不由UDP协议执行,性能和可扩展性超过TCP。有关Greeplum数据库支持的互连类型的信息,请参阅“Greenplum数据库参考指南”中的服务器配置参数gp_interconnect_type。
1.2.5.1 网络互连冗余
可以通过在网络上部署双万兆以太网交换机,以及与Greenplum数据库主服务器和分段主机服务器的冗余10千兆位连接来实现高可用的互连。
1.2.5.2 网络接口配置
Segment主机通常具有指定给Greenplum互联流量的多个网络接口。除了用于互联通信的接口之外,主主机通常还具有额外的外部网络接口。
根据可用的接口数量,您将要跨可用接口数量分配互连网络流量。这通过将段实例分配给特定网络接口来实现,并确保主段在可用接口数量上均匀平衡。
这可以通过为每个网络接口创建单独的主机地址名称来完成。例如,如果主机具有四个网络接口,则它将具有四个相应的主机地址,每个主机地址映射到一个或多个主分段实例。应将/ etc / hosts文件配置为不仅包含每个计算机的主机名,还包含所有Greenplum数据库主机(主,备用主,分段和ETL主机)的所有接口主机地址。
通过此配置,操作系统会自动选择到达目的地的最佳路径。 Greenplum数据库自动平衡网络目的地以最大化并行性。
1.2.6 交换机配置
在Greenplum Database阵列中使用多个万兆以太网交换机时,可均匀分配每个交换机之间的子网数量。 在此示例配置中,如果我们有两个交换机,每个主机上的NIC 1和2将使用交换机1,并且每个主机上的NIC 3和4将使用交换机2.对于主主机,绑定到NIC 1的主机名(因此 使用开关1)是阵列的有效主机主机名。 因此,如果为了冗余目的部署热备用主站,备用主站应映射到使用与主主机不同的交换机的NIC。
1.3 ETL主机加载数据
Greenplum支持使用其外部表功能可以快速并行的数据加载。通过使用外部表与Greenplum数据库的并行文件服务器(gpfdist)结合使用,管理员可以从其Greenplum数据库系统实现最大的并行度和负载带宽。许多生产系统部署指定的ETL服务器以进行数据加载,这些机器运行Greenplum并行文件服务器(gpfdist),但不运行Greenplum数据库实例。
使用gpfdist文件服务器程序的一个优点是,它可以确保在从外部表数据文件读取时,您的Greenplum数据库系统中的所有Segment都被充分利用。gpfdist程序可以为segment实例提供数据,平均速率约为350MB/s,分隔文本格式的文件和CSV格式的文件为200MB/s。因此,为了最大化ETL系统的网络带宽,运行gpfdist时应考虑以下选项:
如果您的ETL机器配置了多个网络接口卡(NIC),请在ETL主机上运行每个gpfdist实例,然后定义外部表,以便每个NIC的主机名在LOCATION子句(请参阅“Greenplum数据库参考指南”中的CREATE EXTERNAL TABLE)。这允许您的Greenplum Segment主机和ETL主机之间的网络流量同时使用所有NIC。
在ETL主机上运行多个gpfdist实例,并在每个实例之间平均划分外部数据文件。 例如,如果您有一个具有两个网络接口卡(NIC)的ETL系统,那么您可以在该机器上运行两个gpfdist实例,以最大化您的负载性能。 然后,您将在两个gpfdist程序之间平均分配外部表数据文件。
1.4 Greenplum性能监视器
Greenplum还提供可选的监控和管理工具,管理员可以安装并启用Greenplum数据库。 要使用Greenplum性能监视器,您的Greenplum数据库阵列中的每个主机都必须安装并启用数据收集代理。 当你开始Greenplum性能监视器,代理开始收集关于查询和系统利用率的数据,代理定期将数据发送到Greenplum Master(通常每15秒)。用户可以查询Greenplum Performance Monitor数据库,查看有效查询和历史查询和系统性能数据。 Greenplum Performance Monitor还具有图形化的基于Web的用户界面,用于查看这些性能指标并以其他方式管理其Greenplum。
章节二:预估存储容量
2.1 计算可用磁盘容量
要计算Greenplum数据库系统可以容纳多少数据,您必须计算每个Segment主机的可用磁盘容量,然后将其乘以您的Greenplum数据库数组中的Segment主机数。从可用于数据存储(raw_capacity)的段主机上的物理磁盘的原始容量开始,它是:disk_size * number_of_disks。
对于记录文件系统格式化开销(大约10%)和您使用的RAID级别。例如,如果使用RAID-10,计算将是:(raw_capacity * 0.9)/ 2 = formatted_disk_space
为了获得最佳性能,Pivotal建议您不要将磁盘完全填满容量,而是运行在70%以下。所以考虑到这一点,计算可用的磁盘空间如下:formatted_disk_space * 0.7 = useful_disk_space
一旦占用了最大推荐容量(availability_disk_space),则需要计算实际可用于用户数据的存储空间。如果使用Greenplum数据库镜像进行数据冗余,则会使用户数据的大小增加一倍。Greenplum数据库还需要保留一些空间作为活动查询的工作区域,工作空间应大约用户数据大小的三分之一。
临时文件空间和用户数据空间的准则假定是一个典型的分析工作负载,高度并发的工作负载或需要非常大量临时空间查询的工作负载可以从预留更大的工作区域中获益。通常,通过适当的工作负载管理,可以提高总体系统吞吐量,同时减少工作区域的使用。此外,临时空间和用户空间可以通过指定它们驻留在不同的表空间上来彼此隔离。
2.2 计算用户数据大小
与所有数据库一样,原始数据的大小一旦加载到数据库中将略大。平均来说,原始数据在加载到数据库之后将大约是磁盘的1.4倍,但根据你使用的数据类型,表存储类型,数据库内压缩等,可能会更小或更大。
- 页面开销 – 当您的数据加载到Greenplum数据库时,它分为32KB的页面,每页有20字节的页面开销。
- 行开销 – 在常规“堆”存储表中,每行数据具有24个字节的行开销,“append-optimized”存储表只有4字节的行开销。
- 属性开销 – 对于数据值本身,与每个属性值相关联的大小取决于所选择的数据类型。通常,您希望使用尽可能小的数据类型来存储数据(假设您知道列可能有的值)。
- 索引 – 在Greenplum数据库中,索引通过表数据分布在Segment主机上。Greenplum数据库中的默认索引类型是B-tree,因为索引大小取决于索引中唯一值的数量和要插入的数据,因此预先计算索引的确切大小是不可能的。但是,您可以使用这些公式粗略地估计索引的大小。
Btree:unique_values *(data_type_size + 24bytes)
Bitmap:(unique_values * number_of_rows * 1 bit * compression_ratio / 8)+(unique_values * 32)
2.3 计算元数据和日志的空间需求
在每个Segment主机上,您还需要考虑到Greenplum数据库日志文件和元数据的空间:
- 系统元数据 – 对于在主机上运行的每个Greenplum数据库Segment实例(primary segment或mirror segment)或Master实例,估计系统目录和元数据的大约20MB。
- 写入前端日志 – 对于在主机上运行的每个Greenplum数据库Segment实例(primary segment或mirror segment)或Master实例,为写入预写入日志(WAL)分配空间,WAL分为每个64MB的Segment文件。最多,WAL文件的数量将是:2 * checkpoint_segments + 1。
您可以使用它来估计WAL的空间需求,Greenplum数据库实例的默认checkpoint_segments设置为8,这意味着为主机上的每个Segment或Master实例分配1088 MB的WAL空间。
- Greenplum数据库日志文件 – 每个Segment实例和Master实例生成数据库日志文件,这将随着时间的推移而增长,应该为这些日志文件分配足够的空间,并且应该使用某些类型的日志转换工具来确保日志文件不会增长太大。
- 命令中心数据 – Command Center使用的数据收集代理程序与Greenplum数据库实例在同一组主机上运行,并利用这些主机的系统资源。这些主机上的数据收集代理进程的资源消耗最小,不应显着影响数据库性能,存储收集代理收集的历史数据。
在您的Greenplum数据库系统中的Command Center数据库(名为gpperfmon)中。收集的数据就像常规数据库数据一样分发,因此您需要考虑到您的Greenplum Segment实例的数据目录位置中的磁盘空间。所需空间的数量取决于您希望保留的历史数据量,历史数据不会自动截断,数据库管理员必须设置一个截断策略来维护Command Center数据库的大小。
章节三:系统环境配置(所有节点)
3.1 系统内核参数优化配置
修改文件/etc/sysctl.conf,使用sysctl -p命令即时生效。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
kernel.shmmax = 500000000 kernel.shmmni = 4096 kernel.shmall = 4000000000 kernel.sem = 250 512000 100 2048 kernel.sysrq = 1 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.msgmni = 2048 net.ipv4.tcp_syncookies = 1 net.ipv4.ip_forward = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.conf.all.arp_filter = 1 net.ipv4.ip_local_port_range = 1025 65535 net.core.netdev_max_backlog = 10000 net.core.rmem_max = 2097152 net.core.wmem_max = 2097152 vm.overcommit_memory = 2 |
3.2 修改Linux最大限制
追加到文件/etc/security/limits.conf即可。
1 2 3 4 |
* soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 |
3.3 XFS文件系统
GP建议使用XFS文件系统,我的系统都是CentOS 7,所以默认就是XFS文件系统。如果你是CentOS 6系统,默认是EXT4,需要额外安装XFS文件系统。
所有节点单独挂载一块磁盘,我这里标识为sdb。
1 |
$ mkfs.xfs /dev/sdb |
然后在/etc/fstab文件中追加挂载命令:
1 |
/dev/sdb /data xfs nodev,noatime,inode64,allocsize=16m 0 0 |
执行mount -a挂载即可。
3.4 设置磁盘预读扇区数
对于预读扇区数,官方文档的推荐值为16384,但译者认为应该为65536更合理。实际上预读的字节数是blockdev设置除以2,而GP缺省的blocksize为32KB,刚好与65536(32768B/32KB)对应。
检查某块磁盘的read-ahead设置:
1 2 |
$ blockdev --getra /dev/sdb 8192 |
临时修改系统的read-ahead设置:
1 |
$ blockdev --setra 65536 /dev/sdb |
要想永久生效,还是需要追加到/etc/rc.local尾部即可。
3.5 磁盘I/O优化调整
Linux磁盘I/O调度器对磁盘的访问支持不同的策略,默认的为CFQ,GP建议设置为deadline。
我这里是sda磁盘,所以直接对sda磁盘更改IO调度策略(你需要根据你的磁盘进行设置),如下设置:
1 |
$ echo deadline > /sys/block/sdb/queue/scheduler |
如果想永久生效,加入到/etc/rc.local即可。
PS:都配置完毕后,重启生效即可。
章节四:安装前环境配置(所有节点)
4.1 测试环境清单
角色 | 主机名 | 地址 |
master,segment | gpmaster | 10.10.0.186 |
standby,segment | gpstandby | 10.10.0.187 |
segment | gpsegment01 | 10.10.0.188 |
4.2 设置主机名
1 2 3 4 5 6 7 8 9 10 11 |
# Master node; $ hostname gpmaster $ echo "hostname gpmaster" >> /etc/rc.local # Standby node; $ hostname gpstandby $ echo "hostname gpstandby" >> /etc/rc.local # Segment node; $ hostname gpsegment01 $ echo "hostname gpsegment01" >> /etc/rc.local |
4.3 关闭防火墙
如果想开启防火墙,就需要了解Greenplum所有的端口信息即可。
1 2 |
$ systemctl stop firewalld $ systemctl disable firewalld |
4.4 关闭SELinux
1 2 |
$ setenforce 0 $ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config |
4.5 添加所有节点到/etc/hosts
1 2 3 |
10.10.0.186 gpmaster 10.10.0.187 gpstandby 10.10.0.188 gpsegment01 |
4.6 NTP时间同步
在Greenplum Master节点安装ntp服务器,然后Standby节点和Segment节点都同步Master节点的时间。
1 2 3 |
$ yum install ntp $ systemctl start ntpd $ systemctl enable ntpd |
然后在Standby节点和Segment节点。
1 |
$ ntpdate gpmaster |
Greenplum需要各个节点时间的时间都是一致的,切记。
章节五:安装Greenplum(Master节点执行)
5.1 在Master主机安装Greenplum二进制版本
1 2 |
$ unzip greenplum-db-4.3.x.x-PLATFORM.zip $ /bin/bash greenplum-db-4.3.11.1-build-1-rhel5-x86_64.bin |
会显示一些提供信息,一直回车跳过就会出现下面的交互窗口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
******************************************************************************** Do you accept the Pivotal Database license agreement? [yes|no] ******************************************************************************** yes ******************************************************************************** Provide the installation path for Greenplum Database or press ENTER to accept the default installation path: /usr/local/greenplum-db-4.3.11.1 ******************************************************************************** ******************************************************************************** Install Greenplum Database into /usr/local/greenplum-db-4.3.11.1? [yes|no] ******************************************************************************** yes ******************************************************************************** /usr/local/greenplum-db-4.3.11.1 does not exist. Create /usr/local/greenplum-db-4.3.11.1 ? [yes|no] (Selecting no will exit the installer) ******************************************************************************** yes Extracting product to /usr/local/greenplum-db-4.3.11.1 ******************************************************************************** Installation complete. Greenplum Database is installed in /usr/local/greenplum-db-4.3.11.1 Pivotal Greenplum documentation is available for download at http://gpdb.docs.pivotal.io |
基本都是选择一些安装目录就行了,默认一直回车就行了。期间会建立软连接greenplum-db。
安装完greenplum之后,可以进入到对应的名录,查看一下相关目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@master ~]# cd /usr/local/greenplum-db [root@master greenplum-db]# ll total 264 drwxr-xr-x. 4 root root 4096 Jan 4 22:53 bin drwxr-xr-x. 2 root root 31 Jan 4 21:13 demo drwxr-xr-x. 5 root root 49 Jan 4 21:17 docs drwxr-xr-x. 2 root root 42 Jan 4 21:17 etc drwxr-xr-x. 3 root root 19 Jan 4 21:17 ext -rwxr-xr-x. 1 root root 43025 Jan 4 21:21 GPDB-LICENSE.txt -rw-r--r--. 1 root root 736 May 3 23:50 greenplum_path.sh drwxr-xr-x. 6 root root 4096 Jan 4 21:17 include drwxr-xr-x. 10 root root 8192 Jan 4 21:21 lib -rwxr-xr-x. 1 root root 192912 Jan 4 21:21 LICENSE.thirdparty drwxr-xr-x. 2 root root 4096 Jan 4 22:53 sbin drwxr-xr-x. 4 root root 33 Jan 4 21:13 share |
目录和文件解释:
- GPDB-LICENSE.txt:Greenplum许可协议。
- greenplum_path.sh:此文件包含Greenplum数据库的环境变量,请参阅设置Greenplum环境变量。
- bin:此目录包含Greenplum数据库管理程序,此目录还包含PostgreSQL客户端和服务器程序,其中大部分也用于Greenplum数据库。
- sbin:支持/内部脚本和程序。
- demo:此目录包含Greenplum演示程序。
- docs:Greenplum数据库文档(PDF文件)。
- etc:OpenSSL的示例配置文件。
- ext:一些Greenplum数据库实用程序使用的捆绑程序(如Python)。
- include:Greenplum数据库的C语言头文件。
- lib:Greenplum数据库和PostgreSQL库文件。
- share:Greenplum数据库的共享文件。
5.2 在所有主机安装Greenplum二进制版本
5.2.1 创建gpadmin用户
1 2 |
[root@gpmaster ~]# groupadd gpadmin [root@gpmaster ~]# passwd gpadmin |
5.2.2 设置gpadmin用户环境变量
在/home/gpadmin/.bashrc和/home/gpadmin/.bash_profile文件最后添加下面两行。
1 |
source /usr/local/greenplum-db/greenplum_path.sh |
设置完后记得source一下使其立即生效。
1 2 |
[root@gpmaster ~]# source /home/gpadmin/.bashrc [root@gpmaster ~]# source /home/gpadmin/.bash_profile |
5.2.3 设置环境参数
1 2 3 |
[root@gpmaster ~]# source /usr/local/greenplum-db/greenplum_path.sh [root@gpmaster ~]# echo $PATH /usr/local/greenplum-db/./bin:/usr/local/greenplum-db/./ext/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin |
5.2.4 准备节点服务器信息文件
后面的批量安装会用到这两个文件,如果all_host和all_segment内容一样,可以只创建一个文件。
1 2 3 4 |
[root@gpmaster ~]# cat /opt/gpinit/all_host gpmaster gpstandby gpsegment01 |
5.2.5 建立节点服务器间的信任
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@gpmaster ~]# gpssh-exkeys -f /opt/gpinit/all_host [STEP 1 of 5] create local ID and authorize on local host [STEP 2 of 5] keyscan all hosts and update known_hosts file [STEP 3 of 5] authorize current user on remote hosts ... send to gpstandby *** *** Enter password for gpstandby: ... send to gpsegment01 [STEP 4 of 5] determine common authentication file content [STEP 5 of 5] copy authentication files to all remote hosts ... finished key exchange with gpstandby ... finished key exchange with gpsegment01 [INFO] completed successfully |
按照提示输入root密码,记住这一步不能输入gpadmin的密码,因为批量安装时需要在/usr/local下创建目录,需要root权限。
5.2.6 批量安装
1 |
[root@gpmaster ~]# gpseginstall -f /opt/gpinit/all_host -u gpadmin -p gpadmin |
这一步其实就是将master上的greenplum打包通过scp命令传到all_host中的主机上,并赋予目录gpadmin的权限。查看一下,如下:
1 2 |
[root@gpstandby ~]# ll -d /usr/local/greenplum-db lrwxrwxrwx. 1 gpadmin gpadmin 21 May 4 01:53 /usr/local/greenplum-db -> greenplum-db-4.3.11.1 |
章节六:检查批量安装情况
在Master主机以gpadmin用户登录
1 |
[root@gpmaster ~]# su - gpadmin |
加载GPDB安装目录下的路径文件
1 |
[gpadmin@gpmaster ~]$ source /usr/local/greenplum-db/greenplum_path.sh |
使用gpssh命令确认是否可以在不提示输入密码的情况下登录到所有安装了GP软件的主机,使用all_host文件。该文件需包含所有主机。
1 |
[gpadmin@gpmaster ~]# gpssh -f /opt/gpinit/all_host -e ls -l $GPHOME |
返回结果中各节点目录一致则并且不需要输入密码,且目录的所有权为gpadmin用户则安装成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
[ gpmaster] ls -l /usr/local/greenplum-db/. [ gpmaster] total 264 [ gpmaster] drwxr-xr-x. 4 gpadmin gpadmin 4096 Jan 4 22:53 bin [ gpmaster] drwxr-xr-x. 2 gpadmin gpadmin 31 Jan 4 21:13 demo [ gpmaster] drwxr-xr-x. 5 gpadmin gpadmin 49 Jan 4 21:17 docs [ gpmaster] drwxr-xr-x. 2 gpadmin gpadmin 42 Jan 4 21:17 etc [ gpmaster] drwxr-xr-x. 3 gpadmin gpadmin 19 Jan 4 21:17 ext [ gpmaster] -rwxr-xr-x. 1 gpadmin gpadmin 43025 Jan 4 21:21 GPDB-LICENSE.txt [ gpmaster] -rw-r--r--. 1 gpadmin gpadmin 736 May 3 23:50 greenplum_path.sh [ gpmaster] drwxr-xr-x. 6 gpadmin gpadmin 4096 Jan 4 21:17 include [ gpmaster] drwxr-xr-x. 10 gpadmin gpadmin 8192 Jan 4 21:21 lib [ gpmaster] -rwxr-xr-x. 1 gpadmin gpadmin 192912 Jan 4 21:21 LICENSE.thirdparty [ gpmaster] drwxr-xr-x. 2 gpadmin gpadmin 4096 Jan 4 22:53 sbin [ gpmaster] drwxr-xr-x. 4 gpadmin gpadmin 33 Jan 4 21:13 share [gpsegment01] ls -l /usr/local/greenplum-db/. [gpsegment01] total 264 [gpsegment01] drwxr-xr-x. 4 gpadmin gpadmin 4096 Jan 4 22:53 bin [gpsegment01] drwxr-xr-x. 2 gpadmin gpadmin 31 Jan 4 21:13 demo [gpsegment01] drwxr-xr-x. 5 gpadmin gpadmin 49 Jan 4 21:17 docs [gpsegment01] drwxr-xr-x. 2 gpadmin gpadmin 42 Jan 4 21:17 etc [gpsegment01] drwxr-xr-x. 3 gpadmin gpadmin 19 Jan 4 21:17 ext [gpsegment01] -rwxr-xr-x. 1 gpadmin gpadmin 43025 Jan 4 21:21 GPDB-LICENSE.txt [gpsegment01] -rw-r--r--. 1 gpadmin gpadmin 736 May 3 23:50 greenplum_path.sh [gpsegment01] drwxr-xr-x. 6 gpadmin gpadmin 4096 Jan 4 21:17 include [gpsegment01] drwxr-xr-x. 10 gpadmin gpadmin 8192 Jan 4 21:21 lib [gpsegment01] -rwxr-xr-x. 1 gpadmin gpadmin 192912 Jan 4 21:21 LICENSE.thirdparty [gpsegment01] drwxr-xr-x. 2 gpadmin gpadmin 4096 Jan 4 22:53 sbin [gpsegment01] drwxr-xr-x. 4 gpadmin gpadmin 33 Jan 4 21:13 share [ gpstandby] ls -l /usr/local/greenplum-db/. [ gpstandby] total 264 [ gpstandby] drwxr-xr-x. 4 gpadmin gpadmin 4096 Jan 4 22:53 bin [ gpstandby] drwxr-xr-x. 2 gpadmin gpadmin 31 Jan 4 21:13 demo [ gpstandby] drwxr-xr-x. 5 gpadmin gpadmin 49 Jan 4 21:17 docs [ gpstandby] drwxr-xr-x. 2 gpadmin gpadmin 42 Jan 4 21:17 etc [ gpstandby] drwxr-xr-x. 3 gpadmin gpadmin 19 Jan 4 21:17 ext [ gpstandby] -rwxr-xr-x. 1 gpadmin gpadmin 43025 Jan 4 21:21 GPDB-LICENSE.txt [ gpstandby] -rw-r--r--. 1 gpadmin gpadmin 736 May 3 23:50 greenplum_path.sh [ gpstandby] drwxr-xr-x. 6 gpadmin gpadmin 4096 Jan 4 21:17 include [ gpstandby] drwxr-xr-x. 10 gpadmin gpadmin 8192 Jan 4 21:21 lib [ gpstandby] -rwxr-xr-x. 1 gpadmin gpadmin 192912 Jan 4 21:21 LICENSE.thirdparty [ gpstandby] drwxr-xr-x. 2 gpadmin gpadmin 4096 Jan 4 22:53 sbin [ gpstandby] drwxr-xr-x. 4 gpadmin gpadmin 33 Jan 4 21:13 share |
如果提示输入密码,执行下面的命令重新交换SSH密钥。
1 |
[gpadmin@gpmaster ~]$ gpssh-exkeys -f /opt/gpinit/all_host |
章节七、创建数据存储区域
在Master主机上创建数据目录位置。
1 2 |
[root@gpmaster ~]# mkdir /data/greenplum/master/ -p [root@gpmaster ~]# chown -R gpadmin:gpadmin /data/greenplum/ |
使用gpssh命令在Standby上创建与和Master相同的数据存储位置。
1 2 |
[root@gpmaster ~]# gpssh -h gpstandby -e 'mkdir /data/greenplum/master -p' [root@gpmaster ~]# gpssh -h gpstandby -e 'chown -R gpadmin:gpadmin /data/greenplum/' |
在所有Segment主机上创建数据目录(主目录和镜像目录)位置
1 2 3 |
[root@gpmaster ~]# gpssh -f /opt/gpinit/all_host -e 'mkdir -p /data/greenplum/segment/primary' [root@gpmaster ~]# gpssh -f /opt/gpinit/all_host -e 'mkdir -p /data/greenplum/segment/mirror' [root@gpmaster ~]# gpssh -f /opt/gpinit/all_host -e 'chown gpadmin.gpadmin -R /data/greenplum/' |
这里我的环境只有一个segment节点,所以使用-h直接指定。如果有多个segment节点,那么可以使用-f指定一个文件即可(/opt/gpinit/all_segment)。
章节八:验证你的系统环境
Greenplum提供了一个名为gpcheck的管理实用程序,可用于检测所有主机在”系统环境配置”阶段所做的工作,如果全部安装需求配置则不会有问题
1 2 |
[root@gpmaster ~]# source /usr/local/greenplum-db/greenplum_path.sh [root@gpmaster ~]# gpcheck -f /opt/gpinit/all_host -m gpmaster -s gpstandby |
章节十:验证你的硬件性能
Greenplum提供了一个名为gpcheckperf的管理实用程序,可用于识别你的Greenplum Database集群中的机器上的硬件和系统级问题。gpcheckperf在指定的主机上启动会话,并运行以下性能测试:
• 网络性能(gpnetbench *)
• 磁盘I/O性能(dd测试)
• 内存带宽(流测试)
10.1 验证网络性能
网络测试选项包括:并行测试(-r N)、串行测试(-r n)、矩阵测试(-r M)。测试时运行一个网络测试程序从当前主机向远程主机传输5秒钟的数据流。缺省时,数据并行传输到每个远程主机,报告出传输的最小、最大、平均和中值速率,单位为MB/S。如果主体的传输速率低于预期(小于100MB/S),可以使用-r n参数运行串行的网络测试以得到每个主机的结果。要运行矩阵测试,指定-r M参数,使得每个主机发送接收指定的所有其他主机的数据,这个测试可以验证网络层能否承受全矩阵工作负载。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@gpmaster ~]# gpcheckperf -f /opt/gpinit/all_host -r N -d /tmp /usr/local/greenplum-db/./bin/gpcheckperf -f /opt/gpinit/all_host -r N -d /tmp ------------------- -- NETPERF TEST ------------------- ==================== == RESULT ==================== Netperf bisection bandwidth test gpmaster -> gpstandby = 1910.240000 gpsegment01 -> gpmaster = 1510.320000 gpstandby -> gpmaster = 1766.470000 gpmaster -> gpsegment01 = 2343.540000 Summary: sum = 7530.57 MB/sec min = 1510.32 MB/sec max = 2343.54 MB/sec avg = 1882.64 MB/sec median = 1910.24 MB/sec [Warning] connection between gpmaster and gpstandby is no good [Warning] connection between gpsegment01 and gpmaster is no good [Warning] connection between gpstandby and gpmaster is no good |
10.2 验证磁盘I/O和内存带宽性能
要测试磁盘I/O性能,请使用磁盘运行选项(-r d)运行gpcheckperf。 磁盘测试使用dd命令(标准UNIX实用程序)来测试逻辑磁盘或文件系统的顺序吞吐量性能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[root@gpmaster ~]# gpcheckperf -f /opt/gpinit/all_host -r ds -d /tmp /usr/local/greenplum-db/./bin/gpcheckperf -f /opt/gpinit/all_host -r ds -d /tmp -------------------- -- DISK WRITE TEST -------------------- -------------------- -- DISK READ TEST -------------------- disk write avg time (sec): 100.25 disk write tot bytes: 23853858816 disk write tot bandwidth (MB/s): 226.92 disk write min bandwidth (MB/s): 75.42 [ gpmaster] disk write max bandwidth (MB/s): 75.84 [gpsegment01] disk read avg time (sec): 118.18 disk read tot bytes: 23853858816 disk read tot bandwidth (MB/s): 192.55 disk read min bandwidth (MB/s): 63.23 [gpsegment01] disk read max bandwidth (MB/s): 65.88 [ gpstandby] |
10.3 验证内存带宽性能
要测试内存带宽性能,请使用流测试运行选项(-r s)运行gpcheckperf。内存测试使用STREAM基准程序来测量可持续的内存带宽。 结果以MB/秒(MB / s)为单位。
1 2 3 4 5 6 7 8 9 10 11 |
[root@gpmaster ~]# gpcheckperf -f /opt/gpinit/all_host -r s -d /tmp /usr/local/greenplum-db/./bin/gpcheckperf -f /opt/gpinit/all_host -r s -d /tmp -------------------- -- STREAM TEST -------------------- ==================== == RESULT ==================== stream tot bandwidth (MB/s): 36473.77 stream min bandwidth (MB/s): 12121.17 [gpsegment01] stream max bandwidth (MB/s): 12218.27 [ gpmaster] |
由于测试环境,都是Vmware虚拟出来的,所以整体性能很渣。
章节十一:字符集问题
本章介绍了Greenplum数据库的可用本地化功能,Greenplum数据库支持两种本地化方法:
• 使用操作系统的语言环境功能提供特定语言环境的整理顺序,数字格式等。
• 提供Greenplum数据库服务器中定义的许多不同字符集,包括多字节字符集,以支持以各种语言存储文本,并在客户端和服务器之间提供字符集转换。
11.1 字符集支持
Greenplum数据库中的字符集支持允许您将文本存储在各种字符集中,包括单字节字符集,如ISO 8859系列和多字节字符集,如EUC(扩展Unix代码),UTF-8,和Mule内部代码。所有支持的字符集可以由客户端透明地使用,但是不支持在服务器中使用一些字符集(即作为服务器端编码)。使用gpinitsystem初始化您的Greenplum Database数组时,会选择默认字符集。创建数据库时可以覆盖它,因此您可以使用不同的字符集来分配多个数据库。
具体Greenplum支持哪些字符集,这里就不一一展示了,对于UTF-8(等同于Unicode)字符集Greenplum是支持的,而UTF-8是支持所有语言的(包括中文、英文等)。一般数据库都设置为UTF-8即可。
11.2 字符集设置
gpinitsystem在初始化时通过读取gp_init_config文件中的ENCODING参数的设置来定义Greenplum数据库系统的默认字符集。默认字符集为UNICODE或UTF8。 除了用作系统范围的默认值之外,您还可以创建一个不同字符集的数据库。例如:
1 |
CREATE DATABASE test WITH ENCODING 'EUC_KR'; |
11.3 服务器和客户端之间的字符集转换
Greenplum数据库支持服务器和客户端之间的某些字符集组合的自动字符集转换。转换信息存储在主pg_conversion系统目录表中,Greenplum数据库带有一些预定义的转换,或者你可以使用SQL命令CREATE CONVERSION创建一个新的转换。
具体的Greenplum Server对应的Greenplum Client字符集转换的支持是怎样,详情看官网,我们只需要知道UTF-8字符集在Server和Client端编码的相互转换是全部支持的即可。
要启用自动字符集转换,您必须告诉Greenplum数据库您要在客户端中使用的字符集(编码)。有几种方法可以实现这一点:
•在psql中使用\encoding命令,允许您即时更改客户端编码。
1 |
\encoding utf8 |
•使用SET client_encoding TO,可以使用此SQL命令设置客户端编码:
1 |
SET CLIENT_ENCODING TO 'value'; |
查询当前Client编码
1 |
SHOW client_encoding; |
重置Client编码为默认编码
1 |
RESET client_encoding; |
使用PGCLIENTENCODING环境变量,当在客户机环境中定义PGCLIENTENCODING时,当与服务器建立连接时,会自动选择该客户端编码。
设置配置参数client_encoding,如果在master postgresql.conf文件中设置了client_encoding,则当连接到Greenplum数据库时,会自动选择该客户端编码。
章节十二:初始化GreenPlum(Master节点执行)
因为Greenplum数据库是分布式的,所以初始化Greenplum数据库的过程涉及到初始化几个单独的PostgreSQL数据库实例(在Greenplum中称为Segment实例)。
初始化数据库实例需要针对所有主机(包括Mster、Standby和所有的Segment),使它们都可以一起工作。 Greenplum提供了名为gpinitsystem的初始化工具,它负责初始化Master数据库和每个Segment实例上的数据库,并以正确的顺序启动每个实例。在Greenplum数据库初始化和启动之后,你可以像常规管理PostgreSQL一样通过连接到Greenplum来创建和管理数据库。
12.1 创建Greenplum初始化文件
这部分操作需要切换到gpadmin用户进行,如下步骤:
1 2 3 4 |
[root@gpmaster ~]$ su - gpadmin [gpadmin@gpmaster ~]# mkdir /home/gpadmin/gpconfig [gpadmin@gpmaster ~]# cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfig/gpinitsystem_config [gpadmin@gpmaster ~]# chmod 775 /home/gpadmin/gpconfig/gpinitsystem_config |
根据自己的环境编辑过的初始化文件
1 2 3 4 5 6 7 8 9 10 11 |
[root@gpmaster ~]# egrep -v "(^$|^#)" /home/gpadmin/gpconfig/gpinitsystem_config ARRAY_NAME="EMC Greenplum DW" SEG_PREFIX=gpseg PORT_BASE=40000 declare -a DATA_DIRECTORY=(/data/greenplum/segment/primary /data/greenplum/segment/primary /data/greenplum/segment/primary) MASTER_HOSTNAME=gpmaster MASTER_DIRECTORY=/data/greenplum/master MASTER_PORT=5432 TRUSTED_SHELL=ssh CHECK_POINT_SEGMENTS=8 ENCODING=UNICODE |
ARRAY_NAME:设置阵列名称,默认EMC Greenplum DW。
SEG_PREFIX:设置segment的前缀,默认gpseg。
PORT_BASE:设置segment的起始端口,会从此端口往上增加,默认从40000开始。
DATA_DIRECTORY:设置segment primary的数据存储目录,有几个segment节点就需要设置几个数据存储目录。
MASTER_HOSTNAME:设置master的主机名。
MASTER_DIRECTORY:设置master的存储目录。
MASTER_PORT:设置master的端口,默认5432。
TRUSTED_SHELL:设置节点之间的信任方式,默认SSH。
CHECK_POINT_SEGMENTS:预写日志文件(WAL)数量,默认为8,这意味着为主机上的每个Segment或Master实例分配1088MB的WAL空间。
ENCODING=UNICODE:设置初始字符集,默认UNICODE(UTF-8)。
PS:注意,其中所有需要的目录都是在创建数据存储区域时做好的。
12.2 创建初始化主机列表
在运行gpinitsystem程序之前需要一个主机文件,其中包含每个segment主机的地址列表。初始化程序通过每个主机列出的主机地址数量与gpinitsystem_config文件中指定的数据目录位置数量来确定每个主机的segment实例数。
此文件应仅包含segment主机地址,对于具有多个网络接口的segment主机,该文件应列出每个接口的主机地址名称,每行一个。如果使用主机名,请确定在你的/etc/hosts文件中应做好了主机地址到主机名的映射。
1 2 3 4 |
[root@gpmaster ~]# cat /opt/gpinit/all_segment gpmaster gpstandby gpsegment01 |
12.3 运行初始化工具
运行gpinitsystem初始化工具需要切换到gpadmin用户才行,具体步骤如下:
1 2 |
[root@gpmaster ~]# su - gpadmin [gpadmin@gpmaster ~]$ gpinitsystem -c /home/gpadmin/gpconfig/gpinitsystem_config -h /opt/gpinit/all_segment -s gpstandby |
gpinitsystem命令参数解释:
-c:指定初始化文件。
-h:指定segment主机文件。
-s:指定standby主机,创建standby节点。
中间需要输入几次yes,如果不报ERROR,GP数据库就安装好了并且各个节点都启动了。安装过程中一定要注意相关执行的方式和权限,不然可能会失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
[INFO]:-Checking configuration parameters, please wait... [INFO]:-Reading Greenplum configuration file /home/gpadmin/gpconfig/gpinitsystem_config [INFO]:-Locale has not been set in /home/gpadmin/gpconfig/gpinitsystem_config, will set to default value [INFO]:-Locale set to en_US.utf8 [INFO]:-No DATABASE_NAME set, will exit following template1 updates [INFO]:-MASTER_MAX_CONNECT not set, will set to default value 250 [INFO]:-Checking configuration parameters, Completed [INFO]:-Commencing multi-home checks, please wait...... [INFO]:-Configuring build for standard array [INFO]:-Commencing multi-home checks, Completed [INFO]:-Building primary segment instance array, please wait............ [INFO]:-Checking Master host [INFO]:-Checking new segment hosts, please wait............ [INFO]:-Checking new segment hosts, Completed [INFO]:-Greenplum Database Creation Parameters [INFO]:--------------------------------------- [INFO]:-Master Configuration [INFO]:--------------------------------------- [INFO]:-Master instance name = EMC Greenplum DW [INFO]:-Master hostname = gpmaster [INFO]:-Master port = 5432 [INFO]:-Master instance dir = /data/greenplum/master/gpseg-1 [INFO]:-Master LOCALE = en_US.utf8 [INFO]:-Greenplum segment prefix = gpseg [INFO]:-Master Database = [INFO]:-Master connections = 250 [INFO]:-Master buffers = 128000kB [INFO]:-Segment connections = 750 [INFO]:-Segment buffers = 128000kB [INFO]:-Checkpoint segments = 8 [INFO]:-Encoding = UNICODE [INFO]:-Postgres param file = Off [INFO]:-Initdb to be used = /usr/local/greenplum-db/./bin/initdb [INFO]:-GP_LIBRARY_PATH is = /usr/local/greenplum-db/./lib [INFO]:-Ulimit check = Passed [INFO]:-Array host connect type = Single hostname per node [INFO]:-Master IP address [1] = ::1 [INFO]:-Master IP address [2] = 10.10.0.186 [INFO]:-Master IP address [3] = fe80::20c:29ff:fe16:18b [INFO]:-Standby Master = gpstandby [INFO]:-Primary segment # = 3 [INFO]:-Standby IP address = ::1 [INFO]:-Standby IP address = 10.10.0.187 [INFO]:-Standby IP address = fe80::20c:29ff:fe8f:c9a4 [INFO]:-Total Database segments = 9 [INFO]:-Trusted shell = ssh [INFO]:-Number segment hosts = 3 [INFO]:-Mirroring config = OFF [INFO]:---------------------------------------- [INFO]:-Greenplum Primary Segment Configuration [INFO]:---------------------------------------- [INFO]:-gpmaster /data/greenplum/segment/primary/gpseg0 40000 2 0 [INFO]:-gpmaster /data/greenplum/segment/primary/gpseg1 40001 3 1 [INFO]:-gpmaster /data/greenplum/segment/primary/gpseg2 40002 4 2 [INFO]:-gpsegment01 /data/greenplum/segment/primary/gpseg3 40000 5 3 [INFO]:-gpsegment01 /data/greenplum/segment/primary/gpseg4 40001 6 4 [INFO]:-gpsegment01 /data/greenplum/segment/primary/gpseg5 40002 7 5 [INFO]:-gpstandby /data/greenplum/segment/primary/gpseg6 40000 8 6 [INFO]:-gpstandby /data/greenplum/segment/primary/gpseg7 40001 9 7 [INFO]:-gpstandby /data/greenplum/segment/primary/gpseg8 40002 10 8 Continue with Greenplum creation Yy/Nn> y [INFO]:-Building the Master instance database, please wait... [INFO]:-Starting the Master in admin mode [INFO]:-Commencing parallel build of primary segment instances [INFO]:-Spawning parallel processes batch [1], please wait............ [INFO]:-Waiting for parallel processes batch [1], please wait............ [INFO]:------------------------------------------------ [INFO]:-Parallel process exit status [INFO]:------------------------------------------------ [INFO]:-Total processes marked as completed = 9 [INFO]:-Total processes marked as killed = 0 [INFO]:-Total processes marked as failed = 0 [INFO]:------------------------------------------------ [INFO]:-Deleting distributed backout files [INFO]:-Removing back out file [INFO]:-No errors generated from parallel processes [INFO]:-Starting initialization of standby master gpstandby [INFO]:-Validating environment and parameters for standby initialization... [INFO]:-Checking for filespace directory /data/greenplum/master/gpseg-1 on gpstandby [INFO]:------------------------------------------------------ [INFO]:-Greenplum standby master initialization parameters [INFO]:------------------------------------------------------ [INFO]:-Greenplum master hostname = gpmaster [INFO]:-Greenplum master data directory = /data/greenplum/master/gpseg-1 [INFO]:-Greenplum master port = 5432 [INFO]:-Greenplum standby master hostname = gpstandby [INFO]:-Greenplum standby master port = 5432 [INFO]:-Greenplum standby master data directory = /data/greenplum/master/gpseg-1 [INFO]:-Greenplum update system catalog = On [INFO]:------------------------------------------------------ [INFO]:- Filespace locations [INFO]:------------------------------------------------------ [INFO]:-pg_system -> /data/greenplum/master/gpseg-1 [INFO]:-Syncing Greenplum Database extensions to standby [INFO]:-The packages on gpstandby are consistent. [INFO]:-Adding standby master to catalog... [INFO]:-Database catalog updated successfully. [INFO]:-Updating pg_hba.conf file... [INFO]:-pg_hba.conf files updated successfully. [INFO]:-Updating filespace flat files... [INFO]:-Filespace flat file updated successfully. [INFO]:-Starting standby master [INFO]:-Checking if standby master is running on host: gpstandby in directory: /data/greenplum/master/gpseg-1 [INFO]:-Cleaning up pg_hba.conf backup files... [INFO]:-Backup files of pg_hba.conf cleaned up successfully. [INFO]:-Successfully created standby master on gpstandby [INFO]:-Successfully completed standby master initialization [INFO]:-Restarting the Greenplum instance in production mode [INFO]:-Starting gpstop with args: -a -l /home/gpadmin/gpAdminLogs -i -m -d /data/greenplum/master/gpseg-1 [INFO]:-Gathering information and validating the environment... [INFO]:-Obtaining Greenplum Master catalog information [INFO]:-Obtaining Segment details from master... [INFO]:-Greenplum Version: 'postgres (Greenplum Database) 4.3.11.1 build commit: 9fad76371cc5554375f0c32ae46571eccf41c75b' [INFO]:-There are 0 connections to the database [INFO]:-Commencing Master instance shutdown with mode='immediate' [INFO]:-Master host=gpmaster [INFO]:-Commencing Master instance shutdown with mode=immediate [INFO]:-Master segment instance directory=/data/greenplum/master/gpseg-1 [INFO]:-Attempting forceful termination of any leftover master process [INFO]:-Terminating processes for segment /data/greenplum/master/gpseg-1 [INFO]:-Starting gpstart with args: -a -l /home/gpadmin/gpAdminLogs -d /data/greenplum/master/gpseg-1 [INFO]:-Gathering information and validating the environment... [INFO]:-Greenplum Binary Version: 'postgres (Greenplum Database) 4.3.11.1 build commit: 9fad76371cc5554375f0c32ae46571eccf41c75b' [INFO]:-Greenplum Catalog Version: '201310150' [INFO]:-Starting Master instance in admin mode [INFO]:-Obtaining Greenplum Master catalog information [INFO]:-Obtaining Segment details from master... [INFO]:-Setting new master era [INFO]:-Master Started... [INFO]:-Shutting down master [INFO]:-Commencing parallel segment instance startup, please wait..... [INFO]:-Process results... [INFO]:----------------------------------------------------- [INFO]:- Successful segment starts = 9 [INFO]:- Failed segment starts = 0 [INFO]:- Skipped segment starts (segments are marked down in configuration) = 0 [INFO]:----------------------------------------------------- [INFO]:- [INFO]:-Successfully started 9 of 9 segment instances [INFO]:----------------------------------------------------- [INFO]:-Starting Master instance gpmaster directory /data/greenplum/master/gpseg-1 [INFO]:-Command pg_ctl reports Master gpmaster instance active [INFO]:-Starting standby master [INFO]:-Checking if standby master is running on host: gpstandby in directory: /data/greenplum/master/gpseg-1 [INFO]:-Database successfully started [INFO]:-Completed restart of Greenplum instance in production mode [INFO]:-Loading gp_toolkit... [INFO]:-Scanning utility log file for any warning messages [WARN]:-******************************************************* [WARN]:-Scan of log file indicates that some warnings or errors [WARN]:-were generated during the array creation [INFO]:-Please review contents of log file [INFO]:-/home/gpadmin/gpAdminLogs/gpinitsystem_20170505.log [INFO]:-To determine level of criticality [INFO]:-These messages could be from a previous run of the utility [INFO]:-that was called today! [WARN]:-******************************************************* [INFO]:-Greenplum Database instance successfully created |
一共3个segment主机,默认创建了9个segment实例(默认根据Segment主机CPU核心数来决定创建多少)。可以仔细阅读一下Greenplum初始化信息,很重要。 最后都完成之后可以看到”Greenplum Database instance successfully created”。
初始化问题疑难解答
如果实用程序在设置实例时遇到任何错误,整个过程将失败,并且可能会导致部分创建的系统。请参阅错误消息和日志以确定故障的原因以及发生故障的过程。日志文件在〜/ gpAdminLogs中创建。
根据进程中发生错误的时间,您可能需要清理,然后再次尝试gpinitsystem实用程序。例如,如果某些段实例已创建并且某些失败,您可能需要停止postgres进程并从数据存储区域中删除任何实用程序创建的数据目录。创建一个回退脚本来帮助您进行此清理(如有必要)。
使用退出脚本
如果gpinitsystem实用程序失败,如果系统处于部分安装状态,它将创建以下备用脚本:
〜/ gpAdminLogs / backout_gpinitsystem_ <user> _ <timestamp>
您可以使用此脚本清理部分创建的Greenplum数据库系统。此回退脚本将删除任何实用程序创建的数据目录,postgres进程和日志文件。纠正导致gpinitsystem失败并运行退出脚本的错误后,您应该准备重试初始化您的Greenplum数据库数组。
以下示例显示如何运行回退脚本:
1 |
$ sh backout_gpinitsystem_gpadmin_20170505_171053 |
成功后,分别到几个节点看一下各自开启的端口信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# master + segment; [gpadmin@gpmaster ~]$ netstat -nplt | grep postgres (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 20613/postgres tcp 0 0 0.0.0.0:40000 0.0.0.0:* LISTEN 20577/postgres tcp 0 0 0.0.0.0:40001 0.0.0.0:* LISTEN 20576/postgres tcp 0 0 0.0.0.0:40002 0.0.0.0:* LISTEN 20575/postgres tcp6 0 0 :::10648 :::* LISTEN 20620/postgres: por # standby + segment; [root@gpstandby ~]# netstat -nplt | grep postgres tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 7737/postgres tcp 0 0 0.0.0.0:40000 0.0.0.0:* LISTEN 7601/postgres tcp 0 0 0.0.0.0:40001 0.0.0.0:* LISTEN 7602/postgres tcp 0 0 0.0.0.0:40002 0.0.0.0:* LISTEN 7600/postgres # segment; [root@gpsegment01 ~]# netstat -nplt | grep postgres tcp 0 0 0.0.0.0:40000 0.0.0.0:* LISTEN 7149/postgres tcp 0 0 0.0.0.0:40001 0.0.0.0:* LISTEN 7147/postgres tcp 0 0 0.0.0.0:40002 0.0.0.0:* LISTEN 7148/postgres |
基本就能看出来哪个端口是Master(5432)、哪个端口是Standby(5432)、哪些端口是Segment(40000,40001,40002)。
章节十三:设置环境变量
你必须在Greenplum数据库主站(和备用主站)上配置环境。您的$ GPHOME目录中提供了一个greenplum_path.sh文件,其中包含了Greenplum数据库的环境变量设置。您可以在gpadmin用户的启动shell配置文件(如.bashrc)中为此文件提供源。
Greenplum数据库管理实用程序还要求设置MASTER_DATA_DIRECTORY环境变量,这应该指向由gpinitsystem程序在主数据目录位置创建的目录。
1 2 |
source /usr/local/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/data/greenplum/master/gpseg-1 |
可选:客户端会话环境变量
1 2 3 |
export PGPORT=5432 export PGUSER=gpadmin export PGDATABASE=gptest |
使其生效并拷贝到Standby
1 2 |
$ source ~/.bashrc $ scp ~/.bashrc smdw:~/.bashrc |
章节十四:操作数据库
14.1 访问数据库
本篇文章主要记录GreenPlum数据库的登录和基本的帮助手册相关信息,GreenPlum数据库提供psql客户端程序访问数据库,下面是psql的帮助信息。
1 |
[gpadmin@gpmaster ~]$ psql--help |
常用的有以下几个参数:
-d,指定要连接的数据库,基本每次登录GreenPlum数据库都需要使用这个参数。
-l,列出可用的所有数据库,如果忘记了要登录数据库的名字,可以使用这个参数查看。
-h,指定要连接的数据库服务器的IP地址,默认是本机(localhost)。
-p,指定数据库的端口号,默认是5432.
-U,连接数据库的用户名,默认是gpadmin。
下面演示下如何登录GreenPlum数据库,首先使用psql –l参数列出都有哪些数据库。
1 2 3 4 5 6 7 8 9 10 11 |
[gpadmin@gpmaster ~]$ psql -l List of databases Name | Owner | Encoding | Access privileges -----------+---------+----------+--------------------- gptest | gpadmin | UTF8 | postgres | gpadmin | UTF8 | template0 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin template1 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin (4 rows) |
可以看到当前有4个数据库,下面演示在本地登录postgres数据库,登录本地数据库可以不指定-h参数,如果端口使用默认的5432,也不需要指定-p参数,默认使用gpadmin管理员用户登录数据库,如果使用gpadmin用户登录,也可以不指定-U参数。
1 2 3 4 5 6 7 8 9 10 11 12 |
[gpadmin@gpmaster ~]$ psql -d postgres psql (8.2.15) Type "help" for help. postgres=# help You are using psql, the command-line interface to PostgreSQL. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# \q |
GreenPlum数据库的密码是区分大小写的,在设置密码和输入密码时需要注意。登录数据库后,该怎么使用呢?GreenPlum数据库提供了较详细的帮助手册,不知道怎么看帮助手册不要紧,help命令基本是通用的,直接输入help命令,就可以看到如何查看帮助手册了。
\h,SQL相关的手册。
\?,psql客户端的常用命令手册。
\q,退出数据库。
14.2 创建表
psql客户端常用命令太多,后面单独介绍。这里列出几个常见的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# \l列出所有数据库; postgres=# \l List of databases Name | Owner | Encoding | Access privileges -----------+---------+----------+--------------------- gptest | gpadmin | UTF8 | postgres | gpadmin | UTF8 | template0 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin template1 | gpadmin | UTF8 | =c/gpadmin : gpadmin=CTc/gpadmin (4 rows) # \conninfo列出当前连接信息; postgres=# \conninfo You are connected to database "postgres" as user "gpadmin" on host "gpmaster" at port "5432". # \d列出当前数据库表; postgres=# \d No relations found. |
这是因为postgres数据库没有表,所以\d命令没有结果,创建一张表后,即可列出当前数据库的所有表信息。
1 2 3 4 5 6 7 8 |
postgres=# create table tt (id int,name varchar(10)) DISTRIBUTED BY(ID); CREATE TABLE postgres=# \d List of relations Schema | Name | Type | Owner | Storage --------+------+-------+---------+--------- public | tt | table | gpadmin | heap (1 row) |
以上建表语句是创建一张基于ID字段hash分布的表,GreenPlum是分布式存储的数据库,表会创建到所有Segment节点上。
\d加表名,列出当前数据库所有的表,如果后面加表名,则列出表的字段及索引信息。
1 2 3 4 5 6 7 |
postgres=# \d tt Table "public.tt" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(10) | Distributed by: (id) |
有关在Greenplum数据库中创建数据库,模式,表和其他数据库对象以及加载数据的更多信息,请参阅“Greenplum数据库管理员指南”。
章节十五:增加Segment镜像
Segment mirror就是Segment primary的镜像,也叫数据备份。mirror对于数据存储来说很重要,因为我们的服务器指不定什么时候出毛病,有mirror就好很多了,因为两台存储节点同时宕掉的几率还是很小的。
添加mirror的方式有多种,比如:
1. 在初始化时使用gpinitsystem工具。
2. 使用gpaddmirrors工具。
Greenplum目前只允许添加mirror,而不允许删除mirror,所以在添加镜像前,最好对gp做一下备份。
这里我们显然说第二种添加mirror的方式,gpaddmirrors工具可以将segment mirror添加到最初未配置镜像配置的Greenplum数据库系统。 该程序将创建mirror segment实例,并在primary segment和mirror segment实例之间开始联机复制过程。一旦所有mirror segment与其primary segment同步完成后,你的Greenplum数据库系统就完全是数据冗余的了。
重要信息:在联机复制过程中,Greenplum数据库应处于静态状态,工作负载和其他查询不应该运行。
如果在备用镜像主机上创建镜像,则必须使用Greenplum数据库软件预先安装新的mirror segment主机,并将其配置为与现有primary segment主机完全相同。必须确保运行gpaddmirrors(gpadmin用户)的用户具有写入指定的数据目录位置的权限。
15.1 在Segment主机创建镜像目录
1 2 3 4 |
[root@gpsegment01 ~]# cat /opt/gpinit/all_host gpmaster gpstandby gpsegment01 |
1 2 |
[root@gpsegment01 ~]# gpssh -f /opt/gpinit/all_host -e 'mkdir -p /data/greenplum/segment/mirror' [root@gpsegment01 ~]# gpssh -f /opt/gpinit/all_host -e 'chown gpadmin.gpadmin -R /data/greenplum/' |
15.2 生成增加镜像的配置文件
默认情况下,该程序将提示你在其中创建mirror segment数据目录的文件系统位置。如果不想提示,可以使用-m选项传入包含文件系统位置的文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@gpmaster ~]# su - gpadmin [gpadmin@gpmaster ~]$ gpaddmirrors -o mirror_config_file 20170509:05:27:07:010380 gpaddmirrors:gpmaster:gpadmin-[INFO]:-Starting gpaddmirrors with args: -o mirror_config_file 20170509:05:27:07:010380 gpaddmirrors:gpmaster:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.11.1 build commit: 9fad76371cc5554375f0c32ae46571eccf41c75b' 20170509:05:27:07:010380 gpaddmirrors:gpmaster:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.15 (Greenplum Database 4.3.11.1 build commit: 9fad76371cc5554375f0c32ae46571eccf41c75b) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Jan 5 2017 02:11:56' 20170509:05:27:07:010380 gpaddmirrors:gpmaster:gpadmin-[INFO]:-Obtaining Segment details from master... Enter mirror segment data directory location 1 of 3 > /data/greenplum/segment/mirror Enter mirror segment data directory location 2 of 3 > /data/greenplum/segment/mirror Enter mirror segment data directory location 3 of 3 > /data/greenplum/segment/mirror 20170509:05:27:31:010380 gpaddmirrors:gpmaster:gpadmin-[INFO]:-Configuration file output to mirror_config_file successfully. |
查看生成的镜像配置文件:
1 2 3 4 5 6 7 8 9 10 11 |
[gpadmin@gpmaster ~]$ cat mirror_config_file filespaceOrder= mirror0=0:gpsegment01:41000:42000:43000:/data/greenplum/segment/mirror/gpseg0 mirror1=1:gpsegment01:41001:42001:43001:/data/greenplum/segment/mirror/gpseg1 mirror2=2:gpsegment01:41002:42002:43002:/data/greenplum/segment/mirror/gpseg2 mirror3=3:gpstandby:41000:42000:43000:/data/greenplum/segment/mirror/gpseg3 mirror4=4:gpstandby:41001:42001:43001:/data/greenplum/segment/mirror/gpseg4 mirror5=5:gpstandby:41002:42002:43002:/data/greenplum/segment/mirror/gpseg5 mirror6=6:gpmaster:41000:42000:43000:/data/greenplum/segment/mirror/gpseg6 mirror7=7:gpmaster:41001:42001:43001:/data/greenplum/segment/mirror/gpseg7 mirror8=8:gpmaster:41002:42002:43002:/data/greenplum/segment/mirror/gpseg8 |
mirror segment数据位置和端口必须与primary segment数据位置和端口不同。
15.3 开始创建镜像
1 |
[gpadmin@gpmaster ~]$ gpaddmirrors -i mirror_config_file |
15.4 gpstate工具查看mirror同步状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[gpadmin@gpmaster ~]$ gpstate -e -Starting gpstate with args: -e -Segment Mirroring Status Report ----------------------------------------------------- -Segment Pairs in Resynchronization - Current Primary Port Resync mode Est. resync progress Total resync objects Objects to resync Data synced Est. total to sync Est. resync end time Change tracking size Mirror Port - gpmaster 40000 Full 75.70% 572 0 23.0 MB 30.3 MB 2017-05-09 05:36:34 128 bytes gpsegment01 41000 - gpmaster 40001 Full 87.33% 572 0 26.5 MB 30.3 MB 2017-05-09 05:36:29 128 bytes gpsegment01 41001 - gpmaster 40002 Full 80.64% 572 0 24.5 MB 30.3 MB 2017-05-09 05:36:32 128 bytes gpsegment01 41002 - gpsegment01 40000 Full 78.99% 572 0 24.0 MB 30.3 MB 2017-05-09 05:36:30 128 bytes gpstandby 41000 - gpsegment01 40001 Full 82.80% 572 0 25.1 MB 30.3 MB 2017-05-09 05:36:29 128 bytes gpstandby 41001 - gpsegment01 40002 Full 92.89% 572 0 28.2 MB 30.3 MB 2017-05-09 05:36:25 128 bytes gpstandby 41002 - gpstandby 40000 Full 100% 572 0 30.3 MB 30.3 MB 2017-05-09 05:36:34 128 bytes gpmaster 41000 - gpstandby 40001 Full 98.46% 572 0 29.9 MB 30.3 MB 2017-05-09 05:36:23 128 bytes gpmaster 41001 - gpstandby 40002 Full 82.08% 572 0 24.9 MB 30.3 MB 2017-05-09 05:36:29 128 bytes gpmaster 41002 |
查看镜像分布
1 2 3 4 |
[gpadmin@gpmaster ~]$ ls /data/greenplum/segment/primary/ gpseg0 gpseg1 gpseg2 [gpadmin@gpmaster ~]$ ls /data/greenplum/segment/mirror/ gpseg6 gpseg7 gpseg8 |
Greenplum系统中,primary segment总是与mirror segment在不同的主机上。
到这里整个GreenPlum安装指南(GPDB43InstallGuide中文版)已经基本完成,希望能帮助到你。