前话:
1.1什么是ZooKeeper&我们用它干什么?
谈到分布式集群,就离不开节点管理,而ZooKeeper主要服务于分布式系统,可以用ZooKeeper来做节点的统一配置管理、统一命名服务、分布式锁、集群管理,在其中承担协调管理者的身份。现在越来越多的分布式系统都将ZooKeeper作为核心组件使用,比如Hadoop、HBase、Kafka等。
1.2题外话:
注意虚拟机的磁盘情况,以防范磁盘爆满的情况。硬盘容量太小会造成虚拟机打不开的情况,比如稍微执行一些操作,硬盘可用度都会爆满,操作hbase时尤为严重,所以如果太小建议先扩容。
zookeeper搭建需要安装jdk,因为zookeeper基于JVM运行,且版本要求在1.8及以上。
正篇:
步骤概述:
获取zookeeper安装包,上传至虚拟机解压,修改配置文件,创建相关目录,分发配置文件至其他机器,创建选举文件,修改环境变量并分发,启动zookeeper,查看客户端状态。
具体步骤:
2.1获取并解压安装包
2.1.1获取自己需要的相应版本的zookeeper安装包:
(1)学习通获取:
(2)官网获取:Apache ZooKeeperhttps://zookeeper.apache.org/releases.html
2.1.2上传解压
我这里是3.5.7版本,上传至/opt/software
在当前目录解压压缩包至指定路径
[tar 解压命令; -zxvf 解压缩参数, 根据包名的后缀而定; -C 指定路径]
#压缩包的名字要保证无误,与压缩包名无差
[root@hadoop1 software]# tar zxvf apache-zookeeper-3.5.gz -C /opt/module/
查看是否解压成功
这里为方便起见,将解压出来的安装包名改为“zookeeper”
[root@hadoop1 module]# mv apache-zookeeper-3.5.gz zookeeper
2.2修改配置文件
cd到目标文件所在路径
[root@hadoop1 software]#cd /opt/module/zookeeper/conf
为防止操作失误导致源文件丢失,我们预先创建目标文件,并将其更名为“zoo.cfg”
#复制并更名
[root@hadoop1 conf]# cp zoo_sample.cfg zoo.cfg
[root@hadoop1 conf]# ls
修改zoo.cfg文件配置:
主机名以自己为准,server编号指向对应的三台虚拟机(节点),同时也和myid对应起来
2.3创建相关数据存放目录
2.3.1创建以上文件配置的对应目录
data:存储zookeeper工作所产生的数据文件
logs:存储zookeeper工作日志
[root@hadoop1 zookeeper]# mkdir data
[root@hadoop1 zookeeper]# mkdir logs
2.4分发配置文件和创建myid文件
2.4.1分发配置文件
创建完数据存储目录后在进行分发文件,将安装包zookeeper分发给其他两台机器
#可以使用xsync命令,也可以使用scp(secure copy)远程拷贝命令,跨服务器拷贝文件
[root@hadoop1 module]# scp -r /opt/module/zookeeper hadoop2:/opt/module
[root@hadoop1 module]# scp -r /opt/module/zookeeper hadoop3:/opt/module
hadoop2分发成功
hadoop3分发成功
2.4.2创建myid文件
在每台机器上分别创建myid,这里以Hadoop1为例
[root@hadoop1 data]# touch myid
[root@hadoop1 data]# ls
编辑三台机器myid,里边填写一个编号用于选举(与你的zoo.cfg中的server数字相对应)
[root@hadoop1 data]# vi myid
[root@hadoop2 data]# vi myid
[root@hadoop3 data]# vi myid
以Hadoop3为例,编辑成功
2.5修改环境变量并进行分发
原因:搭建环境变量后,可以在当前用户的任何目录下执行zkServer.sh start,能更好的运行程序。
而不进行环境变量的修改zookeeper的启动方式:必须进入bin目录下执行./zkServer.sh start。
为环境变量文件增加如下代码:
#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
分发并覆盖更新环境变量文件至hadoop2、hadoop3
#分发至hadoop2 hadoop3
#分发命令选择:xsync或scp
[root@hadoop1 /]# scp /etc/profile.d/my_env.sh hadoop2:/etc/profile.d/
[root@hadoop1 /]# scp /etc/profile.d/my_env.sh hadoop3:/etc/profile.d/
分别在每台机器上执行命令使环境变量生效
[root@hadoop1 /]# source /etc/profile.d/my_env.sh
[root@hadoop2 /]# source /etc/profile.d/my_env.sh
[root@hadoop3 /]# source /etc/profile.d/my_env.sh
2.6启动Zookeeper查看客户端状态
2.6.1启动集群
cd到zookeeper目录下进行zookeeper集群启动
[root@hadoop1 zookeeper]# bin/zkServer.sh start
[root@hadoop2 zookeeper]# bin/zkServer.sh start
[root@hadoop3 zookeeper]# bin/zkServer.sh start
2.6.2查看状态
[root@hadoop1 zookeeper]# bin/zkServer.sh status
[root@hadoop2 zookeeper]# bin/zkServer.sh status
[root@hadoop3 zookeeper]# bin/zkServer.sh status
server状态显示
三台机器进程均显示“QuorumPeerMain”即代表zookeeper启动成功
[root@hadoop1 zookeeper]# jps
84306 NameNode
84468 DataNode
87048 QuorumPeerMain
95661 Jps
85775 NodeManager
[root@hadoop2 zookeeper]# jps
85216 NodeManager
96976 Jps
83927 DataNode
87304 QuorumPeerMain
85035 ResourceManager
[root@hadoop3 zookeeper]# jps
97184 Jps
83925 DataNode
85064 NodeManager
84074 SecondaryNameNode
87439 QuorumPeerMain