ZooKeeper-安裝


下載

下載地址 zookeeper,建議下載 bin 結尾的tar包。

在 readme.md 中可以看到

apache-zookeeper-[version].tar.gz

        Contains all the source files which can be built by running:
        mvn clean install

        To generate an aggregated apidocs for zookeeper-server and zookeeper-jute:
        mvn javadoc:aggregate
        (generated files will be at target/site/apidocs)

apache-zookeeper-[version]-bin.tar.gz

        Contains all the jar files required to run ZooKeeper
        Full documentation can also be found in the docs folder

不以 bin 結尾的需要 mvn clean install,我試過這個 tar 包,麻煩...

 

單機安裝

解壓 tar 包

進入 zookeeper 目錄,建立 data 文件夾

進入conf,修改配置文件

初始的配置文件是 zoo_sample.cfg,zookeeper 默認使用 zoo.cfg,可以新建一個 zoo.cfg,也可以把 zoo_sample cp 成 zoo

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/kafka/apache-zookeeper-3.5.5-bin/data
clientPort=2181

tickTime:zk 服務器之間或者客戶端與服務器之間心跳的時間間隔,毫秒

initLimit:

dataDir:zk 數據存儲路徑

clientPort:zk 服務器監聽的端口

 

配置完成,就可以啟動服務器了,正常情況下輸出如下

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/kafka/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

但是上面並不能說明服務器已經啟動,可以查看服務器狀態

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/kafka/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

我們發現並未成功啟動。

 

此時,需要查看日志

打開日志,可以看到 Error,提示 連不上 8080 端口,我想到是不是 8080 被占用了,查了一下果然

netstat -anp | grep 8080

結束該進程,重新啟動服務器,OK了

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/kafka/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[root@localhost apache
-zookeeper-3.5.5-bin]# bin/zkServer.sh status /usr/bin/java ZooKeeper JMX enabled by default Using config: /usr/local/kafka/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: standalone

輸出如上代表啟動成功

 

停止服務器

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/kafka/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

 

思考 zookeeper 在哪里用到 8080 端口了呢?在 AdminServe 中找到了這個配置

<ul>
  <li><p><em>admin.enableServer</em> : (Java system property: <strong>zookeeper.admin.enableServer</strong>) Set to "false" to disable the AdminServer. By default the AdminServer is enabled.</p></li>
  <li><p><em>admin.serverAddress</em> : (Java system property: <strong>zookeeper.admin.serverAddress</strong>) The address the embedded Jetty server listens on. Defaults to 0.0.0.0.</p></li>
  <li><p><em>admin.serverPort</em> : (Java system property: <strong>zookeeper.admin.serverPort</strong>) The port the embedded Jetty server listens on. Defaults to 8080.</p></li>
  <li><p><em>admin.idleTimeout</em> : (Java system property: <strong>zookeeper.admin.idleTimeout</strong>) Set the maximum idle time in milliseconds that a connection can wait before sending or receiving data. Defaults to 30000 ms.</p></li>
  <li><p><em>admin.commandURL</em> : (Java system property: <strong>zookeeper.admin.commandURL</strong>) The URL for listing and issuing commands relative to the root URL. Defaults to "/commands".</p></li>
</ul>

解決這個問題的方法有三種:

1. 修改端口

兩種方式:啟動時增加配置項  -Dzookeeper.admin.serverPort=你的端口號;在 zoo.cfg 中增加配置 admin.serverPort=沒有被占用的端口號

2. 刪除 jetty

3. 停用這個服務,在啟動時增加配置項 -Dzookeeper.admin.enableServer=false

 

服務器啟動后,就可以啟動客戶端進程測試了

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkCli.sh

出現如下界面

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

 

輸入 help 查看命令

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    addauth scheme auth
    close 
    config [-c] [-w] [-s]
    connect host:port
    create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    delete [-v version] path
    deleteall path
    delquota [-n|-b] path
    get [-s] [-w] path
    getAcl [-s] path
    history 
    listquota path
    ls [-s] [-w] [-R] path
    ls2 path [watch]
    printwatches on|off
    quit 
    reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
    redo cmdno
    removewatches path [-c|-d|-a] [-l]
    rmr path
    set [-s] [-v version] path data
    setAcl [-s] [-v version] [-R] path acl
    setquota -n|-b val path
    stat [-w] path
    sync path

 

創建節點,賦值,取值,刪除,查看根節點

[zk: localhost:2181(CONNECTED) 17] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 18] create /mykey1
Created /mykey1
[zk: localhost:2181(CONNECTED) 19] create /mykey2
Created /mykey2
[zk: localhost:2181(CONNECTED) 20] set /mykey1 3
[zk: localhost:2181(CONNECTED) 21] get /mykey1
3
[zk: localhost:2181(CONNECTED) 22] ls /
[mykey1, mykey2, zookeeper]
[zk: localhost:2181(CONNECTED) 23] delete /mykey1
[zk: localhost:2181(CONNECTED) 24] ls /
[mykey2, zookeeper]

 

如果啟動了多個 zk 服務,啟動客戶端時需要指定 啟動哪個

bin/zkCli.sh -server localhost:2191

關閉服務 quit 

 

集群安裝

由於只有一台服務器,本次安裝偽分布式集群,與分布式安裝過程雷同。

偽集群是指用一台服務器的多個端口模擬多台服務器,用多個配置文件啟動多個 zookeeper 實例。

與集群安裝不同點

1. 由於在一台服務器上,zookeeper 服務器監聽的端口不能相同,即 clientPort 不相同,而集群可以相同

2. 數據存儲路徑不同,即 dataDir 不相同;也有必要把 dataLogDir 啟動日志分開存儲,當然 log 路徑相同也可以

3. server.x 與 myid :server.x 中的 x 等於 myid 文件里的數字                    【這兩個在單個服務器安裝中是沒有的】

  // myid 文件中只寫了一個數字,代表該節點在集群中的角色 id,myid 文件需要手動創建 

  // server.x 對應服務器 IP 和端口,同一台服務器上需要連兩個端口,且不同 server 端口不能相同

 

安裝過程

以3個節點為例

第一步,新建3個配置文件 zoo1.cfg, zoo2.cfg, zoo3.cfg

zoo1.cfg 配置如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zk1/data
clientPort=2182
dataLogDir=/usr/local/zookeeper/zk1/logs

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

其中3個配置文件的 dataDir 不能相同,dataLogDir 也不要相同;

后面的 server.x 必須寫,3個配置文件一樣;

 

第二步,建立 dataDir 和 dataLogDir 對應的路徑

第三步,在每個 dataDir 下創建 myid 文件,並寫入一個數字,對應 server.x 中的 x    【注意必須把每個服務的 myid 都先寫好,不能寫一個啟動一個】

第四步,啟動 zookeeper 服務,每個服務指定不同的配置文件

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkServer.sh start conf/zoo1.cfg 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: conf/zoo1.cfg
Starting zookeeper ... STARTED
[root@localhost apache
-zookeeper-3.5.5-bin]# bin/zkServer.sh status conf/zoo1.cfg /usr/bin/java ZooKeeper JMX enabled by default Using config: conf/zoo1.cfg Client port found: 2191. Client address: localhost. Error contacting service. It is probably not running.

啟動第一個 zookeeper 服務時,發生錯誤了,這其實是正常現象

因為 zookeeper 服務的每個實例都擁有全局配置信息,他們在啟動時會隨時隨地選舉 leader,也就是 要與其他 zookeeper 實例進行通信,而此時其他的 zookeeper 服務還沒啟動,自然無法通信,故報錯

此時我們忽略此錯誤,直接把 3 個服務全部啟動

然后檢查狀態,發現一切正常了。

[root@localhost apache-zookeeper-3.5.5-bin]# bin/zkServer.sh status conf/zoo1.cfg 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: conf/zoo1.cfg
Client port found: 2191. Client address: localhost.
Mode: follower
[root@localhost apache
-zookeeper-3.5.5-bin]# bin/zkServer.sh status conf/zoo2.cfg /usr/bin/java ZooKeeper JMX enabled by default Using config: conf/zoo2.cfg Client port found: 2192. Client address: localhost. Mode: leader

並且顯示了 主從關系。

 

 

 

參考資料:

https://blog.csdn.net/qq_27868061/article/details/91383759  zookeeper3.5.5安裝

https://www.jianshu.com/p/f6c96b2d4b6a  centos7 zookeeper3.5.5 安裝

https://www.cnblogs.com/crazylqy/p/7119030.html  安裝zookeeper(單機,偽集群)

https://www.cnblogs.com/songfayuan/articles/7290175.html  ZooKeeper啟動占用8080端口

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM