开源大数据集群部署(二)集群基础环境实施准备

櫰木1年前技术文章288

1、部署实施

Ø  部署实施章节中灰色文本内容为操作命令和配置文件内容。

Ø  下文中$表示系统命令解释器开始符号,且表示所有机器都要执行,如出现[hadoop@hd1.dtstack.com ~]$表示,只在hd1.dtstack.com主机hadoop用户下执行

2.1 环境准备

本次使用到的二进制软件包目录为:系统初始化前提是操作系统已完成安装、各个主机之间网络互通,系统常用命令已安装,本默认这些前提条件已具备,不在阐述。

2.1.1主机环境初始化

安装centos系统完成后需要对主机进行初始化配置和验证工作,在所有主机上(hd1.dtstack.com-hd3)均要进行操作,并按照对应hosts修改主机名:

(主机名必须为xxx.xxx.com 匹配freeipa安装需求)

    (1) 主机配置映射(操作权限root)

$ cat>>/etc/hosts <<EOF
172.16.104.226 hd1.dtstack.com
172.16.106.252 hd2.dtstack.com
172.16.107.127 hd3.dtstack.com
172.16.106.165 hd.dtstack.com
EOF

(2)关闭防火墙&selinux(操作权限root)

$ systemctl stop firewalld
$ systemctl disable firewalld
$ setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

(3) 创建集群系统用户(操作权限root)

系统用户

属组

用途

hadoop

hadoop

hadoop集群用户

mysql

hadoop

mysql数据库用户

hdfs

hadoop

hadoop集群用户

trino

hadoop

presto集群用户

prometheus

prometheus

监控平台用户

grafana

grafana

监控平台用户

zookeeper

zookeeper

zk集群用户

hive

hadoop

hive组件用户

yarn

hadoop

hadoop集群用户

创建hadoop集群所需用的的用户和用户组

创建示例如下:

[root@hd1.dtstack.com ~]$ remote_op.sh "groupadd hadoo p"
[root@hd1.dtstack.com ~]$ remote_op.sh "useradd hive -G hadoop"
[root@hd1.dtstack.com ~]$ remote_op.sh "echo hive | passwd --stdin hive"


 (4)安装java环境(操作权限root)

本次中java软件包安装目录在/root/bigdata

$ cd /opt/bigdata
$ tar -zvxf zulu11.60.19-ca-jdk11.0.17-linux_x64.tar.gz -C /opt
tar -zxvf jdk-8u281-linux-x64.tar.gz
ln -s  /opt/jdk1.8.0_281  /opt/java


2.1.2配置ssh互信

ssh互信配置(操作权限hadoop)

在集群系统 hd1.dtstack.com-hd3.dtstack.com共3台设备上执行如下命令:

$ cd $HOME  #在hadoop当前目录下创建ssh互信
$ ssh-keygen -t rsa   #一路回车,不需要输入任何信息

将hd1.dtstack.com公钥添加到认证文件中,在hd1.dtstack.com主机root用户当前家目录下执行如下命令:

生产各自的keytab文件

ssh-keygen -t rsa

用ssh-copy-id 把公钥复制到远程主机上,命令也要(以下命令ip需要填写所有节点ip并在每个节点均执行)

ssh-copy-id -i  .ssh/id_rsa.pub root@xxx.xxx.xxx

以上命令在三个阶段均要执行

Ø  ssh互信验证

hd1.dtstack.com-hd3.dtstack.com主机上互相执行ssh登录命令验证,如下:

[hadoop@hd1.dtstack.com ~]$ ssh hd2.dtstack.com

验证截图如下:

图片 1.png

ssh命令执行过去,无报错表示ssh互信配置成功。

Ø  root和hdfs以及yarn权限ssh互信

同理操作,配置主机root权限和hdfs以及yarn权限全主机互信。

2.1.3统一环境变量配置

环境变量分两个文件:/etc/profile和各用户下.bashrc(bash),建议/etc/profile根据规划好的目录结构,统一设置环境变量。本次设置将hadoop,zookeeper,hive,java环境变量整体设置完成

[root@hd1.dtstack.com ~]# cat >>/etc/profile.d/bigdata.sh<<EOF

#!/bin/bash
export HADOOP_HOME=/opt/hadoop
export HBASE_HOME=/opt/hbase
export SPARK_HOME=/opt/spark
export SPARK_CONF_DIR=/opt/spark/conf
export HBASE_CONF_DIR=/opt/hbase/conf
export HBASE_LIB=/opt/hbase/lib
export TEZ_HOME=/opt/tez
export TEZ_CONF_DIR=/opt/tez/conf
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/*:$TEZ_HOME/lib/*
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=/opt/hive/conf
export PATH=$PATH:$HIVE_HOME/bin
export ZK_HOME=/opt/zookeeper
#export YARN_CONF_DIR=/opt/hadoop/etc/hadoop
export JAVA_HOME="/opt/java"
export PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$ZK_HOME/bin:/opt/mysql/bin:$PATH
export HADOOP_CLASSPATH=`hadoop classpath`

EOF

2.1.4系统调优

hd1.dtstack.com-hd3.dtstack.com所有机器上都要执行,且以root权限执行

Ø  调整swap、内存分配、网络连接参数

$ cat>>/etc/sysctl.conf <<EOF
#避免使用swap
vm.swappiness = 1
#修改内存分配策略
vm.overcommit_memory=2
vm.overcommit_ratio=90
#网络连接上限
net.core.somaxcomm=32768
EOF


Ø  增大同时打开文件描述符

$ cat>>/etc/security/limits.conf <<EOF
hadoop  soft   nofile   32768
hadoop hard nofile 65536
hadoop soft   nproc   32768
hadoop hard nproc 65536
EOF


Ø  关闭THP

$ cat>>/etc/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF


2.1.5 NTP服务配置

Ø  安装

在hd1.dtstack.com-hd3.dtstack.com各个主机上root权限下执行:

$ yum install -y ntp

配置时间同步服务端

在hd1.dtstack.com主机root权限下执行

Ø  ntp配置

$ cat /etc/ntp.conf|grep -v '#'|grep -v ^$
driftfile /var/lib/ntp/drift     #存放记录时间误差
restrict default nomodify notrap nopeer noquery   #默认拒绝所有来源访问
restrict 127.0.0.1  #开放本机的任何访问
restrict ::1
restrict 172.16.104.0 mask 255.255.255.0 nomodify notrap  #允许104网段机器参与ntp同步
includefile /etc/ntp/crypto/pw    
keys /etc/ntp/keys
server  172.16.104.226    #时间同步服务器
server  127.127.1.0       #当上面时间不可用时,以本地时间作为时间服务
fudge   127.0.0.1 stratum 10
disable monitor


说明:

ü  server  172.16.104.226表示内网时间同步服务器,其余机器都从这台同步时间

ü  server  172.16.104.226可以替换成其他时间服务中心IP(看生产环境配置)

Ø  ntp服务启动和验证

启动

service ntpd start

验证

service ntpd status

图片2.png

Active状态为running表示服务启动成功

配置时间同步客户端

在hd2.dtstack.com主机root权限下执行

Ø  配置时间同步服务源

[root@hd2.dtstack.com ~]# cp /etc/ntp.conf /etc/ntp.conf.bak
[root@hd2.dtstack.com ~]# cat >/etc/ntp.conf<<EOF
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict ::1
server 172.16.104.226
restrict 172.16.104.226 nomodify notrap noquery
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
EOF


Ø  手动同步时间(建议第一次手动同步)

$ ntpdate -u 172.16.104.226

图片 3.png

Ø  拉起同步服务

service ntpd start

检查方法同上

Ø  同步到其他节点(hd3.dtstack.com、hd2.dtstack.com)

[root@hd2.dtstack.com ~]# scp /etc/ntp.conf root@hd2.dtstack.com:/etc/

Ø  启动其余主机(hd3.dtstack.com)上ntpd服务

[root@hd2.dtstack.com ~]# ssh hd3.dtstack.com 'service ntpd start'
[root@hd2.dtstack.com ~]# ssh hd2.dtstack.com'service ntpd start'


Ø  检查其余机器(hd3.dtstack.com)上ntpd服务启动状态

[root@hd2.dtstack.com ~]# ssh hd3.dtstack.com 'service ntpd status'
[root@hd2.dtstack.com ~]#ssh hd2.dtstack.com'service ntpd start''


Ø  检查连接情况

[root@hd2.dtstack.com ~]# ntpq -p

图片 4.png

2.1.6自动化同步脚本

Ø  配置文件同步脚本【1】remote_scp.sh

[root@hd1.dtstack.com software]# cat /root/bin/remote_scp.sh
#!/bin/bash
for i in hd{2..3}
do
 #echo $i
 if [  -d $1  ]
then
 echo -e '\033[33m 当前主机为'$i',传输文件为'$1'\033[0m'
 scp -rp $1 $i:$2
else
 #echo "当前节点为$,传输文件为$1"
 echo -e '\033[33m 当前主机为'$i',传输文件为'$1'\033[0m'
 scp $1 $i:$2
fi
done
status=`echo $?`
if [ $status -eq 0 ]
then
 echo -e "$1文件传输完成"
else
 echo -e "请检查传入参数"
fi


 

使用案例:

格式:remote_scp.sh 源目录  目标目录

图片 6.png

说明:将test.log 分发到hd1.dtstack.com-hd3.dtstack.com/root目录下

 

Ø  配置文件同步脚本【2】remote_op.sh

[root@hd1.dtstack.com ~]# cat /root/bin/remote_op.sh
#!/bin/bash
for i in hd2.dtstack.com hd3.dtstack.com
do
  echo  -e '\033[33m 当前主机为'$i'\033[0m'
  ssh $i $1
done


使用案例:

格式:remote_op.sh “执行命令内容”

图片 1.png

2.1.7软件包仓库

建议在安装hadoop集群前,提前将所需安装的二进制软件包,统一存放软件包仓库中。

ü  本次使用的软件包都在主机hd1.dtstack.com上/root/bigdata下

2.1.8 keytab生成脚本

在所有节点均需执行此操作

/root/bigdata

vi getkeytabs.sh

set -x
 
CMKEYTAB="/data/kerberos/apache-user.keytab"
CMUSER="apache-user"
REALM="DTSTACK.COM"
IPASERVER="hd.dtstack.com"
 
hosts=`hostname`
DEST="$1"
FULLPRINC="$2"/${hosts}@${REALM}
USER=$2
# Passwd based kinit
#echo PASSWORD | kinit $CMUSER@$REALM
 
# Or per keytab (keytab needs to be generated before)
kinit -k -t $CMKEYTAB $CMUSER@$REALM
 
PRINC=$( echo $FULLPRINC | sed "s/\@$( echo $REALM )//" )
 
echo $PRINC
 
echo Retrieving keytab for $FULLPRINC for $DEST
 
echo Checking for existing service principle
if ipa service-find $FULLPRINC; then
echo Service principle found
else
echo Service principle not created, creating
ipa service-add $FULLPRINC --pac-type=NONE
fi
 
echo Ensuring service allows
ipa service-allow-create-keytab --users=$CMUSER $FULLPRINC
ipa service-allow-retrieve-keytab --users=$CMUSER $FULLPRINC
 
if ipa service-show $FULLPRINC | grep 'Keytab' | grep 'False'; then
echo Creating keytab for $FULLPRINC for $DEST
ipa-getkeytab -s $IPASERVER -p $PRINC -k $DEST -e rc4-hmac,aes256-cts,aes128-cts
else
echo Retrieving keytab for $FULLPRINC for $DEST
ipa-getkeytab -r -s $IPASERVER -p $PRINC -k $DEST
fi
 
chmod 644 $DEST
chown $USER:$USER $DEST
 
kdestroy
 
exit 0;



相关文章

Linux 文件查找

1、locate 命令locate 命令搜索不经常改变的文件如配置文件等,非实时查找(数据库查找),查询系统上预建的文件索引数据库(/var/lib/mlocate/mlocate.db)。locat...

arm环境安装达梦数据库

arm环境安装达梦数据库

一、安装前准备1、创建用户和用户组groupadd dinstall useradd -g dinstall -m -d /home/dm...

win2016系统新增辅助网卡无法访问公网

win2016系统新增辅助网卡无法访问公网

问题现象:一台阿里云win2016系统服务器,在主网卡已绑定弹性公网ip之后,再新增了一块辅助网卡,无法访问公网。另外,使用NAT网关做了dnat到辅助网卡的映射。该台服务器网卡信息为:主网卡:172...

K8S中 CNI 插件的解读

K8S中 CNI 插件的解读

一.CNI是什么首先我们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。它是 K8s 中标准的一个调用网络实现的接口。Kubel...

创建跨集群用户

1.       登陆源集群和目标集群创建迁移时需要使用的用户(例:hadoop_copy),赋予用户集群超级管理员权限和hdfs超级用户权...

MySQL性能优化(八)exists子查询优化一例

MySQL性能优化(八)exists子查询优化一例

一个例子SELECT u.id userId,       u.mobile,  &nbs...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。