Ubuntu16.04 记录一次安装greenplum的过程,以及遇到的问题与部分解决方案

17 篇文章 0 订阅
11 篇文章 0 订阅

Greenplum对ubuntu14不友好,官方提供了ubuntu的安装方案也是基于ubuntu16

http://greenplum.org/install-greenplum-oss-on-ubuntu/

对两台主机,安装ubuntu16.04.3,官方镜像链接

<a data-cke-saved-href="http://www.ubuntu.org.cn/download/server" href="http://www.ubuntu.org.cn/download/server">http://www.ubuntu.org.cn/download/serve</a>

Greenplum安装日志

此次用于安装的共为两台主机,master主机上2个segment节点,segment主机上2个segement节点

在Master安装 

更改hostname gp-master

echo 'gp-master' > /etc/hostname

新增两台主机的内网IP以及修改hostname

echo '10.29.186.1 gp-master' >> /etc/hosts
echo '10.29.186.2 gp-segment' >> /etc/hosts' >> /etc/hosts
echo '10.29.186.2 gp-segment' >> /etc/hosts

apt-get update

新增用户gpadmin

添加gpadmin用户 设置密码pass123

adduser gpadmin   

添加gpadmin到sudo用户列表

echo 'gpadmin ALL=(ALL:ALL) ALL' >> /etc/sudoers' >> /etc/sudoers

重启主机reboot后,切换到gpadmin

su gpadmin

在gp-master上创建 /gpmaster /gpdata1 /gpdata2 文件夹

mkdir  /gpmaster /gpdata1 /gpdata2

开始安装相关依赖包,以及GP数据库

cd ~
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:greenplum/db #添加PPA路径
sudo apt-get update #再次进行更新
sudo apt-get install greenplum-db-oss

以下操作在segment上进行

更改hostname gp-segment

echo 'gp-segment' > /etc/hostname

新增两台主机的内网IP以及修改hostname

echo '10.29.186.1 gp-master' >> /etc/hosts
echo '10.29.186.2 gp-segment' >> /etc/hosts
apt-get update 

并保存重启主机reboot新增用户gpadmin

添加gpadmin用户 设置密码pass123

adduser gpadmin  

添加gpadmin到sudo用户列表

echo 'gpadmin ALL=(ALL:ALL) ALL' >> /etc/sudoers

重启主机reboot后切换到gpadmin

su gpadmin

在gp-segment上创建 /gpdata1/gpdata2文件夹

mkdir /gpdata1 /gpdata2

开始安装相关依赖包,以及GP数据库

cd ~
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:greenplum/db #添加PPA路径
sudo apt-get update #再次进行更新
sudo apt-get install greenplum-db-oss

下载安装完成,接下来要执行秘钥交换,回到master主机 用户为gpadmin下进行ssh秘钥交换,首先加载环境变量

source /opt/gpdb/greenplum_path.sh

这一步之后可以将/opt/gpdb/greenplum_path.sh中的所有内容复制到/etc/profile中,之后每次登录就可以通过source /etc/profile来解决greenplum环境变量的问题

cd ~
cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_singlenode .

touch hostlist_singlenode/etc/profile来解决greenplum环境变量的问题

echo 'gp-master' >> hostlist_singlenode
echo 'gp-segment' >> hostlist_singlenode

进行秘钥交换

gpssh-exkeys -f hostlist_singlenode

或者

gpssh-exchkeys -f hostlist_singlenode

如果报错没有找到以上命令,切换到gp-master主机的 /gpmaster/gpsne-1/下进行操作

cd /gpmaster/gpsne-1/cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_singlenode .
cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_singlenode .

touch hostlist_singlenode

echo 'gp-master' >> hostlist_singlenode

echo 'gp-segment' >> hostlist_singlenode

进行秘钥交换

<span style="color:#000000">gpssh-exkeys -f hostlist_singlenode</span>

或者

gpssh-exchkeys -f hostlist_singlenode

 

如果报错Error: unable to import module: No module named gppylib.commands解决方案

source /opt/gpdb/greenplum_path.sh

或者

source /etc/profile

 

GP集群创建只需要在master上进行初始化(如果要创建主从节点,记得在gpinitsystem_singlenode中修改,具体的话,可以参考参数【,因为我没有在Ubuntu中尝试过主从节点,注释了declare -a MIRROR_DATA_DIRECTORY从节点主declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata1/gpdatap1 /home/gpadmin/gpdata1/gpdatap2)
从declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata1/gpdatam1 /home/gpadmin/gpdata/1gpdatam2)】

 

/opt/gpdb/bin/gpinitsystem -c /opt/gpdb/gpinitsystem_singlenode

问题1: 在初始化过程中,如遇到到以下问题:

gpadmin-[FATAL]:-Failed to complete obtain psql count Master gp_segment_configuration  Script Exiting!

Script has left Greenplum Database in an incomplete state

解决方法:

echo "RemoveIPC=no" >> /etc/systemd/logind.conf
/bin/systemctl restart systemd-logind.service
/bin/systemctl restart systemd-logind.service

 

问题2:无法通过psql postgres登录gp

解决方法:

master 的目录下的/gpdata1 /gpdata2 /gpmaster权限非gpadmin或segment目录下的/gpdata3 /gpdata4 文件夹权限非gpadmin

将这些文件夹权限修改为gpadmin即可

在master上执行

chown gpadmin.gpadmin -R /gpdata1 /gpdata2 /gpmaster

在segement上执行

chown gpadmin.gpadmin -R /gpdata3 /gpdata4 

初始化完成之后就可以正常登录了

 默认postgres登录

psql postgres

 

下面为Greenplum 使用中遇到的报错日志(含群里讨论的解决方案)

可能我写的不够详细,请谅解,下面链接中的内容可以供大家参考

https://www.cnblogs.com/zzjhn/p/5912383.html

http://blog.csdn.net/u010457406/article/details/75647167

PostgreSQL pg_hba.conf 文件简析

 

https://www.cnblogs.com/hiloves/archive/2011/08/20/2147043.html

 

 

 

使用GP无法通过其他用户登录gp

修改gp-master主机的/gpmaster/gpsne-1/pg_hba.conf

参考:

https://www.cnblogs.com/hiloves/archive/2011/08/20/2147043.html

 

修改时区 (默认为GMT 有8小时时差)

修改所有节点(gpmaset,gp-segment)中的配置文件postgresql.conf timezone参数

需要修改成当地时间 PRC 或者Asia/Shanghai

 

重新加载配置文件

pg_ctl  reload   -D /gpmaster/gpsne-1/

查看分区表信息

SELECT

partitionboundary,

partitiontablename,

partitionname,

partitionlevel,

partitionrank

FROM

pg_partitions

WHERE

tablename = '表名';

同步数据报错解决方案

 A:gp 4个segment中有一个挂了 能单独重启吗,或者几个一起启用,不希望初始化,有人回答@我一下,没有的话我过会儿再来问

B:把错误贴出来看一下

A:然后其中一个segment就挂了,然后gpstop,再gpstart 非主的两个segment都起不来了

gpstart报错

A:我很奇怪的是 我建表的时候是正常的,通过mysql迁移数据至gp的时候,有三张表 他的数据都是百万级的就报错了,报错是我发的一图,但是我之前有单独的订单表 数据也是百万级的就可以正常同步和增量同步。

以上是起因

B:read only文件系统!磁盘有问题

A:一脸懵逼,老哥你说的详细一些可以吗

B:你直接访问一下master的data目录看能不能访问

文件系统一般是硬件问题!

有没有使用过gprecovery恢复过节点

A:不会吧,初始化之后又能正常用的 就是数据又要重新导,如果不解决这个节点挂掉但是只能初始化的方法来处理的话,永远上不了业务

B:根据这个问题的提示,gprecover应该是恢复不了的!你检查一下磁盘

直接访问你的master的data目录看看

A:现在因为gpstop过了,gprecover连不上gp数据库。我试着访问一下

通过gpadmin账号访问 master的gpdata1和gpdata2都可以  用户和组都是gpadmin

通过gpadmin账号访问 segment的gpdata1和gpdata2都可以  用户和组都是gpadmin

B:很可能是磁盘空间满了,所以变为只读了

A:1T的硬盘 现在看只用了100G,

A:我再拓展一下你之前说的read-only文件系统的那个方法

B:主要是看存数据文件的目录和master的配置文件那个目录吧!

A:/gpdata2/gpsne3

/gpdata1/gpsne2

gp-segment下面的的详细日志是这样

很可能就是你说的那个文件系统的问题

B:按照错误提示就是文件系统的问题!可能是磁盘坏道之类的

A:就这个文件日志就可编辑了,再次启动gp就正常了,应该就是你指的插入数据的时候,磁盘坏道之类的情况吧,我再找找有什么不重启的办法!, 谢谢大佬!去可视化界面测,

刚有三张表同步不了数据,我删了第一张表之后就提示节点有问题,然后单节点就挂了,然后通过服务器reboot之后,启动gp之后打开第二张表报错和第一张一样,这个时候,我删除了第二张和第三张表,再次创建表示可以正常使用了。

表权限问题

A:请问下,gp库下的同名字的表,如果删除了在创建,之前授权可以查询的用户,还要重新授权一次

这个有办法解决吗?不重新授权

B:直接改配置文件可以解决这个问题吧 一次性对数据库授权,用对应账号操作

A:这个配置文件pg_hba.conf应该是只能设置,登录之后能看到哪些表和库

但是没法设置查询之类的权限,其他账号之前授权的权限,表删除之后在创建就没了

B:明白你的意思,这个权限问题我还没想到,不过有个想法,还没证实,打算通过添加用户至用户组,给用户组授权

A:gp库的权限问题好麻烦,要一张表一张表的授权,不能用通配符

 

GP坏道问题

A:GP下,对该表进行操作,直接打开是可以的能看到表中的记录,添加主键,查询都会报这样的错误。这是个什么意思,百度google上类似的报错都没有。等大佬解析一波这个报

[Err] ERROR:  invalid page in block 16 of relation base/16384/57173  (seg3 slice1 10.10.0.85:40001  pid=8222)

B:貌似表坏了

SET zero_damaged_pages = on ,然后再执行你的语句看看报不报错

A:好的 我试试 因为是刚建的表 建表的时候没啥问题

这个SET zero_damaged_pages = on  之后执行了两边查询就可以正常查了

还有这个操作的吗 我看看这个语句解释去

B:这个参数是让忽略坏道

如果你数据正确,就重新建张表,到过去,然后删掉就好了

A:多谢分享。这个坏道是由建表的时候产生的吗还是随时都有可能

B:为了保险,你可以让系统工程师,查一下看看XFS系统有没有逻辑坏道

如果没有,可能是高度写忙的时候,逻辑盘写错的,看看划盘是不是合理

这个问题很隐蔽,一般都是系统盘的划分和系统配置问题,和数据库没有太大关系

 

 

gp数据库用copy得方式时,遇到字段超长情况下,返回得错误字段值怎么不对

问:返回了一个字段值  但是不准  没有列名

A:SQL server不支持UTF-8,都是GBK的,搞得我只能先用kettle先导出UTF-8的CSV,再用外部表去加载

kettle里直接设置utf-8,然后传给GP会报各种各种的错

非要通过CSV这一层

B: 用sqlserver自带的ssis工具导出csv再加载呢?

A:也行,不过我因为表很多很多,所以通过kettle自动读取表名,再把表名当变量传过去,循环导出,省的我一个一个点

B:还有一种方式是看到国外有ole驱动可以直接从sqlserver导入到gp

A:还是会遇到一些错,比如换行符

付费的吧

B:https://ask.hellobi.com/article/429 

 嗯,付费的插件

但好像也有免费的,不过我还没有研究连通

A:付费那我还不如用阿里云的oss,还便宜些

Bodbc连接可以,免费的,但是效率方面需要好好测试一下

我目前用单机测试效率不高,还不如csv-gp

A:无所谓了,我现在把公司的SQL server的数据全部迁移到postgresql了.以后greenplum自己家人,数据传起来就方便了

现在大家逐渐意识到pg的强大了,很多公司都在把SQL server和mysql换成postgresql

B:你已经实践了sqlserver-postgresql了?

A:这个很简单啊,直接用kettle的表输出和表输入抽

大概已经抽了140多G的数据了,0报错

B:哦哦,因为用的都是ssis,所以为了减少改造量,没有计划使用kettle

140g,你是全量单表级抽取?有没有join关联逻辑?

A:没有,都是单表,每张20个左右的字段,2万到400万行不等

300多张表

视图什么的肯定要自己重写了,两个数据库语法还是很多不一样的

C:请教gpload问题 谢谢

D:kettle是不是把客户端一关 所有的调度都关了 ?

E:可以部署作业调度平台的

A你是说把spoon关了吧?spoon只是用来做开发的.开发好了以后,都是把作业丢到服务器用shell包着命令行运行的

让数据从PostgreSQL流动到Greenplum

https://m.aliyun.com/yunqi/articles/62616

 

 

查询当前gp中的活动sql 方法1

select * from pg_stat_activity ;

查询当前gp中的活动sql 方法2

SELECT

procpid,

start,

now() - start AS lap,

current_query

FROM

(SELECT

backendid,

pg_stat_get_backend_pid(S.backendid) AS procpid,

pg_stat_get_backend_activity_start(S.backendid) AS start,

pg_stat_get_backend_activity(S.backendid) AS current_query

FROM

(SELECT pg_stat_get_backend_idset() AS backendid) AS S

) AS S

WHERE

current_query <> '<IDLE>'

ORDER BY

lap DESC;

停止greenplum的正在执行的sql,需要通过上面的sql查询到procpid,才能终止。

select pg_cancel_backend(procpid);

select pg_terminate_backend(procpid);

 

 

阿里云的德哥,分享的超多pg和gp的文章 请问一下这些资料从那里找到呢?

A:https://github.com/digoal/blog

嗯,德哥做PG数据库这一块已经10多年了,超多积累

 

到什么量级,性能会下降

看你数据行数,每行大小,用的什么索引,索引建的怎么样了,这个不好说的

有菜逼千万级的数据就查的卡半天,也有大神亿级别数据可以毫秒返回结果


https://github.com/digoal/blog/blob/master/201603/20160307_01.md?spm=a2c4e.11153959.blogcont68424.19.6c736db0EM0iMW&file=20160307_01.md

记录一次mysql迁移数据至greenplum的过程

http://blog.csdn.net/wayne_primes/article/details/79413755

以上

PS:运维工作并不是键盘敲的快才算牛,细心谨慎认真对待每一份工作。不论是工作也好,还是生活。

 

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锅霍皮久

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值