公司业务要更换服务器,对gp一知半解的我找了很多文档,结合了很多资料才安装成功,网上很多资料都是gp4或者更早的版本,这里记录一下gp6安装的最全步骤。
参考的一些文档:https://copyfuture.com/blogs-details/20200316122110528l3xw1wnt2cchri4
https://blog.csdn.net/u013767472/article/details/101195614#%E4%B8%89%E3%80%81%E5%AE%89%E8%A3%85GreenPlum%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E5%B9%B6%E9%85%8D%E7%BD%AEgpadmin%E7%94%A8%E6%88%B7
https://blog.csdn.net/whq12789/article/details/103510726?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
gp6.2.1企业版安装包:https://download.csdn.net/download/weixin_37138915/12609662
安装前集群分配
因需求用到7台服务器,1台master,1台standby,5台segment(这里采用2主2从 根据需求而定)
172.168.XX.1 Master
172.168.XX.2 Standby
172.168.XX.3 Segment
172.168.XX.4 Segment
172.168.XX.5 Segment
172.168.XX.6 Segment
172.168.XX.7 Segment
批量安装依赖包
这些是安装gp所需的依赖包,本地环境服务器都安装了的可跳过
yum install -y apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip krb5-devel
关闭SELINUX与防火墙(全部机器)
看很多安装文档之前都写着关闭防火墙与selinux,防火墙可以理解,但是SELinux是什么呢?SELinux策略是白名单原则,所以你需要非常清楚你的各项操作都需要哪些访问权限,之前本人用过阿里的云主机,提供的centos默认是关闭的,然后试过测试环境下分布式hadoop,在不关闭的情况下SSH连接各主机会有问题…具体是因为什么有待研究。
- 检查SELinux 如果为enable就是开启状态
/usr/sbin/sestatus -v
- 关闭SELinux
vi /etc/selinux/config
SELINUX=disabled
- 检查防火墙状态 若为Active:active(running)则开启
systemctl status firewalld.service
- 停止防火墙(防火墙的是centos7命令)
systemctl stop firewalld.service
- 永久关闭防火墙(开机不启动)
systemctl disable firewalld.service
配置/etc/hosts(全部机器)
验证配置成功可以在机器之间用ping测试看下能否连通
172.168.XX.1 mdw
172.168.XX.2 smdw
172.168.XX.3 sdw1
172.168.XX.4 sdw2
172.168.XX.5 sdw3
172.168.XX.6 sdw4
172.168.XX.7 sdw5
修改内核配置参数 (全部机器)
- /etc/sysctl.conf
官网文档直接拉的:
kernel.shmall = 4000000000
kernel.shmmax = 500000000
kernel.shmmni = 4096
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
net.ipv4.ip_local_port_range = 10000 65535
kernel.sem = 500 2048000 200 40960
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
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296
- 让配置生效
sysctl -p
配置资源限制参数 (全部机器)
- vi /etc/security/limits.conf
* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072
“*” 星号表示所有用户
nproc 是代表最大进程数
nofile 是代表最大文件打开数 重启后生效
ulimit -u 命令显示每个用户可用的最大进程数验证返回值为131072
同步时间
- 查看是否是上海时区
timedatectl status
- 不是的话就修改 这里我的环境是没有问题的 这一步没有测试过
timedatectl set-timezone Asia/Shanghai
创建用户与用户组(全部机器)
- 如果存在 先删除
groupdel gpadmin
userdel gpadmin
- 创建新的用户与用户组
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
- 文件夹授权与创建密码
chown -R gpadmin:gpadmin /home/gpadmin/
passwd gpadmin
创建安装目录与授权(全部机器)
mkdir /usr/local/greenplum
chown -R gpadmin:gpadmin /usr/local/greenplum/
上传安装包到服务器上并安装(Master)
这里我是用了xftp上传的,用的是企业版本的gp6.2.1,企业版本的180M左右,开源版的不到100M,据说开源版的用不了gpcc,具体也没用过;把rpm包拉到刚刚创建的路径下:/usr/local/greenplum
- 如果是rpm包:
cd /usr/local/greenplum
yum install greenplum-db-6.1.2-rhel7-x86_64.rpm
- 如果是zip包:
cd /usr/local/greenplum
unzip greenplum-db-6.1.2-rhel7-x86_64.zip
chmod +x greenplum-db-6.1.2-rhel7-x86_64.bin
./greenplum-db-6.1.2-rhel7-x86_64.bin
gp5版本是用rpm命令的,gp6直接yum install安装,通过yum方便不少,如果安装过程出问题直接yum remove卸载再重头再来。
- 赋予权限
安装后默认生成在/usr/local/greenplum-db-6.1.2/里,因为是用root用户安装,所以要赋权给gpadmin:
chown -R gpadmin:gpadmin /usr/local/greenplum*
- 应用Greenplum环境变量
su gpadmin
source /usr/local/greenplum-db-6.1.2/greenplum_path.sh
source之后就可以用gp的命令了。
批量安装到segment对应的机器(其他六台)
- SSH免密登陆(其他六台)
首先创建公钥对,生成时不要输入密码,这里是用gpadmin用户,生成的位置在/home/gpadmin/.ssh/id_rsa,是私钥。另外,还会产生一个公钥 id_rsa.pub
ssh-keygen -t rsa
> /home/gpadmin/.ssh/id_rsa
> 回车
> 回车
- 添加信任其他机器的Host key(其他六台)
ssh-copy-id smdw
ssh-copy-id mdw1
ssh-copy-id mdw2
ssh-copy-id mdw3
ssh-copy-id mdw4
ssh-copy-id mdw5
在集群的每一台使用 ssh-copy-id 命令,把 gpadmin 的 public key 拷到 known_hosts。这样,集群的机器互相访问就是通过这个设定互相信任的。
- 创建hostlist seg_hosts (Master)
hostlist放全部主机的名字,seg_hosts放segment主机别名:
mkdir /usr/local/conf
cd /usr/local/conf
touch hostlist
vi hostlist
>mdw
>smdw
>sdw1
>sdw2
>sdw3
>sdw4
>sdw5
touch seg_hosts
vi seg_hosts
>sdw1
>sdw2
>sdw3
>sdw4
>sdw5
- 使用 gpssh-exkeys 打通所有服务器 (Master)
将所有机器的通道打开,这样在每台机器之间跳转,就不需要输入密码。
cd /home/gpadmin/conf
gpssh-exkeys -f hostlist
- gpssh批量操作
在打通所有机器通道之后,我们就可以使用 gpssh 命令对所有机器进行批量操作了,可以用pwd测试一下,exit退出
gpssh -f hostlist
pwd
exit
- 打包(批量操作)
权限问题,可以用root用户打包,再把权限赋给gpadmin
cd /usr/local
tar -cf gp6.tar greenplum-db-6.1.2/
chown -R gpadmin:gpadmin /usr/local/gp6.tar
- 分发(批量操作)
gpscp -f /home/gpadmin/conf/hostlist gp6.tar =:/usr/local/greenplum
- 解压(批量操作)
cd /usr/local/greenplum
tar -xf gp6.tar
ln -s greenplum-db-6.1.2 greenplum-db
觉得复杂的话可以xftp传到各机器上,保证在统一目录下。
创建数据存储空间(批量操作)
因为我这里是用了两主两从存储数据,继续上面的批量操作:
cd /home/gpadmin/
mkdir gpdata
cd gpdata
mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2
ll
exit
环境配置(全部机器)
vi ~/.bash_profile
source /usr/local/greenplum/greenplum-db-6.2.1/greenplum_path.sh
## 指定master存储地址适配
export MASTER_DATA_DIRECTORY=/data/gpdata/gpmaster/gpseg-1
export PGPORT=5432
export PGDATABASE=testdb
## 使得变量生效
source ~/.bash_profile
顺便检查一下greenplum_path.sh里面GPHOME的位置有没有问题
初始化配置文件(Master)
- 拷贝配置文件
有模版可以拷贝,先创建个文件夹,再把模版拷贝过来
mkdir /home/gpadmin/gpconfigs
cp /usr/local/greenplum-db-6.2.1/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
- 编辑gpinitsystem_config
#数据库代号
ARRAY_NAME="Greenplum"
#segment前缀
SEG_PREFIX=gpseg
#primary segment 起始的端口号
PORT_BASE=40000
#指定primary segment的数据目录,网上写的是多个相同目录,多个目录表示一台机器有多个segment
declare -a DATA_DIRECTORY=(/home/gpadmin/data/gpdatap1 /home/gpadmin/data/gpdatap2)
#master所在机器的host name
MASTER_HOSTNAME=mdw
#master的数据目录
MASTER_DIRECTORY=/home/gpadmin/data/master
#master的端口
MASTER_PORT=5432
#指定bash的版本
TRUSTED_SHELL=/usr/bin/ssh
#将日志写入磁盘的间隔,每个段文件通常 =16MB < 2 * CHECK_POINT_SEGMENTS + 1
CHECK_POINT_SEGMENTS=8
#字符集
ENCODING=UNICODE
#mirror segment 起始的端口号
MIRROR_PORT_BASE=50000
# mirror的数据目录,和主数据一样,一个对一个,多个对多个
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/datam1 /home/gpadmin/data/gpdatam2)
创建一个文件把数据节点的名字放入
cd /home/gpadmin/gpconfigs
touch hostfile_gpinitsystem
vi hostfile_gpinitsystem
>sdw1
>sdw2
>sdw3
>sdw4
>sdw5
初始化数据库(Master)
cd ~
gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem
时间可能比较久,千万不要随便CtrlC退出,直到看到Greenplum Database instance successfully created,
初始化成功。
初始化Standby
gpinitstandby -s smdw
修改pg_hba.conf文件连接
vi /home/gpadmin/gpdata/gpmaster/gpseg-1/pg_hba.conf
** 添加
host all all 0.0.0.0/0 md5
测试验证
- 使用psql登陆数据库
psql -d postgres
- \q退出数据库
- \l显示数据库列表
查看集群状态
gpstate
自此,greenplum-6.2.1安装大功告成~