由多個計算機組成解決同一個問題的系統,提升業務的併發,解決高併發問題。java
1.定義node
Zookeeper是一個高性能,分佈式的,開源分佈式應用協調服務。所謂的分佈式協調服務,就是在集羣的節點中進行可靠的消息傳遞,來協調集羣的工做。apache
Zookeeper之因此可以實現分佈式協調服務,靠的就是它可以保證分佈式數據一致性。所謂的分佈式數據一致性,指的就是能夠在集羣中保證數據傳遞的一致性。bash
Zookeeper可以提供的分佈式協調服務包括:數據發佈訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、分佈式鎖、分佈式隊列等功能服務器
2.應用場景併發
Zookeeper工做在集羣中,對集羣提供分佈式協調服務,它提供的分佈式協調服務具備以下的特色:負載均衡
從同一個客戶端發起的事務請求,最終將會嚴格按照其發起順序被應用到zookeeper中分佈式
全部事務請求的處理結果在整個集羣中全部機器上的應用狀況是一致的高併發
不管客戶端鏈接的是哪一個zookeeper服務器,其看到的服務端數據模型都是一致的。性能
一旦服務端成功的應用了一個事務,並完成對客戶端的響應,那麼該事務所引發的服務端狀態變動將會一直保留下來,除非有另外一個事務又對其進行了改變。
zookeeper並非一種強一致性,只能保證順序一致性和最終一致性,只能稱爲達到了僞實時性。
1.數據模型
zookeepei中能夠保存數據,正是利用zookeeper能夠保存數據這一特色,咱們的集羣經過在zookeeper裏存取數據來進行消息的傳遞。
zookeeper中保存數據的結構很是相似於文件系統。都是由節點組成的樹形結構。不一樣的是文件系統是由文件夾和文件來組成的樹,而zookeeper中是由znode來組成的樹。
每個ZNODE裏均可以存放一段數據,znode下還能夠掛載零個或多個子znode節點,從而組成一個樹形結構。(結構以下所示)
2.集羣角色
(1)Leader:接受全部Follower的提案請求並統一協調發起提案的投票,負責與全部的Follower進行內部數據交換(同步)
(2)Follower:直接爲客戶端服務並參與提案的投票,同時與Leader進行數據交換(同步)
(3)Observer:直接爲客戶端服務但不參與提案的投票,同時也與Leader進行數據交換(同步)
3.會話
4.版本號
5.Acl權限控制
1.下載地址:mirrors.tuna.tsinghua.edu.cn/apache/zook…,經過
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeeper-3.4.9.tar.gz
複製代碼
下載到Linux
2.將/usr/java/zookeeper/server1/zookeeper-3.4.9/conf下的zoo_sample.cfg文件複製爲zoo.cfg,修改zoo.cfg,修改dataDir( 數據快照存儲目錄) 和 增長dataLogDir(保存Log的目錄)
3.經過bin/zkServer.sh start|stop|restart|status 啓動、中止、重啓、查詢狀態
4.經過bin/zkCli.sh [-timeout 0 -r] -server host:port(host即IP地址,peot即端口號)
1.在/usr/java中新建zookeeper目錄,而後在zookeeper目錄下新建 server1,server2,server3目錄
mkdir /usr/java/zookeeper/server1
mkdir /usr/java/zookeeper/server1
mkdir /usr/java/zookeeper/server1
複製代碼
2.將下載的tar文件複製到新建的server1,server2,server3中,而後解壓到這三個目錄下
3.修改zoo.cfg文件
第一個端口號是Leader和Follower之間通信的端口號,即數據同步的端口號,第二個端口號是Leader選舉的端口號
4.分別複製zoo.cfg到server2/zookeeper-3.4.9/conf 和 server3/zookeeper-3.4.9/conf下
5.修改server2/zookeeper-3.4.9/conf下的zoo.cfg,只修改dataDir、dataLogDir和clientPort便可,下圖server點後面的數字就是myid,即進程號,用於選舉
6.同理,修改server3/zookeeper-3.4.9/conf下的zoo.cfg,將dataDir改成server3下面的,將dataLogDir改成server3下的,將clientPort改成2183
7.在server1,server2,server3中新建data目錄,而且在data目錄下新建data和log目錄
8.在server1/data/data下編輯myid文件,即 vi myid,在裏面寫1,
在server2/data/data下編輯myid文件,即 vi myid,在裏面寫2,
在server3/data/data下編輯myid文件,即 vi myid,在裏面寫3,
這裏對應上圖中server點後面的數字,即進程號。
9.啓動server1,
cd /usr/java/zookeeper/server1/zookeeper-3.4.9/bin
./zkServer.sh start
複製代碼
,啓動成功後,而後經過客戶端鏈接:./zkCli.sh -server localhost:2181,能夠看到以下:
說明錯誤了。在集羣中,必須有一半的服務正常,客戶端才能夠正常鏈接。
10.先關閉客戶端,而後啓動server2,再從新鏈接
cd /usr/java/zookeeper/server2/zookeeper-3.4.9/bin (進入server2的目錄)
./zkServer start (啓動server2)
./zkCli.sh -server localhost:2181(客氣客戶端,鏈接服務端)
複製代碼
能夠看到以下,則說明成功。
11.再啓動server3,用客戶端測試鏈接。OK,則集羣成功。
12.查看哪個是Leader,哪個是Follower,進入zookeeper的bin目錄下,輸入zkServer.sh status便可查看