Zookeeper集群设计与安装部署(最完整版CDH)

详尽的视频讲解,请查看该地址:https://edu.csdn.net/course/detail/9572

首先准备好3个节点分别为hadoop01、hadoop02、hadoop03,接下来带着大家一起搭建最小规模的Zookeeper分布式集群。

1.集群规划

1.1主机规划

使用准备的3个节点,搭建一个最小规模的Zookeeper分布式集群。

带你一起实现Zookeeper集群设计与部署

 

1.2软件规划

为了方便集群各个组件兼容性管理,这里选择一个CDH稳定版本的zookeeper-3.4.5-cdh5.10.0.tar.gz,软件规划如下图所示。

Zookeeper集群设计与安装部署(最完整版CDH)_第1张图片

 

1.3用户规划

在每个节点规划好自己的用户和用户组,为后面在哪个用户下安装Zookeeper做好准备。

Zookeeper集群设计与安装部署(最完整版CDH)_第2张图片

 

1.4目录规划

我们规划大数据相关软件统一放在app目录下,脚本统一放在tools目录下,日志数据放在data目录下。

Zookeeper集群设计与安装部署(最完整版CDH)_第3张图片

 

2.环境准备

2.1时钟同步

使用上海时间覆盖本地时间

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

使用NTP(网络时间协议)实现时钟同步

#在线安装ntp

yum install ntp

#网络时间同步

ntpdate pool.ntp.org

2.2Hosts 文件配置

一般情况下通过主机名是无法访问虚拟机的,需要通过IP地址才可以访问虚拟机。但是IP地址不容易记住,这时可以通过配置主机名与IP地址的映射关系,从而可以通过主机名来访问虚拟机。

为了方便各个节点相互通过主机名访问,每个节点都需要相同配置。修改示例如下所示:

vi /etc/hosts

192.168.20.121 hadoop01

192.168.20.122 hadoop02

192.168.20.123 hadoop03

2.3关闭防火墙

防火墙是对我们的服务器进行的一种保护,但是有时候也会妨碍集群间的相互通信,为了方便起见我们可以关闭掉防火墙。

针对centos6.x各个节点防火墙操作如下所示:

#查看防火墙状态

service iptables status

#永久关闭防火墙

chkconfig iptables off

#临时关闭防火墙

service iptables stop

备注:如果使用centos7,以上命令不适用。

2.4SSH免密码登录

2.4.1首先对每个节点单独配置ssh免密码登录

下面以hadoop01节点为例:

切换到用户根目录操作,生成秘钥

mkdir .ssh

ssh-keygen -t rsa

进入.ssh目录,将公钥拷贝到认证文件

cd .ssh

cat id_rsa.pub >> authorized_keys

退回到根目录,对.ssh赋予权限

chmod 700 .ssh

chmod 600 .ssh/*

测试当前节点ssh免密码登录

ssh hadoop01

2.4.2实现各个节点之间免密码登录

将hadoop02和hadoop03的共钥id_ras.pub拷贝到hadoop01中的authorized_keys文件中。

cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop01 'cat >> ~/.ssh/authorized_keys'

然后将hadoop01中的authorized_keys文件分发到hadoop02和hadoop03节点上面。

scp -r authorized_keys hadoop@hadoop02:~/.ssh/

scp -r authorized_keys hadoop@hadoop03:~/.ssh/

然后hadoop01、hadoop02和hadoop03就可以免密码互通

2.5集群脚本准备

2.5.1编写配置文件及集群脚本

选一个主节点,比如hadoop01,创建/home/hadoop/tools脚本存放目录

mkdir /home/hadoop/tools

分别编写脚本配置文件和分发文件

deploy.conf deploy.sh runRemoteCmd.sh

deploy.conf 具体内容如下所示:

#### NOTES
# There is crontab job using this config file which would compact log files and remove old log file.
# please be carefully while modifying this file until you know what crontab exactly do
#hdp
hadoop01,all,namenode,zookeeper,resourcemanager,
hadoop02,all,slave,namenode,zookeeper,resourcemanager,
hadoop03,all,slave,datanode,zookeeper,

备注:第一列为各个节点的主机名,其他列为自己对各个节点打的标签。

deploy.sh具体内容如下所示:

#!/bin/bash
#set -x
if [ $# -lt 3 ]
then 
 echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"
 echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"
 exit 
fi
src=$1
dest=$2
tag=$3
if [ 'a'$4'a' == 'aa' ]
then
 confFile=/home/hadoop/tools/deploy.conf
else 
 confFile=$4
fi
if [ -f $confFile ]
then
 if [ -f $src ]
 then
 for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` 
 do
 scp $src $server":"${dest}
 done 
 elif [ -d $src ]
 then
 for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` 
 do
 scp -r $src $server":"${dest}
 done 
 else
 echo "Error: No source file exist"
 fi
else
 echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi

备注:该脚本为集群分发脚本,可以快速、方便地将主节点的文件或者目录分发到其他从节点。

runRemoteCmd.sh具体内容如下所示:

#!/bin/bash
#set -x
if [ $# -lt 2 ]
then 
 echo "Usage: ./runRemoteCmd.sh Command MachineTag"
 echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"
 exit 
fi
cmd=$1
tag=$2
if [ 'a'$3'a' == 'aa' ]
then
 
 confFile=/home/hadoop/tools/deploy.conf
else 
 confFile=$3
fi
if [ -f $confFile ]
then
 for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` 
 do
 echo "*******************$server***************************"
 ssh $server "source ~/.bashrc; $cmd"
 done 
else
 echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi

备注:该脚本为集群远程命令执行脚本,方便在各个节点分别执行传入的命令。

2.5.2给脚本添加执行权限

分别给以下脚本添加执行权限

chmod u+x deploy.sh

chmod u+x runRemoteCmd.sh

2.5.3配置脚本环境变量

vi ~/.bashrc

PATH=/home/hadoop/tools:$PATH

export PATH

2.5.4使用脚本创建规划目录

批量创建各个节点相应目录

runRemoteCmd.sh "mkdir /home/hadoop/app" all

runRemoteCmd.sh "mkdir /home/hadoop/data" all

3.JDK安装

Zookeeper是由Java编写,运行在JVM上,所以需要提前安装JDK运行环境。

3.1下载JDK

可以到官网下载对应版本的jdk,这里选择安装jdk1.8版本,并上传至主节点(hadoop01)/home/hadoop/app目录下。

3.2解压JDK

通过tar -zxvf命令对jdk安装包进行解压即可。

3.3创建软连接

为了方便版本的更换和学习使用,可以创建jdk软连接指向jdk真实安装路径。可以使用如下命令:ln -s jdk1.8.0_51 jdk

3.4配置环境变量

3.4.1修改/etc/profile文件

如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell。

vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:/home/hadoop/tools:$PATH
export JAVA_HOME CLASSPATH PATH

3.4.2修改.bashrc文件

这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

vi ~/.bashrc
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:/home/hadoop/tools:$PATH
export JAVA_HOME CLASSPATH PATH

3.5使配置文件生效

通过source ~/.bashrc命令使得刚刚配置的环境变量生效。

3.6验证JDK是否安装成功

通过命令:java –version查看jdk版本,如果能查看到当前jdk版本,说明jdk安装成功

3.7JDK安装包同步到其他节点

通过脚本命令:deploy.sh jdk1.8.0_51 /home/hadoop/app/ slave将jdk安装包同步到其他节点,然后重复3.3~3.6步骤完成各个节点的jdk安装。

4.Zookeeper安装部署

4.1下载Zookeeper

Apache版本下载地址:https://archive.apache.org/dist/

CDH版本下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/

下载对应版本Zookeeper,这里下载zookeeper-3.4.5-cdh5.10.0.tar.gz版本,并上传至/home/hadoop/app目录下。

4.2解压Zookeeper

通过tar -zxvf命令对Zookeeper安装包进行解压即可。

4.3创建软连接

为了方便版本的更换和学习使用,可以创建zookeeper软连接指向zookeeper真实安装路径。可以使用如下命令:ln -s zookeeper-xxx zookeeper

4.4修改zoo.cfg

4.4.1拷贝一份zoo.cfg配置文件

默认情况下,Zookeeper的conf目录没有zoo.cfg,此时需要通过如下命令拷贝一份:

cp zoo_sample.cfg zoo.cfg

4.4.2修改zoo.cfg配置文件

# The number of milliseconds of each tick
#这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
#配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数。
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
#Leader 与 Follower 之间发送消息,请求和应答时间长度
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
#数据目录需要提前创建
dataDir=/home/hadoop/data/zookeeper/zkdata
#日志目录需要提前创建
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog
# the port at which the clients will connect
#访问端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

4.5zk安装目录同步到其他节点

将Zookeeper安装目录整体分发到其他节点

deploy.sh zookeeper-3.4.5-cdh5.10.0 /home/hadoop/app/ slave

并分别创建软连接

ln -s zookeeper-3.4.5-cdh5.10.0 zookeeper

4.6创建规划的目录

使用集群脚本统一创建规划目录

runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdata" all

runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdatalog" all

4.7修改每个节点服务编号

分别到各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,里面的内容分别填充为:1、2、3

[hadoop@hadoop01 zkdata]$ vi myid

[hadoop@hadoop01 zkdata]$ cat myid

1

[hadoop@hadoop02 zkdata]$ vi myid

[hadoop@hadoop02 zkdata]$ cat myid

2

[hadoop@hadoop03 zkdata]$ vi myid

[hadoop@hadoop03 zkdata]$ cat myid

3

4.8测试运行

启动Zookeeper

runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" all

查看Zookeeper进程

runRemoteCmd.sh "jps" all

查看Zookeeper状态

runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh status" all

如果查看到Zookeeper节点状态包含leader 和follower,说明Zookeeper集群安装成功。

详尽的视频讲解,请查看该地址:https://edu.csdn.net/course/detail/9572

你可能感兴趣的:(大数据)