环境准备
安装JDK
jdk安装参考:https://www.jianshu.com/p/f000e05f3512
下载 zookeeper
官网地址:https://downloads.apache.org/zookeeper/
上传
使用 命令:scp -r apache-zookeeper-3.5.7-bin.tar.gz atguigu@hadoop102:/opt/software
上传压缩包到服务器
解压与安装
使用命令:tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/ 进行解压
-C 解压到指定目录
tar -zxvf :解压 tar.gz 命令
查看/opt/module/目录
重命名 apache-zookeeper-3.5.7-bin 为 zookeeper-3.5.7
mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7
配置环境变量(可选项)
在/etc/profile.d/ 下面创建一个my_env.sh 文件
sudo vi /etc/profile.d/my_env.sh
my_env.sh内容如下
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile.d/my_env.sh 使my_env.sh 生效
配置
- 重名 zoo_sample.cfg 为 zoo.cfg
cd /opt/module/zookeeper-3.5.7/conf
mv zoo_sample.cfg zoo.cfg
- 使用 ls 命令查看重名情况
configuration.xsl log4j.properties zoo.cfg
- 修改 zoo.cfg 配置
vi zoo.cfg 将 dataDir=/tmp/zookeeper 更改成 dataDir=/opt/module/zookeeper-3.5.7/data
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/module/zookeeper-3.5.7/data
# the port at which the clients will connect
clientPort=2181
启动测试
进入 zookeeper的bin 目录中
cd /opt/module/zookeeper-3.5.7/bin
[*****@hadoop102 bin]$ ll
总用量 56
-rwxr-xr-x. 1 ***** ***** 232 5月 4 2018 README.txt
-rwxr-xr-x. 1 ***** ***** 2067 2月 7 2020 zkCleanup.sh
-rwxr-xr-x. 1 ***** ***** 1158 2月 10 2020 zkCli.cmd
-rwxr-xr-x. 1 ***** ***** 1621 2月 7 2020 zkCli.sh
-rwxr-xr-x. 1 ***** ***** 1766 2月 7 2020 zkEnv.cmd
-rwxr-xr-x. 1 ***** ***** 3690 1月 31 2020 zkEnv.sh
-rwxr-xr-x. 1 ***** ***** 1286 1月 31 2020 zkServer.cmd
-rwxr-xr-x. 1 ***** ***** 4573 2月 7 2020 zkServer-initialize.sh
-rwxr-xr-x. 1 ***** ***** 9386 2月 7 2020 zkServer.sh
-rwxr-xr-x. 1 ***** ***** 996 10月 3 2019 zkTxnLogToolkit.cmd
-rwxr-xr-x. 1 ***** ***** 1385 2月 7 2020 zkTxnLogToolkit.sh
启动服务
zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看服务状态
sh zkServer.sh status
Mode: standalone 标识单机模式
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
集群配置
额外准备两台服务,按照上面搭建好zookeeper环境。
hadoop103
hadoop104
配置myid
在 data目录中创建一个 myid文件
位于:dataDir=/opt/module/zookeeper-3.5.7/data 目录下
mkdir myid
hadoop102 的myid 配置成2
hadoop103 的myid 配置成3
hadoop104 的myid 配置成4
更改zoo.cf 配置
# 进入 conf 配置目录中
cd /opt/module/zookeeper-3.5.7/conf
# 编辑 zoo.cfg
vi zoo.cfg
# 在文件最后添加如下配置
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
配置参数解读
server.A=B:C:D。
A是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
B是这个服务器的地址;
C是这个服务器Follower与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
免密登录
这里就不讲解了,按照下面配置就行
https://www.cnblogs.com/luckforefforts/p/13797705.html
集群测试
编写集群启动脚本
创建 zkCluster 文件(放在哪里无所谓,根目录就行)
cd ~
vi zkCluster
设置执行权限
chmod u+x zkCluster
脚本内容
#!/bin/bash
# 保证必须其只能有一个参数
if [ $# -ne 1 ];then
echo "args number is error!!! "
exit
fi
#定义一个变量记录 zookeeper 的命令
args=""
case $1 in
"start")
args="start"
;;
"start-foreground")
args="start-foreground"
;;
"stop")
args="stop"
;;
"restart")
args="restart"
;;
"status")
args="status"
;;
"print-cmd")
args="print-cmd"
;;
*)
echo " {start|start-foreground|stop|restart|status|print-cmd}"
exit
;;
esac
# 批量执行服务
for host in hadoop102 hadoop103 hadoop104
do
echo "===================$args================"
# 以及保证了 所有的集群环境环境配置都是一样的,所以就直接写的全路径
ssh $host /opt/module/zookeeper-3.5.7/bin/zkServer.sh $args
done
启动测试 sh zkCluster start
[****@hadoop102 bin]$ sh zkCluster start
start
===================start================
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
===================start================
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
===================start================
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看服务的启动状态 sh zkCluster status
[***@hadoop102 bin]$ sh zkCluster status
status
===================status================
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
===================status================
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
===================status================
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
启动zookeeper的客户端
sh zkCli.sh
使用 quit 退出客户端
zoo.cfg 参数配置详解
tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
dataDir:数据文件目录+数据持久化路径
主要用于保存Zookeeper中的数据。
server.myid=服务ip:2888:3888
服务器集群配置,
myid:每个zookeeper,都必须配置一个唯一的myid
2888:服务器内部通信端口
3888:服务器选举通信端口
clientPort =2181:客户端连接端口
监听客户端连接的端口。