# 部署环境准备 本章首先介绍产品所支持的平台,然后详细阐述部署产品时集群所用节点的机架放置策略、节点的硬件规格和参数设置、外部存储的使用原则、组网规划原则,和操作系统基础软件等配置信息。 ## 支持平台介绍 | 硬件架构 | 硬件平台 | 操作系统 | | -------- | ----------------------------------- | ---------------------------------------------- | | 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用户: ```shell ssh 192.168.1.10 su - root ``` 下载安装包,配置本地源,适合不需一直联网安装情况 下载安装包(或通过物理介质拷贝的方式获取): ```shell sudo su root cd / wget $获取的tarball url ``` 解压缩到一个全路径为root权限的位置,并安装httpd,请用具体的版本号代替*.*.*.*,比如oushu-software-full-*.*.*.*-rhel7-x86_64.tar.gz: ```shell tar xzf oushu-software-full-*.*.*.*-rhel7-x86_64.tar.gz yum -y install httpd systemctl start httpd ``` 安装本地源,全路径sudo权限执行,请用具体的版本号代替*.*.*.*,比如/oushu-database-full-*.*.*.*/setup_repo.sh: ```shell /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安装 ```shell 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配置文件并添加以下内容: ```shell server host1 ``` 如果集群有可用的NTP授时服务,假定授时服务器主机名为host_ntp。具体配置方式为,编辑host1的/etc/ntp.conf配置文件并添加以下内容: ```shell server host_ntp ``` 将/etc/ntp.conf分发到所有机器节点,并进行时钟同步的操作: ```shell lava scp -f ~/allhostfile /etc/ntp.conf =:/etc/ntp.conf lava ssh -f ~/allhostfile -v -e 'ntpd' ``` ### Java安装 ```shell 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" ```