《Greenplum企业应用实战》一2.2 安装Greenplum的常见问题

本节书摘来自华章出版社《Greenplum企业应用实战》一书中的第2章,第2.2节,作者 何勇 陈晓峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.2 安装Greenplum的常见问题

安装Greenplum最常见的错误就是环境变量设置错误,网卡配置错误,或者是每个Segment的通道或网络没有打通。
如果子节点的操作系统环境不一样,也可能会导致各种各样的错误。所以在搭建环境的时候,要求每一台机器的配置基本一样,方便以后管理与维护,避免一些奇怪的问题。下面将介绍几个常见的报错及处理方法。

2.2.1 /etc/hosts配置错误

现在来看一个奇怪的报错SQL,查询一张普通表时报如下错误,但是查询数据字典又不报错:

testDB=# select * from test002;
WARNING:  Greenplum Database detected segment failure(s), system is reconnected
WARNING:  Greenplum Database detected segment failure(s), system is reconnected
ERROR:  No primary gang allocated (cdbgang.c:1635)
testDB=# select count(1) from pg_class;
 count 
-------
   633
(1 row)

报这个错误是因为Master连接不到Segment。如果原先是一个正常的系统,突然报错了,就要想想是否修改了什么导致的。在这个例子中,是因为修改了/etc/hosts,不小心将:

10.20.151.8     inc-dw-hadoop-151-8 sdw1

改成了:

10.20.151.18     inc-dw-hadoop-151-8 sdw1

Master连接Segment的时候连接不上,就报了这个错误,但是pg_class是每一个节点都有的,而Master上的数据只需要在Master上查询,不用连接Segment,所以没有报错,只需将配置修改回来即可。
有些时候,也可以利用这个方法来判断一个操作是否需要与Master交互,比如生成执行计划(关于执行计划的详细内容可阅读第5章)是否只在Master上执行,与Segment有没有交互:

testDB=# explain select * from test002;
WARNING:  Greenplum Database detected segment failure(s), system is reconnected
WARNING:  Greenplum Database detected segment failure(s), system is reconnected
ERROR:  No primary gang allocated (cdbgang.c:1635)
testDB=# explain select count(1) from pg_class;
                            QUERY PLAN                            
------------------------------------------------------------------
 Aggregate  (cost=39.20..39.21 rows=1 width=0)
   ->  Seq Scan on pg_class  (cost=0.00..20.48 rows=7488 width=0)
(2 rows)

这样就可以看出,生成分布式执行计划也是需要与Segment进行交互的。那么为什么下面生成pg_class的执行计划不会报错呢?这是因为表test002是业务数据,数据分布在Segment上,生成的执行计划是分布式的,而pg_class是保存表元数据信息的数据字典,数据保存在Master上,生成的执行计划是单机的,详见第5章执行计划。
在Greenplum 4.3中,这个报错是:ERROR: Unexpected internal error (cdbgang.c:1622)。报错的内容与原因都是一样的,只是在显示上Greenplum 4.1与Greenplum 4.3有所区别。
在Greenplum 3.3.x版本中,如果修改了Master的/etc/hosts配置,将:

127.0.0.1    localhost  localhost.localdomain

错写成:

127.0.0.1    localhost  localhost.localdomain mdw

那么还会有如下的奇怪现象发生。
在创建表的时候Master没有报错,说明Master与Segment是可以通信的,但是查询这张表的时候就会报如下的错误:

testDB=# create table aaa(like bbb);
NOTICE:  Table doesn't have 'distributed by' clause, defaulting to distribution columns from LIKE table
CREATE TABLE
testDB =# select * from bbbb;
ERROR:  Interconnect timeout: Unable to complete setup of all connections within time limit.
DETAIL:  Completed 2 of 6 incoming and 0 of 0 outgoing connections.
gp_interconnect_setup_timeout = 20 seconds.

错误提示已经超时了,建议将超时时间设置大一点,但是修改相关参数还是没有用。其实是因为Segment在连接到Master的时候使用的IP是127.0.0.1,指定到了本地机器,导致Segment连接不到Master,故报出这个错误。将Master连接到Segment就没有问题,因此将对应的/etc/hosts修改回来就可以了。
将/etc/hosts改回来之后,进行查询后还是报同样的错,这是因为当前连接还没有生效,要退出当前的session,重新连接Greenplum才行。
Greenplum内部会有很多的网络通信交互,因此建议将操作系统的防火墙关闭,避免各种奇怪的问题,其中防火墙就会引起本节介绍的在Greenplum 3.3.x版本中遇到的问题。

2.2.2 MASTER_DATA_DIRECTORY设置错误

没有设置MASTER_DATA_DIRECTORY,会报这样的错误:

[gpadmin@dw-greenplum-1 ~]$ gpstop 
20120110:11:16:52:gpstop:dw-greenplum-1:gpadmin1-[INFO]:-Starting gpstop with args: ''
20120110:11:16:52:gpstop:dw-greenplum-1:gpadmin1-[INFO]:-Gathering information and validating the environment...
20120110:11:16:52:gpstop:dw-greenplum-1:gpadmin1-[CRITICAL]:-gpstop failed. (Reason='Environment Variable MASTER_DATA_DIRECTORY not set!') exiting...

这样会导致MASTER_DATA_DIRECTORY参数的目录设置错误:

[gpadmin@dw-greenplum-1 ~]$ echo $MASTER_DATA_DIRECTORY 
/home/gpadmin/gpdata/gpmaster/gpseg-1
[gpadmin@dw-greenplum-1 ~]$ export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg1
[gpadmin@dw-greenplum-1 ~]$ gpstop 
20120110:11:19:43:gpstop:dw-greenplum-1:gpadmin-[INFO]:-Starting gpstop with args: 
20120110:11:19:43:gpstop:dw-greenplum-1:gpadmin-[INFO]:-Gathering information and validating the environment...
20120110:11:19:43:gpstop:dw-greenplum-1:gpadmin-[CRITICAL]:-gpstop failed. (Reason='[Errno 2] No such file or directory: '/home/gpadmin/gpdata/gpmaster/gpseg1/postgresql.conf'') exiting...

在初始化数据库的时候要多注意环境变量的设置,如果环境变量设置不当,很容易造成数据库初始化错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值