CentOS安裝zookeeper
下載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"