tuzhutuzhu 2016-11-09
这里使用1个master,3个segment的集群,ip为:
196.168.0.56 196.168.0.57 196.168.0.58 196.168.0.59
其中196.168.0.56为master,其余为segment。
这里主要是为之后Greenplum能够在各个节点之间相互通信做准备,添加如下:
格式为:主机ip地址 主机名
[root@mdw ~]# vi /etc/hosts 192.168.0.56 mdw 192.168.0.57 sdw1 192.168.0.58 sdw2 192.168.0.59 sdw3
注意:一定要按照这个格式写,参数代表的含义,上面已经做出说明。
配置了这个文件之后,需要继续修改hostname,即修改/etc/sysconfig/network这个文件。
如下(所有机器都要修改):
[root@mdw ~]# vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=mdw
注意:这里修改hostname,需要重启之后方可生效,如需立即生效,需使用hostname命令。
[root@mdw ~]# hostname mdw
这里的HOSTNAME一定要与/etc/hosts中的主机名一致,最终可以使用ping命令测试是否配置好了:
[root@mdw ~]# ping sdw1 PING sdw1 (192.168.0.57) 56(84) bytes of data. 64 bytes from sdw1 (192.168.0.57): icmp_seq=1 ttl=64 time=1.14 ms 64 bytes from sdw1 (192.168.0.57): icmp_seq=2 ttl=64 time=0.726 ms 64 bytes from sdw1 (192.168.0.57): icmp_seq=3 ttl=64 time=0.714 ms --- sdw1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2279ms rtt min/avg/max/mdev = 0.714/0.862/1.148/0.204 ms[root@mdw ~]# ping sdw2 PING sdw2 (192.168.0.58) 56(84) bytes of data. 64 bytes from sdw2 (192.168.0.58): icmp_seq=1 ttl=64 time=0.940 ms --- sdw2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 971ms rtt min/avg/max/mdev = 0.940/0.940/0.940/0.000 ms [root@mdw ~]# ping sdw3 PING sdw3 (192.168.0.59) 56(84) bytes of data. 64 bytes from sdw3 (192.168.0.59): icmp_seq=1 ttl=64 time=1.62 ms 64 bytes from sdw3 (192.168.0.59): icmp_seq=2 ttl=64 time=0.669 ms --- sdw3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1146ms rtt min/avg/max/mdev = 0.669/1.148/1.627/0.479 ms
一定要使用主机名来测试,使用ip地址测试无效。
注意:修改了/etc/sysconfig/network 后,可以将/home/gpadmin/.gphostcache 删除掉,因为如果在修改network文件之前执行过gpssh-exkeys,可能会在gphostcache文件中生成主机名和hostlist配置中的名字形成对应关系,而greenplum之后不会再修改这个文件。
[root@mdw ~]# groupadd -g 530 gpadmin [root@mdw ~]# useradd -g 530 -u530 -m -d /home/gpadmin -s /bin/bash gpadmin [root@mdw ~]# passwd gpadmin Changing password for user gpadmin. New password: Retype new password: passwd: all authentication tokens updated successfully.
[root@mdw ~]# vi /etc/sysctl.conf kernel.shmmax = 500000000 kernel.shmmni = 4096 kernel.shmall = 4000000000 kernel.sem = 250 512000 100 2048 kernel.sysrq = 1 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.msgmni = 2048 net.ipv4.tcp_syncookies = 1 net.ipv4.ip_forward = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.conf.all.arp_filter = 1 net.ipv4.ip_local_port_range = 1025 65535 net.core.netdev_max_backlog = 10000 net.core.rmem_max = 2097152 net.core.wmem_max = 2097152 vm.overcommit_memory = 2
执行以下命令使参数生效:
[root@dw-greenplum-1~]# sysctl -p
注意:每台机器都要修改,不然就会初始化不成功。
[root@mdw ~]# vi /etc/security/limits.conf # End of file * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
在这个文件末尾,添加上面四行就可以了。
[root@mdw ~]# service iptables stop (或者开放5432端口,该端口之后会用到) [root@mdw ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT [root@mdw ~]# /etc/rc.d/init.d/iptables save
除此之外,还需关闭SELINUX
[root@mdw selinux]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
好了现在准备工作已经做好了,可以开始安装Greenplum了。
[root@mdw ~]# mkdir /opt/greenplum [root@mdw ~]# chown -R gpadmin:gpadmin /opt/greenplum
之后安装文件,就放在这个目录下面
官网 https://network.pivotal.io/products/pivotal-gpdb
注意:下载安装包之前,需要在官网注册账号,方可下载。
(1)选择最新发布版本
(2)选择最后一个 4.3.9.1 Database Server
(3)选择第二个 Greenplum Database 4.3.9.1 for Red Hat Enterprise Linux 5,6 and 7
上传Greenplum的安装文件greenplum-db-4.3.9.1-build-1-RHEL5-x86_64.zip并解压缩。
# unzip ./greenplum-db-4.3.9.1-build-1-RHEL5-x86_64.zip
在root用户下,将下载的文件放在CentOS系统中自己能找到的位置即可,给该文件赋予可执行权限,之后执行该文件,即开始安装
# chmod +x greenplum-db-4.3.9.1-build-1-RHEL5-x86_64.bin # ./greenplum-db-4.3.9.1-build-1-RHEL5-x86_64.bin
期间需要修改默认安装目录,输入 /opt/greenplum/greenplum-db-4.3.9.1之后即可安装成功,此时master上的Greenplum安装成功了。
但是之前我们都是以root身份安装的,所以要将安装目录下的文件的所有者,都修改为gpadmin。
[root@mdw ~]# chown -R gpadmin:gpadmin /opt/greenplum
因为只在master上安装了Greenplum,所以接下来要将安装包批量发送到每个segment上,才能算是整个集群完整安装了Greenplum。
下面的操作都是为了连接所有节点,并将安装包发送到每个节点。
[root@mdw ~]# su – gpadmin [gpadmin@mdw ~]$ mkdir conf [gpadmin@mdw ~]$ cd conf [gpadmin@mdw conf]$ vi hostlist mdw sdw1 sdw2 sdw3 [gpadmin@mdw conf]$ vi seg_hosts sdw1 sdw2 sdw3
注意:此时需要转换成gpadmin身份来操作了,按照上面的文件内容创建hostlist和seg_hosts文件备用。
hostlist存储了所有节点的主机名,seg_hosts存储了所有从节点的主机名。
这里文件中的mdw、sdw1、sdw2、sdw3即为之前在 /etc/hosts文件中配置的最后一个参数。
greenplum_path.sh中保存了运行Greenplum的一些环境变量设置,包括GPHOOME、PythonHOME等设置。
[gpadmin@mdw ~]$ source /opt/greenplum/greenplum-db/greenplum_path.sh [gpadmin@mdw ~]$ gpssh-exkeys -f /home/gpadmin/conf/hostlist [STEP 1 of 5] create local ID and authorize on local host ... /home/gpadmin/.ssh/id_rsa file exists ... key generation skipped [STEP 2 of 5] keyscan all hosts and update known_hosts file [STEP 3 of 5] authorize current user on remote hosts ... send to sdw1 ... send to sdw2 ... send to sdw3 [STEP 4 of 5] determine common authentication file content [STEP 5 of 5] copy authentication files to all remote hosts ... finished key exchange with sdw1 ... finished key exchange with sdw2 ... finished key exchange with sdw3 [INFO] completed successfully
注意:
(1)首次执行gpssh-exkeys命令时,在[STEP 3 of 5],要输入每个segment节点的gpadmin用户的密码。
(2)gpssh-exkeys命令使用的时候一定要用gpadmin身份,因为这个命令会生成ssh的免密码登录的秘钥,在/home/gpadmin/.ssh这里。如果以root身份使用gpssh-exkeys命令,那么生成的.ssh秘钥在root的home下面或者是在/home/gpadmin下面但是是root的所有者,如果之后使用gpadmin身份执行相应操作的时候就没有权限。
[INFO] completed successfully 这就说明成功打通了,之后就可以使用下面的命令开启批量操作,如下:
[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist Note: command history unsupported on this machine ... => pwd [sdw1] /home/gpadmin [sdw3] /home/gpadmin [sdw2] /home/gpadmin [ mdw] /home/gpadmin => exit
这里pwd命令是linux中的查看路径命令,这里也是查看一下批量操作时所处的位置,从中可以看到同时连接到了4个节点。这里如果/etc/hosts文件中参数只设置了两个,没有设置主机名,就只能同时连接2个节点,而且是随机的。
这里我们只是测试一下,exit之后先做一些其他的操作。
打通之后需要将master中的greenplum安装包批量复制到各个segment节点上。
[gpadmin@mdw conf]$ cd /opt/greenplum/
打包:
[gpadmin@mdw greenplum]$ tar -cf gp.4.3.tar greenplum-db-4.3.9.1/
然后利用gpscp命令将这个文件复制到每一台机器上:
[gpadmin@mdw greenplum]$ gpscp -f /home/gpadmin/conf/seg_hosts gp.4.3.tar =:/opt/greenplum/
如果没有意外,就批量复制成功了,可以去子节点的相应文件夹查看,之后要将tar包解压,我们使用批量操作。
[gpadmin@mdw greenplum]$ cd ~/conf/ [gpadmin@mdw conf]$ gpssh -f seg_hosts Note: command history unsupported on this machine ... => cd /opt/greenplum [sdw3] [sdw1] [sdw2] => tar -xf gp.4.3.tar [sdw3] [sdw1] [sdw2] 建立软链接 => ln -s ./greenplum-db-4.3.9.1 greenplum-db [sdw3] [sdw1] [sdw2] => ll(可以使用ll查看一下是否已经安装成功) => exit
这样就完成了所有节点的安装。
在初始化之前的的几个步骤都是做一些准备工作。
[gpadmin@mdw conf]$ gpssh -f hostlist => mkdir gpdata [sdw3] [mdw] [sdw2] [sdw1] => cd gpdata [sdw3] [mdw] [sdw2] [sdw1] => mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2 [sdw3] [mdw] [sdw2] [sdw1] => ll => exit
编辑.bash_profile文件,添加以下内容:
[gpadmin@mdw ~]$ cd ~ [gpadmin@mdw ~]$ vi .bash_profile source /opt/greenplum/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1 export PGPORT=5432 export PGDATABASE=testDB [gpadmin@mdw ~]$ source .bash_profile(让环境变量生效)
注意:PGPORT指的是你安装greenplum数据库的端口号。
这里有个问题,Greenplum自己会安装一个Python包,是2.6.6的。而CentOS6.5本身自带有一个Python包,是2.6.2的,设置了以上的环境变量了之后,使用yum安装一些软件的时候就会出现问题(因为yum是基于Python的),因为系统就发现自己有两个Python包,他不知道用哪一个了。我还没有试过更新系统的Python包,需要安装软件的时候,我就将环境变量都注释掉,安装完之后再让他生效。
[gpadmin@mdw ~]$ vi /home/gpadmin/conf/gpinitsystem_config ARRAY_NAME="Greenplum" SEG_PREFIX=gpseg PORT_BASE=33000 declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2) MASTER_HOSTNAME=mdw MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster MASTER_PORT=5432 TRUSTED_SHELL=/usr/bin/ssh MIRROR_PORT_BASE=43000 REPLICATION_PORT_BASE=34000 MIRROR_REPLICATION_PORT_BASE=44000 declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2) MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
[gpadmin@mdw ~]$ gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw3
其中sdw3是指master的standby所在的节点,我看书上和网上的一些资料都将standby放在最后一个节点,可能是约定俗成的吧。
注意:如果上面有一些配置有问题,gpinitsystem就不能成功,日志在主节点/home/gpadmin/gpAdminLogs/的gpinitsystem_2016XXXX.log文件中。
需要注意的是如果初始化失败,一定要认真查看这个日志文件,一味重复安装没有太大意义,重要的是要找到主要原因。
# gpstart # gpstop
# psql -d postgres psql (8.2.15) Type "help" for help. postgres=#
出现以上界面,恭喜你已经安装成功了。
输入查询语句,查看是否可以执行。
postgres=# select datname,datdba,encoding,datacl from pg_database; datname | datdba | encoding | datacl -----------+--------+----------+---------------------------------- postgres | 10 | 6 | template1 | 10 | 6 | {=c/gpadmin,gpadmin=CTc/gpadmin} template0 | 10 | 6 | {=c/gpadmin,gpadmin=CTc/gpadmin} (3 rows) postgres=# \q(退出)
安装pgadmin Ⅲ,使用该客户端,连接greenplum 4.3数据库
postgres =# alter role gpadmin with password 'gpadmin';
在master节点的 $MASTER_DATA_DIRECTORY/pg_hba.conf 中添加新的客户端服务器信息。master节点的pg_hba.conf配置文件,控制客户端访问Greenplum系统。
注意:segment节点也有pg_hba.conf配置文件,它只能控制master节点能否访问segment,决不能运行客户端连接。所以不要修改segment的pg_hba.conf文件。
格式:
host database role CIDR-address authentication-method
pg_hba.conf中记录是被顺序读取的,所有记录的顺序是有象征性意义的。
通常前面的记录匹配更少的连接但要求较弱的认证,后面的记录匹配更多的连接但要求更严格的认证。
例如:允许gpadmin用户在192.168.0.x网段访问所有数据库,使用md5验证。
# vi $MASTER_DATA_DIRECTORY/pg_hba.conf host all gpadmin 192.168.0.0/24 md5
在master重新加载pg_hba.conf文件,需要重启Greenplum数据库。
# gpstop –a # gpstart –a
# psql -h 192.168.1.171 -p 2345 -d postgres -U gpadmin -W Password for user gpadmin:
-h 192.168.1.171 是指定连接master的ip地址
-p 5432 是安装greenplum数据库时,设置的端口号,当前数据库端口号是2345
-u gpadmin 是指定连接的用户名