zookeeper环境搭建
1.在线下载zookeeper
先在/var/local下创建个zookeeper文件夹
/var/local/zookeeper
wget wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
然后解压 tar -zxvf /var/local/zookeeper/zookeeper-3.4.11.tar.gz
再进入zookeeper-3.4.11目录的conf下拷贝zoo_sample.cfg复制为zoo.cfg
然后修改zoo.cfg里面的数据
dataDir=/tmp/zookeeper
【dataDir这个路径下需要构造myid】
注意:
dataDir和dataLogDir后面所指的文件夹必须要存在如果不存在的话,在启动Zookeeper服务端的时候是会报错的。
本文讲的是单机情况下的配置情况,如果你是集群的话,请在clientPort下面添加服务器的ip。
如
server.1=192.168.180.132:2888:3888
server.2=192.168.180.133:2888:3888
配置环境变量
上面的操作都完事之后,我们需要配置一下环境变量,配置环境变量的命令如下:
export ZOOKEEPER_INSTALL=/usr/local/zookeeper/zookeeper-3.3.6/(Zookeeper所在的目录) export PATH=$PATH:$ZOOKEEPER_INSTALL/bin
启动Zookeeper
在上面的操作都完事之后,我们需要来启动一下Zookeeper来检测下我们的成果了。
首先我们进入到Zookeeper的bin目录下面,启动Zookeeper的命令为
./zkServer.sh start
一定不要忘了前面的 . ,启动效果如图所示:
我们可以通过
./zkServer.sh status
命令来查看Zookeeper的运行状态。如图所示:
或者我们也可以用
ps -ef|grep zookeeper
来查看Zookeeper的运行状态:
注意:如果你发现Zookeeper不是在运行状态的话,可以通过cat zookeeper.out来查看启动过程中的出错信息。
zookeeper的服务端起来之后我们需要启动Zookeeper的客户端,启动命令如下:
./zkCli.sh
启动结果如下所示:
搭建环境过程遇到的问题:
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
说明未启动成功,通过查看zookeeper-3.4.5.out,如果提示
Cannot open channel to 1 at election address hadoop05/10.37.129.105:3888
java.net.NoRouteToHostException: No route to host,说明无法连接远程电脑10.37.129.105:3888,很有可能开启了防火墙
通过sudo service iptables status检查,如果确实开启,则通过sudo service iptables stop将其关闭,最后再查看状态zkServer.sh status
此时,基本都能够正常启动了,提示:
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader(或follower)
解决方法2:
ps -ef|grep zookeeper
只显示2个节点。没有第三个节点。
1.查看 zookeeper.out日志文件
java.net.BindException: Address already in use ---- 进程被占用
以为是server进程被占用,于是把重点放在了server,却忽略了客户端进程。结果发现第三个节点的
修改配置文件里的端口号,然后重新启动,问题就解决了
每次如果重启失败,可以去dataDir=/tmp/zookeeper这个目录下,把zookeeper_server.pid这个文件给删除了,然后重新启动
zookeeper启动成功,但是zkCli.sh进入客户端报错
排查原因:由于conf下的zoo.cfg配置文件中的端口号错误,不是2181【原先是2182】
ZooKeeperMain进程,是zkCli.sh的进程,需要进入客户端里面quit退出,该进程才会被停止掉