绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
GreenPlum集群安装
2023-03-20 16:18:27

1.1 GreemPlum架构

 


 



正常情况下只有primary master接受用户连接请求,standby master通过gpsyncagent进程(运行在standby master上)利用事务日志保持与primary master的同步。

segment崩溃时正在运行的事务会全部失败。

mirror会自动接管服务而无需人工干预,接管过程中会有几秒的不可用时间

1.2 环境搭建

GreenPlum对存储的要求比较高。在文件系统的选择上,Linux建议使用XFS,在solaris建议使用ZFS。

集群环境:

程序里连master和standby master的浮动ip:192.168.1.222。

1.2.1 创建用户名,用户组

groupadd -g 530 gpadmin

useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin

chown -R gpadmin:gpadmin /home/gpadmin

echo "密码" | passwd --stdin gpadmin

1.2.2 修改hosts文件

vi /etc/hosts,添加:

192.168.1.202 pc1

192.168.1.203 pc2

192.168.1.204 pc3

--备注:

即使是GreenPlum小化安装(在一台机器上安装一个master,一个段),也需要修改/etc/hosts文件及使用gpssh-exkeys打通所有服务器,免密码登录

1.2.3 安装依赖包

yum install apr apr-util zip -y

1.2.4 修改系统内核参数

vi /etc/sysctl.conf

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.tcp_tw_recycle = 1

net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.conf.defalut.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

 

vi /etc/security/limits.conf,添加:

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536 
* hard nproc 65536 

#让配置生效

sysctl -p-

1.2.5 安装GreenPlum

1.2.5.1 在master节点安装GreenPlum软件

下载地址:https://github.com/greenplum-db/gpdb/releases/

rpm -ivh greenplum-db-6.8.0-rhel7-x86_64.rpm

默认的安装路径是/usr/local,然后需要修改该路径gpadmin操作权限:

chown -R gpadmin:gpadmin /usr/local

1.2.5.2 配置hostlist文件,打通节点

su - gpadmin

mkdir -p /home/gpadmin/conf

vi /home/gpadmin/conf/hostlist

添加:

pc1

pc2

pc3

 

#创建一个 seg_hosts ,包含所有的Segment Host的主机名:

vi /home/gpadmin/conf/seg_hosts

pc2

pc3

#配置台服务器到另外两台服务器的主机信任关系,使之可以免密登录

ssh-keygen

ssh-copy-id pc2

ssh-copy-id pc3

#使用gpssh-exkeys打通所有服务器,免密码登录

source /usr/local/greenplum-db/greenplum_path.sh

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] retrieving credentials from remote hosts

  ... send to pc2

  ... send to pc3

 

[STEP 4 of 5] determine common authentication file content

 

[STEP 5 of 5] copy authentication files to all remote hosts

  ... finished key exchange with pc2

  ... finished key exchange with pc3

 

[INFO] completed successfully

/*

假如报错:

[ERROR QG-DB-03] authentication check failed:    
[ERROR] cannot establish ssh access into the local host

有可能是做了普通用户无法ssh的限制。

可以通过修改/etc/ssh/sshd_config,在AllowUsers这一行后面添加能远程访问的用户,示例:

AllowUsers root.adminssh

然后重启ssh:service sshd restart

再重新执行gpssh-exkeys命令。

*/

如果gpssh-exkeys执行失败,可以尝试在每台机器上配置互信:

ssh-keygen

ssh-copy-id 目标IP

回头再执行下gpssh-exkeys -f /home/gpadmin/conf/hostlist,可能就好了。

 

#验证免密连接是否成功,如果中间需要输入密码,则有问题

[gpadmin@pc1]$ gpssh -f /home/gpadmin/conf/hostlist

=> pwd

[pc1] /home/gpadmin

[pc2] /home/gpadmin

[pc3] /home/gpadmin

1.2.5.3 在Segment节点上安装GreenPlum

#在master节点打包安装包并复制到各个数据节点:

cd /usr/local

tar -cf gp.tar greenplum-db-6.5.0/

scp gp.tar 192.168.1.203:/usr/local/

 

#在数据节点上解压

tar -xf gp.tar

ln -s greenplum-db-6.5.0 greenplum-db

chown -R gpadmin:gpadmin /usr/local/greenplum-db

chown -R gpadmin:gpadmin /usr/local/greenplum-db-6.5.0

1.2.5.4 初始化数据库

1.2.5.4.1 创建数据目录

#在各节点创建数据目录:

mkdir -p /data/greenplum/data/

chown -R gpadmin:gpadmin /data/greenplum/data/

 

#在一台服务器上统一处理所有节点

gpssh -f /home/gpadmin/conf/hostlist

mkdir -p /data/greenplum/data/master

mkdir -p /data/greenplum/data/primary1 

mkdir -p /data/greenplum/data/primary2  

mkdir -p /data/greenplum/data/mirror1 

mkdir -p /data/greenplum/data/mirror2  

1.2.5.4.2 配置环境变量

#在各节点服务器上执行:

vi /home/gpadmin/.bash_profile

新增:

source /usr/local/greenplum-db/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/data/greenplum/data/master/gpseg-1

export PGPORT=5432

export PGDATABASE=gp_sydb

export GPHOME=/usr/local/greenplum-db
 

source /home/gpadmin/.bash_profile #让修改生效

1.2.5.4.3 创建greenplum配置文件

配置文件模板:$GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config

此模板中 Mirror Segment的配置都被注释了。

在master节点上执行:

cd /usr/local/greenplum-db/docs/cli_help/gpconfigs

cp gpinitsystem_config initgp_config

vi initgp_config

需要修改一下几个地方:

#指定Primary Segment的数据目录:

declare -a DATA_DIRECTORY=(/data/greenplum/data/primary1 /data/greenplum/data/primary2)

MASTER_HOSTNAME=pc1

MASTER_DIRECTORY=/data/greenplum/data/master

#指定Mirror Segment的数据目录:

declare -a MIRROR_DATA_DIRECTORY=(/data/greenplum/data/mirror1 /data/greenplum/data/mirror2)

DATABASE_NAME=gp_sydb

MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts

1.2.5.4.4 关闭防火墙

service iptables stop-

1.2.5.4.5 执行初始化

在master上执行:

[gpadmin@pc1 gpconfigs]$ gpinitsystem -c initgp_config

……

Continue with Greenplum creation Yy|Nn (default=N):  #这里输入Y继续

……

 

#初始化成功后,可以正常登陆数据库了:

[gpadmin@pc1 master]$  psql -d postgres

psql (9.4.24)

Type "help" for help.

#在master节点修改gpadmin密码

alter role gpadmin with password '密码';

 

默认只有本地可以连数据库,远程连接会报错:

[gpadmin@pc2 master]$  psql -h 192.168.1.202 -d postgres

psql: FATAL:  no pg_hba.conf entry for host "192.168.1.203", user "gpadmin", database "postgres", SSL off

如果想让别的服务器能够远程连接,需要修改master节点和standby master的gp_hba.conf文件:

cd /data/greenplum/data/master/gpseg-1

vi pg_hba.conf

添加:

host all all 192.168.1.0/24 md5 #允许192.168.1网段所有服务器连接

执行gpstop -u使修改生效

 

#查看有哪些数据库

postgres-# \l

                               List of databases

   Name    |  Owner  | Encoding |  Collate   |   Ctype    |  Access privileges 

-----------+---------+----------+------------+------------+---------------------

 gp_sydb   | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 |

 postgres  | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 |

 template0 | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =c/gpadmin         +

           |         |          |            |            | gpadmin=CTc/gpadmin

 template1 | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =c/gpadmin         +

           |         |          |            |            | gpadmin=CTc/gpadmin

(4 rows)

1.2.5.5 配置standby master

#在standby机器上执行

mkdir -p /data/greenplum/data/standby

chown -R gpadmin:gpadmin /data/greenplum/data/standby

 

#在master上执行

gpinitstandby -s pc3

中间输入一次Y。

1.2.5.6 配置mirror

1.2.5.6.1 生成addmirror文件

[gpadmin@pc1 data]$  gpaddmirrors -o ./addmirror

……

Enter mirror segment data directory location 1 of 2 >

/data/greenplum/data/mirror1

Enter mirror segment data directory location 2 of 2 >

/data/greenplum/data/mirror2

20200331:21:19:50:004400 gpaddmirrors:pc1:gpadmin-[INFO]:-Configuration file output to ./addmirror successfully.

1.2.5.6.2 添加mirror

gpaddmirrors -i addmirror

1.2.6 用keepalive实现master高可用

在Greenplum的master节点和standby节点部署keepalive服务,配置一个虚拟IP,使用keepalive监控greenplum的进程状态和服务可用性;

当master节点出现故障后,由Keepalived机制来保证切换到standby节点,需要特别注意的是切换到standby节点的时候,需要首先激活Standby节点(gpactivatestandby -d $MASTER_DATA_DIRECTORY),这样就解决了greenplum主备节点的无缝切换

1.2.6.1 安装keepalive

在master节点和standby master上安装keepalive。

将安装包上传至/usr/local/src下

yum install -y popt-devel openssl-devel gcc

cd /usr/local/src

tar zxvf keepalived-1.2.2.tar.gz

cd keepalived-1.2.2

./configure --prefix=/

make

make install

1.2.6.2 在standby master节点上创建激活脚本

su - gpadmin

cd /data/greenplum/data/standby

vi activatestandby.sh

添加:

export MASTER_DATA_DIRECTORY=/data/greenplum/data/master/gpseg-1
export PGPORT=5432
export PGDATABASE=gp_sydb
export GPHOME=/usr/local/greenplum-db
source /usr/local/greenplum-db/greenplum_path.sh

echo y | /usr/local/greenplum-db-6.8.0/bin/gpactivatestandby -d $MASTER_DATA_DIRECTORY


1.2.6.3 只在master节点上创建检查脚本

用root用户执行:

vi /root/check_gp.sh

添加:

#检查greenplum master进程是否存在,若不存在,则将浮动ip转移到备用master上
date=`date "+%Y-%m-%d-%H:%M"`
LogName='/root/check_gp.log'
echo $date':' > $LogName
v1=$(netstat -nltp |grep 5432)

if [ "$v1" = "" ]
then
echo 'master节点宕机,开始关闭keepalive,并激活standby master...' >> $LogName
service keepalived stop
su - gpadmin -c "ssh 192.168.1.204 sh /data/greenplum/data/standby/activatestandby.sh"
exit 2
else
echo 'master节点正常.' >> $LogName
exit 0
fi


上面指定的ip是standby master的ip。

可通过/root/check_gp.log查看相关日志:

#给该脚本授权

chmod +x /root/check_gp.sh

1.2.6.4 修改keepalive配置文件

1.2.6.4.1 master节点

cd /etc/keepalived/

mv keepalived.conf keepalived.conf_bak

vi keepalived.conf

添加:

vrrp_script check_application {                   ######定义监控脚本
script "/root/check_gp.sh"
interval 2 ######监控时间间隔
weight 2 ######负载参数
}
vrrp_instance vrrptest { ######定义vrrptest实例
state BACKUP ######服务器状态
interface eth0 ######使用的网络接口
virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
priority 150 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
advert_int 1 ######服务器之间的存活检查时间
authentication {
auth_type PASS ######认证类型
auth_pass ufsoft ######认证密码,一组lvs 服务器的认证密码必须一致
}
track_script { ######执行监控mysql进程的脚本
check_application
}
virtual_ipaddress { ######虚拟IP地址
192.168.1.222
}
}
/*
注释:
① script那行表示监控应用的脚本
② interface处的eth0这里需要根据实际情况改成当前服务器使用的网卡名称
③ 假如该网段配置了多套keepalive,则需修改virtual_router_id值,不要和现有的冲突了。
④ virtual_ipaddress指定的是两台服务器使用的浮动ip
*/


1.2.6.4.2 standby master节点

cd /etc/keepalived/

mv keepalived.conf keepalived.conf_bak

vi keepalived.conf

添加:

vrrp_instance vrrptest {                 ######定义vrrptest实例
state BACKUP ######服务器状态
interface eth0 ######使用的网络接口
virtual_router_id 61 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
priority 150 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
advert_int 1 ######服务器之间的存活检查时间
authentication {
auth_type PASS ######认证类型
auth_pass ufsoft ######认证密码,一组lvs 服务器的认证密码必须一致
}
virtual_ipaddress { ######虚拟IP地址
192.168.1.222
}
}


1.2.6.5 启动keepalive

#先启动master节点的keepalive,再启动standby master的keepalive,确保浮动ip在master节点上:

service keepalived start

#设置开机自启

chkconfig --add keepalived

chkconfig keepalived on

1.2.6.6 验证master高可用

关掉master节点,验证下浮动ip是否漂移到standby master上

#关掉master节点

su - gpadmin

gpstop -m

#在从节点查看ip

ip addr

#在standby master上检查集群状态,看下当前master是否切换过来:

如果没切换过来的话,在standby master上执行gpstate -s会提示:

[CRITICAL]:-gpstate failed. (Reason='FATAL:  the database system is in recovery mode

--原主库恢复后,若想让其重新变为主库,可参考文档:

https://blog.csdn.net/yabingshi_tech/article/details/105224804

1.3 集群操作命令

gpstate -s #查看整个GP群集的状态

gpstate -m #查看segment mirror信息

gpstate -e #查看mirror的状态

gpstate -f #查看standby master的状态

gpstate -i #查看GP的版本

gp_sydb=# select *from gp_segment_configuration;
 dbid | content | role | preferred_role | mode | status | port | hostname | address |               datadir                
------+---------+------+----------------+------+--------+------+----------+---------+--------------------------------------
    7 |      -1 | p    | p              | s    | u      | 5432 | pc1      | pc1     | /data/greenplum/data/master/gpseg-1
    5 |       3 | p    | p              | s    | u      | 6001 | pc3      | pc3     | /data/greenplum/data/primary2/gpseg3
    9 |       3 | m    | m              | s    | u      | 7001 | pc2      | pc2     | /data/greenplum/data/mirror2/gpseg3
    4 |       2 | p    | p              | s    | u      | 6000 | pc3      | pc3     | /data/greenplum/data/primary1/gpseg2
    8 |       2 | m    | m              | s    | u      | 7000 | pc2      | pc2     | /data/greenplum/data/mirror1/gpseg2
    2 |       0 | p    | p              | s    | u      | 6000 | pc2      | pc2     | /data/greenplum/data/primary1/gpseg0
    1 |       0 | m    | m              | s    | u      | 7000 | pc3      | pc3     | /data/greenplum/data/mirror1/gpseg0
    3 |       1 | p    | p              | s    | u      | 6001 | pc2      | pc2     | /data/greenplum/data/primary2/gpseg1
    6 |       1 | m    | m              | s    | u      | 7001 | pc3      | pc3     | /data/greenplum/data/mirror2/gpseg1
--各字段值介绍可以参考http://gpdb.docs.pivotal.io/530/ref_guide/system_catalogs/gp_segment_configuration.html

#停止集群

gpstop -M immediate  #停止整个集群

gpstop -m #只停止master节点

 

#启动集群

gpstart -a

 

--本篇文章主要参考了https://blog.csdn.net/king13127/article/details/83989704#%E4%BA%94%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C及《GreenPlum企业应用实战》



本文来源:https://blog.csdn.net/yabingshi_tech/article/details/105182552

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Greenplum
创建时间:2022-04-08 15:36:19
Greenplum
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~