一、ZooKeeper的概述
Zookeeper 是爲分佈式應用程序提供高性能協調服務的工具集合,也是Google的Chubby一個開源的實現,是Hadoop 的分佈式協調服務。它包含一個簡單的原語集,分佈式應用程序可以基於它實現配置維護、命名服務、分佈式同步、組服務等。Zookeeper可以用來保證數據在ZK集羣之間的數據的事務性一致。其中ZooKeeper提供通用的分佈式鎖服務,用以協調分佈式應用。
zk是Apache Hadoop的一個子項目,主要是用來解決分佈式應用中經常遇到的一些數據管理問題。
列舉了一些可能會遇到的場景:
-
命名服務:訂單編號,防止出現訂單號相同。
-
Master選舉:監聽主節點是否掛了,從節點頂上來。
-
集羣管理:註冊中心
-
配置管理:
-
分佈式隊列:
-
分佈式鎖:
二、目錄結構介紹
三、配置文件
序號 |
參數名 |
說明 |
1 |
clientPort |
客戶端連接server的端口,即對外服務端口,一般設置爲2181吧。 |
2 |
dataDir |
存儲快照文件snapshot的目錄。默認情況下,事務日誌也會存儲在這裏。建議同時配置參數dataLogDir, 事務日誌的寫性能直接影響zk性能。 |
3 |
tickTime |
ZK中的一個時間單元。ZK中所有時間都是以這個時間單元爲基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。 |
4 |
dataLogDir |
事務日誌輸出目錄。儘量給事務日誌的輸出配置單獨的磁盤或是掛載點,這將極大的提升ZK性能。(No Java system property) |
5 |
globalOutstandingLimit |
最大請求堆積數。默認是1000。ZK運行的時候, 儘管server已經沒有空閒來處理更多的客戶端請求了,但是還是允許客戶端將請求提交到服務器上來,以提高吞吐性能。當然,爲了防止Server內存溢出,這個請求堆積數還是需要限制下。(Java system property: zookeeper.globalOutstandingLimit.) |
6 |
preAllocSize |
預先開闢磁盤空間,用於後續寫入事務日誌。默認是64M,每個事務日誌大小就是64M。如果ZK的快照頻率較大的話,建議適當減小這個參數。(Java system property: zookeeper.preAllocSize) |
四、ZK安裝
我的在centos7系統上操作的
1、首先下載安裝包
官網下載地址:http://mirrors.hust.edu.cn/apache/zookeeper/
2、解壓安裝包
tar -xzvf apache-zookeeper-3.5.5-bin.tar.gz
3、創建zookeeper目錄
mkdir zookper
然後進入zookper目錄下創建zk1 zk2 zk3 目錄,用於存放三個zk
cd zookpermkdir zookper
mkdir zk1
mkdir zk2
mkdir zk3
4、解壓文件放置到 zk1 zk2 zk3 下
cp -rf /usr/local/apache-zookeeper-3.5.5-bin/* /usr/local/zookeeper/zk1
cp -rf /usr/local/apache-zookeeper-3.5.5-bin/* /usr/local/zookeeper/zk2
cp -rf /usr/local/apache-zookeeper-3.5.5-bin/* /usr/local/zookeeper/zk3
5、創建 zoo.cnf
cd /usr/local/zookeeper/zk1
cp zoo_sample.cfg zoo.cfg
6、修改配置文件,如下
# 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=/usr/local/zookeeper/zk1/data
# the port at which the clients will connect
clientPort=20181 # 客戶端端口號
# 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
#
quorumListenOnAllIpds=true
# 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
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
7、設置myid
dataDir=/usr/local/zookeeper/zk1/data
在配置文件設置的dataDir目錄下設置myid
echo 1 > myid
echo 2 > myid
echo 3 > myid
然後分別啓動
/usr/local/zookeeper/zk1/bin/zkServer.sh start
/usr/local/zookeeper/zk2/bin/zkServer.sh start
/usr/local/zookeeper/zk3/bin/zkServer.sh start
8、啓動出現問題
a、檢查配置文件,各個目錄是否正確,是否在對應目錄設置了myid
b、檢查防火牆是否開啓
五、ZK基本命令
# 啓動
/usr/local/zookeeper/zk1/bin/zkServer.sh start
# 查看狀態 leader 主 follower 從
/usr/local/zookeeper/zk1/bin/zkServer.sh status
# 關閉
/usr/local/zookeeper/zk1/bin/zkServer.sh stop
# 進入客戶端
/usr/local/zookeeper/zk1/bin/zkCli.sh -server {host}:2181