centos7 数据库 Greenplum 的单机安装及异常解决方案
centos7 数据库Greenplum-1.13的安装
缘
环境
下载
依赖
部署
安装
配置及数据库初始化
配置目录
配置服务器地址
配置用户环境变量
数据库配置
初始化
**配置远程登录数据库**
navcat连接greenplum数据库
**数据库基本处理操作**
异常解决方案
1. 异常:configure: error: readline library not found
2. 异常:PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 234802044 bytes)
3. 异常:"could not bind IPv6 socket: Address already in use",,"Is another postmaster already running on port 6000? If not, wait a few seconds and retry."
4. 异常: /data/gpdata/master/gpseg-1 is exists
5. 异常: database **** not exists
6. 异常:could not map anonymous shared memory: 无法分配内存",,"This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 170118012 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
[新增]7. FATAL:password authentication failed for user "gpadmin"
[新增]8. FATAL:no pg_hba.conf entry for host "192.168.126.1", use gpadmin database greenplum SSL off
蜚语
注
缘
好久不见、甚是想念,这不,一段时间没见,捣鼓了个Greenplum数据库,一开始看的官方文档,太多了,配置以后还有点出问题,就在网上找些教程,还是会出很多问题,后自己一个个问题给解决掉,才算搞定了,下面分享一下。
环境
注意,Linux服务器内存>4G,会提示内存不足。
下载
首先要下载安装包,下载地址:
依赖
安装依赖命令:
yum install apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip
部署
关闭防火墙,命令:
systemctl stop firewalld.service
如果要永-久关闭,执行命令:
systemctl display firewalld.service
添加系统配置,使用vi /etc/sysctl.conf命令编辑,添加系统配置,具体内容:
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.sem = 250 64000 100 512
kernel.shmmax = 810810728448 # kernel.shmmax = kernel.shmall * PAGE_SIZE
kernel.shmmni = 4096
kernel.shmall = 197951838 #kernel.shmall = _PHYS_PAGES / 2 # See Shared Memory Pages
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 10000
vm.overcommit_memory = 2
net.ipv4.conf.all.arp_filter = 1
官方内容(太多了,没用这个):
#官方配置:
# kernel.shmall = _PHYS_PAGES / 2 # See Shared Memory Pages
kernel.shmall = 197951838
# kernel.shmmax = kernel.shmall * PAGE_SIZE
kernel.shmmax = 810810728448
kernel.shmmni = 4096
vm.overcommit_memory = 2 # See Segment Host Memory
vm.overcommit_ratio = 95 # See Segment Host Memory
net.ipv4.ip_local_port_range = 10000 65535 # See Port Settings
kernel.sem = 500 2048000 200 4096
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.swappiness = 10
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 0 # See System Memory
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296
修改后,执行sysctl -p进行刷新。
sysctl -p
系统资源限制配置,执行vi /etc/security/limits.conf命令添加以下内容:
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
创建pgadmin用户,命令:
groupadd gpadmin
useradd gpadmin -r -m -g gpadmin
passwd gpadmin
#此处输入密码:gpadmin
#重复输入密码确认:gpadmin
配置免密登录,命令:
su gpadmin
cd ~
ssh-keygen -t rsa
#对ip 192.168.126.138 设置免密登录
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.126.138
#此处有提示,直接回车就行
安装
可以通过两种方式进行安装,一种是通过yum命令安装,一种是通过rpm命令安装,如下:
#进入管理员帐号
su root
#切换到安装包所在目录(我下载的安装包是放在/opt下面的)
cd /opt
通过rpm安装部署包(我是使用这种方式):
#默认目录安装(初学者推荐):
rpm --install greenplum-db-6.13.0-rhel7-x86_64.rpm
#指定安装目录安装
rpm --install greenplum-db-6.13.0-rhel7-x86_64.rpm --prefix=/usr/local/greenplum-db
通过yum 安装部署包(这种会自动下载依赖,因为下载时间比较长,所以没选择这种):
#执行安装命令:
yum install greenplum-db-6.13.0-rhel7-x86_64.rpm
配置及数据库初始化
配置目录
对数据库安装目录执行用户权限设置,命令:
chown -R gpadmin:gpadmin /usr/local/greenplum*
在当前bash环境下读取并执行数据库目录下的greenplum_path.sh文件,命令:
source /usr/local/greenplum-db-6.13.0/greenplum_path.sh
创建数据库目录并对gpadmin进行授权,命令:
#创建目录
mkdir /data
mkdir /data/gp1
mkdir /data/gp2
mkdir /data/master
文件夹授权,命令:
chown -R gpadmin:gpadmin /data
新建pg数据库文件夹,执行命令创建并进入此目录:
配置服务器地址
mkdir /home/gpadmin/gpconfigs
cd /home/gpadmin/gpconfigs
创建文件配置文件,并输入本机ip,命令:
vi hostfile_exkeys
#输入以下内容
192.168.126.138
vi hostfile_gpinitsystem
#输入以下内容
192.168.126.138
执行授权命令:
chown -R gpadmin:gpadmin /home/gpadmin/gpconfigs
配置用户环境变量
修改gpadmin用户的环境变量,命令如下:
#切换到gpadmin用户
su gpadmin
cd
#编辑文件.bash_profile
vim .bash_profile
#插入以下内容
source /usr/local/greenplum-db-6.13.0/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
MASTER_HOSTNAME=localhost
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=hdw
#保存后刷新执行
source /home/gpadmin/.bash_profile
#继续编辑配置文件
vim .bashrc
source /usr/local/greenplum-db-6.13.0/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=hdw
#保存后执行
source /home/gpadmin/.bashrc
#执行gpssh同步时间(单机部署好像没必要,没试过,有试过的可以留言下)
gpssh-exkeys -f /home/gpadmin/gpconfigs/hostfile_exkeys
数据库配置
复制数据库配置文件,命令如下:
#拷贝文件
cp /usr/local/greenplum-db-6.13.0/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs
配置命令如下:
vim /home/gpadmin/gpconfigs/gpinitsystem_config
#配置数据目录
PORT_BASE=6500
declare -a DATA_DIRECTORY=(/data/gp1 /data/gp2)
#配置主机名称
MASTER_HOSTNAME=localhost
#配置数据库名称
DATABASE_NAME=hdw
#配置集群列表
MACHINE_LIST_FILE=/home/gpadmin/gpconfigs/hostfile_gpinitsystem
初始化
执行完毕以后执行数据库初始化,命令如下:
#初始化
gpinitsystem -c /home/gpadmin/gpconfigs/gpinitsystem_config
#命令中间会有个确认,输入Y就行
Continue with Greenplum creation Yy/Nn> Y
如果还有其他的yes/no的提示,选择yes,如果提示输入密码,那就是你的ssh免密登录配置失败,就直接输入密码(会输入很多次),如果嫌弃繁琐,那就重新配置一下上面的免密登录。
初始化结束以后,数据库就在5432端口启动了,大功告成,如果初始化失败,就看下后的异常解决方案,我罗列了大部分的异常解决方案,都是自己碰到的,苦了我…
执行完以后,可以用gpadmin用户登录
配置远程登录数据库
#此处使用root用户进行编辑
su root
vi /data/master/gpseg-1/pg_hba.conf
#输入以下内容
host all all 0.0.0.0/0 md5
#注:后一个如果是md5,表示密码登录,trust 表示免密登录
navcat连接greenplum数据库
有回复说让另外搞一个navcat连接greenplum数据库的教程,我想着这个不是太复杂,就在这里添加上吧。
在我们启动服务以后,点击连接,选择postgreSQL,如图:
然后输入我们gp数据库的服务器ip,输入端口(默认5432),用户名及密码,输入完成以后,点击测试,提示连接成功即可。如下:
另外还有一些异常及解决方案,我放到下面的异常解决方案里面,连接失败的同学可以参考。
数据库基本处理操作
直接上命令,中间会加一些注释,就不在这里多说了,走起:
#切换到gpadmin用户
su gpadmin
#执行此处进入数据库命令行
psql
#完整命令:
psql -d gpdatabase -h 127.0.0.1 -p 5432 -U gpadmin
#修改gpadmin的密码为gpadmin
alter role gpadmin with password 'gpadmin';
#创建gpuser用户
CREATE USER gpuser WITH PASSWORD 'gpuser';
#创建gpdb数据库
CREATE DATABASE gpdb OWNER gpuser;
#对gpuser授予gpdb 的所有权限
GRANT ALL PRIVILEGES ON DATABASE gpdb TO gpuser;
如果有任何问题,欢迎留言,我继续添加异常解决方案。
异常解决方案
1. 异常:configure: error: readline library not found
解决方案:缺少readline-devel依赖,执行以下命令安装:
yum install -y readline-devel
1
2. 异常:PostgreSQL’s request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 234802044 bytes)
**解决方案:**这种情况下,是内存不足引起的,增加电脑内存吧,当然,内存足够大的话,就重启下,可能被其他服务占用了大量内存。
3. 异常:“could not bind IPv6 socket: Address already in use”,“Is another postmaster already running on port 6000? If not, wait a few seconds and retry.”
解决方案:这种情况一般是6000端口占用的问题,6000端口是X11的占用端口,会出现端口冲突。如果按照我的教程来,就能看到我把端口设置成了6500,解决方案就是修改gpinitsystem_config中的6000端口改成别的端口。
4. 异常: /data/gpdata/master/gpseg-1 is exists
解决方案::文件夹已存在,这种异常通常存在于重新安装的时候,或者在安装前已经安装过gp库了,删除相关的文件夹即可,如果按照我的教程来,那就执行以下命令对初始化文件进行清理:
rm -rf /data/master/gpseg-1
rm -rf /data/gp1/*
rm -rf /data/gp2/*
5. 异常: database **** not exists
解决方案: 初始化时默认数据库配置不对导致的,两种解决方案具体解决如下:
此处列出方案1:
编辑gpinitsystem_config文件,查看DATABASE_NAME的具体参数:
#首先
vi gpconfigs/gpinitsystem_config
使用找到的参数登录,命令:
psql -d 数据库名称 -h 127.0.0.1 -p 5432 -U gpadmin
这样就能进入数据库了,进入以后就对数据库进行操作了,包括数据库的创建等。。
方案二就是把上面的配置统一,将上文中gpinitsystem_config文件中的参数DATABASE_NAME与.bashrc和.bash_profile里面的配置参数PGDATABASE一致即可。(未测试,自行测试吧)
6. 异常:could not map anonymous shared memory: 无法分配内存","This error usually means that PostgreSQL’s request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 170118012 bytes), reduce PostgreSQL’s shared memory usage, perhaps by reducing shared_buffers or max_connections.
**解决方案:**查看日志文件(根据打印日志确定是哪个日志文件),如图我们查看/home/gpadmin/gpAdminLogs/gpinitsystem_20211213.log文件:
看到输出信息是could not map anonymous shared memory: 无法分配内存",如图:
这种情况和异常2类似是内存不足引起的,增大内存或释放内存(重启服务器或关闭一些不必要的程序)
[新增]7. FATAL:password authentication failed for user “gpadmin”
**解决方案:**在使用客户端连接数据库时提示此异常,原因是密码错误,好手动输入验证密码问题,如果实在记不起来,可以在服务器上通过修改命令重新设置密码,命令如下:
#设置gpadmin用户的密码为gpadmin
alter user gpadmin with password 'gpadmin';
[新增]8. FATAL:no pg_hba.conf entry for host “192.168.126.1”, use gpadmin database greenplum SSL off
**解决方案:**此类异常是因为我本次文章所使用的数据库是在虚拟机中部署的,所以ip并不是我的本机ip,而是识别为了网关地址,这种情况我们需要修改pg_hba.conf配置(我相信大部分同学都不记得这个文件在哪里,我们可以通过find命令进行搜索,命令也贴在下面),具体修改如下:
#搜索配置文件
[root@localhost ~]# find / -name pg_hba.conf
/data/gp1/gpseg0/pg_hba.conf
/data/gp2/gpseg1/pg_hba.conf
/data/master/gpseg-1/pg_hba.conf
#编辑master节点下的配置文件:
[root@localhost ~]# vim /data/master/gpseg-1/pg_hba.conf
#在IPv4 local connections下面添加以下内容:
host all all 192.168.126.1/32 md5
其中 192.168.126.1代表我本机地址,修改后使用以下命令重新加载配置文件:
#1.切换至gpadmin用户
su gpadmin
#2.重新加载配置文件
gpstop -u
操作完成后通过客户端连接,可以看到连接成功的提示,如果还不行,尝试修改其他两个子节点下的配置文件吧。
有问题可以在评论区留言,看到的话我会添加异常解决方案,如果以后异常解决方案太多,为了方便阅读,我会考虑重新开一篇文章,专门来收录异常解决方案。
蜚语
没有什么是永垂不朽的,除了爱情;没有什么是亘古不灭的,除了信仰。而爱情便是我的信仰
注
官网教程地址:https://docs.greenplum.org/6-13/install_guide
其他参考地址:https://blog.csdn.net/WinterspringLF/article/details/118915790
本文来源:https://blog.csdn.net/u011561335/article/details/121889849
相关文章