Greenplum6.9集群安装文档
1.1 机器配置
-
系统: Centos7
-
master: 32G 内存, 500G 磁盘 (1台)
-
segment: 64G 内存, 2T 磁盘 (10台)
1.2 域名解析配置
-
登录各台主机, vim /etc/hosts, 将IP和域名映射配置添加到末尾, 从而使5台机器能通过域名访问。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.4.37.16 GP-Data-1 sdw1 10.4.37.17 GP-Data-2 sdw2 10.4.37.18 GP-Data-3 sdw3 10.4.37.19 GP-Data-4 sdw4 10.4.37.20 GP-Data-5 sdw5 10.4.37.21 GP-Data-6 sdw6 10.4.37.22 GP-Data-7 sdw7 10.4.37.23 GP-Data-8 sdw8 10.4.37.24 GP-Data-9 sdw9 10.4.37.25 GP-Data-10 sdw10 10.4.37.15 GP-Master mdw
1.3 准备工作(11台)
-
关闭selinux
-
vim /etc/selinux/config
SELINUX=disabled
-
-
关闭防火墙
-
查看防火墙状态
firewall-cmd --state
-
停止firewall
systemctl stop firewalld.service
-
1.4 设置系统参数
-
vim /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
-
备注:
备注<1><2> kernel.shmall(共享内存页总数) kernel.shmmax (共享内存段的最大值) 一般来讲,这两个参数的值应该是物理内存的一半,可以通过操作系统的值_PHYS_PAGES和PAGE_SIZE计算得出。 kernel.shmall = ( _PHYS_PAGES / 2) kernel.shmmax = ( _PHYS_PAGES / 2) * PAGE_SIZE 也可以通过以下两个命令得出这两个参数的值: $ echo $(expr $(getconf _PHYS_PAGES) / 2) $ echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE)) 如果得出的kernel.shmmax值小于系统的默认值,则引用系统默认值即可 备注<3> segment使用的端口是6000开始 segment mirror使用的端口是7000开始 所以配置默认值即可 net.ipv4.ip_local_port_range = 10000 65535 备注<5> 对于64G内存的操作系统,建议配置如下值: vm.dirty_background_ratio = 0 vm.dirty_ratio = 0 vm.dirty_background_bytes = 1610612736 # 1.5GB vm.dirty_bytes = 4294967296 # 4GB 对于小于64G内存的操作系统,建议配置如下值: vm.dirty_background_ratio = 3 vm.dirty_ratio = 10
-
修改后使用的参数
# master kernel.shmall = 68719476736 kernel.shmmax = 4294967296 # segment 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
1.5 配置资源限制参数(11台)
-
vim /etc/security/limits.conf
* soft nofile 524288 * hard nofile 524288 * soft nproc 131072 * hard nproc 131072
1.6 创建用户及用户组(11台)
-
创建gpadmin用户及用户组, 将其作为安装greenplum的操作系统用户。
-
如果已经存在, 先删除
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
2.1 RPM方式安装到指定目录
-
github下载rpm包, 地址: https://github.com/greenplum-db/gpdb/releases
-
上传后执行以下命令将greenplum安装到指定目录:
rpm -ivh --prefix=/opt/greenplum greenplum-db-6.9.0-rhel7-x86_64.rpm
-
赋予权限
chown -R gpadmin:gpadmin /opt/greenplum/greenplum*
-
应用环境变量
-
安装完成后,greenplum的环境变量,已经在 greenplum_path.sh 中设置了,这里需要应用一下变量。用 gpadmin 用户,登录到 master host:
su gpadmin source /opt/greenplum/greenplum-db/greenplum_path.sh
-
2.2 配置免密登录(每台机器)
-
切换用户gpadmin
su gpadmin cd ~ ssh-keygen -t rsa
-
在~目录下vim .ssh/authorized_keys:
将几台虚拟机公钥都存入该文件中, 每台的authorized_keys都一致
cd .ssh touch authorized_keys cat id_rsa.pub >> authorized_keys
-
如果发现还是要密码:
chown gpadmin: /home/gpadmin/.ssh chown gpadmin: /home/gpadmin/.ssh/* chmod 700 /home/gpadmin/.ssh chmod 600 /home/gpadmin/.ssh/*
-
免密登录成功案例:
-
创建hostlist, seg_hosts(Master)
-
创建目录/home/gpadmin/conf,再分别创建hostlist,seg_hosts。 hostlist 中填写所有节点的主机别名,seg_hosts 中填写所有Segment 的主机别名。
mkdir /home/gpadmin/conf cd /home/gpadmin/conf touch hostlist touch seg_hosts
-
-
使用gpssh-exkeys打通所有服务器(Master)
cd /home/gpadmin/conf gpssh-exkeys -f hostlist
-
若出现Offending key for IP in /root/.ssh报错请参考: https://blog.csdn.net/qq_34901049/article/details/99828967
-
执行成功:
-
-
在打通所有机器通道之后,我们就可以使用 gpssh 命令对所有机器进行批量操作了。
gpssh -f hostlist
- 优势: 只需要操作一次,就完成到全部集群的操作
2.3 分发数据库文件
-
打包
cd /opt/greenplum tar -cf gp6.tar greenplum-db-6.9.0 chown -R gpadmin:gpadmin /opt/greenplum/gp6.tar
- 打包的时候权限不够,我换成root,然后再把.tar的权限还给gpadmin。
-
分发(切回gpadmin)
source /opt/greenplum/greenplum-db/greenplum_path.sh gpscp -f /home/gpadmin/conf/hostlist gp6.tar =:/opt/greenplum
-
这里报错:
Error:scp: /opt/greenplum/gp6.tar: Permission denied
-
原因是: 别的机器上还没有此目录,在其他几台机器上要创建/opt/greenplum目录并修改权限
mkdir -p /opt/greenplum chown -R gpadmin:gpadmin /opt/greenplum
-
再次执行后成功
-
-
解压(master上运行, 一台上操作所有)
gpssh -f /home/gpadmin/conf/hostlist cd /opt/greenplum tar -xf gp6.tar ln -s greenplum-db-6.9.0 greenplum-db exit
2.4 环境配置
-
创建数据存储空间
-
Master
mkdir -p /home/gpadmin/data/master
-
Segment
source /opt/greenplum/greenplum-db/greenplum_path.sh gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datap1' gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datap2' gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datap3' gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datam1' gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datam2' gpssh -f /home/gpadmin/conf/seg_hosts -e 'mkdir -p /home/gpadmin/data/datam3'
-
-
配置.bash_profile 环境变量(11台都配了)
source /opt/greenplum/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/home/gpadmin/data/master/gpseg-1 export PGPORT=5432 export PGUSER=gpadmin # 没配db默认使用postgres
-
使之生效:
source /home/gpadmin/.bash_profile
-
-
初始化配置文件
mkdir /home/gpadmin/gpconfigs cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config
-
#数据库代号 ARRAY_NAME="Greenplum" #segment前缀 SEG_PREFIX=gpseg #primary segment 起始的端口号 PORT_BASE=33000 #指定primary segment的数据目录,网上写的是多个相同目录,多个目录表示一台机器有多个segment declare -a DATA_DIRECTORY=(/home/gpadmin/data/datap1 /home/gpadmin/data/datap2 /home/gpadmin/data/datap3) #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=44000 # mirror的数据目录,和主数据一样,一个对一个,多个对多个 declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/datam1 /home/gpadmin/data/datam2 /home/gpadmin/data/datam3)
-
-
host文件: hostfile_gpinitsystem
sdw1 sdw2 sdw3 sdw4 sdw5 sdw6 sdw7 sdw8 sdw9 sdw10
3.1 初始化数据库
-
安装
cd .. source /opt/greenplum/greenplum-db/greenplum_path.sh gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem
-
没有报错的话一路yes, 之前是因为多了hostfile_gpinitsystem多了mdw所以报错了。
3.2 使用数据库
-
登录
psql -d postgres
-
允许外部登录
-
navicat登录
-
由于gp有空值权限, 并不是所有的机器都可以连接到数据库, 需要在pg_hba.conf文件增加客户端机器的权限。
-
先给gpadmin创建密码
alter role gpadmin with password 'gpadmin';
-
找到pg_hba.conf位置
find / -type f -name pg_hba.conf
-
在/home/gpadmin/data/master/gpseg-1目录下, vim 添加一行:
host all gpadmin 10.4.36.3/32 trust
-
-
刷新
pg_ctl reload -D /home/gpadmin/data/master/gpseg-1
-
Navicat测试连接成功
-
-
4.1 Greenplum6调参
(1)全局死锁检测开关
在Greenplum 6中其默认关闭,需要打开它才可以支持并发更新/删除操作;
gpconfig -c gp_enable_global_deadlock_detector -v on
(2) 禁用GPORCA优化器(GPDB6默认的优化器为:GPORCA, 还不够成熟)
gpconfig -c optimizer -v off
(3)关闭日志
此GUC减少不必要的日志,避免日志输出对I/O性能的干扰。
gpconfig -c log_statement -v none