Zookeeper(一)-- 简介以及单机部署和集群部署
一、分布式系統
由多個計算機組成解決同一個問題的系統,提高業務的并發,解決高并發問題。
二、分布式環境下常見問題
1.節點失效
2.配置信息的創建及更新
3.分布式鎖
三、Zookeeper
1.定義
Zookeeper是一個高性能,分布式的,開源分布式應用協調服務。所謂的分布式協調服務,就是在集群的節點中進行可靠的消息傳遞,來協調集群的工作。
Zookeeper之所以能夠實現分布式協調服務,靠的就是它能夠保證分布式數據一致性。所謂的分布式數據一致性,指的就是可以在集群中保證數據傳遞的一致性。
Zookeeper能夠提供的分布式協調服務包括:數據發布訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、分布式鎖、分布式隊列等功能
2.應用場景
配置中心
負載均衡
統一命名服務
共享鎖
四、Zookeeper的特點
Zookeeper工作在集群中,對集群提供分布式協調服務,它提供的分布式協調服務具有如下的特點:
- 順序一致性
從同一個客戶端發起的事務請求,最終將會嚴格按照其發起順序被應用到zookeeper中
- 原子性
所有事務請求的處理結果在整個集群中所有機器上的應用情況是一致的
- 單一視圖
無論客戶端連接的是哪個zookeeper服務器,其看到的服務端數據模型都是一致的。
- 可靠性
一旦服務端成功的應用了一個事務,并完成對客戶端的響應,那么該事務所引起的服務端狀態變更將會一直保留下來,除非有另一個事務又對其進行了改變。
- 實時性
zookeeper并不是一種強一致性,只能保證順序一致性和最終一致性,只能稱為達到了偽實時性。
五、基本概念
1.數據模型
zookeepei中可以保存數據,正是利用zookeeper可以保存數據這一特點,我們的集群通過在zookeeper里存取數據來進行消息的傳遞。
zookeeper中保存數據的結構非常類似于文件系統。都是由節點組成的樹形結構。不同的是文件系統是由文件夾和文件來組成的樹,而zookeeper中是由znode來組成的樹。
每一個ZNODE里都可以存放一段數據,znode下還可以掛載零個或多個子znode節點,從而組成一個樹形結構。(結構如下所示)
2.集群角色
?。?)Leader:接受所有Follower的提案請求并統一協調發起提案的投票,負責與所有的Follower進行內部數據交換(同步)
?。?)Follower:直接為客戶端服務并參與提案的投票,同時與Leader進行數據交換(同步)
?。?)Observer:直接為客戶端服務但不參與提案的投票,同時也與Leader進行數據交換(同步)
3.會話
4.版本號
5.Acl權限控制
六、單機部署
1.下載地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/,通過
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即可查看
總結
以上是生活随笔為你收集整理的Zookeeper(一)-- 简介以及单机部署和集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL面试题之如何优化一条有问题的S
- 下一篇: Sql Server执行一条Update