当前位置: 首页 > news >正文

部署greenplum7.2双节点集群

1.环境:

1.一台keylin10的服务器,部署两个docker容器,实现双节点集群部署;

2.创建Docker 网络

为Greenplum 容器创建一个自定义的 Docker 网络,这样可以方便地进行容器间的通信。

docker network create --subnet=172.19.0.0/16 gpnet

3.创建四个 Docker 卷,对应两个docker容器的数据挂载

docker volume create gpdata_a

docker volume create gpmaster_a

docker volume create gpdata_b

docker volume create gpmaster_b

 4.启动两个Docker容器

4.1a容器 

docker run --privileged=true -itd \

  --name gpdb_a \

  --hostname gpdb_a \

  --network gpnet \

  --ip 172.19.0.2  \

  -v gpmaster_a:/opt/greenplum/data \

  -v gpdata_a:/data \

  -v /sys/fs/cgroup:/sys/fs/cgroup \

  -p 5433:5432 \

  -p 2222:22 \

  -p 28080:28080 \

  -e TZ=Asia/Shanghai \

  lhrbest/greenplum:7.2.0 \

  bash -c "systemctl disable systemd-modules-load.service dnf-makecache.service && /usr/sbin/sshd  && tail -f /dev/null"

 

4.2b容器  

docker run --privileged=true -itd \

  --name gpdb_b \

  --hostname gpdb_b \

  --network gpnet \

  --ip 172.19.0.3 \

  -v gpdata_b:/data \

  -v gpmaster_b:/opt/greenplum/data \

  -v /sys/fs/cgroup:/sys/fs/cgroup \

  -p 5434:5432 \

  -p 2224:22 \

  -p 28081:28080 \

  -e TZ=Asia/Shanghai \

  lhrbest/greenplum:7.2.0 \

  bash -c "systemctl disable systemd-modules-load.service dnf-makecache.service && /usr/sbin/sshd  && tail -f /dev/null"

 

5.更新 /etc/hosts 文件

进入每个容器内部更新 /etc/hosts 文件,添加其他节点的信息。例如,在 gpdb_a 和 gpdb_b 中都执行以下命令:

echo "172.19.0.2 gpdb_a" >> /etc/hosts

echo "172.19.0.3 gpdb_b" >> /etc/hosts

echo "172.19.0.2 gpdb7" >> /etc/hosts

 

​​​​​​​6.修改sshd_config 配置

 #vi /etc/ssh/sshd_config

 # 启用 root 登录(默认可能被禁用)

PermitRootLogin yes

# AllowUsers 是白名单机制:只有列出的用户才能通过 SSH 登录。用户名之间用 空格 分隔。

AllowUsers gpadmin root

PasswordAuthentication yes

ChallengeResponseAuthentication yes

# 使用 PAM 进行认证(通常保持开启)

UsePAM yes

 

6.1重新启动

pkill -f /usr/sbin/sshd

/usr/sbin/sshd

 

6.2测试本地登录

ssh gpadmin@gpdb_a

 

​​​​​​​7.修改/etc/pam.d/sshd

检查 /etc/pam.d/sshd 文件

注释掉或删除以下行(如果存在):

auth       required     pam_nologin.so

 

​​​​​​​8.修改sysctl.conf

Linux 内核需要开启以下参数以支持容器间的通信:

#vi  /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables = 0

net.bridge.bridge-nf-call-ip6tables = 0

net.bridge.bridge-nf-call-arptables = 0

再执行

sysctl -p

​​​​​​​9.设置 SSH 密钥认证

为了使 Greenplum 可以跨节点操作,需要设置 SSH 无密码登录。可以在 gpdb_a 上生成密钥对,并将其公钥复制到所有节点(包括自身)。

在 gpdb_a:

ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa

 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

for host in gpdb_a gpdb_b; do   ssh-copy-id gpadmin@$host; done

命令解析

cat ~/.ssh/id_rsa.pub: 这部分命令读取 ~/.ssh/id_rsa.pub 文件的内容,并将其输出到标准输出(通常是终端屏幕)。

>> ~/.ssh/authorized_keys: 这里使用了重定向操作符 >>。它将前面命令的标准输出追加(append)到指定的文件中,而不是覆盖该文件。如果目标文件不存在,则会创建该文件。因此,这条命令的作用是将当前用户的 SSH 公钥添加到 authorized_keys 文件的末尾。

 10.创建主机列表文件(例如:hostfile)

echo "gpdb_a" > ~/hostfile_exkeys

echo "gpdb_b" >> ~/hostfile_exkeys

注:

使用 > 操作符会覆盖文件中的原有内容。

使用 >> 操作符会在文件末尾追加内容,而不会删除已有的数据。

 11.手动创建两个节点配置文件

有两个 Segment 主机,每个3个,配置如下:

seg1 上运行 3 个 Primary Segment 实例

seg2 上运行 3 个 Primary Segment 实例

ARRAY_NAME="Greenplum Data Platform"

SEG_PREFIX=gpsne

PORT_BASE=40000

declare -a DATA_DIRECTORY=(

/data/primary

/data/primary

/data/primary   

    /data/primary   

    /data/primary   

/data/primary  )

declare -a MIRROR_DATA_DIRECTORY=(

    /data/mirror    

    /data/mirror    

    /data/mirror    

    /data/mirror    

    /data/mirror    

    /data/mirror    

)

MASTER_HOSTNAME=gpdb_a

MASTER_DIRECTORY=/opt/greenplum/data/master

MASTER_PORT=5432

TRUSTED_SHELL=ssh

CHECK_POINT_SEGMENTS=8

ENCODING=UNICODE

DATABASE_NAME=czpgdb

​​​​​​​11.1Segment 的主要作用包括:

作用

描述

存储数据

每个 Segment 实例负责存储一部分数据(按分布键划分)

执行查询

查询会被分发到各个 Segment 并行执行,提升整体性能

提供高可用性(可选)

可为每个 Primary Segment 配置 Mirror Segment 来实现故障转移

负载均衡

多个 Segment 可以分散 I/O 和 CPU 压力,提高并发处理能力

​​​​​​​11.2Segment 多的优点:

更高的并行度:更多的 Segment 可以同时处理更多数据块,加快查询速度。

更好的负载均衡:避免某些节点成为瓶颈。

更灵活的数据分布:适合大规模数据集的管理。

​​​​​​​11.3Segment 多的缺点:

缺点

原因

资源消耗增加

每个 Segment 实例都需要一定的内存、CPU 和磁盘开销

管理复杂度上升

Segment 越多,维护、监控、扩容等操作越复杂

元数据负担加重

系统表和目录信息会变得更大,影响启动和恢复速度

通信开销变大

Segment 之间通信(Interconnect)会随着数量增加而变慢或不稳定

​​​​​​​11.4最佳实践建议

场景

建议

小型测试环境

每台主机 1~2 个 Segment

中小型生产环境

每台主机 2~4 个 Segment

大型生产环境

每台主机 4~8 个 Segment(需高性能服务器支持)

启用 Mirroring

Segment 数量翻倍,Mirror 分布在不同主机上

使用 SSD 或 NVMe 磁盘

可适当增加 Segment 数量以充分利用 I/O 能力

问题

答案

Segment 是什么?

是 Greenplum 中存储数据和执行查询的基本单元

Segment 越多越好吗?

不是,要根据硬件、数据量、查询负载综合考虑

如何选择合适数量?

每台主机 2~8 个,总数量根据集群规模决定

Segment 对性能有何影响?

多则并行能力强,但资源消耗和通信开销也更高

​​​​​​​11.5Primary vs Mirror Segment

类型

作用

是否必须

Primary Segment

存储实际数据并参与查询处理

✅ 必须

Mirror Segment

提供数据冗余,用于故障切换

❌ 可选(但推荐)

 

​​​​​​​12.初始化 Greenplum 数据库

使用 gpinitsystem 命令初始化数据库系统。在 gpdb_a 上运行:

#su - gpadmin

gpinitsystem -c  /home/gpadmin/gpinitsystem_config  -h /home/gpadmin/hostfile_exkeys

http://www.dtcms.com/a/267611.html

相关文章:

  • Softhub软件下载站实战开发(十三):软件管理前端分片上传实现
  • 【部署与总结】从本地运行到公网服务器的全过程
  • Qt智能指针
  • 408第三季part2 - 计算机网络 - 计算机网络分层结构
  • Python数据分析基础04:预测性数据分析
  • 非负矩阵分解(NMF)的python应用 ,基因分析,以胰腺癌上皮亚簇为实例,NMF在癌症研究中的优势
  • 支持多方式拼接图片的软件
  • Zama 机密区块链协议Litepaper
  • RAL-2025 | 清华大学数字孪生驱动的机器人视觉导航!VR-Robo:面向视觉机器人导航与运动的现实-模拟-现实框架
  • 【ES6】Latex总结笔记生成器(网页版)
  • RocketMQ一键启动_window
  • 黑马点评系列问题之基础篇06初识redis测试连接redis失败
  • 硬件嵌入式工程师学习路线终极总结(二):Makefile用法及变量——你的项目“自动化指挥官”!
  • 深度学习5(深层神经网络 + 参数和超参数)
  • Ubuntu 20.04 编译安装FFmpeg及错误分析与解决方案
  • 数据结构:数组:插入操作(Insert)与删除操作(Delete)
  • PageRank:互联网的马尔可夫链平衡态
  • 利用已有的 PostgreSQL 和 ZooKeeper 服务,启动dolphinscheduler-standalone-server3.1.9 镜像
  • Redis基础(6):SpringDataRedis
  • Java创建型模式---工厂模式
  • java多线程--死锁
  • CppCon 2018 学习:Standard Library Compatibility Guidelines (SD-8)
  • 未成功,做个记录,SelfHost.HttpSelfHostServer 如何加载证书
  • 【Prometheus】Grafana、Alertmanager集成
  • 小架构step系列05:Springboot三种运行模式
  • 理想汽车6月交付36279辆 第二季度共交付111074辆
  • 基于微信小程序的校园跑腿系统
  • MySQL——9、事务管理
  • Java-继承
  • 远程协助软件:Git的用法