1. Greenplum集群部署与运维实战指南
作为一款基于PostgreSQL的MPP架构数据库,Greenplum凭借其出色的并行处理能力,成为大数据分析领域的重要工具。本文将基于实际生产环境部署经验,详细介绍Greenplum集群从规划部署到日常运维的全流程实践。
提示:本文基于Greenplum 6.23.3版本,操作系统为RHEL/CentOS 7.x,所有操作建议在测试环境验证后再应用于生产环境。
2. 集群规划与基础环境配置
2.1 节点规划方案
典型的Greenplum集群包含以下角色节点:
markdown复制| IP | Hostname | 角色 |
|-------------|----------|--------------------|
| 192.168.1.97 | mdw | Master主节点 |
| 192.168.1.101| smdw | Standby Master备节点 |
| 192.168.1.99 | sdw1 | Segment节点1 |
| 192.168.1.106| sdw2 | Segment节点2 |
| 192.168.1.105| sdw3 | Segment节点3 |
| 192.168.1.98 | sdw4 | Segment节点4 |
生产环境建议:
- Master与Standby Master配置相同规格(建议32C/64G+)
- Segment节点建议至少16C/32G配置
- 网络建议万兆互联,避免使用共享存储
2.2 系统环境准备
2.2.1 基础依赖安装
bash复制# 所有节点执行
yum -y install apr apr-util openssh openssh-clients openssh-server
2.2.2 主机名与hosts配置
bash复制# 分别在各节点设置主机名
hostnamectl set-hostname mdw # Master节点
hostnamectl set-hostname smdw # Standby节点
hostnamectl set-hostname sdw1 # Segment节点1
...
# 所有节点统一配置/etc/hosts
192.168.1.97 mdw
192.168.1.101 smdw
192.168.1.99 sdw1
192.168.1.106 sdw2
192.168.1.105 sdw3
192.168.1.98 sdw4
2.2.3 安全策略调整
bash复制# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 禁用SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.2.4 内核参数优化
编辑/etc/sysctl.conf,添加以下参数:
conf复制# 内存管理
vm.swappiness=10
kernel.shmall = 68719476736
kernel.shmmax = 4294967296
kernel.shmmni = 4096
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
# 网络与连接
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
# 其他关键参数
kernel.sem = 500 2048000 200 40960
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
应用配置:sysctl -p
2.2.5 资源限制调整
编辑/etc/security/limits.conf:
conf复制* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
注意:必须配置适当的swap空间,建议为物理内存的1/2到1倍
2.3 专用用户创建
bash复制# 所有节点执行
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
echo "Inspur@#2023" | passwd --stdin gpadmin
chown -R gpadmin:gpadmin /home/gpadmin/
3. Greenplum集群部署实战
3.1 软件安装
在所有节点安装Greenplum:
bash复制yum install ./open-source-greenplum-db-6.23.3-rhel7-x86_64.rpm
chown -R gpadmin:gpadmin /usr/local/greenplum*
3.2 SSH互信配置
bash复制# 所有节点生成密钥
su - gpadmin
ssh-keygen -t rsa
# Master节点配置到其他节点的互信
ssh-copy-id smdw
ssh-copy-id sdw1
ssh-copy-id sdw2
# 验证互信
gpssh-exkeys -f /home/gpadmin/conf/hostlist
3.3 数据目录准备
bash复制# 所有节点创建目录结构
mkdir -p /home/admin/gpdata/{gpmaster,gpdatap1,gpdatap2,gpdatam1,gpdatam2}
chown -R gpadmin:gpadmin /home/admin/gpdata
3.4 初始化配置文件
创建/home/gpadmin/conf/initgp_config:
bash复制ARRAY_NAME="Greenplum"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
SEG_PREFIX=gpseg
PORT_BASE=33000
declare -a DATA_DIRECTORY=(/home/admin/gpdata/gpdatap1 /home/admin/gpdata/gpdatap2)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/home/admin/gpdata/gpmaster
MASTER_PORT=2345
TRUSTED_SHELL=/usr/bin/ssh
MIRROR_PORT_BASE=43000
REPLICATION_PORT_BASE=34000
MIRROR_REPLICATION_PORT_BASE=44000
declare -a MIRROR_DATA_DIRECTORY=(/home/admin/gpdata/gpdatam1 /home/admin/gpdata/gpdatam2)
3.5 集群初始化
bash复制# 性能测试(可选)
gpcheckperf -d /home/admin/gpdata -r ds -D -f /home/gpadmin/conf/hostlist
# 初始化集群
gpinitsystem -c /home/gpadmin/conf/initgp_config -h /home/gpadmin/conf/seg_hosts
# 添加Standby Master
gpinitstandby -s smdw
4. 集群扩展与管理
4.1 横向扩展(增加节点)
- 准备新节点并完成基础配置
- 创建扩展配置文件
seg_new:
code复制sdw3
sdw4
- 执行扩展:
bash复制gpexpand -f seg_new
gpexpand -i gpexpand_inputfile_20230330_162241
gpexpand -a -d # 数据重分布
4.2 纵向扩展(增加Segment)
bash复制# 在所有Segment节点创建新数据目录
gpssh -f /home/gpadmin/conf/seg_hosts
mkdir -p /home/admin/gpdata/gpdatap{3..8}
mkdir -p /home/admin/gpdata/gpdatam{3..8}
# 执行扩展
gpexpand -f seg_hosts
gpexpand -i gpexpand_inputfile_20230330_162241.ts
5. 性能调优指南
5.1 关键参数配置
bash复制# 连接相关
gpconfig -c max_connections -v 2500 -m 500
gpconfig -c max_prepared_transactions -v 500
# 内存管理
gpconfig -c shared_buffers -v 16384MB
gpconfig -c gp_vmem_protect_limit -v 21688 # 计算公式见下文
gpconfig -c statement_mem -v 650MB
# 查询优化
gpconfig -c effective_cache_size -v 256GB
gpconfig -c work_mem -v 25600MB
gpconfig -c random_page_cost -v 10
# 高级特性
gpconfig -c gp_enable_global_deadlock_detector -v on
内存参数计算公式:
code复制gp_vmem = ((SWAP + RAM) - (7.5GB + 0.05 * RAM)) / 1.7
gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments
statement_mem = (gp_vmem_protect_limit * 0.9) / max_expected_concurrent_queries
5.2 I/O优化
bash复制# 调整readahead
/sbin/blockdev --setra 16384 /dev/sdb
# 设置IO调度器
echo deadline > /sys/block/sda/queue/scheduler
6. 日常运维操作
6.1 集群启停管理
bash复制# 正常启停
gpstop -M fast
gpstart
# 紧急情况处理
ps -ef | grep gpadmin | grep postgres | awk '{print "kill -9 "$2}'
6.2 备份恢复方案
bash复制# 全量备份
gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup
# 增量备份
gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup --incremental
# 恢复操作
gprestore --backup-dir=/home/admin/gpbackup --timestamp=20230601165333 --create-db
6.3 监控与维护
安装GPCC监控:
bash复制# 安装GPCC
./gpccinstall-6.8.4
# 配置监控
gpconfig -c shared_preload_libraries -v metrics_collector
gpconfig -c gp_enable_query_metrics -v on
gpstop -ra # 重启生效
# 启动服务
gpcc start
访问地址:http://<master_ip>:28080
7. 常见问题处理
7.1 数据倾斜处理
sql复制-- 检查数据分布
SELECT gp_segment_id,count(*) FROM 表名 GROUP BY gp_segment_id;
-- 调整分布键
ALTER TABLE 表名 SET DISTRIBUTED BY (列名);
7.2 锁会话处理
sql复制-- 查询锁会话
SELECT * FROM pg_stat_activity WHERE state='idle in transaction';
-- 终止会话
SELECT pg_terminate_backend(pid);
7.3 空间清理
sql复制-- 查看表空间使用
SELECT pg_size_pretty(pg_total_relation_size('表名'));
-- 执行VACUUM
VACUUM ANALYZE 表名;
8. 经验总结
在实际运维中,有三点关键经验值得分享:
-
容量规划要前置:Greenplum对硬件资源敏感,建议在部署前就做好3-5年的容量规划,特别是存储空间和计算节点的扩展性考虑。
-
监控体系要完善:除了GPCC外,建议结合Prometheus+Grafana搭建更全面的监控体系,特别是对查询性能、资源使用率的趋势分析。
-
维护窗口要固定:定期执行VACUUM、ANALYZE等维护操作,建议设置每周维护窗口,避免数据库性能逐渐退化。
通过以上完整的部署和运维方案,可以构建一个稳定高效的Greenplum数据分析平台。每个生产环境都有其特殊性,建议根据实际业务需求调整参数和架构设计。