部署环境准备#

本章首先介绍产品所支持的平台,然后详细阐述部署产品时集群所用节点的机架放置策略、节点的硬件规格和参数设置、外部存储的使用原则、组网规划原则,和操作系统基础软件等配置信息。

支持平台介绍#

硬件架构

硬件平台

操作系统

x86

Intel, AMD

CentOS 6.x/7.x, RedHat 6.x/7.x

arm

飞腾、龙芯、申威、 兆芯、海光、鲲鹏

银河麒麟V10,统信UOS

机架放置策略#

由于产品中大多数组件在软件架构设计时采用无中心化架构或者主从架构,因此,集群中节点的机架放置策略需要分别考虑各组件的管理节点、计算和数据节点。

管理节点机架放置策略#

为防止因整个机架故障导致部分甚至所有组件服务异常的情况发生,应将各组件互为主备服务的管理/控制节点分别部署在不同的机架上。

计算节点机架放置策略#

计算节点采用无状态的设计,并不保存元数据或者数据,只需均匀地部署在各个机架上即可。

数据节点机架放置策略#

客户端在向HDFS集群写入数据时,会将数据优先写入距离自己最近的数据节点上。该距离是指网络拓扑结构中的逻辑距离。

  • 当客户端程序与Datanode进程部署在同一主机时,那么客户端会认为距离自己最近的数据节点就是自身所在主机,其次为与客户端所在同一机架中的其他数据节点,再者为其他机架上的数据节点;

  • 当客户端程序部署在HDFS集群之外时,即客户端所在主机不与任何集群数据节点在同一机架中时,客户端会向被随机选中的数据节点写数据。HDFS系统在随机选择数据节点时会先随机选择一个机架,然后在该机架中再随机选择一台数据节点。由于每个机架被选中的概率相同,且某一机架中每个数据节点被选中的概率也相同,那么如果数据节点不是均衡分布在各机架中,则意味着在写入数据时,节点数量较少的机架中的数据节点被选中的概率更高,进而导致集群中写入数据倾斜的现象发生。因此,HDFS集群数据节点在上架时,应按节点数量平均分配在各机架上,即各机架中数据节点数量应保持基本相同。

节点规格推荐#

节点硬件规格#

硬件

推荐配置

CPU

2路 x 12核

内存

256GB

磁盘

2组RAID5;每组8块盘(其中6块数据盘,1块校验盘,1块热备盘);每块盘2T容量;万转SAS接口或者SSD更佳

网络

2 x 万兆数据网卡 + 1 x 千兆管理网卡

节点参数配置#

  • 超线程参数配置 在BIOS中开启(Enabled)超线程配置。通常,超线程功能在BIOS中是默认开启的,只要CPU支持超线程技术,则会自动模拟出双倍数量的物理核心。使在并行任务较多时,提高CPU的使用效率。

  • BMC网络参数配置 在BIOS中使用所分配到的静态IPMI IP地址与子网掩码对BMC 模块的网络参数进行配置,使运维人员能够使用BMC模块对主机进行远程管理。具体配置步骤请以相应服务器厂商提供的操作手册为准。

  • UEFI启动模式配置 部分服务器机型默认使用UEFI作为操作系统动模式,但目前操作系统大规模实施使用的镜像仅支持旧的(Legacy)启动模式,所以根据需要在部分服务器BIOS中修改“UEFI”启动模式为“Legacy”以保证操作系统的正常实施。

  • 阵列卡参数配置 目前Hadoop集群数据磁盘可选择两种配置模式,分别为多盘配RAID5和MegaRAID阵列卡的JBOD模式。默认情况下将统一配置为RAID5模式。如有特殊需求,请应用提出后进行评审,评审通过即可实施。

存储使用原则#

存储在集群中的任何文件被切分成等大小的数据块,并分布式存储在多个数据节点内置磁盘中,所以在对某个文件进行计算分析时,会将计算任务下发到存有该文件数据块的数据节点上,各计算任务以并行的方式从本地节点读取相应数据块进行计算,以此避免在做计算时的数据网络传输的消耗的带宽与时间,即所谓“移动计算比移动数据更高效”。在使用网络化存储(如SAN、NAS等)存放业务数据时,在对数据集进行分析计算时,将不可避免地涉及到数据网络传输与存储服务器的单点性能瓶颈问题。因此,如应用无特殊需求,集群应尽量避免使用外挂存储系统。

  • SAN存储(限制使用) HDFS系统架构的本质是将数据分布存储在多台x86服务器上,而非集中存放在某一台高性能的存储服务器上,以此来实现海量数据的分布式存储与并行访问,并且可以方便地实现存储系统的横向扩展。该架构可有效提升系统的数据吞吐量,避免在访问大量数据时,单存储服务器成为整个系统的瓶颈。因此,在集群中应避免使用集中式的SAN存储存放业务或元数据。如有特殊需求请应用提出,评审通过后即可实施。

  • NAS存储(限制使用) HDFS系统的业务数据与元数据均存储在集群节点的内置磁盘中,一般情况下无需使用NAS存放业务数据或元数据,故Hadoop集群中应尽量避免使用NAS存储。如有特殊需求请应用提出,评审通过后即可实施。

组网规划原则#

集群在正常运行期间,可将其产生的网络流量分为两类,分别为业务流量与管理流量。业务流量主要由客户端或上层应用的存取数据、提交MR作业等操作产生,管理流量则由集群节点间的心跳、监控与管理指令下发等操作产生。因此,整个集群网络应划分为2个平面,即业务平面与管理平面。为保证双平面各自网络的安全性,应采用物理隔离的方式进行双平面组网。根据数据中心机房网络环境,业务平面应通过生产网络接入,管理平面应通过带管网络接入。

采用双平面组网时,集群中每个节点分别接入业务平面和管理平面,每个节点需分配一个生产IP地址和一个带管IP地址,每个IP地址用两块网卡配置为Bond,分别连接两台接入交换机。各节点的业务平面建议采用10GE带宽,业务平面的接入交换机与汇聚交换机之间建议采用20GE带宽及以上,在每机架放置16台节点时接入层收敛比为4:1。业务平面汇聚交换机的堆叠带宽建议设置为40GE及以上。

打通端口#

在即将部署集群的网络环境中,当存在防火墙时,打通端口(即开放端口)是确保特定服务或应用能够正常通信的重要步骤。以下是平台各组件所使用到的默认端口的汇总,可根据实际需要打通相应的端口。

组件

模块

端口号

协议

连接类型

用途

内外

OushuDB

主节点

5432

TCP

短连接

存储服务

对外

5437

TCP

短连接

RM

对内

计算节点

5438

TCP

短连接

Segment RM

对内

10000-65535

TCP

短连接

存储服务(随机)

对内

10000-65535

UDP

短连接

存储服务(随机)

对内

Magma

6666-6671

TCP

短连接

Magma

对内

gpfdist

8008

TCP

短连接

文件分发工具

对内

Lava

lava-assist

1620-1629

TCP

短连接

监控运维Agent

对内

prometheus

1623

TCP

短连接

监控数据存储

对内

lava-server

1610-1619、1660、1667

TCP

短连接

Lava服务后端

对内

db-server

1630-1639

TCP

短连接

数据库可视化后端

对内

lava-admin

1650-1659

TCP

短连接

监控运维后端

对内

lava-dataend

1670-1679

TCP

短连接

数据源后端服务

对内

Nginx

3000-3020

TCP

短连接

前端服务

对外

pgpool

9003、9694、9898

TCP

短连接

pgpool心跳检查

对内

9999

TCP

长连接

pgpool对外提供服务

对内

Postgres

Postgres

4432、9694、9999

TCP

长连接

平台元数据存储

对内

Flow

Flow

1690-1699

TCP

短连接

作业调度

对内

Wasp

Wasp

1680-1689

TCP

短连接

数据同步

对内

Flink

1684

TCP

短连接

内部使用

对内

1685、1686

TCP

短连接

指标采集

对内

1688

TCP

短连接

对外UI

对外

RestServer

1687

TCP

短连接

批量同步API接口

对外

Littleboy

前端

3016

TCP

短连接

人工智能

对外

后端

1880-1889 1890-1899

TCP

短连接

人工智能

对内

Spark

2881-2885

TCP

短连接

人工智能所依赖计算引擎

对内

Orbit

前端

3015

TCP

短连接

数据治理

对外

后端

2201

TCP

短连接

数据治理

对内

Kepler

前端

3011

TCP

短连接

数据分析与应用

对外

前端移动端

3020

TCP

短连接

数据分析与应用

对外

后端

17877

TCP

短连接

数据分析与应用

对内对外

后端

17878

TCP

短连接

数据分析与应用

对内

Copilot

后端

3030

TCP

短连接

AI助手

对内

前端

3031

TCP

短连接

AI助手

对外

后端

3032

TCP

短连接

AI助手

对内

DB-GPT

5000

TCP

短连接

AI助手

对内

FastChat Controller

21001

TCP

短连接

AI助手

对内

FastChat API Server

8000

TCP

短连接

AI助手

对内

FastChat Model Worker

30000-40000 随机

TCP

短连接

AI助手

对内

大数据组件

Zookeeper

2181

TCP

短连接

监听客户端的连接

对内

2888

TCP

短连接

Leader和Flower通信的端口号

对内

3888

TCP

短连接

选举Leader时通信的端口号

对内

HDFS

8019

TCP

短连接

ZooKeeper FailoverController,用于NN HA

对内

8480

TCP

短连接

Journalnode http服务端口

对内

8485

TCP

短连接

Journalnode rpc服务端口

对内

9000

TCP

短连接

接收Client连接的RPC端口,用于获取文件系统metadata信息

对内

50010

TCP

短连接

Datanode 数据传输端口

对内

50020

TCP

短连接

Datanode RPC服务端口

对内

50070

TCP

短连接

Namenode http端口

对内

50090

TCP

短连接

Standby Namenode http端口

对内

50091

TCP

短连接

Standby Namenode https端口

对内

50475

TCP

短连接

Datanode https端口

对内

50470

TCP

短连接

Namenode https服务的端口

对内

50075

TCP

短连接

Datanode http端口

对内

9864

TCP

短连接

Datanode http服务的端口

对内

9865

TCP

短连接

Datanode https服务的端口

对内

9866

TCP

短连接

Datanode 数据传输端口

对内

9867

TCP

短连接

Datanode RPC服务端口

对内

9868

TCP

短连接

Standby Namenode http端口

对内

9869

TCP

短连接

Standby Namenode https端口

对内

9871

TCP

短连接

Namenode https服务的端口

对内

其他基础服务

httpd

80

TCP

短连接

yum repo

对内

ssh

22

TCP

短连接

服务器互相访问

对内

ntp

123

UDP

短连接

集群间时间同步

对内

配置Yum源#

在部署集群之前,需要选择一台机器配置Yum源,例如,选择IP地址为192.168.1.10的机器。

首先登陆到机器上,然后切换到root用户:

ssh 192.168.1.10
su - root

下载安装包,配置本地源,适合不需一直联网安装情况

下载安装包(或通过物理介质拷贝的方式获取):

sudo su root
cd /
wget $获取的tarball url

解压缩到一个全路径为root权限的位置,并安装httpd,请用具体的版本号代替*...,比如oushu-software-full-...*-rhel7-x86_64.tar.gz:

tar xzf oushu-software-full-*.*.*.*-rhel7-x86_64.tar.gz
yum -y install httpd
systemctl start httpd

安装本地源,全路径sudo权限执行,请用具体的版本号代替*...,比如/oushu-database-full-...*/setup_repo.sh:

/oushu-database-full-*.*.*.*/setup_repo.sh

完成配置后,在/etc/yum.repos.d下会生成oushu.repo文件。

操作系统配置#

本节介绍操作系统(以CentOS/RedHat 6.x/7.x为例)上一些基础软件的安装。

以下软件需要以root用户进行安装。

安装lava命令行管理工具:

yum clean all
yum makecache
yum install -y lava

创建一个allhostfile文件,包含所有机器:

touch ~/allhostfile

编辑allhostfile文件内容如下(所有机器的hostname):

host1
host2
host3
...

修改配置机器的/etc/hosts:

# 追加内容
yum源:内网ip hostname
每台机器:内网ip hostname

和所有机器交换公钥:

lava ssh-exkeys -f ~/allhostfile -p ********

将/etc/hosts分发到所有机器节点:

lava scp -f ~/allhostfile /etc/hosts =:/etc/hosts

NTP安装#

lava ssh -f ~/allhostfile -e "yum install -y ntp"
lava ssh -f ~/allhostfile -e "systemctl enable ntpd"
lava ssh -f ~/allhostfile -e "systemctl start ntpd"

如果集群是在内网环境且没有可用的NTP授时服务,则采用集群中host1的时钟作为NTP同步的时钟。具体配置方式为,编辑host1的/etc/ntp.conf配置文件并添加以下内容:

server host1

如果集群有可用的NTP授时服务,假定授时服务器主机名为host_ntp。具体配置方式为,编辑host1的/etc/ntp.conf配置文件并添加以下内容:

server host_ntp

将/etc/ntp.conf分发到所有机器节点,并进行时钟同步的操作:

lava scp -f ~/allhostfile /etc/ntp.conf =:/etc/ntp.conf
lava ssh -f ~/allhostfile -v -e 'ntpd'

Java安装#

lava ssh -f ~/allhostfile -e "yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel"
lava ssh -f ~/allhostfile -e "mkdir /usr/java"
lava ssh -f ~/allhostfile -e "ln -s $(dirname $(dirname $(readlink -f $(which javac)))) /usr/java/default"