ZooKeeper簡介與集群部署

来源:https://www.cnblogs.com/Sunzz/archive/2018/02/24/8464284.html
-Advertisement-
Play Games

ZooKeeper 是一個開源的分散式協調服務,由雅虎公司創建,是Google Chubby的開源實現,ZooKeeper的設計目標是將那些複雜且容易出錯的分散式一致性服務封裝起來,構成一個高效可靠的原語集。 ZooKeeper 是什麼 ZooKeeper是一個典型的分散式數據一致性的解決方案,分佈 ...


ZooKeeper 是一個開源的分散式協調服務,由雅虎公司創建,是Google Chubby的開源實現,ZooKeeper的設計目標是將那些複雜且容易出錯的分散式一致性服務封裝起來,構成一個高效可靠的原語集。

ZooKeeper 是什麼

    ZooKeeper是一個典型的分散式數據一致性的解決方案,分散式應用程式可以基於它實現諸如數據發佈、數據訂閱、負載均衡、命名服務、分散式協調、分散式通知、集群管理、master選舉、分散式鎖和分散式隊列等功能。ZooKeeper可以保證如下分散式一致性特性。

(1)順序一致性

    從同一個客戶端發起的請求,最終將會嚴格地按照其發起順序被應ZooKeeper中去。

(2)原子性

所有事務請求的處理結果是在整個集群中所有機器上應用情況是一致的,也就是說,要麼整個集群所有機器都成功應用了某一個事務,要麼都沒有應用,一定不會出現集群中部分機器應用了該事務,而另外一部分沒有應用的情況。

(3)單一試圖

無論客戶端連接的是那個ZooKeeper伺服器,其看到的服務端數據模型都是一致的。

(4)可靠性

一旦服務端成功地應用了一個事務,並完成對客戶端的響應,那麼該事務所引起的服務端狀態變更將會被一直保留下來,除非有另一個事務又對其進行了變更。

(5)實時性

通常人們看到實時性的第一反應是,一旦一個事務被成功應用,那麼客戶端能夠立即從服務端上讀取到這個事務變更後的最新數據狀態。這裡需要註意的是,ZooKeeper僅僅保證在一定時間段內,客戶端最終一定能夠從服務端上讀取到最新的數據狀態。

ZooKeeper設計目標

    ZooKeeper致力於提供一個高性能、高可用,且具有嚴格的順序訪問控制能力(主要是寫操作的嚴格順序)的分散式協調服務。高性能使得ZooKeeper能夠應用於那些對系統吞吐量有明確要求的大型分散式系統中,高可用使得分散式的單點問題得到了很好的解決,而嚴格的順序訪問控制使得客戶端能夠基於ZooKeeper實現一些複雜的同步原語。一下是ZooKeeper的四個設計目標。

目標一:簡單的數據模型

    ZooKeeper使得分散式程式能夠通過一個共用的、樹形結構的名字空間來進行相互協調。這裡所說的樹形結構的名字空間,是指ZooKeeper伺服器記憶體中的一個數據模型,其由一些列被稱為ZNode的數據節點組成,總的來說其數據模型類似於一個文件系統,而ZNode之間的層級關係,就像文件系統的目錄結構一樣。不過和傳統的磁碟文件系統不同的是,ZooKeeper將全量數據存儲在記憶體中,一次來實現提供伺服器吞吐、減少延遲的目的。

目標二:可以構建集群

一個ZooKeeper集群通常有一組伺服器組成,一般3~5台機器就可以組成一個可用的ZooKeeper集群了。
組成ZooKeeper集群的每台機器都會在記憶體中維護當前的伺服器狀態,並且每台機器之間都互相保持著通信。值得一提的是,只要集群中存在超過一半的機器能夠正常工作,那麼整個集群就能夠正常對外服務。
ZooKeeper的客戶端程式會選擇和集群中任意一臺機器共同來創建一個TCP連接,而一旦客戶端和某台ZooKeeper伺服器之間的連接斷開後,客戶端會自動連接到集群中的其它機器,

目標三:順序訪問

對於來自客戶端的每個請求,ZooKeeper都會分配一個全局唯一的遞增編號,這個編號反映了所有事務操作的先後順序,應用程式可以使用ZooKeeper的這個特性來實現更高層次的同步原語。

目標四:高性能

由於ZooKeeper將全量數據存儲在記憶體中,並直接服務於客戶端的所有非事務請求,因此它尤其適用於以讀操作為主的應用場景。

ZooKeeper集群部署與運行

實驗環境說明

操作系統:centos 7.3
node1:192.168.29.110
node2:192.168.29.120
node3:192.168.29.130
zookeeper版本為3.4.10

安裝jdk

[root@ ~]#  yum  install  jdk-8u152-linux-x64.rpm  -y
[root@ ~]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

node1 安裝配置

下載ZooKeeper

http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

解壓ZooKeeper

[root@ ~]# tar  -xf zookeeper-3.4.10.tar.gz  -C  /opt/
[root@ ~]# cd  /opt

創建軟連接

[root@ opt]# ln -sv zookeeper-3.4.10 zookeeper
‘zookeeper’ -> ‘zookeeper-3.4.10/’

修改配置文件

[root@ opt]# cd  /opt/zookeeper/conf/
[root@ conf]# mv  zoo_sample.cfg  zoo.cfg
[root@ conf]# vim /opt/zookeeper/conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000  ##向ZK發送心跳的時長,單位為ms
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10    ##初始同步階段,要經過多少個tickTime 時長
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5     ##發送請求經過多少個tickTime 後確認
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/data/zookeeper     ##數據目錄
dataLogDir=/opt/data/zookeeper/log ##日誌目錄,不配置亦可
# the port at which the clients will connect
clientPort=2181     ##監聽的埠
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=20   ##最大併發連接數
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
server.1=192.168.29.110:2888:3888
server.2=192.168.29.120:2888:3888
server.3=192.168.29.130:2888:3888
說明:serverID=IP:port:port
    ID:各主機的數字標識,一般從1開始
    IP:各主機的IP
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3 ##這個參數和下麵的參數搭配使用,這個參數指定了需要保留的文件數目。預設是保留3個
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1   ##ZK提供了自動清理事務日誌和快照文件的功能,這個參數指定了清理頻率,單位是小時,需要配置一個1或更大的整數,預設是0,表示不開啟自動清理功,(purge操作的時間間隔,0表示不啟動)

創建數據目錄

[root@ ~]# ]# mkdir /opt/data/zookeeper -pv
mkdir: created directory ‘/opt/data’
mkdir: created directory ‘/opt/data/zookeeper’

指定ID ,node1,node2、node3分別是1,2,3

[root@ ~]# echo 1  >  /opt/data/zookeeper/myid

啟動服務

[root@ ~]# /opt/zookeeper/bin/zkServer.sh  start

仿照node1 配置node2、node3

查看狀態

[root@ ~]# telnet 192.168.29.130 2181 
Trying 192.168.29.130...
Connected to 192.168.29.130.
Escape character is '^]'.
stat  ##查看狀態的命令
Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
Clients:
 /192.168.29.110:44824[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: leader  ##可以看到已經成為leader
Node count: 4
Connection closed by foreign host.
[root@ ~]# telnet 192.168.29.110 2181
Trying 192.168.29.110...
Connected to 192.168.29.110.
Escape character is '^]'.
stat
Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
Clients:
 /192.168.29.110:42864[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower ##可以看到已經成為follower
Node count: 4
Connection closed by foreign host.

客戶端連接

[root@ ~]# /opt/zookeeper/bin/zkCli.sh
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

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

-Advertisement-
Play Games
更多相關文章
  • rsync是一個開源、快速的、多動能的、可以實現全量,增量的本地或遠程數據同步備份工具,它適用於多種操作系統平臺。 1、rsync的特性(功能) (1)支持拷貝特殊文件(如鏈接文件、設備文件) (2)拷貝時可以排除目錄中目錄或文件不需要同步的功能 (3)可以保持源文件或目錄的屬性不發生改變 (4)可 ...
  • 當自己認為學會了的知識並且總結後以為自己明白了這部分知識時,再次學習才發現自己認識的很片面。也許這就是要書讀百遍的意義所在吧。在學習《機器人學導論》這本書時, DH參數的建立正如公式上表達的那樣。需要有四個參數,建立坐標系時,通過在相鄰連桿的Z軸和X軸的建立,減少坐標的建立形式,在根據右手法則確定Y ...
  • 項目流程 弄清需求(需要完成什麼) 設計框架(怎麼實現需求) 編寫代碼(怎麼通過代碼設計) 測試 弄清需求 (1)上電,LCD顯示一副圖片 (2)根據配置文件,決定停留當前界面還是自動顯示下一張 (3)點擊一下,出現一個對話框(手動顯示,自動顯示) (4)上放大,下縮小,左右滑動切換圖片 (5)左右 ...
  • 一、輸出重定向 命令 > 文件 將標準輸出重定向到一個文件中(清空原有文件的數據) 命令 2> 文件 將錯誤輸出重定向到一個文件中(清空原有文件的數據) 命令 >> 文件 將標準輸出重定向到一個文件中 (追加到原有內容的後面) 命令 2>> 文件 將錯誤輸出重定向到一個文件中(追加到原有內容的後面) ...
  • Tomcat介紹 Tomcat Tomcat運行環境 Tomcat安裝運行 Tomcat程式環境 ...
  • Varnish的子進程 VCL varnish的有限狀態機 客戶端和後端工作線程的詳細的varnish請求流程 VCL語法 VCL函數、關鍵字和變數 ...
  • varnish介紹 varnish varnish的特點 varnish的工作原理 varnish的優缺點 varnish設計原則 存儲對象 對象生命周期 varnish的應用程式 varnish安裝 varnish程式架構 varnish的程式環境 ...
  • 前言 本篇博文記錄結束之後,關於linux的基礎使用就要告上一段落了,下麵就真正開始了大數據相關內容的快速學習了。本篇博文要介紹的是linux的許可權管理以及相關的RPM軟體包的管理還有yum命令介紹。 一、Linux的許可權管理 1.1三種基本許可權 r——可讀許可權(read) w——可寫許可權(writ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...