1. Zookeeper概念简介
Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
- zookeeper是为别的分布式程序服务的
- Zookeeper**本身就是一个分布式程序**(只要有半数以上节点存活,zk就能正常服务,zookeeper适合装在奇数台机器上!!!)
- Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
- 虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
- 管理(存储,读取)用户程序提交的数据;
- 并为用户程序提供数据节点监听服务;
2. Zookeeper的安装
2.1 Linux下新增用户
输入命令:
新增用户:useradd 用户名
设置密码:passwd 用户名
切换用户:su 用户名
2.2 Zookeeper的安装
注意:本次安装是安装到3台虚拟机上,还要安装好JDK
首先将Zookeeper的包上传并解压tar -zxvf zookeeper-3.4.5.tar.gz
这里我将Zookeeper解压到/home/hadoop/
文件夹下 ,将路径添加到环境变量中vi /etc/profile
:
添加内容
export ZOOKEEPER_HOME=/home/hadoop/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
然后重新编译文件source /etc/profile
然后修改Zookeeper的配置文件:
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
在这里添加内容:
dataDir=/home/hadoop/zookeeper/data
dataLogDir=/home/hadoop/zookeeper/log
server.1=zkmini1:2888:3888 (主机名, 心跳端口、数据端口)
server.2=zkmini2:2888:3888
server.3=zkmini3:2888:3888
括号中的注释要去掉。。。。。。。。。。
之后继续创建我们设置了但是并没有的文件夹:
cd /home/hadoop/zookeeper/
mkdir -m 755 data
mkdir -m 755 log
之后在data文件夹下新建myid文件vi data/myid
,myid的文件内容为:1,这代表当前主机的id号,同理在其他两台机器上则为2、3
最后就可以将配置好的Zookeeper文件夹发送到其他机器上了:
scp -r /home/hadoop/zookeeper hadoop@zkmini2:/home/hadoop/
scp -r /home/hadoop/zookeeper hadoop@zkmini3:/home/hadoop/
然后其他两台机器上,vi zookeeper/data/myid
将其id改为2和3。
最最后烧柱高香,就开心的启动Zookeeper吧:zkServer.sh start
(配置了/etc/profile 就可以直接执行zkServer.sh,否则就是/home/hadoop/zookeeper/bin/zkServer.sh start
),每台机器都要启动的哦!
最最最后可以用jps
或者zkServer.sh status
查看是否安装成功
问题1:注意这里如果出现:
还是能正常启动,原因是/home/hadoop/zookeeper/conf/zoo.cfg
文件中还有dataDir、dataLogDir参数,注释掉就可以了。
问题2:“啊,我三台机器都启动成功了,但是我查看zkServer.sh有问题啊。”
那么你的问题可能出现在防火墙把端口过滤了,你要么添加规则,要么关掉防火墙,
我选择后者service iptables stop
这就OK拉
这里三台机器的话我们还可以一台一台的启动Zookeeper,但是随着业务量增加,我们可能会有很多的服务器需要启动Zookeeper,这里我们就可以通过脚本来启动
ssh免密登陆
关于ssh免密登陆网上就有很多教程了,我这里就简单描述一下:
首先生成密钥:ssh keygen
(中间会有几次问询,不清楚就按回车就可以了)
之后将公钥传到其他机器上就可以了(不要忘了传到自己机器上,我这里有三台机器zkmini1、zkmini2、zkmini3),命令ssh-copy-id zkmini1
…..
制作全启动脚本
#!/bin/bash
echo "start zkServer..."
for i in 1 2 3
do
ssh zkmini$i "source /etc/profile;zkServer.sh start"
done
然后给文件加上可执行权限chmod +x bin/zkstart-all.sh
,最后执行就可以了哈./bin/zkstart-all.sh
这就OK拉!