瞭解一下zookeeper,搭建單機版和集群版的環境玩玩,需要手稿的,留下郵箱

来源:https://www.cnblogs.com/ncl-960301-success/archive/2019/07/22/11228597.html
-Advertisement-
Play Games

第一章:Zookeeper介紹 Zookeeper,動物管理員,是用來管理hadoop(大象)、Hive(蜜蜂)、Pig(小豬)的管理員。 Apache Hbase和Apache Solr的分散式集群都用到了Zookeeper。 Zookeeper是一個分散式、開源的程式協調服務,是Hadoop項目 ...


第一章:Zookeeper介紹

Zookeeper,動物管理員,是用來管理hadoop(大象)、Hive(蜜蜂)、Pig(小豬)的管理員。

Apache Hbase和Apache Solr的分散式集群都用到了Zookeeper。

Zookeeper是一個分散式、開源程式協調服務,是Hadoop項目下的一個子項目。它提供的主要功能是配置管理名字服務分散式鎖集群管理

1.1:Zookeeper的作用:配置管理(重點)

拋出問題:

在我們的應用中,除了代碼,還有一些就是各種配置。比如:資料庫連接等。一般我們都是使用配置文件的形式,在代碼中引入這些配置文件。

當我們只有一種配置,只有一臺伺服器,並且不經常做修改的時候,使用配置文件是一個很好的做法。但是,如果我們的配置非常多,而且很多伺服器都需要這個配置,這時,使用配置文件求不是一個很好的選擇。

這個時候就需要尋找一種集中管理配置的方法,我們在這個集中的地方修改了配置,所有對該配置文件感興趣的都可以獲得變更,Zookeeper就這樣的一種服務。

問題解決:

Zookeeper使用Zab這樣的一致性協議來提供一致性。現在很多開源項目都使用Zookeeper來維護配置。

比如HBase,客戶端就是連接一個Zookeeper,獲得必要的HBase集群配置信息,然後才可以進一步進行操作。

開源的消息隊列Kafka中,也是使用Zookeeper來維護broker的信息。

在Alibaba開源的SOA框架Dubbo中也廣泛的使用Zookeeper管理一些配置來實現服務治理

 

1.2:Zookeeper的作用:名字服務(瞭解)

問題拋出:

比如,為了通過網路訪問一個系統,我們得知道對方的IP地址,但是IP地址很複雜,這個時候就需要使用功功能變數名稱來進行訪問。但是,電腦是不能為功能變數名稱的,有一種解決方案,就是我們為你每台機器都備份有一份功能變數名稱到IP的映射,這個能解決一部分問題,但是如果功能變數名稱對應的IP發生變化怎麼辦?於是就有了DNS,我們只需要訪問一個大家都熟知的(known)的點,它就會告訴你這個功能變數名稱對應的IP是什麼。

問題解決:

在我們的應用中也會存在這種問題,特別是在我們的服務特別多的時候,如果我們在本地保存服務的地址的時候將非常不方便,但是,如果我們只需要訪問一個大家都熟知的訪問點,這裡提供統一的入口,那麼維護起來就會很方便

1.3:Zookeeper的作用:分散式鎖(瞭解)

問題拋出:

比如:在一個分散式環境中,為了提高可靠性,我們集群的每台伺服器都部署著同樣的服務,但是,一件事情如果集群中的每個伺服器都進行的話,那相互之間就需要進行協調,編程起來就會非常複雜。而如果我們只讓一個服務進行操作,那又存在單點問題

問題解決:

使用分散式鎖,在某個時刻只讓一個服務去幹活,的那個這台服務出現問題的時候鎖釋放,立即fail over到另外的服務。在很多分散式系統中,都是這麼做的,也叫Leader Election

比如:HBase的Master就是採用這種機制,但是要註意的是分散式鎖和同一個進程的鎖還是有區別的,所以使用的時候,要比同一個進程里的鎖更謹慎的使用。

1.4:Zookeeper的作用:集群管理(重點)

問題拋出:

在分散式的集群中,經常會由於各種原因,比如硬體故障、軟體故障、網路問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集群

這個時候,集群中的其他機器需要感知到這種變化,然後根據這種變化做出相應的對策。

問題解決:

比如,我們是一個分散式存儲系統,有一個中央控制節點負責存儲的分配,當有新的存儲進來的時候我們需要根據現在集群的狀態來分配存儲節點。這時我們就需要動態感知到集群目前的狀態

比如,一個分散式的SOA架構中,服務是一個集群提供的,當消費者訪問某個服務時,就需要採用某種機制發現現在有哪些節點可以提供這種服務(也被稱之為服務發現,比如Alibaba開源的SOA框架Dubbo就採用了Zookeeper作為服務發現的底層機制)。還有開源的Kafka隊列就採用了Zookeeper作為Cosnumer的上下線管理。

第二章:Zookeeper的存儲結構

2.1:Znode

在Zookeeper中,znode是一個根Unix文件系統路徑相似的節點,可以往這個節點存儲或者獲取數據

Zookeeper底層是一套數據結構。這個數據結構是一個樹形結構,上面的每一個節點,稱之為“znode”,Zookeeper中的數據是按照樹結構進行存儲的,而且znode節點還分為4中不同的類型。

每個znode節點預設存儲1MB的數據僅僅用來記錄狀態)。

可以使用zkCli命令,登錄到Zookeeper上,並通過ls、create、delete、get、set等命令來操作這些znode節點。

2.2:Znode節點類型

(1)PERSISTENT(持久化節點):所謂持久化節點,是指在節點創建後,就會一直存在,直到有刪除操作來主動清除這個節點,否則不會因為創建該節點的客戶端會話失效而消失。

(2)PERSISTENT_SEQUENTIAL(持久順序節點):這類節點基本特征和持久化節點是一致的。額外的特性是,在ZK中,每個父節點會為它的第一級子節點維護一份時序,會記錄每個子節點創建的先後順序。基於這個特性,在創建子節點的同時,可以設置這個屬性,那麼在創建節點的過程中,ZK會自動為給定節點加上一個數字尾碼,作為新的節點名。這個數字尾碼範圍是整型的最大範圍值。在創建節點的同時,只需要傳入節點“/test_”,這樣,Zookeeper會自動給後面補充數字。

(3)EPHEMERAL(臨時節點):和持久化節點不同的是,臨時節點的生命周期和客戶端會話綁定。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。註意,這裡提到的是會話失效,而不是連接斷開。另外,在臨時節點下麵不能再創建子節點。

值得註意的是,當客戶端失效的時候,所產生的節點並不是一下子就消失,也要過一段時間,大概10s以內。

(4)EPHEMERAL_SEQUENTIAL(臨時自動編號節點):此節點屬於臨時節點,不過帶有順序,客戶端會話結束,節點就消失。

第三章:Zookeeper的安裝(單機版)

安裝環境:Linux系統、JDK

安裝步驟:

第一步:上傳Zookeeper壓縮包

官方資源包可在 zookeeper.apache.com 站點中下載。最新發佈版本為:3.4.12。

第二步:解壓Zookeeper壓縮包

tar -zxf zookeeper-3.4.6.tar.gz

cp zookeeper-3.4.6 /usr/local/zookeeper -r

第三步:配置Zookeeper

Zookeeper在啟動的時候,預設去conf目錄下查找一個名為zoo.cfg的配置文件。

cp zoo_sample.cfg  zoo.cfg

修改zoo.cfg配置文件:

設置dataDir路徑:即數據緩存路徑,需要先創建一個data文件夾

第四步:啟動Zookeeper

在/bin目錄下,啟動zkServer,sh文件

(1)預設載入配置文件:./zkServer.sh start,會預設去conf目錄下載入zoo.cfg配置文件

(2)指定載入配置文件:./zkServer.sh start [配置文件路徑位置]

停止Zookeeper:./zkServer.sh stop

查看Zookeeper狀態:./zkServer.sh status

zookeeper文件目錄:

第四章:Zookeeper集群原理

4.1:Zookeeper集群中的角色

Zookeeper集群中的角色主要有以下三類:

4.2:設計目的

(1)最終一致性:client不論連接到哪一個server,展示的都是同一個視圖,這是zookeeper最重要的性能。

(2)可靠性:如果消息m被一臺伺服器接收到,那麼它將會被所有的伺服器接收

(3)實時性:Zookeeper保證客戶端將在一個時間間隔範圍內,獲得伺服器的更新信息,或者伺服器失效的信息;但由於網路延遲的原因,zookeeper不能保證兩個客戶端能同時得到剛更新的數據,如果需要最新的數據,應該在讀數據之前調用sync()介面

(4)等待無關(wait-free):慢的或者實效的client不得干預快速的client請求,使得每個client都能有效的等待

(5)原子性:更新只有成功或者失敗,沒有中間狀態

(6)順序性:包括全局有序和偏序兩種:全局有序是指如果一臺伺服器上消息a在消息b之前發佈,則在所有的server上消息a都會在消息b之前發佈;偏序是指如果一個消息b在消息a後被同一個發佈者發佈,消息a必將排在消息b之前。

第五章:Zookeeper創建集群

使用三個zookeeper搭建一個偽集群,應用部署在linux系統:192.168.110.128;伺服器監聽埠為2181、2182、2183;投票選舉埠為2881/3881、2882/3882、2883/3883。

三個集群都在:/usr/local/zookeepercluster目錄下

子目錄分別為:zookeeper01、zookeeper02、zookeeper03

安裝方法與單機版一樣。配置文件需要指定data目錄

特殊地方:

每個集群需要提供應用唯一標識

在zookeeper集群中,每個節點需要一個唯一標識,這個唯一標識要求必須是一個自然數,且唯一標識保存位置是:/data/myid,其中myid為配置文件。

配置方案:

(1)手動用vi命令編輯myid,並添加標識1,2,3

(2)使用簡化命令:echo [唯一標識] >> myid

echo命令為回聲命令,系統會將命令發送數據返回,“>>”為定位,代表系統回聲數據指定發送到什麼位置,此命令代表系統回聲數據發送到myid文件中,如果沒有文件則創建文件。

通常需要給配置文件添加客戶自行許可權,命令如下:

chmod +x 文件名

修改配置文件zoo.cfg:設置服務、投票、選舉埠

vi zoo.cfg(每個集群都需要配置)

clientPort=2181 #服務埠根據應用做對應修改,zk01-2181,zk02-2182,zk03-2183
server.1=192.168.70.143:2881:3881
server.2=192.168.70.143:2882:3882
server.3=192.168.70.143:2883:3883

啟動zookeeper應用:

在bin/zkServer.sh.start

註:zookeeper集群搭建完成後,至少需要啟動兩個應用才能提供服務,因為需要選舉出主服務節點。啟動所有的zookeeper節點後,可以使用命令:bin/zkServer.sh status來查看節點狀態,如下所示:

Model:leader 表示主機

Model:follower 表示備份機

關閉zookeeper應用:

命令:bin/zkServer.sh stop

 

第六章:Zookeeper常見命令

啟動zookeeper客戶端:

bin目錄下:./zkCli.sh

(1)當輸入命令不正確時,會提示信息:

(2)常用命令:ls

使用格式:ls path 

表示列表路徑下的資源

指的註意的是:在zookeeper中,

根節點路徑: ls  /

子節點路徑: ls  /zookeeper

下一級子節點:ls  /zookeeper/quota

(3)常用命令:quit

表示:退出客戶端

(4)連接指定的ip地址下的伺服器

./zkCli.sh -server 192.168.110.128:2182

(5)常用命令:connect 【ip】

表示:連接到指定的伺服器

例如:connect 192.168.110.128:2183

(6)常用命令:create 【-e】【-s】 path data

表示:創建節點

-e:表示創建臨時節點,可以不指定

-s:表示創建一個順序節點,可以不指定

path:表示在哪個節點下創建新的節點,其中,根節點表示為/

data:表示節點數據

例如:create /test 123

表示:在根節點下,創建一個test節點,數據為123,節點類型沒有給定,預設為持久型節點。

例如:創建順序節點:create /test2 2

zookeeper自動為節點添加尾碼信息;

 

 

(7)常用命令:get path

表示:查看指定節點的數據

例如:get /test

 

123
cZxid = 0x400000004
ctime = Fri Jul 05 18:00:23 CST 2019
mZxid = 0x400000004
mtime = Fri Jul 05 18:00:23 CST 2019
pZxid = 0x400000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

(8)常用命令:set path data 【version】

表示:設置對應位置節點的數據

例如:

(9)delete path 【version】

表示:刪除指定節點,此命令不能刪除有子節點的節點

(10)常用命令:rmr path

表示:刪除指定節點,包括子節點

(11)常用命令:quit

表示:退出控制台

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 今天我們一起學習下java.util.concurrent併發包里的 "CopyOnWriteArrayList" 工具類。當有多個線程可能同時遍歷、修改某個公共數組時候,如果不希望因使用 synchronize 關鍵字鎖住整個數組而影響性能,可以考慮使用CopyOnWriteArrayLis ...
  • 新聞 "ML.NET 1.2發佈,包含Model Builder升級" "NuGet.org上現在顯示GitHub的使用情況" "微基準測試設計準則" "為線程添加mono.wasm支持" "Haskell——經驗總結" "MSBuild二進位與結構日誌瀏覽器" 視頻及幻燈片 "F MonoGame ...
  • 常用方法 首先,我們應該知道HashMap類實現了Map介面,所以實現了Map常用的一些方法。 (1) 插入鍵值對數據 public V put(K key, V value) (2)根據鍵值獲取鍵值對值數據 public V get(Object key) (3)獲取Map中鍵值對的個數 publ ...
  • 我是大劉啊~ 堅持每周更新最少一次,為年薪20萬邁進! 我為什麼要學Python? 答:我想要漲工資。。。家裡有礦我就不會來燒腦了。。。。。。 先寫點什麼呢? 新手,hhh,激動無比,無從下爪。。。。 python基本的數據類型吧 正題:python基本的數據類型 1、整數(int):就是整數,上過 ...
  • 簡介 簡介 web1.0時代 web2.0時代 互聯網時代 互聯網+ --》智慧城市。 2012年提出。 雲計算+大數據時代 背景 背景 隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。 1、第一 ...
  • 分支結構 學習資料來源 https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/03.%E5%88%86%E6%94%AF%E7%BB%93%E6%9E%84.md 1.應用場景 順序結構 如,變數計算,華氏度轉攝氏度,計算 ...
  • 17.推導式: 推導式:將for迴圈多行變成一行 1. list推導式:[] 2. 生成器表達器:() 3. 字典/集合推導式:{} list: [變數(加工後的變數) for 迴圈] [變數(加工後的變數) for 迴圈 加工條件] 生成器推導式: (變數(加工後的變數 ) for 迴圈) (變數 ...
  • 用以分析Python中CPU使用情況。CPU分析是通過分析CPU執行代碼的方式來測量代碼的性能,以此找到代碼中的不妥之處,然後處理它們。 接下來我們將看看如何跟蹤Python腳本使用時CPU使用情況,重點關註以下幾個方面: 1、cProfile 2、line_profiler 3、pprofile ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...