背景
原來使用GP的場景是直接使用阿里雲提供的HybridDB產品,所以沒有親自動手安裝過。現在有一個在本地搭建測試環境的需求,所以就照貓畫虎的做一遍,把過程記錄下來。
CentOS 7 x64
Greenplum 5.8.0 RPM包安裝(基於PostgreSQL 8.3.23)
Greenplum 6.0.0 原始碼安裝(基於PostgreSQL 9.2.0)
備註:
-
目前Greenplum已經開源,但是在網上不太容易找到已經編譯後的最新版本,所以我這次找了一個第三方編譯的5.8.0的RPM包來進行安裝。
-
基於最新原始碼,我也進行了一次編譯安裝。
參考:
OS環境準備
本節所有操作都預設使用root使用者在每一個節點上執行
GP生產環境一般是多個節點,如果是僅用於測試,也可以選擇單節點模式。兩種安裝方式在操作流程上幾乎沒有區別。
系統準備
#### 安裝過程中需要使用到的一些工具,dos2unix用來轉換在Win環境編輯的配置檔案
yum -y install unzip ntp dos2unix
複製程式碼
sysctl引數
#### 修改系統引數
vi /etc/sysctl.conf
# 修改下列配置,以下是最小配置
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 500 1024000 200 4096
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
#### 修改完畢後重新載入
sysctl -p
複製程式碼
limits引數
#### 修改檔案開啟數等限制
vi /etc/security/limits.conf
# 新增如下幾行(注意*也需要新增)
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
####
vi /etc/security/limits.d/90-nproc.conf
# 新增如下幾行(注意*也需要新增)
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
複製程式碼
scheduler引數
#### 修改預設引數cfq為deadline
echo deadline > /sys/block/vda/queue/scheduler
#### 檢查修改後的結果
more /sys/block/vda/queue/scheduler
noop anticipatory [deadline] cfq
複製程式碼
關閉防火牆
#### 關閉防火牆
chkconfig iptables off
service iptables stop
systemctl stop firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#### 檢查修改後的結果
sestatus
複製程式碼
允許root密碼登入
#### 允許root密碼登入並重啟ssh
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin .*$/PermitRootLogin yes/' /etc/ssh/sshd_config
service sshd restart
#### 檢查修改後的結果
grep ^PasswordAuthentication /etc/ssh/sshd_config
grep ^PermitRootLogin /etc/ssh/sshd_config
複製程式碼
主機hosts
#### 修改hosts
vi /etc/hosts
# 修改為如下內容(三個節點)
127.0.0.1 localhost
10.10.1.10 mdw
10.10.1.11 sdw1
10.10.1.12 sdw2
#### 修改主機名(在每個節點上分別使用各自的名稱,這裡僅用mdw為例)
sed -i 's/HOSTNAME=.*/HOSTNAME=mdw/' /etc/sysconfig/network | hostname mdw
複製程式碼
時鐘同步
####
vi /etc/ntp.conf
# 把下列內容改在第一行
server mdw
複製程式碼
安裝資料庫
本節所有操作都預設使用root使用者在Master節點上執行
節點資訊配置
安裝過程中,GP需要兩個檔案提供節點資訊
####
vi hostfile_exkeys
# 包含Master和Segment
mdw
sdw1
sdw2
####
vi hostfile_segments
# 只包含Segment
sdw1
sdw2
複製程式碼
安裝Master
原始碼編譯安裝
因為流程步驟比較多,所以我把這一部分內容放在了文章末尾的附錄中。
RPM安裝
#### RPM方式,預設安裝到 /usr/local/greenplum-db/ (以root在master執行)
rpm -Uvh greenplum-db-5.8.0-rhel7-x86_64.rpm
複製程式碼
建立節點信任關係
#### 安裝各個節點的過程中,需要打通master到各節點的免密碼登入 (以root在master執行)
source /usr/local/greenplum-db/greenplum_path.sh
gpssh-exkeys -f hostfile_exkeys
# 在上面操作過程中要求輸入節點root的密碼
複製程式碼
安裝各節點
#### 安裝各個節點,並建立gpadmin使用者(以root在master執行)
gpseginstall -f hostfile_exkeys -u gpadmin -p gpadmin
複製程式碼
建立資料資料夾
#### 建立資料資料夾 (以root在master執行)
# gpssh工具可以同時在多個機器上執行相同命令,和ansible功能類似
gpssh -f hostfile_exkeys
=>
mkdir -p /data/gpdata/gpmaster
mkdir -p /data/gpdata/primary
mkdir -p /data/gpdata/mirror
chown -R gpadmin:gpadmin /data/gpdata
exit
複製程式碼
安裝後檢查
####
gpssh -f hostfile_exkeys -v -e 'ntpd'
gpcheck -f hostfile_exkeys -m mdw -s sdw1 -s sdw2
複製程式碼
初始化資料庫
本節所有操作都預設使用gpadmin使用者在Master節點上執行
環境變數
su - gpadmin
#### 修改環境變數
vi ~/.bash_profile
# 增加如下內容
export GPHOME=/usr/local/greenplum-db
export MASTER_DATA_DIRECTORY=/data/gpdata/gpmaster/gpseg-1
source ${GPHOME}/greenplum_path.sh
#### 重新載入環境變數
source ~/.bash_profile
複製程式碼
初始化資料庫
#### 以gpinitsystem_config檔案為模板
cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config ./gpinit_config
#### 配置gpinit_config
vi gpinit_config
# 修改如下配置,每個segment上1個資料資料夾,沒有配置映象
declare -a DATA_DIRECTORY=(/data/gpdata/primary)
MASTER_DIRECTORY=/data/gpdata/gpmaster
ENCODING=UTF8
#### 初始化
gpinitsystem -c gpinit_config -h hostfile_segments
複製程式碼
修改安全設定
#### 設定監聽IP和Port
vi ${MASTER_DATA_DIRECTORY}/postgresql.conf
# 設定監聽所有IP(這是一個非常寬鬆的限制,生產環境慎用)
listen_addresses = '*'
port = 5432
#### 設定資料庫白名單
vi ${MASTER_DATA_DIRECTORY}/pg_hba.conf
# 增加如下一條記錄,允許使用者密碼模式(這是一個非常寬鬆的限制,生產環境慎用)
host all all 0.0.0.0/0 md5
複製程式碼
啟動停止命令
#### 啟動,-a引數跳過使用者確認步驟
${GPHOME}/bin/gpstart -a
#### 停止
${GPHOME}/bin/gpstop -a -M fast
#### 重新載入配置檔案(不需要重啟)
${GPHOME}/bin/gpstop -u
複製程式碼
訪問資料庫
命令列連線
#### 使用gpadmin使用者作為超級使用者登入
su - gpadmin
psql -p 5432 -d postgres
複製程式碼
# 查詢當前版本
select * from version();
# 通過執行計劃檢視當前優化器型別
explain select 1;
# 開啟/關閉GPORAC
set optimizer=on;
set optimizer=off;
複製程式碼
新建DB和USER
# 新建一個測試用使用者
drop user if exists demo;
create user demo password 'demo';
# 新建一個測試用DB並分配給指定使用者
drop database if exists demo;
create database demo owner=demo;
# 修改使用者密碼
alter user demo password 'xxx';
# 切換到新建使用者
\connect demo demo mdw
# 新建Schema
drop schema if exists s01 cascade;
create schema s01;
set search_path to s01;
複製程式碼
建立只讀使用者
在GP下建立一個只讀使用者的流程是
- 建立使用者
- 賦予給定DB的連線許可權
- 賦予給定Schema的使用許可權
- 賦予給定Table的訪問許可權
備註:因為我們想要精確控制,所以這裡使用的是針對每一個表的顯式授權。如果要求不那麼嚴格,可以使用預設授權讓新建的表自動獲得訪問許可權。
# 新建一個測試用使用者(gpadmin使用者執行)
drop user if exists demoread;
create user demo password 'demo';
# 賦予、取消給定DB的連線許可權(DB所有者執行,這裡是demo使用者執行)
grant connect on database demo to demoread;
revoke connect on database demo from demoread;
# Schema和Table的許可權操作用下面語句生成,然後執行
# (DB所有者執行,這裡是demo使用者執行)
-- 構造對指定schema下所有表的grant、revoke語句
select
'grant usage on schema ' || pn.nspname || ' to ' || u.uname || ' ;' as schema_grant,
'revoke usage on schema ' || pn.nspname || ' from ' || u.uname || ' ;' as schema_revoke,
'grant select on ' || pn.nspname || '.' || pc.relname || ' to ' || u.uname || ' ;' as table_grant,
'revoke select on ' || pn.nspname || '.' || pc.relname || ' from ' || u.uname || ' ;' as table_revoke
from pg_class pc,
pg_namespace pn,
(select 'demoread' as uname) as u -- 提供:給定被授權使用者名稱
where pc.relnamespace = pn.oid
and pc.relkind in ('r', 'v', 'S')
and pn.nspname in ('s01','s02') -- 提供:授權schema
order by pn.nspname, pc.relname
;
複製程式碼
附錄:原始碼編譯安裝
根據官方安裝手冊指導進行操作。
編譯準備工作
#### 獲取原始碼
git clone https://github.com/greenplum-db/gpdb.git
#### 獲取指定版本
cd gpdb
git checkout xxxx
#### 安裝CentOS依賴包
./README.CentOS.bash
# 這一步安裝conan依賴包的過程中,有個pyparsing包失敗,通過強制手工安裝這個包進行了修復
pip install --ignore-installed pyparsing
#### 軟連線cmake3
ln -sf /usr/bin/cmake3 /usr/local/bin/cmake
#### 配置動態連結庫
vi /etc/ld.so.conf
# 內容如下
include ld.so.conf.d/*.conf
include /usr/local/lib
include /usr/local/lib64
#### 解決後面gporca版本不能識別的問題 configure: error: Your ORCA version is expected to be 2.XX.XXX
vi /etc/ld.so.conf.d/usrlocallib.conf
# 內容如下
/usr/local
/usr/local/lib
/usr/local/lib64
#### 重新整理動態連結庫快取
ldconfig
複製程式碼
編譯GPORCA
#### 安裝手冊執行
cd depends
./configure
make
make install_local
cd ..
複製程式碼
編譯安裝GPDB
# 設定編譯環境,指定目標目錄 /usr/local/greenplum-db
./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/greenplum-db
# 編譯和安裝
make -j8
make -j8 install
複製程式碼