文章目录

  • **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 替换为你要操作的…