av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

ZooKeeper分布式協(xié)調(diào)服務(wù)設(shè)計核心概念及安裝配置

瀏覽:246日期:2023-04-06 15:09:26
目錄
  • 一、ZooKeeper 簡介
    • 1.ZooKeeper 設(shè)計目標(biāo)
    • 2.核心概念
      • 1)Session 會話
      • 2)數(shù)據(jù)節(jié)點
      • 3)Watcher
      • 4)ACL
    • 3.Zab 協(xié)議介紹
    • 二、ZooKeeper Cluster 安裝
      • 1.安裝 ZooKeeper
        • 2.使用 Golang 連接 ZooKeeper 的 API 接口
          • 3.配置 ZooKeeper Cluster

          一、ZooKeeper 簡介

          ZooKeeper 是一個開源的分布式協(xié)調(diào)服務(wù),目前由 Apache 進行維護。ZooKeeper 可以用于實現(xiàn)分布式系統(tǒng)中常見的發(fā)布/訂閱、負載均衡、命令服務(wù)、分布式協(xié)調(diào)/通知、集群管理、Master 選舉、分布式鎖和分布式隊列等功能。 它具有以下特性:

          順序一致性: 來自客戶端的更新操作將會按照順序被應(yīng)用;

          原子性: 即要么全部更新成功,要么要不更新失敗,沒有部分的結(jié)果;

          統(tǒng)一的系統(tǒng)鏡像: 即不管客戶端連接的是哪臺服務(wù)器,都能看到同樣的服務(wù)視圖(也就是無狀態(tài)的)

          可靠性: 一旦寫入操作被執(zhí)行,那么這個狀態(tài)將會被持久化,直到其它客戶端的修改生效。

          實時性: 一旦一個事務(wù)被成功應(yīng)用,ZooKeeper 可以保證客戶端立即讀取到這個事務(wù)變更后的最新狀態(tài)的數(shù)據(jù)。

          1.ZooKeeper 設(shè)計目標(biāo)

          • ZooKeeper 致力于為那些高吞吐的大型分布式系統(tǒng)提供一個高性能、高可用、且具有嚴(yán)格順序訪問控制能力的分布式協(xié)調(diào)服務(wù)。

          1)簡單的數(shù)據(jù)模型:

          ZooKeeper 通過樹形結(jié)構(gòu)來存儲數(shù)據(jù),它由一系列被稱為 ZNode 的數(shù)據(jù)節(jié)點組成,類似于常見的文件系統(tǒng);

          不過和常見的文件系統(tǒng)不同,ZooKeeper 將數(shù)據(jù)全量存儲在內(nèi)存中,以此來實現(xiàn)高吞吐,減少訪問延遲。

          2)可配置 Cluster:

          為了保證高可用,最好是以集群形態(tài)部署 ZooKeeper,這樣只要集群中大部分機器是可用的,那么 ZooKeeper 本身仍然可用。

          上圖中每一個 Server 代表一個安裝 ZooKeeper 服務(wù)的服務(wù)器,組成 ZooKeeper 服務(wù)的服務(wù)器都會在內(nèi)存中維護當(dāng)前的服務(wù)器狀態(tài),并且每臺服務(wù)器間都保持著通信。并通過 Zab 協(xié)議來保持?jǐn)?shù)據(jù)的一致性。

          3)順序訪問:

          對于來自客戶端的每個更新請求,ZooKeeper 都會分配一個全局唯一的遞增 ID,這個 ID 決定了所有事務(wù)操作的先后順序。

          4)高性能高可用

          ZooKeeper 將數(shù)據(jù)全量存儲在內(nèi)存中以保持高性能,并通過服務(wù)集群來實現(xiàn)高可用;由于 ZooKeeper 的所有更新和刪除都是基于事務(wù)的,所以其在讀多寫少的應(yīng)用場景中有著很高的性能表現(xiàn)。

          2.核心概念

          Cluster 角色:

          角色作用Leader提供讀寫服務(wù),并維護集群狀態(tài)(經(jīng)過選舉產(chǎn)生)Follower提供讀寫服務(wù),并定期向 Leader 匯報自己的節(jié)點狀態(tài)(同時也參加 過半寫成功 的策略和 Leader 的選舉)OBServer提供讀寫服務(wù),并定期向 Leader 匯報自己的節(jié)點狀態(tài)(因為不參加策略和選舉,所以可以在不影響寫性能的情況下提升集群的讀性能)

          1)Session 會話

          當(dāng) Client 通過 TCP 長連接 連接到 ZooKeeper 服務(wù)器時,Session 便開始建立連接,并通過 tickTime(心跳檢測)機制來保持有效的會話狀態(tài)。通過這個連接,Client 可以發(fā)送請求并接收響應(yīng),同時也可以接收到 Watch 事件的通知。

          另外,當(dāng)由于網(wǎng)絡(luò)故障或者 Client 主動斷開等原因,導(dǎo)致連接斷開,此時只要在會話超時時間之內(nèi)重新建立連接,則之間創(chuàng)建的會話依然有效。(這個取決于 tickTime 配置)

          2)數(shù)據(jù)節(jié)點

          ZooKeeper 數(shù)據(jù)模型是由一系列基本數(shù)據(jù)單元 ZNode(數(shù)據(jù)節(jié)點)組成的節(jié)點樹,其中根節(jié)點為 /(每個節(jié)點上都會保存自己的數(shù)據(jù)和節(jié)點信息);ZooKeeper 中的節(jié)點可以分為兩大類:

          持久節(jié)點: 節(jié)點一旦創(chuàng)建,除非被主動刪除,否則一直存在。

          臨時節(jié)點: 一旦創(chuàng)建該節(jié)點的客戶端會話(Session)失效,則所有該客戶端創(chuàng)建的臨時節(jié)點都會被刪除。

          3)Watcher

          ZooKeeper 中一個常用的功能是 Watcher(事件監(jiān)聽器),它允許用戶在指定節(jié)點上針對感興趣的事件注冊監(jiān)聽,當(dāng)事件發(fā)生時,監(jiān)聽器會被觸發(fā),并將事件推送到客戶端。該機制是 ZooKeeper 實現(xiàn)分布式協(xié)調(diào)服務(wù)的重要特性。

          4)ACL

          命令作用create可以進行創(chuàng)建操作read可以進行查看操作write可以對創(chuàng)建的內(nèi)容進行寫入操作delete可以進行刪除操作admin可以進行配置權(quán)限操作

          命令作用create可以進行創(chuàng)建操作read可以進行查看操作write可以對創(chuàng)建的內(nèi)容進行寫入操作delete可以進行刪除操作admin可以進行配置權(quán)限操作

          3.Zab 協(xié)議介紹

          Zab(ZooKeeper Atomic Broadcast 原子廣播)協(xié)議是為分布式協(xié)調(diào)服務(wù) ZooKeeper 專門設(shè)計的一種 支持崩潰恢復(fù)的原子廣播協(xié)議;

          在 ZooKeeper 中,主要依賴 Zab 協(xié)議來實現(xiàn)分布式數(shù)據(jù)一致性;

          基于 Zab 協(xié)議,ZooKeeper 實現(xiàn)了一種主備模式的系統(tǒng)架構(gòu)來保持集群中各個副本間的數(shù)據(jù)一致性。

          二、ZooKeeper Cluster 安裝

          準(zhǔn)備工作:

          主機名操作系統(tǒng)IP 地址ZooKeeperCentOS 7.4192.168.1.1

          安裝 JDK:下載地址(需要創(chuàng)建 Oracle 賬號)

          [root@ZooKeeper ~]# lsanaconda-ks.cfg  jdk-8u181-linux-x64.tar.gz[root@ZooKeeper ~]# tar zxf jdk-8u181-linux-x64.tar.gz [root@ZooKeeper ~]# lsanaconda-ks.cfg  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz[root@ZooKeeper ~]# mv jdk1.8.0_181 /usr/local/java[root@ZooKeeper ~]# cat <<END >> /etc/profileexport JAVA_HOME=/usr/local/javaexport PATH=$PATH:$JAVA_HOME/binEND[root@ZooKeeper ~]# source /etc/profile[root@ZooKeeper ~]# java -version

          1.安裝 ZooKeeper

          [root@ZooKeeper ~]# wget http://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz[root@ZooKeeper ~]# lsanaconda-ks.cfg  apache-zookeeper-3.6.3-bin.tar.gz  jdk-8u181-linux-x64.tar.gz[root@ZooKeeper ~]# tar zxf apache-zookeeper-3.6.3-bin.tar.gz[root@ZooKeeper ~]# mv apache-zookeeper-3.6.3-bin /usr/local/zookeeper[root@ZooKeeper ~]# mkdir /usr/local/zookeeper/data[root@ZooKeeper ~]# cat <<END >> /usr/local/zookeeper/conf/zoo.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/usr/local/zookeeper/dataclientPort=2181END

          注解:

          tickTime:Client 和服務(wù)器間的通信會話限制(相當(dāng)于健康檢查,tickTime 的時間為 ms (1s = 1000ms))

          initLimit:Leader 和 Follower 間初始通信限制。

          syncLimit:Leader 和 Follower 間同步通信限制(當(dāng)響應(yīng)時間超于 syncLimit * tickTime 時,Leader 便會將 Follower 進行移除)

          dataDir:此目錄用于存放保存在內(nèi)存數(shù)據(jù)庫中的快照信息(當(dāng)未配置 dataLogDir 參數(shù)時,日志信息也會存放到此目錄)

          clientPort:ZooKeeper 監(jiān)聽的端口,用于客戶端連接使用。

          啟動 ZooKeeper

          [root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh start						# 啟動[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh status						# 查看狀態(tài)

          連接到 ZooKeeper

          [root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181Welcome to ZooKeeper!JLine support is enabledWATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 127.0.0.1:2181(CONNECTED) 0] 

          當(dāng)連接成功后,系統(tǒng)會輸出 ZooKeeper 的相關(guān)配置信息和相關(guān)環(huán)境,并在屏幕上輸出 Welcome to ZooKeeper! 等信息。

          2.使用 Golang 連接 ZooKeeper 的 API 接口

          3.配置 ZooKeeper Cluster

          在原來的基礎(chǔ)上,在增加兩臺服務(wù)器:

          主機名操作系統(tǒng)IP 地址ZooKeeper-2CentOS 7.4192.168.1.2ZooKeeper-3CentOS 7.4192.168.1.3

          1)將 Java 和 ZooKeeper 傳給新的服務(wù)器:

          [root@ZooKeeper ~]# scp -r /usr/local/java root@192.168.1.2:/usr/local/[root@ZooKeeper ~]# scp -r /usr/local/zookeeper root@192.168.1.2:/usr/local/

          2)在新的服務(wù)器上啟動 ZooKeeper:

          [root@ZooKeeper ~]# cat <<END >> /etc/profileexport JAVA_HOME=/usr/local/javaexport PATH=$PATH:$JAVA_HOME/binEND[root@ZooKeeper ~]# source /etc/profile[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh start

          3)配置 Cluster 集群(三臺服務(wù)器上操作一樣)

          [root@ZooKeeper ~]# cat <<END >> /usr/local/zookeeper/conf/zoo.cfgserver.1=192.168.1.1:2888:3888server.2=192.168.1.2:2889:3889server.3=192.168.1.3:2890:3890END

          4)創(chuàng)建 myid 文件

          [root@ZooKeeper ~]# echo "1" > /usr/local/zookeeper/data/myid[root@ZooKeeper-2 ~]# echo "2" > /usr/local/zookeeper/data/myid[root@ZooKeeper-2 ~]# echo "3" > /usr/local/zookeeper/data/myid

          需要確保每臺服務(wù)器的 myid 文件中數(shù)字不同,并且和自己所在機器的 zoo.cfgserver.id=host:port:portid 值一樣。

          另外,id 的范圍是 1 ~ 255

          5)重啟 ZooKeeper 服務(wù)

          [root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh restart			# 三臺服務(wù)器都要重啟

          查看 ZooKeeper 狀態(tài):

          驗證:

          以上就是ZooKeeper分布式協(xié)調(diào)服務(wù)設(shè)計核心概念及安裝配置的詳細內(nèi)容,更多關(guān)于ZooKeeper分布式協(xié)調(diào)服務(wù)核心安裝配置的資料請關(guān)注其它相關(guān)文章!

          標(biāo)簽: Zabbix
          主站蜘蛛池模板: 精品国产乱码 | 在线欧美一区 | 国产免费观看久久黄av片涩av | 亚洲视频免费观看 | 操操操操操 | 二区亚洲| 日韩av一区二区在线观看 | 日韩在线不卡 | 久久精品亚洲精品国产欧美 | 91久久精品一区二区二区 | 国产小u女发育末成年 | 午夜午夜精品一区二区三区文 | 国产1区2区在线观看 | 亚洲精品久久久久中文字幕二区 | 色婷婷综合久久久中字幕精品久久 | 男女爱爱福利视频 | 91精品国产91久久久久久最新 | 久久成人精品视频 | 一区二区三区视频在线 | 欧美福利视频一区 | 亚洲综合婷婷 | 亚洲精品1 | 成人网av| 九九热精品视频 | 国产精品久久久久久久久久久免费看 | 97国产一区二区精品久久呦 | 日本爱爱视频 | 国产福利视频网站 | 亚洲国产精品久久久 | 欧美成人精品在线 | 欧美韩一区二区三区 | 欧美一区二区 | 欧美激情一区二区三区 | 国产精品99久久久久久人 | 免费观看www7722午夜电影 | 福利在线看 | 久久久精品影院 | 九九热九九 | 黄色成人在线网站 | 日韩高清一区 | 亚洲欧美在线观看视频 |