Zookeeper(一)-- 简介以及单机部署和集群部署
一、分布式系統(tǒng)
由多個計算機組成解決同一個問題的系統(tǒng),提高業(yè)務(wù)的并發(fā),解決高并發(fā)問題。
二、分布式環(huán)境下常見問題
1.節(jié)點失效
2.配置信息的創(chuàng)建及更新
3.分布式鎖
三、Zookeeper
1.定義
Zookeeper是一個高性能,分布式的,開源分布式應(yīng)用協(xié)調(diào)服務(wù)。所謂的分布式協(xié)調(diào)服務(wù),就是在集群的節(jié)點中進(jìn)行可靠的消息傳遞,來協(xié)調(diào)集群的工作。
Zookeeper之所以能夠?qū)崿F(xiàn)分布式協(xié)調(diào)服務(wù),靠的就是它能夠保證分布式數(shù)據(jù)一致性。所謂的分布式數(shù)據(jù)一致性,指的就是可以在集群中保證數(shù)據(jù)傳遞的一致性。
Zookeeper能夠提供的分布式協(xié)調(diào)服務(wù)包括:數(shù)據(jù)發(fā)布訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、分布式鎖、分布式隊列等功能
2.應(yīng)用場景
配置中心
負(fù)載均衡
統(tǒng)一命名服務(wù)
共享鎖
四、Zookeeper的特點
Zookeeper工作在集群中,對集群提供分布式協(xié)調(diào)服務(wù),它提供的分布式協(xié)調(diào)服務(wù)具有如下的特點:
- 順序一致性
從同一個客戶端發(fā)起的事務(wù)請求,最終將會嚴(yán)格按照其發(fā)起順序被應(yīng)用到zookeeper中
- 原子性
所有事務(wù)請求的處理結(jié)果在整個集群中所有機器上的應(yīng)用情況是一致的
- 單一視圖
無論客戶端連接的是哪個zookeeper服務(wù)器,其看到的服務(wù)端數(shù)據(jù)模型都是一致的。
- 可靠性
一旦服務(wù)端成功的應(yīng)用了一個事務(wù),并完成對客戶端的響應(yīng),那么該事務(wù)所引起的服務(wù)端狀態(tài)變更將會一直保留下來,除非有另一個事務(wù)又對其進(jìn)行了改變。
- 實時性
zookeeper并不是一種強一致性,只能保證順序一致性和最終一致性,只能稱為達(dá)到了偽實時性。
五、基本概念
1.數(shù)據(jù)模型
zookeepei中可以保存數(shù)據(jù),正是利用zookeeper可以保存數(shù)據(jù)這一特點,我們的集群通過在zookeeper里存取數(shù)據(jù)來進(jìn)行消息的傳遞。
zookeeper中保存數(shù)據(jù)的結(jié)構(gòu)非常類似于文件系統(tǒng)。都是由節(jié)點組成的樹形結(jié)構(gòu)。不同的是文件系統(tǒng)是由文件夾和文件來組成的樹,而zookeeper中是由znode來組成的樹。
每一個ZNODE里都可以存放一段數(shù)據(jù),znode下還可以掛載零個或多個子znode節(jié)點,從而組成一個樹形結(jié)構(gòu)。(結(jié)構(gòu)如下所示)
2.集群角色
(1)Leader:接受所有Follower的提案請求并統(tǒng)一協(xié)調(diào)發(fā)起提案的投票,負(fù)責(zé)與所有的Follower進(jìn)行內(nèi)部數(shù)據(jù)交換(同步)
(2)Follower:直接為客戶端服務(wù)并參與提案的投票,同時與Leader進(jìn)行數(shù)據(jù)交換(同步)
(3)Observer:直接為客戶端服務(wù)但不參與提案的投票,同時也與Leader進(jìn)行數(shù)據(jù)交換(同步)
3.會話
4.版本號
5.Acl權(quán)限控制
六、單機部署
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文件復(fù)制為zoo.cfg,修改zoo.cfg,修改dataDir( 數(shù)據(jù)快照存儲目錄) 和 增加dataLogDir(保存Log的目錄)
3.通過bin/zkServer.sh start|stop|restart|status 啟動、停止、重啟、查詢狀態(tài)
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文件復(fù)制到新建的server1,server2,server3中,然后解壓到這三個目錄下
3.修改zoo.cfg文件
第一個端口號是Leader和Follower之間通訊的端口號,即數(shù)據(jù)同步的端口號,第二個端口號是Leader選舉的端口號
4.分別復(fù)制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點后面的數(shù)字就是myid,即進(jìn)程號,用于選舉
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,
這里對應(yīng)上圖中server點后面的數(shù)字,即進(jìn)程號。
9.啟動server1,
cd /usr/java/zookeeper/server1/zookeeper-3.4.9/bin
./zkServer.sh start
,啟動成功后,然后通過客戶端連接:./zkCli.sh -server localhost:2181,可以看到如下:
說明錯誤了。在集群中,必須有一半的服務(wù)正常,客戶端才可以正常連接。
10.先關(guān)閉客戶端,然后啟動server2,再重新連接
cd /usr/java/zookeeper/server2/zookeeper-3.4.9/bin (進(jìn)入server2的目錄)
./zkServer start (啟動server2)
./zkCli.sh -server localhost:2181(客氣客戶端,連接服務(wù)端)
可以看到如下,則說明成功。
11.再啟動server3,用客戶端測試連接。OK,則集群成功。
12.查看哪一個是Leader,哪一個是Follower,進(jìn)入zookeeper的bin目錄下,輸入zkServer.sh status即可查看
總結(jié)
以上是生活随笔為你收集整理的Zookeeper(一)-- 简介以及单机部署和集群部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL面试题之如何优化一条有问题的S
- 下一篇: Sql Server执行一条Update