1. 環境とリソースの計画
1.1 環境仕様
| 項目 | 内容 |
| OSバージョン | Linux 3.10.0-1127.el7.x86_64 |
| ハードウェア構成 | 4コアCPU / 8GBメモリ / 40GBデータディスク |
| Greenplumバージョン | greenplum-db-6.11.2 |
1.2 ノード構成
| ホスト名 | IPアドレス | ロール |
| mdw | 172.16.104.11 | Master |
| sdw1 | 172.16.104.12 | Segment (seg1, seg2), Mirror (mirror1, mirror2) |
| sdw2 | 172.16.104.13 | Segment (seg3, seg4), Mirror (mirror3, mirror4) |
| sdw3 | 172.16.104.14 | Segment (seg5, seg6), Mirror (mirror5, mirror6), Standby Master |
2. OS設定
2.1 ホスト名とhostsファイルの設定
各ノードでホスト名を設定し、
/etc/hostsに全ノードのエントリを追加する。
# hostnamectl set-hostname mdw
# vi /etc/hosts
172.16.104.11 mdw
172.16.104.12 sdw1
172.16.104.13 sdw2
172.16.104.14 sdw3
2.2 ファイアウォールとSELinuxの無効化
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.3 データディスクのマウント
XFSファイルシステムを使用し、以下のオプションで
/gpdataをマウント:
/dev/mapper/vgdata-data /gpdata xfs rw,noatime,nodev,nobarrier,inode64,allocsize=16m 1 2
XFSはext4よりも大規模ファイルシステムに適しており、EBクラスの容量と64ビットinode管理をサポートする。
2.4 カーネルパラメータ(sysctl)の調整
/etc/sysctl.confに以下を設定:
kernel.shmall = 483888
kernel.shmmax = 1982005248
kernel.shmmni = 4096
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
net.ipv4.ip_local_port_range = 10000 65535
kernel.sem = 500 2048000 200 40960
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.swappiness = 10
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
さらに、物理メモリの3%を
min_free_kbytesとして追加:
awk 'BEGIN {OFMT="%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf
# sysctl -p
2.5 ユーザーリソース制限の緩和
/etc/security/limits.d/20-nproc.conf:
* soft nproc 131072
root soft nproc unlimited
/etc/security/limits.conf:
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 1048576
* hard nproc 1048576
2.6 ディスクI/Oプリフェッチ設定
すべてのデータディスクでリードアヘッドを16384に設定:
# blockdev --setra 16384 /dev/sd*
# blockdev --setra 16384 /dev/dm-*
永続化のため、
/etc/rc.d/rc.localに上記コマンドを追加し、実行権限を付与:
chmod +x /etc/rc.d/rc.local
2.7 I/Oスケジューラの設定
SSDおよびHDD共に
deadlineスケジューラを推奨。
一時適用:
echo deadline > /sys/block/sda/queue/scheduler
永続化(CentOS 7):
/etc/default/grubの
GRUB_CMDLINE_LINUXに
elevator=deadlineを追加し、再生成:
grub2-mkconfig -o /boot/grub2/grub.cfg
2.8 Transparent HugePagesの無効化
THPが有効だとパフォーマンス劣化の原因となるため、無効化する。
確認:
cat /sys/kernel/mm/transparent_hugepage/enabled
無効化(CentOS 7):
/etc/default/grubの
GRUB_CMDLINE_LINUXに
transparent_hugepage=neverを追加し、grub.cfgを再生成。
または、
/etc/rc.localに以下を追加:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
2.9 NTP同期設定
全ノードで
/etc/ntp.confを編集し、mdwを優先サーバーとする:
server mdw prefer
server sdw3
サービスを再起動:
systemctl restart ntpd
2.10 NUMAの無効化
NUMAによる性能ばらつきを防ぐため、カーネル起動オプションに
numa=offを追加(CentOS 6系)。
CentOS 7では通常不要だが、必要に応じて
/etc/default/grubに追加し、grub.cfgを更新。
3. Greenplumクラスタ構築準備
3.1 必要な依存パッケージのインストール
yum install -y apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip gcc krb5-devel
インストール状況を確認:
rpm -q apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip gcc
3.2 gpadminユーザーの作成
すべてのノードで
gpadminユーザーとグループを作成:
groupadd gpadmin
useradd -g gpadmin -m -s /bin/bash gpadmin
echo "gpadmin:password" | chpasswd