一文簡單瞭解並部署Zookeeper集群

来源:https://www.cnblogs.com/greatsql/archive/2023/01/05/17027923.html
-Advertisement-
Play Games

GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者:蟹黃瓜子 文章來源:GreatSQL社區投稿 1.Zookeeper概述 Zookeeper對於很多人開始可能都有所耳聞,他的使用場景也很多,可以 ...


  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
  • GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。
  • 作者:蟹黃瓜子
  • 文章來源:GreatSQL社區投稿

1.Zookeeper概述

Zookeeper對於很多人開始可能都有所耳聞,他的使用場景也很多,可以以節點的形式存儲持久化數據,也可以使用這一特性來作為微服務的服務註冊中心,簡單來說,Zookeeper 是一個開源的分散式的,為分散式框架提供協調服務的 Apache 項目。

Zookeeper從設計模式角度來理解,是一個基於觀察者模式設計的分散式服務管理框架。是一個文件系統,負責存儲和管理大家都關心的數據,然後接受觀察者的註冊;也是一種通知機制,一旦這些數據的狀態發生變化,Zookeeper就將負責通知已經在Zookeeper上註冊的那些觀察者做出相應的反應。

2.Zookeeper的應用場景和一些註意事項

ZooKeeper 數據模型的結構與 Unix 文件系統很類似,整體上可以看作是一棵樹,每個節點稱做一個 ZNode。每一個 ZNode 預設能夠存儲 1MB 的數據,每個 ZNode 都可以通過其路徑唯一標識。

Zookeeper的應用場景有許多,比如統一的配置管理,在許多分散式環境中,通常一個服務集群的配置文件信息是一致的,如果需要修改配置信息內容,不可能逐個對每個服務做修改,而是希望修改一次配置信息就可以同步給所有服務節點,Zookeeper就可以實現這個業務,十分簡單,可以將服務的配置信息寫入ZooKeeper上的一個Znode中,讓每個集群節點的伺服器都去監聽這個Znode,一旦數據被修改,ZooKeeper將通知各個伺服器,達到同步的效果。還可以做統一的集群管理、伺服器的動態上下線、以及軟負載均衡的效果。

在實踐Zookeeper前還需要註意的內容:

  • Zookeeper:一個領導者(Leader),多個跟隨者(Follower)組成的集群。
  • 集群正常運行的前提條件是集群節點大於半數,因此集群節點數最好採用奇數個。
  • 全局數據一致:每個Server保存一份相同的數據副本,Client無論連接到哪個Server,數據都是一致的。
  • 更新請求順序執行,來自同一個Client的更新請求按其發送順序依次執行。
  • 數據更新原子性,一次數據更新要麼成功,要麼失敗。
  • 實時性,在一定時間範圍內,Client能讀到最新數據。

3.簡單部署Zookeeper集群

官網地址:https://zookeeper.apache.org/,本文采用VMware創建3台虛擬機構建集群,XShell工具連接虛擬機進行操作:

首先為機子安裝jdk,採用yum源安裝,註意設置yum,靜等安裝成功出現“Complete”即可:

[root@localhost ~]# yum install -y java-1.8.0-openjdk.x86_64
  • 進入/usr/local/目錄,將提前準備好的“zookeeper-3.4.5.tar.gz”文件傳入目錄,並解壓:
[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar zxvf zookeeper-3.4.5.tar.gz 
  • 修改文件名為“zookeeper”:
[root@localhost local]# mv zookeeper-3.4.5 zookeeper
  • 修改環境變數:
[root@localhost local]# vi /etc/profile
# 進入insert模式後在上方添加一下內容後保存退出
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 重新編譯“/etc/profile”:
[root@localhost zookeeper]# source /etc/profile
  • 進入conf目錄下,將“zoo_sample.cfg”拷貝生成“zoo.cfg”文件作為zookeeper的配置文件:
[root@localhost zookeeper]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg 
  • 修改“zoo.cfg”文件:

    • 配置文件中主要要配置數據存放路徑和日誌路徑,zookeeper預設的數據存放路徑為"dataDir=/tmp/zookeeper",為臨時數據,會過期,本文將重新指定相關位置,存放在“自己”的路徑下,當然也可以根據需要建立單獨路徑進行存放。
# 將配置文件中的dataDir替換為此路徑
dataDir=/usr/local/zookeeper/data
# 在配置文件中添加以下配置,ip地址根據規劃
# 其中server.1代表集群的第幾胎集群,後續會配置myid文件,myid文件內容和對應的數字保存一致,例如1.131這台機器myid就是1
# ip地址為集群的三台機器,也可以配置host使用主機名,兩個埠號心跳埠和數據埠
dataLogDir=/usr/local/zookeeper/log
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
  • 簡單解釋下集群配置:

    • server.A=B:C:D
    • A 是一個數字,表示這個是第幾號伺服器;集群模式下配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件裡面有一個數據就是 A 的值,Zookeeper 啟動時讀取此文件,拿到裡面的數據與 zoo.cfg 裡面的配置信息比較從而判斷到底是哪個 server。
    • B 是這個伺服器的地址;
    • C 是這個伺服器 Follower 與集群中的 Leader 伺服器交換信息的埠;
    • D 是萬一集群中的 Leader 伺服器掛了,需要一個埠來重新進行選舉,選出一個新的Leader,而這個埠就是用來執行選舉時伺服器相互通信的埠。
  • 回到”zookeeper“目錄下,創建配置文件中提到的兩個路徑並賦予許可權:

[root@localhost conf]# cd ..
[root@localhost zookeeper]# mkdir -m 755 data
[root@localhost zookeeper]# mkdir -m 755 log
  • 來到“data/”路徑下,創建myid文件,並給相應值1
[root@localhost zookeeper]# cd data/
[root@localhost data]# vi myid
  • 此刻對於集群節點的第一臺機器就配置完成了,另外兩台機器需要在準備好環境並設置好環境變數的前提下進行
  • 通過第一臺機器將配置好的zookeeper及集群配置下發到另外兩台機器上,註意修改對應機器的myid:
[root@localhost data]# scp -r /usr/local/zookeeper [email protected]:/usr/local/
[root@localhost data]# scp -r /usr/local/zookeeper [email protected]:/usr/local/
  • 修改myid值為2和3後,集群部署完畢。
  • 進入到01機器的zookeeper目錄下,啟動zookeeper:
[root@localhost zookeeper]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
  • 此時集群沒辦法起來,因為目前只有一個節點開啟
  • 當第二台啟動以後,集群節點超過半數,第二台機器就會選舉成為leader
[root@localhost zookeeper]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@localhost zookeeper]# 
  • 第一臺就變成follower了
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
  • 開啟第三台後,第二台機器已經是leader了,除非機器宕機會觸發重新選舉
  • 關於zookeeper的操作可以通過啟動啟動客戶端:
[root@localhost zookeeper]# bin/zkCli.sh

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 
  • 至此測試完成,zookeeper集群部署完畢,更多zookeeper操作可以參照zookeeper官方文檔。

Enjoy GreatSQL

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

-Advertisement-
Play Games
更多相關文章
  • 創建Django 項目前置條件:已完成Python環境和PyCharm安裝 Django的安裝和項目的創建 | 在命令行輸入pip 命令安裝 pip install -i https://pypi.douban.com/simple django 或 指定相應的django版本: pip insta ...
  • 本實例使用了工具包SKIT.FlurlHttpClient.Wechat.TenpayV3(github:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat) 示例中的_repositoryWrapper的相關使用是我們 ...
  • 1 ProXmoX-VE簡介 PVE(ProXmoX VE)是一個開源的虛擬化管理軟體,類似ESXI,用戶可以通過網頁的方式來管理伺服器,使用kvm以及lxc技術運行虛擬機,同時也提供了一些集群和HA等功能。 2 安裝 2.1準備工作 首先準備好安裝的鏡像proxmox-ve_7.3-1下載地址:h ...
  • 技術方案: 1.運行時使用.Net Framework4.6框架,界面使用WPF與Chromium。 2.上位機與下位機使用串口對接每家設備協議,上位機與UI使用WebSocket通訊。 3.資料庫使用SQLite和localStorage。 單機版V1.0 界面清新、操作簡單。 支持地磅秤、智能電 ...
  • 由於.NET 中是讓垃圾收集器Garbage Collector (簡稱GC)刪除未使用的對象。但是,由於GC只是不時地刪除未使用的對象,因此同時使用的記憶體會增加。更重要的是,對於GC來說,HALCON 的標誌性變數(圖像、區域……)似乎相當“小”,因為它們只包含對(在許多情況下相當大)標誌性對象的 ...
  • 目標:在掃雷中註入一個messagebox彈窗; 方法:打開一個進程(掃雷的進程),申請記憶體,寫入messagebox; 另外啟動一個線程,讓整個代碼跑起來 項目創建 註入代碼 .586 .model flat,stdcall option casemap:none include windows. ...
  • 最近在學習stm32的FSMC,打算整一個LCD的驅動,然後封裝的比正點原子更高層一些,方便後期直接調用 然後在學習的時候碰到了一個小問題,研究了一會之後覺得挺有意思的,所以記下來 //使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A6作為數據命令區分線 ...
  • 背景 客戶收到了SQL專家雲告警郵件,在凌晨2點到3點之間帶有資源等待的會話數暴增,請我們協助分析。 現象 登錄SQL專家雲,進入活動會話的趨勢分析頁面,下鑽到2點鐘一個小時內的數據,看到每分鐘的等待數都在100左右,2點15分時達到200。 轉到活動會話原始數據頁面,看到大量會話都在等待,等待類型 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...