ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
ZooKeeper的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
ZooKeeper包含一個簡單的原語集,提供Java和C的接口。
ZooKeeper代碼版本中,提供了分布式獨享鎖、選舉、隊列的接口,代碼在zookeeper-3.4.8\src\recipes。其中分布鎖和隊列有Java和C兩個版本,選舉只有Java版本。
先去官網下載鏡像,這里下載的是3.4.8版本
把下載的文件解壓到指定目錄下 D:\zookeeper-3.4.8
修改zoo_sample.cfg 文件名(D:\soft\zookeeper-3.4.8\conf) 為 zoo.cfg
主要修改一下日志位置,其他默認不變。在zookeeoer下新建data文件夾和log文件夾。具體配置文件如下:
# 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=D:\zookeeper-3.4.8\data
#log location
dataLogDir=D:\zookeeper-3.4.8\log
# 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
1、tickTime:這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
2、dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
3、dataLogDir:顧名思義就是 Zookeeper 保存日志文件的目錄
4、clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
啟動
進入到zookeeper的bin目錄,并且啟動zkServer.cmd,這個腳本中會啟動一個java進程
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一個顯示當前所有java進程pid的命令,簡單實用,非常適合在linux/unix平臺上簡單察看當前java進程的一些簡單情況。
我想很多人都是用過unix系統里的ps命令,這個命令主要是用來顯示當前系統的進程情況,有哪些進程,及其 id。 jps 也是一樣,它的作用是顯示當前系統的java進程情況,及其id號。我們可以通過它來查看我們到底啟動了幾個java進程(因為每一個java程序都會獨占一個java虛擬機實例),和他們的進程號(為下面幾個程序做準備),并可通過opt來查看這些進程的詳細啟動參數。
使用方法:在當前命令行下打 jps(需要JAVA_HOME,沒有的話,到改程序的目錄下打) 。
連接成功如圖:
這樣 zookeeper就安裝好了
下一節,講如何使用以及如何配置!
ZooKeeper 是分布式應用程序的高性能協調服務。它在一個簡單的界面中公開了常用服務,例如命名、配置管理、同步和組服務,因此可以不必從頭開始編寫它們??梢袁F成地使用它來實現共識、組管理、領導者選舉和存在協議,也可以根據自己的特定需求在此基礎上進行構建。
可以在Zookeper官網下載頁下載zookeeper,這里有最新的zk發布包。 我這里下載的是3.6.3版本,是截止到這篇博文發布前最穩定版本,下載鏈接為https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
zookeeper的啟動命令都在bin目錄下,進入bin目錄下,*.cmd是Windows版本的命令,*.sh 是Linux的命令。 找到zkServer.cmd,
雙擊啟動,看到如下窗口,不閃退,不報錯就是啟動成功了
也可以通過,雙擊客戶端zkCli.cmd批處理命令來驗證server是否啟動成功??吹饺缦录t框的內容則server啟動成功
或者在配置文件中開啟日志審核功能,audit.enable=true 在根目錄下的logs文件夾下找到zookeeper_audit.log文件,看到如下結果則server啟動成功
審核日志是3.6.0 中的新功能:默認情況下禁用審核日志。設置為“true”以啟用它,有關日志審核可以查看https://zookeeper.apache.org/doc/r3.6.3/zookeeperAuditLogs.html
這樣,單機版就完成了。
集群版就像對麻煩一點了,這里的集群還是偽集群,真正實現集群的操作跟單機版的偽集群差不多,只不過是操作不同的服務器而已。 步驟如下:
# 集群配置
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
配置介紹: 集群配置節點是server.id=host:port1:port2形式, id:分配給host的id,需要在myid文件中指定,id 必須介于 1 和 254 之間 host:zookeeper所在服務器的IP port1:Zookeeper服務器之間的通信端口 port2:Leader選舉的端口 從 ZooKeeper 3.6.0 開始,可以為每個 ZooKeeper 服務器 指定多個地址 形如:
server.1=zoo1-net1:2888:3888|zoo1-net2:2889:3889
server.2=zoo2-net1:2888:3888|zoo2-net2:2889:3889
server.3=zoo3-net1:2888:3888|zoo3-net2:2889:3889
配置文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/zookeeper/zookeeper-3.6.3/data
dataLogDir=D:/zookeeper/zookeeper-3.6.3/logs
clientPort=2181
maxClientCnxns=60
# 嵌入式 Jetty 服務器監聽的端口。默認為 8080
admin.serverPort=8081
messageTracker.Enabled=true
# 日志審核
audit.enable=true
# 集群配置
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
2022-02-10 16:55:41,612 [myid:1] - INFO [QuorumPeer[myid=1](plain=[0:0:0:0:0:0:0:0]:2181)(secure=disabled):QuorumPeer@864] - Peer state changed: following - broadcast
2022-02-10 16:55:49,084 [myid:3] - INFO [QuorumPeer[myid=3](plain=[0:0:0:0:0:0:0:0]:2183)(secure=disabled):QuorumPeer@864] - Peer state changed: following - broadcast
或者
2022-02-10 16:55:41,611 [myid:2] - INFO [QuorumPeer[myid=2](plain=[0:0:0:0:0:0:0:0]:2182)(secure=disabled):QuorumPeer@864] - Peer state changed: leading - broadcast
可以看到三個zookeeper服務器,一個leader,兩個following。
更多配置請查看官網
能力一般,水平有限,如有錯誤,請多指出。 如果對你有用點個關注給個贊唄 更多文章可以關注一下我的微信公眾號suncodernote