1.上传zookeeper压缩包到linux系统中
2.解压到/app目录
tar -zxvf zookeeper-3.4.5.tar.gz -C app
3.到conf目录下,修改zoo_sample.cfg为zoo.cfg
4.编辑zoo.cfg
4.1 修改本地存储路径
4.2 添加集群机器,端口
5.在新建的data目录中新建myid,内容为1,这个与刚才编辑的server.1向对应
6.把已经安装好的zookeeper复制到node002,node003中,注意修改data下的myid
7.在bin下启动zookeeper ./zkServer.sh start
为什么zkServer.sh start不可以?只能加上./
8.查看zookeeper工作状态 ./zkServer.sh status
因为我们配置3台,只启动1台,少于集群配置的一半,zookeeper就不能工作
9.遇到此时遇到几个问题
1.在把zookeeper文件赋复制到另外两个服务器后,在启动./zkServer.sh start 后,jps查看进程,发现提示command not found
解决办法:从新安装jdk,并且重新配置环境变量
2.Zookeeper启动显示成功,zkServer.sh status报错
解决办法:网上查阅资料,有存在相同问题的朋友已解决,此处引入其解决办如下:
zookeeper-3.4.9 按照指导配置完成后,再zookeeper/bin下执行
./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
再执行 ./zkServer.sh status
hadoop@master:~/bigdata/zk/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
再执行 jps, 根本就没有zookeeper相关进程在运行。也就是说,start 那步显示的STARTED 并不代表真正启动成功。
hadoop@master:~/bigdata/zk/bin$ jps
4128 NameNode
5745 ResourceManager
22914 Jps
19299 SqoopJettyServer
1670 RunJar
22074 Master
5535 SecondaryNameNode
查看 同目录下的日志文件zookeeper.out, 显示 zoo.cfg 配置文件解析错误。
我在zoo.cfg 中只加了下面5行,格式上来说都是对的呀,怎么会有格式错误?
dataDir=/home/hadoop/bigdata/zk/zkdata
dataLogDir=/home/hadoop/bigdata/zk/zkdatalog
server.1=master:2888:3888
server.2=ndh-slave01:2888:3888
server.3=slave02:2888:3888
仔细看了这五行内容,且配置过程中修改过的地方,dataDir/dataLogDir 两个只是目录,肯定是创建过的,不太会出问题。那唯一可能的就是server.X=xxx 那几行。
先注掉试试,再次运行 ./zkServer.sh start, ./zkServer.sh status , jps, zookeeper 进程在运行了,但status 显示是 “Mode: standalone" , 也就是单机模式,虽然模式不对,但至少可以确认是这三行的问题。
回想先前安装过程中,在每台机器的/home/hadoop/bigdata目录下设置过myid 文件,并且要求 myid中的值要与server.X 中设置的X 相一致,难道是这个地方不匹配?
排除格式,字符集等因素后,最后猜测可能是文件路径不对。
仔细比对,注意到 配置时myid文件的/home/hadoop/bigdata目录,zoo.cfg 中dataDir=/home/hadoop/bigdata/zk/zkdata, 没在zookeeper 的有效路径中zookeeper访问不到?
果断把master上的myid 拷贝到/home/hadoop/bigdata/zk/zkdata下,再次执行 ./zkServer.sh start,jps 显示有zookeeper 进程在运行了 ,./zkServer.sh status 显示 "Mode: follower" , 继续在其他两台机器上把myid 拷贝到dataDir路径下,启动zkServer, 终于都正常了。
补充下:要在安装zookeeper的机器上都执行zkServer.sh start,不是只在master上执行,脚本应该优化成只在master上执行一次即可全部启动的方式。否则还是会出现如题的错误。
hadoop@master:~/bigdata/zk/bin$ jps
4128 NameNode
23504 QuorumPeerMain
5745 ResourceManager
19299 SqoopJettyServer
1670 RunJar
22074 Master
23566 Jps
5535 SecondaryNameNode
$ /bin/bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Mode: leader
hadoop@master:~/bigdata/zk/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Mode: follower
附:zoo.cfg 中各配置项的含义和作用:1.tickTime:CS通信心跳数
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=10
3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=5
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
5.dataLogDir:日志文件目录
Zookeeper保存日志文件的目录。
6.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。
下面是一个非伪集群的例子:
server.0=233.34.9.144:2008:6008
server.1=233.34.9.145:2008:6008
server.2=233.34.9.146:2008:6008
下面是一个伪集群的例子:
server.0=127.0.0.1:2008:6008
server.1=127.0.0.1:2007:6007
server.2=127.0.0.1:2006:6006
————————————————
版权声明:本文为CSDN博主「Heavbird」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wqhlmark64/article/details/73250662
来源:oschina
链接:https://my.oschina.net/u/4434424/blog/3191450