在上一篇博客中,我们已经完成了Hadoop的完全分布式集群安装,在这篇博客中,我们将进行Zookeeper的安装。我们先来说说,为什么需要安装Zookeeper。就拿我之前创建的3台机器来说,dm-1(master),dm-2(slave1),dm-3(slave2),其中只有一台master,如果集群在运行时,slave1出现机器故障,问题不大,毕竟还有slave2,只是系统资源有些吃紧,但如果是master出现差错,那这个集群基本要停止工作。Zookeeper的设计就可以很好地解决这个问题,通过选择leader和follower,来进行集群资源的有效分配,当master出错时,会选择一个合适的节点作为leader让集群能够有效地继续工作下去。当然,这只是我们需要Zookeeper的一个方面,Zookeeper还有许多方面的优点,比如,集群中的每一台机器都是独立的,他们之间执行任务很有可能会出现,你等我我等你这种现象,导致任务的完成被延迟或者无限期,而Zookeeper可以很好地调度资源,避免这种情况的发生。下面开始正式介绍该如何进行Zookeeper的分布式安装。
下载zookeeper压缩包
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
如果读者已经自己安装好了zookeeper,一定要注意名字里是否包含了bin,没有包括bin的是源码,需要编译的。
解压安装
sudo tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /usr/local/
sudo mv ./apache-zookeeper-3.5.7-bin zookeeper
修改配置文件
sudo cp zoo_sample.cfg zoo.cfg
sudo vim zoo.cfg
cd /usr/local/zookeeper/
sudo mkdir zkData
添加环境变量
sudo vim ~/.bashrc
#export ZOOKEEPER_HOME=/usr/local/zookeeper
#export PATH=$PATH:$ZOOKEEPER_HOME/bin
source ~/.bashrc
zkServer.sh start
报错显示权限不够,我们给文件夹提升权限
sudo chown -R dm-1 ./zookeeper
zkServer.sh start
运行成功。
文件分发
zkServer.sh stop
scp -r /usr/local/zookeeper dm-2:/usr/local
报错说没有权限
sudo chmod 777 /usr/local/zookeeper #root超级用户下
cd /usr
sudo chmod 777 local
scp -r /usr/local/zookeeper dm-2:/usr/local
scp -r /usr/local/zookeeper dm-3:/usr/local
集群配置文件
cd /usr/local/zookeeper/zkData/
sudo touch myid
sudo vim myid
sudo scp -r ./myid dm-1@dm-3:/usr/local/zookeeper/zkData/
sudo scp -r ./myid dm-1@dm-2:/usr/local/zookeeper/zkData/
从机修改配置文件
sudo vim zoo.cfg
sudo scp -r ./zoo.cfg dm-1@dm-2:/usr/local/zookeeper/conf
sudo scp -r ./zoo.cfg dm-1@dm-3:/usr/local/zookeeper/conf
分别启动zookeeper
dm-2和dm-3需要配置环境变量
故障情况测试
按照我们之前在myid文件里设置的数字,这里本来应该是dm-1为leader,但因为dm-1的2181端口被占用,临时选举dm-3为leader