下载zookeeper
根据自己的需求下载相应的版本,zookeeper链接:https://archive.apache.org/dist/zookeeper/
解压缩 zookeeper-X.tar.gz:
tar -zxvf zookeeper-X.tar.gz
进入到 zookeeper-X/conf 目录中:
cd zookeeper-X/conf/
复制 zoo_sample.cfg 文件的并命名为为 zoo.cfg:
cp zoo_sample.cfg zoo.cfg
用 vim 打开 zoo.cfg 文件修改配置:
vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# dataDir数据目录
dataDir=/usr/zookeeper/zookeeper/data
# netty服务端口,默认8080,可能会与本机的tomcat端口冲突,导致无法启动
admin.serverPort=8081
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
保存并关闭 zoo.cfg 文件
用 vim 修改 /etc/ 目录下的配置文件 profile:
vi /etc/profile
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH
保存profile后,使 /etc/ 目录下的 profile 文件即可生效:
source /etc/profile
启动 zookeeper 服务:
zkServer.sh start
如打印如下信息则表明启动成功:
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-X/bin/…/conf/zoo.cfg
Starting zookeeper … STARTED
查询 zookeeper 状态:
zkServer.sh status
关闭 zookeeper 服务:
zkServer.sh stop
如打印如下信息则表明成功关闭:
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-X/bin/…/conf/zoo.cfg
Stopping zookeeper … STOPPED
遇到的问题
我在启动的时候发生错误
zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-X/bin/…/conf/zoo.cfg
Starting zookeeper … FAILED TO START
找到日志文件查看错误:
Unable to start AdminServer, exiting abnormally
org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on port 8080, command URL /commands
at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:89)
at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:123)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:99)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:57)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:125)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:181)
at org.mortbay.jetty.bio.SocketConnector.newServerSocket(SocketConnector.java:80)
at org.mortbay.jetty.bio.SocketConnector.open(SocketConnector.java:73)
at org.mortbay.jetty.AbstractConnector.doStart(AbstractConnector.java:283)
at org.mortbay.jetty.bio.SocketConnector.doStart(SocketConnector.java:147)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.Server.doStart(Server.java:235)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:85)
... 5 more
Address already in use是由于端口占用。我的服务器中的tomcat使用了8080端口,而我的zookeeper版本通过jetty启动,默认也使用8080 端口,因此发生端口冲突,启动失败。
查看zookeeper的官方文档,有三种解决方案:
(1)删除jetty。
(2)修改端口。
修改方法的方法有两种,一种是在启动脚本中增加 -Dzookeeper.admin.serverPort=未使用的端口号.一种是在zoo.cfg中增加admin.serverPort=未使用的端口号,我是通过第二种方法,便启动成功了。
(3)停用这个服务,在启动脚本中增加"-Dzookeeper.admin.enableServer=false"