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
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多年了,超多积累
到什么量级,性能会下降
看你数据行数,每行大小,用的什么索引,索引建的怎么样了,这个不好说的
有菜逼千万级的数据就查的卡半天,也有大神亿级别数据可以毫秒返回结果
http://blog.csdn.net/wayne_primes/article/details/79413755
以上
PS:运维工作并不是键盘敲的快才算牛,细心谨慎认真对待每一份工作。不论是工作也好,还是生活。