1.4虚拟机规划1.4.1虚拟机规划我的虚拟机IP、主机名规划如下表所示(共8台服务器 & 3个虚拟IP)。# 两台IPA(Kerberos KDC) 服务器192.168.1.101 ipa01.wanfeng169.com ipa01192.168.1.102 ipa02.wanfeng169.com ipa02# Hadoop 集群服务器192.168.1.103 master01.wanfeng169.com master01192.168.1.10..
13581623859 立即咨询发布时间:2024-05-30 热度:360
1.4 虚拟机规划
我的虚拟机IP、主机名规划如下表所示(共8台服务器 & 3个虚拟IP)。
# 两台IPA(Kerberos KDC) 服务器
192.168.1.101 ipa01.wanfeng169.com ipa01
192.168.1.102 ipa02.wanfeng169.com ipa02
# Hadoop 集群服务器
192.168.1.103 master01.wanfeng169.com master01
192.168.1.104 master02.wanfeng169.com master02
192.168.1.105 worker01.wanfeng169.com worker01
192.168.1.106 worker02.wanfeng169.com worker02
192.168.1.107 worker03.wanfeng169.com worker03
# Hadoop 客户端服务器
192.168.1.108 client01.wanfeng169.com client01
# VIP(虚拟IP,该IP不应该被物理机占用)
192.168.1.120 # 用于Postgres数据库高可用
192.168.1.121 # 用于FreeIPA LDAP url 高可用(负载均衡)
192.168.1.123 # 用于Ranger admin 高可用(负载均衡)
注意:
1. 所有虚拟机操作系统磁盘均为200G;操作系统版本均为 CentOS 7.9;
2. Hadoop集群的两台 Master 节点 另加两块200G 的磁盘,用于存放 HDFS NameNode元数据等;三台 Worker 节点 另加两块300G 的磁盘,用于存放 HDFS数据、Kafka数据等;client01 节点另加一块 200G 的磁盘,用于各相关软件的开发测试等;
3. 由于之前主机域名是用的 “wanfeng168.com” ,但在安装 FreeIPA的时候,发现该域名已经被占用,所以后来修改为 “wanfeng169.com”,所以如果后续有相关图中发现“wanfeng168.com”的主机域名链接,将其视为 “wanfeng169.com”即可,我就不去批量替换相关图,再来实战一把了。
详细如下表:
主机名 | IP | CPU | 内存 | 磁盘 | 大数据相关服务进程 |
ipa01 | 192.168.1.101 | 1vCore | 4G | 1*200 | |
ipa02 | 192.168.1.102 | 1vCore | 4G | 1*200 | |
master01 | 192.168.1.103 | 4vCore | 24G | 3*200 | NN,RM,JN,ZK,HM,HS2,HMS |
master02 | 192.168.1.104 | 4vCore | 24G | 3*200 | NN,RM,JN,ZK,HM,HS2,HMS |
worker01 | 192.168.1.105 | 4vCore | 24G | 1*200+2*300 | DN,NM,JN,ZK,HR,KFK, |
worker02 | 192.168.1.106 | 4vCore | 16G | 1*200+2*300 | DN,NM,HR,KFK |
worker03 | 192.168.1.107 | 4vCore | 16G | 1*200+2*300 | DN,NM,HR,KFK |
client01 | 192.168.1.108 | 2vCore | 8G | 2*200 |
备注:
NN:HDFS 的 NameNode 进程;
DN:HDFS 的 DataNode 进程;
JN:HDFS JournalNode 进程;
RM:Yarn 的 ResourceManager进程;
NM:Yarn的NodeManager进程;
ZK: Zookeeper进程;
HM: Hbase的 HMaster 进程;
HR: Hbase 的 HRegionServer 进程;
KFK:Kafka进程;
HS2: Hive Server2进程;
HMS: Hive Metastore进程;
此外:master2节点还有 JHS(Job History Server)进程 & TM(Timeline Server)进程。
虚拟机安装请参考《Oracle VM VirtualBox添加虚拟机(以CentOS7.9为例).docx》文档。
注意:建议所有虚拟机安装过程中设置同样的 root 密码,方便后续批量操作,提高效率。
安装完成后,我的虚拟机信息类似如下图所示(下面以 master01节点为例)
注意:本节内容均需在所有节点执行!
我的操作系统内核信息如所示(所有机器内核信息一致)
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
如下图所示:这里以 ipa01 节点为例(修改完文件后,按键盘左上角的 “Esc” 键,然后输入 “:wq” 后,按”Enter”键 保存文件),其他节点类似。
注意: 因为我的网络设备名为 enp0s3,故其配置文件对应为 /etc/sysconfig/network-scripts 目录下的 ifcfg-enp0s3,如果您的网络设备名不一样,请灵活编辑对应的网络设备配置文件。可以用 “ip a” 命令查看所有的网络设备信息。
执行如下命令,升级操作系统相关RPM包,并安装 wget & net-tools包,方便后续下载相关软件或者查看端口监听情况或者执行killall 命令等。
yum -y upgrade
yum -y install wget
yum -y install net-tools
yum -y install psmisc
升级后,我的所有服务器操作系统内核信息类似如下:
[root@ipa01 software]# uname -a
Linux ipa01 3.10.0-1160.118.1.el7.x86_64 #1 SMP Wed Apr 24 16:01:50 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@master01 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
注意:原来的内核版本 “3.10.0-1160.114.2.el7.x86_64”,在安装FreeIPA的时候好像有bug,不建议使用该版本再去折腾浪费精力。
vi /etc/hosts
添加如下内容
# 两台IPA(Kerberos KDC) 服务器
192.168.1.101 ipa01.wanfeng169.com ipa01
192.168.1.102 ipa02.wanfeng169.com ipa02
# Hadoop 集群服务器
192.168.1.103 master01.wanfeng169.com master01
192.168.1.104 master02.wanfeng169.com master02
192.168.1.105 worker01.wanfeng169.com worker01
192.168.1.106 worker02.wanfeng169.com worker02
192.168.1.107 worker03.wanfeng169.com worker03
# Hadoop 客户端服务器
192.168.1.108 client01.wanfeng169.com client01
在所有服务器上执行如下命令修改主机名
# 1. 批量修改主机名
local_ip=$(ip a|grep "192.168.1"|awk '{print $2}'|awk -F '/' '{print $1}');cat /etc/hosts |grep "$local_ip "|awk '{print $3}' > /etc/hostname;
cat /etc/hostname;
cat /etc/hostname|xargs hostname
# 2. 验证修改
hostname
hostname -f
我的操作输出类似如下
[root@localhost ~]# local_ip=$(ip a|grep "192.168.1"|awk '{print $2}'|awk -F '/' '{print $1}');cat /etc/hosts |grep "$local_ip "|awk '{print $3}' > /etc/hostname;
[root@localhost ~]# cat /etc/hostname
ipa01
[root@localhost ~]# cat /etc/hostname|xargs hostname
[root@localhost ~]# hostname
ipa01
[root@localhost ~]# hostname -f
ipa01.wanfeng169.com
注意:在集群所有服务器(ipa服务器除外)执行如下代码,禁用ipv6
is_added=$(cat /etc/sysctl.conf|grep -v "^#"|grep "net.ipv6.conf.all.disable_ipv6"|wc -l);
if [ $is_added -eq 0 ]; then
cat << EOF >> /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 0
EOF
fi
cat /etc/sysctl.conf|grep -v "^#"|grep "net.ipv6.conf";
我的操作输出类似如下图
注意:简单起见,这里禁用所有服务器的防火墙。真正生产环境一般不禁用防火墙,而是开放每个组件相关的端口。
执行如下命令禁用防火墙
systemctl disable firewalld
service firewalld stop
执行如下命令禁用 selinux
# 修改配置文件
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config;
# 临时修改,以规避重启操作系统
setenforce 0;
# 验证修改
cat /etc/selinux/config|grep -v "^#"|grep "SELINUX="
我的操作输出类似如下图
vi /etc/security/limits.conf # 添加如下内容
* soft nofile 65535
* hard nofile 65535
注意1:对大数据集群来说,时钟同步非常重要,如果节点之间时钟不一致,运行任务的时候,很容易导致任务运行失败。
注意2:这里把两台IPA服务器当作时钟服务器,同步阿里云的时钟。而其他节点同步这两个节点的时钟。
执行如下命令,安装 chrony 相关包
sudo yum -y install chrony
执行类似如下命令启动 chronyd 服务
sudo systemctl start chronyd
sudo systemctl enable chronyd
然后编辑两台ipa服务器的 /etc/ntp.conf 配置文件,以同步阿里云服务器的时钟到本机,需要修改的内容如下:
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
# Allow NTP client access from local network.
allow 192.168.1.0/24
# Serve time even if not synchronized to a time source.
local stratum 10
接着编辑其他服务器的 /etc/ntp.conf 配置文件,以同步两台ipa服务器的时钟到本机,需要修改的内容如下:
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ipa01.wanfeng169.com iburst
server ipa02.wanfeng169.com iburst
# Allow NTP client access from local network.
allow 192.168.1.0/24
# Serve time even if not synchronized to a time source.
local stratum 10
最后,我们重启一下 chronyd 服务,然后验证修改是否已经生效,类似如下
[root@master01 ~]# systemctl restart chronyd
[root@master01 ~]# chronyc sources -v
210 Number of sources = 2
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ipa01.wanfeng169.com 2 6 17 1 +5363us[+5322us] +/- 47ms
^+ ipa02.wanfeng169.com 2 6 17 1 -12ms[ -12ms] +/- 104ms
执行如下命令格式化磁盘
# 1. 在 master01 & master02 & worker01 ~ worker03 五台服务器执行
fdisk -l
fdisk /dev/sdb
fdisk /dev/sdc
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdc1
mkdir -p /disk1;
mkdir -p /disk2;
mount /dev/sdb1 /disk1
mount /dev/sdc1 /disk2
# 2. 在 client01 服务器执行
fdisk -l
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkdir -p /disk1;
mount /dev/sdb1 /disk1
vi /root/add_mount_disk_info.sh # 内容如下
#!/bin/bash
mount_sdb1="/disk1"
mount_sdc1="/disk2"
fs_tab_file=/etc/fstab;
rand_str=$(echo $RANDOM|md5sum|awk '{print $1}')
tmp_disk_file="/tmp/local_disk${rand_str}.info";
blkid|grep -E "sdb1|sdc1"> $tmp_disk_file;
sed -i 's/: UUID=/ /g' $tmp_disk_file;
sed -i 's/TYPE=//g' $tmp_disk_file;
sed -i 's/\/dev\///g' $tmp_disk_file;
sed -i 's/"//g' $tmp_disk_file;
while read line
do
# echo $line
dev_name=`echo "$line"|awk '{print $1}'`
dev_uuid=`echo "$line"|awk '{print $2}'`
dev_ftype=`echo "$line"|awk '{print $3}'`
echo "DevName:${dev_name}"
is_added=$(cat $fs_tab_file|grep -v "^#"|grep "${dev_uuid}"|wc -l)
echo "isAdded:${is_added}"
if [ $is_added -eq 0 ] && [ "$dev_name" == "sdb1" ]; then
dev_mount_dir=${mount_sdb1}
echo "UUID=${dev_uuid} ${dev_mount_dir} ${dev_ftype} defaults,noatime 0 0" >> $fs_tab_file;
elif [ $is_added -eq 0 ] && [ "$dev_name" == "sdc1" ]; then
dev_mount_dir=${mount_sdc1}
echo "UUID=${dev_uuid} ${dev_mount_dir} ${dev_ftype} defaults,noatime 0 0" >> $fs_tab_file;
fi
done < $tmp_disk_file
rm -rf $tmp_disk_file
# 1. 执行挂载磁盘信息到 /etc/fstab的脚本
sh /root/add_mount_disk_info.sh
# 2. 检查是否已经添加挂载磁盘信息到 /etc/fstab
cat /etc/fstab|grep -v "^#"|grep -E "/disk1|/disk2"
注意:在集群所有服务器安装 Java(ipa服务器不要安装java,因为在安装ipa-server包的时候会自动安装openJDK。如果手动安装java可能反而导致执行ipa-server-install的时候报错)。
Jdk 1.8 下载地址是 https://www.oracle.com/java/technologies/downloads/#java8
我这里下载 jdk-8u411-linux-x64.tar.gz文件到 /disk1/software/jdk/ 目录下,下载后将其解压到 /usr/java 目录下。
Java安装详细操作类似如下:
# 1. 创建相关目录
mkdir -p /disk1/software/jdk/;
mkdir -p /usr/java/;
# 2. copy jdk-8u333-linux-x64.tar.gz 文件到各服务器的 /disk1/software/jdk 目录中
# 3. 解压 jdk 文件
cd /disk1/software/jdk/;
tar -xvf ./jdk-8u333-linux-x64.tar.gz -C /usr/java/;
cd /usr/java/;
ln -s ./jdk1.8.0_333 ./latest
# 4. vi /etc/profile # 添加如下内容 # 配置 Java 环境变量
# java env
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
# 5. 验证安装
source /etc/profile;
which java;
which javac;
java -version;
javac -version;
# 6. 配置一下jce
## 即下载 jce_policy-8.zip 文件,替换一下原来jdk中相关jar 包即可
执行如下操作,以避免首次ssh登录远程主机,需要校验的问题
# 1. 修改
sed -i 's/# StrictHostKeyChecking ask/StrictHostKeyChecking no/g' /etc/ssh/ssh_config
# 2. 检查
cat /etc/ssh/ssh_config|grep "StrictHostKeyChecking"
至此所有前期准备工作基本OK,此时我们可以关闭所有虚拟机,然后将所有虚拟机目录备份一下。比如我将 master01 虚拟机备份为 master01.beforeInstall。
# 1. Zookeeper 3.8.4
# 2. Hadoop 3.3.6
# 3. Hbase 1.4.8
# 4. Kafka 3.6.2
# 5. Spark 3.5.1
# 6. Flink 1.19.0
# 7. Hive 4.0.0
# 8. Tez 0.10.3
# 9. Solr 8.11.3
# 10. Ranger 2.4.0
各组件相关服务对应的用户&用户组是严格参考CDP产品规划的(只是Hadoop在启用Kerberos之前,其HDFS&Yarn相关服务均在hadoop用户下启动)。链接如下
https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/upgrade-hdp/topics/cm_sg_cm_users_principals_HDP2.html。
这里我就不冗余列表了。
注意:后续在安装相关组件的过程中,创建其操作系统用户的时候,我只是简单配置了一下其密码,安全起见:建议真正生产环境建议密码稍微复杂无规律一点,并记录到相关文档。
1.4虚拟机规划1.4.1虚拟机规划我的虚拟机IP、主机名规划如下表所示(共8台服务器 & 3个虚拟IP)。# 两台IPA(Kerberos KDC) 服务器192.168.1.101 ipa01.wanfeng169.com ipa01192.168.1.102 ipa02.wanfeng169.com ipa02# Hadoop 集群服务器192.168.1.103 master01.wanfeng169.com master01192.168.1.10...
1.3Oracle VM VirtualBox安装1.3.1下载Oracle VM VirtualBox软件打开https://www.virtualbox.org/网址,然后点击页面左栏的“Downloads”,将跳转到https://www.virtualbox.org/wiki/Downloads页面( 默认将出现下载最新的版本,我这里显示的是 7.0.16 版本),类似如...
1.1我的Windows宿主机配置1.1.1硬件配置总览1.1.2硬盘相关配置注意:共三块SSD磁盘:1*1T + 2*2T,下图是第一块1T磁盘的详细信息。...
1.1简介Apache Hadoop从2012年发布的1.0.1 版本以来已经有12个年头了,我亦从原来的信心满满到现在的白发苍苍。由于阿里云EMR、华为云MRS、腾讯云EMR等各种云大数据产品迅速占领市场,再加上CDH、HDP、CDP的不再开源。我似乎已经忘却曾经几时我还能很耐心的手工搭建一套高可用、高安全、高性能、低成本、...