@ZooKeeper 詳細介紹部署與使用詳細指南

文章目錄

  • **ZooKeeper 詳細介紹、部署與使用**
    • 1. 概述 & 核心介紹
      • 1.1 什么是 ZooKeeper?
      • 1.2 核心特性
      • 1.3 核心概念
      • 1.4 典型應用場景
    • 2. 部署 (以 3 節點集群為例)
      • 2.1 環境準備
      • 2.2 安裝步驟 (在所有節點執行)
      • 2.3 啟動與停止集群
      • 2.4 防火墻配置 (如果開啟)
    • 3. 基本使用與客戶端操作
      • 3.1 使用 CLI 客戶端連接
      • 3.2 常用命令
    • 4. 常見問題與故障排查 (FAQ)
    • 5. 官方參考文獻

ZooKeeper 詳細介紹、部署與使用


1. 概述 & 核心介紹

1.1 什么是 ZooKeeper?

Apache ZooKeeper 是一個開源的分布式協調服務,由 Apache 軟件基金會托管。它旨在為分布式應用提供一個高性能、高可用且具有嚴格順序訪問控制能力的分布式配置管理、同步和命名注冊服務。

1.2 核心特性

  • 順序一致性 (Sequential Consistency): 來自客戶端的更新將按照其發送的順序被應用。
  • 原子性 (Atomicity): 更新要么成功,要么失敗,沒有中間狀態。
  • 單一系統映像 (Single System Image): 無論客戶端連接到哪個服務器,它都將看到相同的服務視圖。
  • 可靠性 (Reliability): 一旦一個更新被應用,它將從那時起一直保持,直到被下一個更新覆蓋。
  • 及時性 (Timeliness): 確保客戶端的視圖在特定時間范圍內是最新的。

1.3 核心概念

  • 集群模式 (Cluster Mode): ZooKeeper 通常以復制模式 (Replicated Mode) 部署,即一個由多個節點(奇數個,如 3, 5, 7…)組成的集群,稱為一個 Ensemble。這是生產環境的標準部署方式,提供高可用性。
  • 領導者選舉 (Leader Election): 集群啟動時,所有節點會通過投票選舉出一個 Leader,其余節點成為 Follower。所有寫請求都必須由 Leader 處理,讀請求可以由任何節點處理。
  • ZNode: ZooKeeper 數據模型中的數據節點,類似于文件系統中的文件和目錄。它構成了一個層次化的命名空間(樹狀結構)。
    • 持久節點 (PERSISTENT): 創建后即使客戶端斷開連接也會一直存在。
    • 臨時節點 (EPHEMERAL): 客戶端會話有效時存在,會話結束則節點自動刪除。常用于實現服務發現領導者選舉
    • 順序節點 (SEQUENTIAL): 節點名后會附加一個單調遞增的計數器。可用于實現分布式鎖隊列
    • (節點類型可組合,如 PERSISTENT_SEQUENTIAL
  • 會話 (Session): 客戶端與服務器端建立一個 TCP 長連接,并通過此連接進行心跳檢測。會話有超時時間 (sessionTimeout)。
  • Watcher (監聽器): 客戶端可以在 ZNode 上設置監聽。當該 ZNode 發生變化(數據變更、子節點增減等)時,ZooKeeper 會向客戶端發送一個一次性通知。這是 ZooKeeper 實現分布式協調的核心機制。

1.4 典型應用場景

  • 配置管理: 將公共配置(如數據庫URL、特性開關)存儲在 ZNode 中,所有應用監聽其變化,實現配置的集中管理和動態更新。
  • 分布式鎖: 利用臨時順序節點和 Watcher 機制實現排他鎖和共享鎖。
  • 服務發現: 服務提供者啟動時在特定路徑下創建臨時節點,服務消費者監聽該路徑,從而動態感知服務的上線和下線。
  • 領導者選舉: 多個候選者嘗試創建同一個臨時節點,成功者即為 Leader,其他候選者監聽該節點,一旦 Leader 宕機(會話失效),節點刪除,其他候選者重新競爭。
  • 命名服務 (Naming Service): 通過樹形結構全局唯一地命名資源。
  • 集群管理: 監控節點的存活狀態。

2. 部署 (以 3 節點集群為例)

2.1 環境準備

  • 服務器: 3臺 Linux 主機 (CentOS 7/8, Ubuntu 18.04+)
    • zk-node1 (IP: 192.168.1.101)
    • zk-node2 (IP: 192.168.1.102)
    • zk-node3 (IP: 192.168.1.103)
  • 軟件依賴: Java 8 或 Java 11 (推薦 LTS 版本)
  • 用戶: 建議創建一個專用用戶,如 zookeeper

2.2 安裝步驟 (在所有節點執行)

1. 創建用戶和組

sudo groupadd zookeeper
sudo useradd -g zookeeper zookeeper
sudo passwd zookeeper # 設置密碼,用于運維登錄(可選,也可用密鑰)

2. 安裝 Java

# CentOS
sudo yum install -y java-11-openjdk-devel# Ubuntu
sudo apt update && sudo apt install -y openjdk-11-jdk# 驗證安裝
java -version

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

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

相關文章

騰訊Hunyuan-MT-7B翻譯模型完全指南:2025年開源AI翻譯的新標桿

🎯 核心要點 (TL;DR) 突破性成就:騰訊混元MT-7B在WMT25全球翻譯競賽中獲得30/31項第一名雙模型架構:Hunyuan-MT-7B基礎翻譯模型 Hunyuan-MT-Chimera-7B集成優化模型廣泛語言支持:支持33種語言互譯,包括5種中國少數民…

Web 集群高可用全方案:Keepalived+LVS (DR) 負載均衡 + Apache 服務 + NFS 共享存儲搭建指南

文章目錄Keepalived LVS(DR) Apache NFS項目背景業務場景與核心需求傳統架構的痛點與局限技術方案的選型邏輯項目價值與預期目標項目實踐項目環境基礎配置配置 router配置免密登錄-可選配置 nfs配置 web配置 LVS-RS配置 HA 和 LVS-DS配置 ha1配置 ha2測…

Prometheus監控預警系統深度解析:架構、優劣、成本與競品

目錄 一、Prometheus是什么?核心定位與架構 二、競品分析(Prometheus vs. Zabbix vs. Nagios vs. Commercial SaaS) 三、部署成本分析 四、服務器資源消耗分析 五、給您的最終建議 一、Prometheus是什么?核心定位與架構 Prom…

Nginx反向代理及配置

Nginx反向代理 二級域名系統 顧名思義,我們有很多的這個不同的二級域名的用戶來訪問我們,比如說微博。它有一個主域名weibo.com。如果我叫一鳴,申請了一個微博,然后我就可以在微博這個主系統上申請一個二級域名來訪問我微博的主頁&#xff0…

嵌入式系統通信總線全景探秘:從板內到云端

引言 在嵌入式系統設計中,選擇合適的通信總線是決定系統性能、成本和可靠性的關鍵因素。從簡單的芯片間通信到復雜的工業網絡,不同的總線技術各司其職,形成了嵌入式世界的"交通網絡"。本文將深入探討五種經典且重要的通信技術&…

2022版Unity創建時沒有2D燈光(2D Light),沒有Global LIght2D怎么辦?

簡單來說就是你的渲染管線沒有升級到URP管線,所以才沒有這些2D燈光 如果你的創建燈光和我一樣,沒有紅線劃掉的部分,說明你和我的問題一樣,看下面的教程可以解決。 1. 確保Unity版本 確保你的Unity版本至少為2019.4或更高版本&…

技術小白如何快速的了解opentenbase?--把握四大特色

1.基本介紹 作為一名計算機專業相關背景的學生,我們或多或者接觸過一些數據庫,對于數據庫肯定是有所了解的; 你可能學習的是和微軟的sql server這樣的數據庫; 你可能接觸的更多的是企業級項目開發里面使用的這個mysql數據庫&#…

企業微信AI落地:如何選擇企業微信服務商?

現在企業用企業微信做客戶運營,最怕的不是“沒AI工具”,而是“AI用不起來”——要么功能不貼業務場景,員工嫌麻煩不用;要么回復不專業,客戶體驗差;要么數據不同步,管理者看不到效果。其實解決這…

【學Python自動化】 11 標準庫簡介 —— 第二部分

一、格式化輸出 reprlib 模塊 提供定制版 repr(),縮略顯示大型或深層嵌套對象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模塊 美化輸出,添加換行和縮進顯示復雜數據結構impor…

【Kubernetes】知識點2

15. 什么是Pod的根容器?答:Pod 的根容器是每個 Pod 中默認存在的一個特殊容器pause容器,有時也稱為infra容器,它是Pod 啟動時創建的第一個容器,也是整個 Pod中所有容器的 “父容器”。其核心作用是為 Pod 內的所有容器…

視頻增強AI哪個效果好?實戰對比幫你找到最適合的工具

hitpaw 牛小影hitpaw 牛小影在處理低質量視頻時,我們經常會遇到畫面模糊、噪點過多、分辨率不足等問題,比如老舊視頻資料修復、監控錄像清晰化、手機拍攝視頻畫質提升等。這時候,一款好用的視頻增強AI軟件就成了剛需。下面就為大家盤點幾款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 請假申請單public class LeaveBill{/// <summary>/// 申請人/// </summary>public string EmployeeName { get; s…

兩個子進程之間使用命名pipe

兩個子進程間可以使用命名管道&#xff0c;非常簡單。管道如果文件一樣存在硬盤中&#xff0c;使用ls可以查看&#xff0c;管道文件0字節。使用fork函數分別創建兩個子進程。 一個負責讀數據&#xff0c;一個負責寫數據。 #define _GNU_SOURCE #include <stdio.h> #inclu…

第一講、Kafka 初識與環境搭建

一、Kafka 是什么&#xff1f; Apache Kafka 是一個分布式的消息隊列&#xff08;Message Queue&#xff09;與流處理平臺。 它最早由 LinkedIn 開發&#xff0c;后來捐贈給 Apache 基金會&#xff0c;現已廣泛應用于日志收集、實時數據管道和大數據處理。 Kafka 的特點&…

Conda相關的用法

1、背景 此文主要記錄conda的一些用法&#xff0c;大部分命令來自ai搜索以及自己的理解。 2、安裝conda 2.1 選擇 conda 版本 2.1.1 Anaconda 含有 Conda 大量科學計算包&#xff08;NumPy、Pandas、Matplotlib 等&#xff09;適合數據科學、機器學習初學者下載地址&…

數據庫選擇有講究?SQLite、PostgreSQL還是MySQL?

不同規模的項目&#xff0c;數據庫選擇有講究。大家好&#xff0c;我是技術支持彼得&#xff0c;每天兩眼一睜就是為客戶解決問題。在日常使用我們的視頻平臺時&#xff0c;很多用戶會問到數據庫選擇的問題。今天就來詳細說說EasyGBS、EasyNVR和EasyCVR三大平臺該如何選擇數據庫…

在VMware的Win10虛擬機中安裝使用ENSP

VMware安裝Windows10 安裝ENSP及相關軟件 把安裝ENSP所使用的相關復制到已安裝好的Windows10虛擬機中&#xff0c;如下圖所示。 安裝VirtualBox 安裝時請確保路徑為英文目錄&#xff0c;并在出現"安裝設備軟件"或"Oracle USB設備"提示時選擇安裝選項。具…

Go 語言面試題詳解之接口 (Interface) 詳解一文吃透

自古流傳著一個傳言...在 Go 語言面試的時候必有人會問接口&#xff08;interface&#xff09;的實現原理。這又是為什么&#xff1f;為何對接口如此執著&#xff1f;實際上&#xff0c;Go 語言的接口設計在整體扮演著非常重要的角色&#xff0c;沒有他&#xff0c;很多程序估計…

ansible循環+判斷(with,loop,when,if,for)

一、文檔核心定位 本文檔聚焦Ansible自動化運維中的兩大核心功能——循環與判斷&#xff0c;通過“功能說明完整Playbook代碼”的形式&#xff0c;覆蓋循環迭代場景&#xff08;列表、字典、文件等&#xff09;、數據處理過濾器&#xff08;字符串、數字、加密等&#xff09;、…

在linux下使用MySQL常用的命令集合

1. 數據庫查看和選擇-- 查看所有數據庫 SHOW DATABASES;-- 選擇使用某個數據庫&#xff08;需要修改&#xff1a;your_database_name&#xff09; USE your_database_name;-- 查看當前正在使用的數據庫 SELECT DATABASE();說明&#xff1a;your_database_name 替換為你要操作的…