GreenPlum 集群搭建

xiaoxiao2021-03-01  15

1、准备

  这里准备了4台服务器,1台做master,1台做standby,4台都做存储,为了保密真实的IP地址和主机名都换成“艺名”了。

OS:Red Hat Enterprise Linux Server release 6.4 (Santiago) GP:greenplum-db-4.3.6.2-build-1-RHEL5-x86_64.zip JDK:1.7+192.168.1.100  bj-gp-node1(segment master)192.168.1.101  bj-gp-node2(segment standby)192.168.1.102  bj-gp-node3(segment)192.168.1.103  bj-gp-node4(segment)

greenplum官网下载地址:http://gpn.greenplum.com/download.php (注:需要注册后才能下载)

 

2、系统参数配置

  系统参数配置的修改需要在每个节点服务器上执行

2.1.修改Linux内核参数

[root@bj-gp-node1 ~]# vi /etc/sysctl.conf # Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # # Use '/sbin/sysctl -a' to list all possible parameters. # Controls IP packet forwarding net.ipv4.ip_forward = 0 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 1 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 # Controls the use of TCP syncookies net.ipv4.tcp_syncookies = 1 # Disable netfilter on bridges #net.bridge.bridge-nf-call-ip6tables = 0 #net.bridge.bridge-nf-call-iptables = 0 #net.bridge.bridge-nf-call-arptables = 0 # Controls the default maxmimum size of a mesage queue kernel.msgmnb = 65536 # Controls the maximum size of a message, in bytes kernel.msgmax = 65536 kernel.msgmni = 2048 kernel.sem = 250 512000 100 2048 # Controls the maximum shared segment size, in bytes #kernel.shmmax = 68719476736 kernel.shmmax = 500000000 kernel.shmmni = 4096 # Controls the maximum number of shared memory segments, in pages #kernel.shmall = 4294967296 kernel.shmall = 4000000000 net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_max_syn_backlog=4096 net.ipv4.ip_local_port_range = 1025 65535 net.core.netdev_max_backlog=10000 vm.overcommit_memory=2 net.ipv4.conf.all.arp_filter = 1 net.core.rmem_max = 2097152 net.core.wmem_max = 2097152

 

2.2.修改Linux最大限制

[root@bj-gp-node1 ~]# vi /etc/security/limits.conf #greenplum configs * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072

 

上述配置具体含义: soft nproc: 可打开的文件描述符的最大数(软限制) hard nproc:可打开的文件描述符的最大数(硬限制) soft nofile:单个用户可用的最大进程数量(软限制) hard nofile:单个用户可用的最大进程数量(硬限制)

2.3.I/O调整优化

[root@bj-gp-node1 ~]# vi /boot/grub/menu.lst #greenplum configs elevator=deadline

 

2.4.添加所有节点到HOST

[root@bj-gp-node1 ~]# vi /etc/hosts 192.168.1.100  bj-gp-node1192.168.1.101  bj-gp-node2192.168.1.102  bj-gp-node3192.168.1.103  bj-gp-node4

 

2.5.关闭防火墙

[root@bj-gp-node1 ~]# chkconfig --list iptables [root@bj-gp-node1 ~]# chkconfig --level 0123456 iptables off

 

2.6.设置SELINUX

[root@bj-gp-node1 ~]# vi /etc/selinux/config SELINUX=disabled

 

2.7.重启系统使配置生效

[root@bj-gp-node1 ~]# reboot

 

3、GP安装

  GP的安装操作都是在主节点master上执行的

3.1.创建gpadmin用户

[root@bj-gp-node1 ~]# useradd gpadmin [root@bj-gp-node1 ~]# passwd gpadmin

 

3.2.设置gpadmin用户环境

[gpadmin@bj-gp-node1 ~]$ cd /home/gpadmin [gpadmin@bj-gp-node1 ~]$ vi .bashrc [gpadmin@bj-gp-node1 ~]$ vi .bash_profile.bashrc和.bash_profile最后都添加下面两行 source /usr/local/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/data1/gpdata/master/gpseg-1

设置完后记得source一下使其立即生效

 

3.3.上传并解压安装包

将greenplum-db-4.3.6.2-build-1-RHEL5-x86_64.zip上传至master的/opt/目录下

[root@bj-gp-node1 opt]# /bin/bash greenplum-db-4.3.6.2-build-1-RHEL5-x86_64.bin

按提示输入回车或yes 这一步会将安装包解压到/usr/local/下,并建立软连接greenplum-db

 加载GPDB安装目录下的路径文件: # source /usr/local/greenplum-db/greenplum_path.sh

3.4.准备节点服务器信息文件

后面的批量安装会用到这两个文件,如果all_host和all_segment内容一样,可以只创建一个文件

[root@bj-gp-node1 opt]# mkdir -p /opt/gpinit/ [root@bj-gp-node1 gpinit]# touch all_host [root@bj-gp-node1 gpinit]# touch all_segment all_host和all_segment内容: bj-gp-node1 bj-gp-node2bj-gp-node3bj-gp-node4

 

3.5.建立节点服务器间的信任

[root@bj-gp-node1 local]# gpssh-exkeys -f /opt/gpinit/all_host

按照提示输入root密码,记住这一步不能输入gpadmin的密码,因为批量安装时需要在/usr/local下创建目录,需要root权限

 

3.6.批量安装

[root@bj-gp-node1 local]# gpseginstall -f /opt/gpinit/all_host -u gpadmin -p gpadmin

这一步其实就是将master上的greenplum打包通过scp命令传到all_host中的主机上,并赋予目录gpadmin的权限

 

3.7.检查批量安装情况

[root@bj-gp-node1 local]# gpssh -f /opt/gpinit/all_host -e ls -l $GPHOME

返回结果中各节点目录一致则成功

 

3.8.创建存储目录

master [root@bj-gp-node1 local]# mkdir -p /data1/gpdata/master [root@bj-gp-node1 local]# chown gpadmin:gpadmin /data1/gpdata/master segment [root@bj-gp-node1 local]# gpssh -f /opt/gpinit/all_host -e 'mkdir -p /data1/gpdata/primary' [root@bj-gp-node1 local]# gpssh -f /opt/gpinit/all_host -e 'chown gpadmin:gpadmin /data1/gpdata/primary'mirror[root@bj-gp-node1 local]# gpssh -f /opt/gpinit/all_segment -e 'mkdir -p /data1/gpdata/mirror'[root@bj-gp-node1 local]# gpssh -f /opt/gpinit/all_segment -e 'chown gpadmin:gpadmin /data1/gpdata/mirror'  

 

3.9.设置时钟同步

vi /etc/ntp.conf 在server第一行添加下面两行 server 192.168.1.1 server 192.168.1.2 重启ntpd服务 /etc/init.d/ntpd restart 查看ntp同步情况 ntpq -p 使ntpd服务重启服务器后也启动 chkconfig --level 0123456 ntpd on

 

3.10.创建GP初始化文件

[gpadmin@bj-gp-node1 ~]$ mkdir /home/gpadmin/gpconfigs [gpadmin@bj-gp-node1 ~]$ cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config [gpadmin@tj-soc-c04-csfb1 gpconfigs]$ chmod 775 gpinitsystem_config

 

3.10修改GP初始化文件

[gpadmin@bj-gp-node1 gpconfigs]$ vi gpinitsystem_config

# FILE NAME: gpinitsystem_config

# Configuration file needed by the gpinitsystem

#################################################### REQUIRED PARAMETERS################################################

#### Name of this Greenplum system enclosed in quotes.ARRAY_NAME="BJ Greenplum DW"

#### Naming convention for utility-generated data directories.SEG_PREFIX=gpseg

#### Base number by which primary segment port numbers #### are calculated.PORT_BASE=40000

#### File system location(s) where primary segment data directories #### will be created. The number of locations in the list dictate#### the number of primary segments that will get created per#### physical host (if multiple addresses for a host are listed in #### the hostfile, the number of segments will be spread evenly across#### the specified interface addresses).declare -a DATA_DIRECTORY=(/data1/gpdata/primary /data1/gpdata/primary)

#### OS-configured hostname or IP address of the master host.MASTER_HOSTNAME=bj-gp-node1

#### File system location where the master data directory #### will be created.MASTER_DIRECTORY=/data1/gpdata/master

#### Port number for the master instance. MASTER_PORT=5432

#### Shell utility used to connect to remote hosts.TRUSTED_SHELL=ssh

#### Maximum log file segments between automatic WAL checkpoints.CHECK_POINT_SEGMENTS=8

#### Default server-side character set encoding.ENCODING=UNICODE

#################################################### OPTIONAL MIRROR PARAMETERS################################################

#### Base number by which mirror segment port numbers #### are calculated.MIRROR_PORT_BASE=50000

#### Base number by which primary file replication port #### numbers are calculated.REPLICATION_PORT_BASE=41000

#### Base number by which mirror file replication port #### numbers are calculated. MIRROR_REPLICATION_PORT_BASE=51000

#### File system location(s) where mirror segment data directories #### will be created. The number of mirror locations must equal the#### number of primary locations as specified in the #### DATA_DIRECTORY parameter.declare -a MIRROR_DATA_DIRECTORY=(/data1/gpdata/mirror /data1/gpdata/mirror)

#################################################### OTHER OPTIONAL PARAMETERS################################################

#### Create a database of this name after initialization.DATABASE_NAME=bj_gp

#### Specify the location of the host address file here instead of#### with the the -h option of gpinitsystem.#MACHINE_LIST_FILE=/home/gpadmin/gpconfigs/hostfile_gpinitsystem

 

 

3.11.初始化GP

[gpadmin@bj-gp-node1 ~]$ gpinitsystem -c /home/gpadmin/gpconfigs/gpinitsystem_config -h /opt/gpinit/all_host 中间需要输入一次:Y

 

如果没有报ERROR,GP数据库就安装好了。下面讲一些附加操作

 

4、附加项

4.1增加standby

一个gp集群只有一个master肯定会让人不放心,还好有备用,当master宕掉后,会自动启用standby作为master,下面来看一下standby怎么添加

在standby服务器上执行[root@bj-gp-node2 ~]# mkdir /data1/gpdata/master [root@bj-gp-node2 ~]# chown gpadmin:gpadmin /data1/gpdata/master在master服务器上执行  [gpadmin@bj-gp-node1 ~]$ gpinitstandby -s bj-gp-node2中间输入一次Y

 

4.2.增加mirror

mirror就是镜像,也叫数据备份。mirror对于数据存储来说很重要,因为我们的服务器指不定什么时候出毛病,有mirror就好很多了,因为两台存储节点同时宕掉的几率还是很小的。如果前面在GP初始化文件里忘记配置mirror了,请按照下面的方法添加

[gpadmin@bj-gp-node1 ~]$ gpaddmirrors -p 1000运行过程中需要输入两次mirror路径:/data1/gpdata/mirror

 

4.3.设置访问权限

打开/data1/gpdata/master/gpseg-1/pg_hba.conf 按照最下面的格式添加客户端ip或网段

#user define host all all 192.168.1.0/24 trust host all all 127.0.0.1/28 trust

 

4.4.访问方式

可以通过gpAdmin桌面客户端来访问,也可以用命令行来访问,下面来说一下命令行访问的方式,loach是后面添加的用户

[gpadmin@bj-gp-node1 ~]$ psql -d tj_csfb -h bj-gp-node1 -p 5432 -U gpadmin [gpadmin@bj-gp-node1 ~]$ psql -d tj_csfb -h bj-gp-node1 -p 5432 -U loach

 

4.5.创建用户

通过命令行登录以后,执行下面的命令

CREATE ROLE loach WITH LOGIN; ALTER ROLE loach WITH PASSWORD 'loach';

 

①出现错误Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题

结果出现了以下错误:

/lib64/libc.so.6: version `GLIBC_2.14' not found

出现这种错误表明程序运行需要GLIBC_2.14,但是系统中却并不存在,因此可以先用strings命令查看下系统中的GLIBC版本

strings /lib64/libc.so.6 | grep GLIBC

发现系统中最高只支持GLIBC_2.12,解决这个问题有多种方法。

在你准备升级GLIBC库之前,你要好好思考一下,你真的要升级GLIBC么?你知道你自己在做什么么?http://baike.baidu.com/view/1323132.htm?fr=aladdinglibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现…总的来说,不说运行在linux上的一些应用,或者你之前部署过的产品,就是很多linux的基本命令,比如cp, rm, ll之类,都得依赖于它网上很多人有惨痛教训,甚至升级失败后系统退出后无法重新进入了。。。。。。对于CentOS这样的系统,为了追求稳定性(这个值得商榷)往往各种库版本都很低,比如6.5甚至7.0自带的还是glibc2.12, 而ubuntu 14.04带glibc2.19如果升级基本C运行库到一个太新的版本,可能会影响CentOS的运行。所以大家如果遇到CentOS基本库的问题,影响了自己程序的运行,应该可以考虑:1. 在低版本的系统编译自己的产品,如果自己的产品确实不需要新版才支持的新特性2. 用版本高的系统来编译,比如ubuntu,和centos的新版,但可能需要部署到较低版本,那么可以考虑用mock等技术制作更好的安装包,把依赖打入包内3.利用容器技术,如Docker,在低版本的操作系统内,轻量级的隔离出一个虚拟运行环境,适应你的程序。好在我遇到的问题是glibc2.15就满足要求升级后暂时没发现问题,所以大家可以参考我的方法:首先查看现有的情况,在CentOS6.5下

ll /lib64/libc.so.6

libc.so.6是一个软连接,当前的glibc是2.12版本,我遇到的是GLIBC_2.15找不到的问题,所以需至少升级到2.15首先,从网上下载glibc 2.15的rpm安装包,但这个不容易,因为.rpm针对的是centOS和redhat,高版本安装包很少见。也可以直接从其他系统上拷一个编译好的文件libc.so.6(对应glibc 2.15或者更高的),不过最保险的方式就是下载源代码在本地编译一次(有的人实在编译不成功,那也只能从别的地方找一份了)各个版本的glibc可以从http://ftp.gnu.org/gnu/glibc/找,包括其插件glibc-port最新到2.20,我保守的选择2.15对于低版本glibc,还有glibc-linuxthreads-2.x需要编译,可参考很多网上文档,但2.15没有,所以不用了

wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz tar -xvf glibc-2.15.tar.gz tar -xvf glibc-ports-2.15.tar.gz mv glibc-ports-2.15 glibc-2.15/ports mkdir glibc-build-2.15 cd glibc-build-2.15 ../glibc-2.15/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make make install 如果提示install成功,去看glibc所在的共享库:

可以看到2.12的旧库文件还在,多了2.15版本的库文件,而且软链接文件全部指向了2.15版本。

-rwxr-xr-x 1 root root 1921096 Aug 30 02:16 /lib64/libc-2.12.so -rwxr-xr-x 1 root root 9801632 Sep 25 13:46 /lib64/libc-2.15.so lrwxrwxrwx. 1 root root 18 May 19 18:51 /lib64/libcap-ng.so.0 -> libcap-ng.so.0.0.0 -rwxr-xr-x. 1 root root 18672 Jun 25 2011 /lib64/libcap-ng.so.0.0.0 lrwxrwxrwx. 1 root root 14 May 19 18:51 /lib64/libcap.so.2 -> libcap.so.2.16 -rwxr-xr-x 1 root root 19016 Dec 8 2011 /lib64/libcap.so.2.16 lrwxrwxrwx. 1 root root 19 May 19 18:57 /lib64/libcgroup.so.1 -> libcgroup.so.1.0.40 -rwxr-xr-x 1 root root 97016 Dec 9 2013 /lib64/libcgroup.so.1.0.40 -rwxr-xr-x 1 root root 197064 Aug 30 02:16 /lib64/libcidn-2.12.so -rwxr-xr-x 1 root root 267972 Sep 25 13:46 /lib64/libcidn-2.15.so lrwxrwxrwx 1 root root 15 Sep 25 13:52 /lib64/libcidn.so.1 -> libcidn-2.15.so lrwxrwxrwx. 1 root root 17 May 19 18:51 /lib64/libcom_err.so.2 -> libcom_err.so.2.1 -rwxr-xr-x 1 root root 17256 Nov 22 2013 /lib64/libcom_err.so.2.1 -rwxr-xr-x 1 root root 40400 Aug 30 02:16 /lib64/libcrypt-2.12.so -rwxr-xr-x 1 root root 142947 Sep 25 13:46 /lib64/libcrypt-2.15.so lrwxrwxrwx. 1 root root 22 May 19 18:57 /lib64/libcryptsetup.so.1 -> libcryptsetup.so.1.1.0 -rwxr-xr-x 1 root root 97072 Jun 22 2012 /lib64/libcryptsetup.so.1.1.0 lrwxrwxrwx 1 root root 16 Sep 25 13:52 /lib64/libcrypt.so.1 -> libcrypt-2.15.so lrwxrwxrwx 1 root root 12 Sep 25 13:52 /lib64/libc.so.6 -> libc-2.15.so 有些人会在make install后出现error。这儿error我没去细究,此时可以查看一下系统此时的GLIBC版本,参考一开始的做法。如果版本未升级,我们只能手动安装一下:

首先make是成功了,那么我们会发现build目录下编译出了一个新的libc.so.6 (/glibc-build-2.15/libc.so.6, 我们会发现这实际上也是一个软连接,真实的lib文件是libc.so, 输出

$ ll libc.so.6 lrwxrwxrwx 1 root root 7 Sep 23 07:41 libc.so.6 -> libc.so [usr@linux glibc-build-2.15]$ strings libc.so | grep GLIBC GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 GLIBC_2.14 GLIBC_2.15 GLIBC_PRIVATE 这是我们需要的lib了,然后去更新系统的库。 这里要注意,更新系统里的链接(我的是/lib64/libc.so.6) 很容易出错,我不清楚有没有更好的办法,一般都是删除旧链接,建立新链接 但删除旧链接后,很多命令直接不能用了,因为此时系统中不到glibc的库了。这个时候就需要临时指定一个glibc库,方法如下(libc.so改个名以便好与以后更新的其他版本区分):

cp /****/glibc-build-2.15/libc.so /lib64/libc-2.15.so rm -rf /lib64/libc.so.6 LD_PRELOAD=/lib64/libc-2.15.so ln -s/lib64/libc-2.15.so lib64/libc.so.6 更新连接完毕,然后

$ strings /lib64/libc.so.6 | grep GLIBC GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 GLIBC_2.14 GLIBC_2.15 GLIBC_PRIVATE 说明连接更新成功,再编译的话,GLIBC_2.15及以下版本的依赖问题就不会出现了。

②执行# ./glibc-2.14/configure 出现以下错误:

checking LD_LIBRARY_PATH variable... contains current directory configure: error: *** LD_LIBRARY_PATH shouldn't contain the current directory when *** building glibc. Please change the environment variable *** and run configure again.

问题分析: LD_LIBRARY_PATH不能包含当前目录,请修改环境变量并重新执行configure

解决方法:

[root@localhost opt]# echo $LD_LIBRARY_PATH :/usr/local/lib [root@localhost opt]# export LD_LIBRARY_PATH= [root@localhost opt]# echo $LD_LIBRARY_PATH [root@localhost opt]# ./glibc-2.14/configure

转自:https://www.cnblogs.com/liuyungao/p/5689588.html

转载请注明原文地址: https://www.6miu.com/read-3506392.html

最新回复(0)