ZooKeeper 安裝配置

前言

有時會需要安裝開源的大數據集群進行測評或者驗證問題,已經裝過很多遍了,所以想系統的總結整理一下各個組件的安裝部署,包括 Zookeeper、Hadoop、Hive、Spark 等。

版本

  • Zookeeper 3.5.6 3.8.4 3.9.3

初始化

包括主機名修改、SSH互信、JDK安裝等

SSH互信

# 每個節點
ssh-keygen -t rsa# 從 1節點執行,傳到2
# 從 2節點執行,傳到3
# 從 n-1節點執行,傳到n
# 從 n節點執行,傳到1
# 將 1節點authorized_keys傳到其他所有節點
cd ~/.ssh
cat id_rsa.pub>>authorized_keys
scp authorized_keys 192.168.1.2:~/.ssh/

下載Zookeeper

下載地址:https://archive.apache.org/dist/zookeeper/

解壓

以 3.5.6 為例:

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz -C /usr/local/
ln -s /usr/local/apache-zookeeper-3.5.6-bin /usr/local/zookeeper

配置環境變量

vi /etc/profile.d/zookeeper.sh
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile.d/zookeeper.sh

配置Zookeeper

zoo.cfg

cd /usr/local/zookeeper/conf/
vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/dataLog
# 事務日志文件數保留的蜀門,默認為3
autopurge.snapRetainCount=3
# 事務日志清理頻率,單位是小時。需要填寫一個1或更大的整數,默認是0,表示不開啟自己清理功能。 
autopurge.purgeInterval=1 
clientPort=2181
# 這里IP可以改為對應的hostname
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

創建數據目錄

mkdir -p /usr/local/zookeeper/data
mkdir -p /usr/local/zookeeper/dataLog
echo "1" > /usr/local/zookeeper/data/myid
dataDir
  • 核心作用:存儲 ZooKeeper 的快照數據(snapshot) 和事務日志索引。
    • 快照數據:ZooKeeper 會定期將內存中的數據狀態(如節點、權限等)持久化到快照文件中,用于快速恢復數據。快照文件通常以 snapshot.xxxx 命名(xxxx 為事務 ID)。
    • 其他元數據:包括集群成員信息、myid 文件(用于標識當前節點在集群中的 ID,僅在集群模式下存在)等。
  • 特點:
    • 快照數據是內存數據的周期性備份,并非實時更新,因此不能單獨作為數據恢復的唯一依據,需要配合事務日志使用。
    • 該目錄是 ZooKeeper 運行的必填目錄,必須在配置文件(zoo.cfg)中指定。
dataLogDir
  • 核心作用:專門存儲 ZooKeeper 的事務日志(transaction log)。
    • 事務日志記錄了 ZooKeeper 處理的所有寫操作(如創建節點、修改數據等),是實時追加的,每一次事務操作都會被立即寫入日志,確保數據的一致性和可恢復性。
  • 特點:
    • 事務日志是 ZooKeeper 數據一致性的關鍵,恢復數據時需先通過事務日志重演所有操作,再結合快照數據補充最新狀態。
    • 該目錄是可選配置(若不指定,事務日志會默認存儲在 dataDir 中),但強烈建議單獨設置,原因是:
      • 事務日志的寫入頻率遠高于快照,單獨存儲可減少磁盤 IO 競爭,提升性能。
      • 便于日志管理(如單獨備份、清理過期日志)。

配置日志

主要是修改了默認的日志路徑,也可以用默認的日志配置

修改 zkEnv.sh
vi /usr/local/zookeeper/bin/zkEnv.sh

if [ "x${ZOO_LOG_DIR}" = "x" ]
thenZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"
fiif [ "x${ZOO_LOG4J_PROP}" = "x" ]
thenZOO_LOG4J_PROP="INFO,CONSOLE"
fi

修改為

if [ "x${ZOO_LOG_DIR}" = "x" ]
thenZOO_LOG_DIR="/var/log/zookeeper"
fiif [ "x${ZOO_LOG4J_PROP}" = "x" ]
thenZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE"
fi
  • ZOO_LOG4J_PROP : 可以根據需要選擇是否保留CONSOLE,設置日志級別等, 3.8 和 3.9 版本沒有這個屬性可以忽略
創建日志目錄

每個節點都執行:

mkdir -p /var/log/zookeeper
log4j.properties

3.8 和 3.9 版本默認沒有 log4j.properties ,可以根據需要選擇是否添加:

# DEFAULT: console appender only
log4j.rootLogger=WARN, CONSOLE, ROLLINGFILE# Example with rolling log file and tracing
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE# Log INFO level and above messages to the console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=WARN
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n# Add ROLLINGFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=DEBUG
log4j.appender.ROLLINGFILE.File=/var/log/zookeeper/zookeeper.log
# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n# Add TRACEFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=zookeeper_trace.loglog4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L][%x] - %m%n

復制Zookeeper和系統環境變量到其他節點

scp -r /usr/local/apache-zookeeper-3.5.6-bin/ 192.168.1.2:/usr/local/
scp -r /usr/local/apache-zookeeper-3.5.6-bin/ 192.168.1.3:/usr/local/
scp /etc/profile.d/zookeeper.sh 192.168.1.2:/etc/profile.d/
scp /etc/profile.d/zookeeper.sh 192.168.1.3:/etc/profile.d/

創建軟鏈接并使環境變量生效

在其他每個節點上都創建軟鏈接

ln -s /usr/local/apache-zookeeper-3.5.6-bin /usr/local/zookeeper
source /etc/profile.d/zookeeper.sh

修改myid文件內容

將2節點上ZooKeeper的myid文件內容修改為數字2:

echo "2" > /usr/local/zookeeper/data/myid

將3節點上ZooKeeper的myid文件內容修改為數字3:

echo "3" > /usr/local/zookeeper/data/myid

啟動ZooKeeper

在每個節點上執行如下操作啟動ZooKeeper:

zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

在每個節點上執行如下命令查看ZooKeeper狀態:

zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follow

驗證ZooKeeper

當ZooKeeper服務啟動成功之后,在任意一個節點上執行如下命令進行驗證:

zkCli.shConnecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabledWATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /hello world
Created /hello
[zk: localhost:2181(CONNECTED) 2] get /hello
world
[zk: localhost:2181(CONNECTED) 3] ls /
[hello, zookeeper]
[zk: localhost:2181(CONNECTED) 4] set /hello new-world
[zk: localhost:2181(CONNECTED) 5] get /hello
new-world
[zk: localhost:2181(CONNECTED) 6] delete /hello
[zk: localhost:2181(CONNECTED) 7] ls /
[zookeeper]

zkCli.sh 默認連接 localhost:2181 ,也可以連接指定的 server 如:

zkCli.sh -server 192.168.1.2:2181
Connecting to 192.168.1.2:2181
Welcome to ZooKeeper!
JLine support is enabledWATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.1.2:2181(CONNECTED) 0]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94968.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

考研數據結構Part3——二叉樹知識點總結

一、前言 二叉樹是一種特殊的樹形結構,每個節點最多有兩個子節點,分別稱為左子樹和右子樹。其特點是子樹有嚴格的左右之分,順序不可顛倒。從歷年真題來看,二叉樹的鏈式存儲實現、遍歷算法、屬性統計是高頻考點,常以選擇…

網絡與信息安全有哪些崗位:(12)威脅分析師

今天是七夕節,首先祝大家早遇良緣、有情人終成眷屬!!七夕節快樂、工作順利、學業有成~~ 想知道網絡與信息安全領域有哪些具體崗位嗎?此前我們已陸續介紹網絡安全工程師、滲透測試工程師、SOC 總監、SOC 工具運維工程師等核心角色&…

mysql雙機熱備(主主模式)

一、環境準備 主機名ip操作系統備注node01192.168.48.91CentOS Linux 7 (Core)mysql主庫node01192.168.48.92CentOS Linux 7 (Core)mysql主庫192.168.48.90漂移IP(VIP) centos7鏡像下載地址: https://mirrors.aliyun.com/centos/7.9.2009/…

微積分 | 積分代換

注:本文為 “微積分 | 積分代換法 ” 相關合輯。 英文引文,機翻未校, 中文引文,略作重排。 未去重,如有內容異常,請看原文。 Integration by Substitution 積分代換法 May 23, 2018 / By Dave Peterson …

循環高級(1)

1.無限循環2.break3.coutinue4.練習1 打印矩形&#xff08;循環嵌套&#xff09;5.練習2 打印直角三角形#include<stdio.h> int main() {/*打印一個5行5列的三角形效果如下&#xff1a;***** ***** ***** ***** *****…

vpp開啟nat,分片包丟包問題分析與解決

現象描述兩個網口都開啟nat output-feature&#xff0c;路由模式進行大包轉發&#xff0c;網絡不同&#xff0c;小包轉發沒問題。通過trace發現&#xff0c;在nat44-ed-in2out-output-slowpath節點丟包。Packet 503:50:43:447292: handoff_traceHANDED-OFF: from thread 2 trac…

深入解析交換機端口安全:Sticky MAC的工作原理與應用實踐

深入解析交換機端口安全&#xff1a;Sticky MAC的工作原理與應用實踐在當今企業網絡環境中&#xff0c;未授權設備接入是常見的安全威脅之一&#xff0c;而Sticky MAC技術正是解決這一問題的利器。在網絡安全管理中&#xff0c;端口安全是保護網絡基礎設施的第一道防線。Sticky…

AI接管瀏覽器:Anthropic發布Claude for Chrome,是效率革命還是安全噩夢?

AI智能體&#xff08;Agent&#xff09;的競賽&#xff0c;正在以超乎想象的速度進入白熱化階段。 就在上個月&#xff0c;OpenAI剛剛憑借ChatGPT Agent&#xff0c;向世界展示了AI在云端遠程操作電腦、制作PPT的強大能力。而現在&#xff0c;它的老對手Anthropic&#xff0c;…

LFI-labs靶場通關教程

目錄 CMD01-06 pass01 pass02 pass03 pass04 pass05 pass06 HDR-1 hdr-1 LFI-01-14 pass01 pass02 pass03 pass04 pass05 pass06 pass07 pass08 pass09 pass10 pass11 pass12 pass13 pass14 CMD01-06 pass01 看看源碼, 這里顯示的是一個get參數cmd,并…

隨機森林的 “Bootstrap 采樣” 與 “特征隨機選擇”:如何避免過擬合?(附分類 / 回歸任務實戰)

隨機森林的 “Bootstrap 采樣” 與 “特征隨機選擇”&#xff1a;如何避免過擬合&#xff1f;&#xff08;附分類 / 回歸任務實戰&#xff09; 第一部分&#xff1a;揭開隨機森林的神秘面紗 1.1 告別“過擬合”&#xff0c;擁抱更強大的模型 在機器學習的旅程中&#xff0c;…

Java開發 - 緩存

一、RedisUtil封裝package com.qj.redis.util;import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.util.Set; import java.util.…

光伏發多少電才夠用?匹配家庭用電需求

在“雙碳”目標推動下&#xff0c;新能源產業迎來爆發式增長&#xff0c;家庭屋頂光伏憑借清潔環保、能降低電費的優勢&#xff0c;成為越來越多家庭的選擇。但很多家庭在安裝前都會陷入一個核心困惑&#xff1a;到底裝多大容量的光伏系統&#xff0c;發多少電才能剛好滿足自家…

如何管理跨境電商多語種素材?數字資產本地化指南

核心要點&#xff1a; 問題&#xff1a; 多語言內容管理真的那么難嗎&#xff1f;多語種內容素材雜亂、反復翻譯浪費預算、上線延遲影響市場窗口期&#xff0c;跨境電商如何高效管理全球素材&#xff1f; 答案&#xff1a; 借助 AI 驅動的數字資產管理系統&#xff0c;跨境品…

Git 8 ,git 分支開發( 切換分支開發,并設置遠程倉庫默認分支 )

目錄 前言 一、&#x1f4cd;環境背景 二、&#x1f4bb; 完整流程 三、&#x1f4dd; 順序總覽 四、&#x1f539;關系圖例 五、?暫存警告 六、?? 默認分支 七、&#x1f7e3;更多操作 前言 在團隊開發或多人協作的項目中&#xff0c;Git 是最常用的版本管理工具。一個常見…

如何在mysql中執行創建數據庫的腳本文件?

1、先準備好腳本文件&#xff0c;.sql擴展名的把腳本文件放在某個盤的根目錄&#xff08;也可以不是根目錄&#xff0c;根目錄的話路徑會簡單一些&#xff09;,這里我放在C盤的根目錄下。腳本文件內容如下&#xff1a;/* SQLyog Community v13.1.1 (32 bit) MySQL - 5.7.26 : D…

《AI智脈速遞》2025 年 8 月22 日 - 29 日

歐盟 AI 法案正式生效&#xff1a;禁止社會評分&#xff0c;規范生成式 AI 內容標注 8 月 21 日&#xff0c;歐盟《人工智能法案》全面實施&#xff0c;明確禁止社會評分、實時面部識別等高風險 AI 應用&#xff0c;要求生成式 AI 內容必須標注來源。該法案被視為全球最嚴格的 …

iOS 審核 4.3a【二進制加固】

我們應該知道,面對iOS 上架 遇到4.3a的問題或者制作馬甲包.最基礎的操作就是混淆代碼尤其是我們專業做上架的,需要對各種語言的編譯模式,產物,以及ipa構成都需要非常了解, 每種語言開發的App的編譯產物不同,針對不同的編譯產物做不同的處理方式有一些經驗的開發者, 應該知道 目…

使用Python腳本執行Git命令

說明&#xff1a;本文介紹如何使用Python腳本在某個目錄下執行Git命令 編碼 直接上代碼 import os import subprocessdef open_git_bash_and_run_command(folder_path, git_command):# 檢查文件夾路徑是否存在if not os.path.exists(folder_path):print(f"錯誤&#xff1a…

2025docker快速部署Nginx UI可視化管理平臺

1、nginx-ui簡介 Nginx UI 是一個開源項目&#xff0c;旨在為著名的 Web 服務器和反向代理軟件 Nginx 提供一個基于網頁的圖形化用戶界面&#xff08;GUI&#xff09;。它的核心目標是讓 Nginx 的配置和管理變得可視化、簡單化和自動化&#xff0c;從而降低其使用門檻&#xf…

數據防泄與最小可見:ABP 統一封裝行級安全(RLS)+ 列級脫敏

數據防泄與最小可見&#xff1a;ABP 統一封裝行級安全&#xff08;RLS&#xff09; 列級脫敏 TL;DR&#xff1a;把“誰能看到哪些行、字段可見到哪一位”下沉到數據庫強制層&#xff08;PostgreSQL&#xff1a;RLS 安全視圖&#xff1b;SQL Server&#xff1a;RLS DDM&#x…