【實戰系列】如何在 docker 中安裝 greenplum 集群

本文參考( https://my.oschina.net/u/876354/blog/1606419 )安裝 greenplum 成功,並記錄一下過程。

一、創建 docker 節點

拉取 centos 鏡像

<code>[xiaoyu@xiaoyu ~]$ docker pull centos/<code>

創建幾個容器,作為 greenplum 的節點

<code>[xiaoyu@xiaoyu ~]$ docker run -it --name gp-master centos /bin/bash
[xiaoyu@xiaoyu ~]$ docker run -it --name gp-segment1 centos /bin/bash
[xiaoyu@xiaoyu ~]$ docker run -it --name gp-segment2 centos /bin/bash
[xiaoyu@xiaoyu ~]$ docker run -it --name gp-segment3 centos /bin/bash/<code>

二、配置基礎環境

進入每個 greenplum 節點,配置基礎環境

  • 安裝相關的依賴包

由於 docker 的 centos 鏡像是 centos 的簡化版本,裡面有很多包是沒有安裝的,會影響到後面部署 greenplum,因此在 docker 的每個節點中安裝相關的依賴包

<code>[root@00bcc0ba2b3f ~]# yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute/<code>
  • 啟動 ssh

docker 中默認沒有啟動 ssh,為了方便各節點之間的互連,創建相關的認證 key,並啟動 docker 的每個節點裡面的 ssh

<code>[root@00bcc0ba2b3f ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@00bcc0ba2b3f ~]# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
[root@00bcc0ba2b3f ~]# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
[root@00bcc0ba2b3f ~]# /usr/sbin/sshd/<code>
  • 修改 /etc/hosts 文件

在每個 docker 節點中添加如下配置,方便後續 greenplum 集群的配置文件中用到,ip 為各個 docker 節點中的 ip 地址

<code>[root@00bcc0ba2b3f ~]# vi /etc/hosts
172.17.0.2 dw-greenplum-1 mdw
172.17.0.3 dw-greenplum-2 sdw1
172.17.0.4 dw-greenplum-3 sdw2
172.17.0.5 dw-greenplum-4 sdw3/<code>

同時修改所有節點裡面的 /etc/sysconfig/network 文件,保持與主機名一致

<code>[root@00bcc0ba2b3f ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mdw/<code>
  • 創建 greenplum 的用戶和用戶組

為了方便安裝 greenplum 集群,且使 greenplum 自帶的 python 不與系統的 python 版本相沖突,在每個節點中創建 greenplum 的用戶和用戶組

<code>[root@00bcc0ba2b3f ~]# groupadd -g 530 gpadmin
[root@00bcc0ba2b3f ~]# useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
[root@00bcc0ba2b3f ~]# chown -R gpadmin:gpadmin /home/gpadmin
[root@00bcc0ba2b3f ~]# passwd gpadmin/<code>
  • 修改每個節點上的文件打開數量限制
<code>[root@00bcc0ba2b3f ~]# vi /etc/security/limits.conf
# End of file
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072/<code>
  • 關閉每個節點上的防火牆,關閉 selinux
<code>[root@00bcc0ba2b3f ~]# service iptables stop
[root@00bcc0ba2b3f ~]# chkconfig iptables off
[root@00bcc0ba2b3f ~]# 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 /<code>

三、下載 greenplum 安裝包

到 greenplum 的官網上,下載 greenplum 安裝包,點開 Greenplum Database Server,根據自己的操作系統下載安裝包,我下載當前最新的 greenplum-db-5.10.2-rhel7-x86_64.zip,將其拷到 master 節點的 /home/gpadmin 目錄中

四、在 master 節點上安裝 greenplum

切換到 gpadmin 用戶

<code>[root@00bcc0ba2b3f ~]# su gpadmin/<code>

解壓下載後的 zip 文件

<code>[gpadmin@mdw ~]$ unzip greenplum-db-5.10.2-rhel7-x86_64.zip/<code>

執行安裝文件

<code>[gpadmin@mdw ~]$ ./greenplum-db-5.10.2-rhel7-x86_64.bin/<code>

安裝期間需要配置安裝目錄,輸入 /home/gpadmin/greenplum-db-5.10.2

為了方便安裝集群,greenplum 提供了批量操作節點的命令,通過指定配置文件使用批處理命令

<code>[gpadmin@mdw ~]$ vi ./conf/hostlist 
mdw
sdw1
sdw2
sdw3
[gpadmin@mdw ~]$ vi ./conf/seg_hosts
sdw1
sdw2
sdw3/<code>

greenplum-db/greenplum_path.sh 中保存了運行 greenplum 的一些環境變量,包括 GPHOME、PYTHONHOME 等,在 gpadmin 賬號下設置環境變量,並將 master 節點的 key 交換到各個 segment 節點

<code>[gpadmin@mdw ~]$ source /home/gpadmin/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

[STEP 2 of 5] keyscan all hosts and update known_hosts file

[STEP 3 of 5] authorize current user on remote hosts
... send to mdw
... send to sdw1
***
*** Enter password for 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 mdw
... finished key exchange with sdw1
... finished key exchange with sdw2
... finished key exchange with sdw3

[INFO** completed successfully/<code>

交換成功後,後續就可以使用一些命令執行批量操作

注意:使用 gpssh-exkeys 命令時一定要使用 gpadmin 用戶,因為會在 /home/gpadmin/.ssh 中生成 ssh 的免密碼登錄秘鑰,如果使用其它賬號登錄,則會在其它賬號下生成密鑰,在 gpadmin 賬號下就無法使用 gpssh 的批處理命令

<code>[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist
=> pwd
[sdw1] /home/gpadmin
[sdw3] /home/gpadmin
[ mdw] /home/gpadmin
[sdw2] /home/gpadmin
=> ls
[sdw1]
[sdw3]
[ mdw] conf greenplum-db greenplum-db-5.10.2
[sdw2]
=> exit/<code>

pwd 命令是 linux 中的查看路徑命令,在這裡也是查看批量操作時各個節點當前所在的路徑,從中可以看到已經成功連通了4個節點

五、分發安裝包到每個子節點

打包 master 節點上的安裝包

<code>[gpadmin@mdw ~]$ tar -czf gp.tar.gz greenplum-db-5.10.2/<code>

使用 gpscp 命令將這個文件複製到每個子節點

<code>[gpadmin@mdw ~]$ gpscp -f /home/gpadmin/conf/seg_hosts gp.tar.gz =:/home/gpadmin/<code>

批量解壓,並創建軟鏈接

<code>[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/seg_hosts
=> tar -zxf gp.tar.gz
[sdw3]
[sdw1]
[sdw2]
=> ln -s greenplum-db-5.10.2 greenplum-db
[sdw3]
[sdw2]
[sdw1]/<code>

這樣就完成了所有子節點數據庫的安裝

六、初始化安裝數據庫

  • 批量創建數據目錄
<code>[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist
=> mkdir gpdata
[sdw1]
[sdw3]
[ mdw]
[sdw2]
=> cd gpdata
[sdw1]
[sdw3]
[ mdw]
[sdw2]
=> mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2
[sdw1]
[sdw3]
[ mdw]
[sdw2]
=> exit/<code>
  • 在 master 節點上修改 .bash_profile 配置環境變量,併發送給其他子節點,確保這些環境變量生效
<code>[gpadmin@mdw ~]$ vi .bash_profile 
source /opt/gpadmin/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1
export PGPORT=2345
export PGDATABASE=testDB
[gpadmin@mdw ~]$ source .bash_profile
[gpadmin@mdw ~]$ gpscp -f /home/gpadmin/conf/seg_hosts /home/gpadmin/.bash_profile
[gpadmin@sdw1 ~]$ source .bash_profile
[gpadmin@sdw2 ~]$ source .bash_profile
[gpadmin@sdw3 ~]$ source .bash_profile/<code>
  • 初始化配置文件
<code>[gpadmin@mdw ~]$ vi /home/gpadmin/conf/gpinitsystem_config 

ARRAY_NAME="Greenplum"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts

# Segment 的名稱前綴
SEG_PREFIX=gpseg
# Primary Segment 起始的端口號
PORT_BASE=33000
# 指定 Primary Segment 的數據目錄
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
# Master 所在機器的 Hostname
MASTER_HOSTNAME=mdw
# 指定 Master 的數據目錄
MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
# Master 的端口
MASTER_PORT=2345
# 指定Bash的版本
TRUSTED_SHELL=/usr/bin/ssh
# Mirror Segment起始的端口號
MIRROR_PORT_BASE=43000
# Primary Segment 主備同步的起始端口號
REPLICATION_PORT_BASE=34000
# Mirror Segment 主備同步的起始端口號
MIRROR_REPLICATION_PORT_BASE=44000
# Mirror Segment 的數據目錄
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)/<code>
  • 初始化數據庫
<code>[gpadmin@mdw ~]$ gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw3/<code>

其中,-s sdw3 是指配置 master 的 standby 節點,然後按照提示步驟就能完成安裝了

如果 gpinitsystem 不成功,在 master 節點的 /home/gpadmin/gpAdminLogs 目錄下 gpinitsystem_*.log 文件中查看日誌信息,找出原因進行修改,然後再重新執行 gpinitsystem 進行初始化安裝。




靜心
https://gitop.cc/posts/install-greenplum-in-docker/


分享到:


相關文章: