1.1. Zookeeper的安裝與使用
ZooKeeper的安裝包括單機模式安裝,以及集群模式安裝。
安裝如果有不懂可以看:
https://blog.csdn.net/lihao21/article/details/51778255
1.1.1. Windows環境下搭建Zookeeper
環境要求:必須要有jdk環境。
(1)安裝jdk
(2)安裝zookeeper,可以在http://zookeeper.apache.org/官網下下載zookeeper。
我下載的是3.3.6版本的zookeeper。
(3)解壓zookeeper后獲取到zookeeper的目錄。
對主要的一些目錄做介紹:
Bin:主要運行的一些腳本
Conf:配置文件的所在地
Lib:zookeeper的jar
(4)啟動zookeeper服務
走到bin目錄下去運行zkServer.cmd,雙擊它,但是出現一閃而退的情況,這是正常的。
到conf目錄下將zoo_sample.cfg復制粘貼命名為zoo.cfg。
並修改其中的內容:
1 # The number of milliseconds of each tick 2 3 tickTime=2000 4 5 # The number of ticks that the initial 6 7 # synchronization phase can take 8 9 initLimit=10 10 11 # The number of ticks that can pass between 12 13 # sending a request and getting an acknowledgement 14 15 syncLimit=5 16 17 # the directory where the snapshot is stored. 18 19 dataDir=C:\\Users\\Dell\\Desktop\\zookeeper\\zookeeper-3.3.6\\zookeeper-3.3.6\\data 20 21 dataDir=C:\\Users\\Dell\\Desktop\\zookeeper\\zookeeper-3.3.6\\zookeeper-3.3.6\\log 22 23 # the port at which the clients will connect 24 25 clientPort=2181
配置文件簡單解析:
1、tickTime:這個時間是作為Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
2、dataDir:顧名思義就是Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
3、dataLogDir:顧名思義就是Zookeeper 保存日志文件的目錄
4、clientPort:這個端口就是客戶端連接Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
好修改完畢后,就可以去啟動zookeeper的服務了。
出現當前界面表示啟動成功。可以去測試一下了。
補充:ZooKeeper的安裝模式分為三種,分別為:單機模式(stand-alone)、集群模式和集群偽分布模式。ZooKeeper 單機模式的安裝相對比較簡單,如果第一次接觸ZooKeeper的話,建議安裝ZooKeeper單機模式或者集群偽分布模式。以上使用的是單機模式
1.1.2. Linux安裝單機版
提示:
單機模式較簡單,是指只部署一個zk進程,客戶端直接與該zk進程進行通信。
在開發測試環境下,通過來說沒有較多的物理資源,因此我們常使用單機模式。當然在單台物理機上也可以部署集群模式,但這會增加單台物理機的資源消耗。故在開發環境中,我們一般使用單機模式。
但是要注意,生產環境下不可用單機模式,這是由於無論從系統可靠性還是讀寫性能,單機模式都不能滿足生產的需求。
環境要求:必須要有jdk環境。當前安裝機器是有jdk1.8的環境了,就不演示jdk的安裝了。
(1)下載zookeeper安裝包zookeeper-3.3.6.tar.gz
(2)上傳到linux上,並將其解壓出來。解壓命令:tar -zxvf zookeeper-3.3.6.tar.gz
解壓后會得到一個zookeeper-3.3.6的目錄。並將去復制到/usr/local目錄下
cp -r zookeeper-3.3.6 zookeeper
(3)進入到/usr/local/zookeeper/conf目錄下,拷貝zoo_samle.cfg為zoo.cfg
cd zookeeper-3.3.6/conf/
cp zoo_sample.cfg zoo.cfg
(4)編輯zoo.cfg文件,修改為:
1 # The number of milliseconds of each tick 2 3 tickTime=2000 4 5 # The number of ticks that the initial 6 7 # synchronization phase can take 8 9 initLimit=10 10 11 # The number of ticks that can pass between 12 13 # sending a request and getting an acknowledgement 14 15 syncLimit=5 16 17 # the directory where the snapshot is stored. 18 19 # 指定數據存放目錄 20 21 dataDir=/usr/zookeeper 22 23 # log 存放目錄 24 25 dataLogDir=/usr/zookeeper/log 26 27 # the port at which the clients will connect 28 29 # 端口號 30 31 clientPort=2181
配置文件簡單解析:
1、tickTime:這個時間是作為Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
2、dataDir:顧名思義就是Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
3、dataLogDir:顧名思義就是Zookeeper 保存日志文件的目錄
4、clientPort:這個端口就是客戶端連接Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
(5)修改環境變量
vim /etc/profile
#指向到zookeeper目錄下
export ZOOKEEPER_INSTALL=/usr/local/zookeeper
export PATH=$ZOOKEEPER_INSTALL/bin:$PATH
source /etc/profile //讓環境變量生效
(6)啟動zookeeper
到bin目錄下
./zkServer.sh start 啟動
./zkServer.sh status 查看狀態,看看是否啟動成功
./zkServer.sh stop 關閉zookeeper服務
(7)好了安裝成功,可以使用客戶端去使用zookeeper了。
連接zookeeper:Zkcli.sh -server 127.0.0.1:2181
1.1.3. Linux集群版安裝
單機模式的zk進程雖然便於開發與測試,但並不適合在生產環境使用。在生產環境下,我們需要使用集群模式來對zk進行部署。
注意 :
在集群模式下,建議至少部署3個zk進程,或者部署奇數個zk進程。如果只部署2個zk進程,當其中一個zk進程掛掉后,剩下的一個進程並不能構成一個quorum的大多數。因此,部署2個進程甚至比單機模式更不可靠,因為2個進程其中一個不可用的可能性比一個進程不可用的可能性還大。
環境要求:
准備三台服務器,每台服務器上必須要有jdk環境。
安裝開始:
(1)上傳zookeeper 壓縮包並且解壓出來。
(2)拷貝conf 目錄下的zoo_samle.cfg文件為zoo.cfg,並修改其中的內容:
tickTime=2000 initLimit=5 syncLimit=2 dataLogDir=/usr/local/zookeeper/logs dataDir=/usr/local/zookeeper/data clientPort=2181 server.1=192.168.100.21:2888:3888 server.2=192.168.100.23:2888:3888 server.3=192.168.100.90:2888:3888
配置說明:
initLimit:
ZooKeeper集群模式下包含多個zk進程,其中一個進程為leader,余下的進程為follower。
當follower最初與leader建立連接時,它們之間會傳輸相當多的數據,尤其是follower的數據落后leader很多。initLimit配置follower與leader之間建立連接后進行同步的最長時間。
syncLimit:
配置follower和leader之間發送消息,請求和應答的最大時間長度。
tickTime:
tickTime則是上述兩個超時配置的基本單位,例如對於initLimit,其配置值為5,說明其超時時間為 2000ms * 5 = 10秒。
server.id=host:port1:port2:
其中id為一個數字,表示zk進程的id,這個id也是dataDir目錄下myid文件的內容。
host是該zk進程所在的IP地址,port1表示follower和leader交換消息所使用的端口,port2表示選舉leader所使用的端口。
dataDir:
其配置的含義跟單機模式下的含義類似,不同的是集群模式下還有一個myid文件。myid文件的內容只有一行,且內容只能為1 - 255之間的數字,這個數字亦即上面介紹server.id中的id,表示zk進程的id。
注意
如果僅為了測試部署集群模式而在同一台機器上部署zk進程,server.id=host:port1:port2配置中的port參數必須不同。但是,為了減少機器宕機的風險,強烈建議在部署集群模式時,將zk進程部署不同的物理機器上面。
(3)進入zoo.cfg文件制定data的目錄下創建myid文件,並寫入值。
這個值是每台服務器上的zookeeper的進程id。都是不同的。
(4)三台服務器分別進行以上操作后。分別在這三台機器上啟動zk進程,這樣我們便將zk集群啟動了起來。
在啟動成功后,可以使用 ./zkServer.sh status 來查看每台服務器是否啟動成功,還可以看到當前zk的進程是leader還是follower。
(5)連接
可以使用以下命令來連接一個zookeeper集群:
bin/zkCli.sh -server 192.168.100.21:2181,192.168.100.23:2181,192.168.100.90:2181
成功連接后,可以看到如下輸出:
1.1.4. 客戶端使用
ZooKeeper命令行工具類似於Linux的shell環境,不過功能肯定不及shell啦,但是使用它我們可以簡單的對ZooKeeper進行訪問,數據創建,數據修改等操作.使用 zkCli.sh -server 127.0.0.1:2181 連接到 ZooKeeper 服務,連接成功后,系統會輸出 ZooKeeper 的相關環境以及配置信息。
命令行工具的一些簡單操作如下:
1. 顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
2. 顯示根目錄下、文件: ls2 / 查看當前節點數據並能看到更新次數等數據
3. 創建文件,並設置初始內容: create /zk "test" 創建一個新的 znode節點“ zk ”以及與它關聯的字符串
4. 獲取文件內容: get /zk 確認 znode 是否包含我們所創建的字符串
5. 修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置
6. 刪除文件: delete /zk 將剛才創建的 znode 刪除
7. 退出客戶端: quit
8. 幫助命令: help