ZooKeeper分布式入门实战(一)-基本安装配置等

简介: ZooKeeper 是一款用于分布式系统的协调服务中间件,支持 Java 和 C 语言客户端 API。它确保分布式系统中数据的一致性、原子性、单一视图和可靠性。本文介绍了 ZooKeeper 的安装配置过程,涵盖 Linux 和 Mac OS 环境下的单机模式安装步骤,并提供了常用命令如启动、停止和查看运行状态等操作指南。通过配置环境变量和修改 zoo.cfg 文件,用户可以轻松搭建并管理 ZooKeeper 服务。
## 1 概述 ### 1.1 zookeeper 简介 - 中间件,提供协调服务 - 作用于分布式系统,发挥其优势,为大数据服务 - 支持 Java,提供 Java 和 C语言的客户端 API ### 1.2 什么是分布式系统 - 很多台计算机组成一个整体,一个整体一致对外并且处理同一请求 - 内部的每台计算机都可以相互通信(REST/RPC) - 客户端到服务端的一次请求到响应结束会经历多台计算机 ### 1.3 分布式系统的瓶颈 #### 1.3.1 zookeeper 的特性 - 一致性 数据一致性,数据按照顺序分批入库 - 原子性 事务要么成功要么失败,不会局部化 - 单一视图 客户端连接集群中的任一 zk 节点,数据都是一致的 - 可靠性 每次对 zk的操作状态都会保存在服务端 - 实时性 客户端可以读取到 zk 服务端的最新数据 ## 2 下载、安装以及配置 安装 JDK ### 2.1 单机模式 #### 2.1.1 Linux环境操作 ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy80Njg1OTY4LTZiNjMxZTM4YTYyY2MxZGEucG5n?x-oss-process=image/format,png) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy80Njg1OTY4LTcwMDc1MzU4MGVjODUyZGMucG5n?x-oss-process=image/format,png) ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy80Njg1OTY4LTI2MWI4MmZlMjI2NDc1NDcucG5n?x-oss-process=image/format,png) linux etc/profile: ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy80Njg1OTY4LWRlYWU3NTFjNTVhMzJiN2EucG5n?x-oss-process=image/format,png) #### 2.1.2 Mac OS操作 ```bash $brew install zookeeper ==> Downloading https://homebrew.bintray.com/bottles/zookeeper-3.4.6_1.mavericks.bottle.2.tar.gz ######################################################################## 100.0% ==> Pouring zookeeper-3.4.6_1.mavericks.bottle.2.tar.gz ==> Caveats To have launchd start zookeeper at login: ln -sfv /usr/local/opt/zookeeper/*.plist ~/Library/LaunchAgents Then to load zookeeper now: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.zookeeper.plist Or, if you don't want/need launchctl, you can just run: zkServer start ==> Summary ``` 安装成功后,在/usr/local/etc/zookeeper/目录,已有默认配置文件 ```bash $ cd /usr/local/etc/zookeeper/ $ ls zoo.cfg ``` 配置[/usr/local/etc/zookeeper/zoo.cfg] 文件 ```bash # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/local/var/run/zookeeper/data dataLogDir=/usr/local/var/run/zookeeper/log # the port at which the clients will connect clientPort=2181 ``` bin下的可执行文件: ![](https://img-blog.csdnimg.cn/20190901100223178.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_SmF2YUVkZ2U=,size_1,color_FFFFFF,t_70) ##### 手动下载 下载tar包解压,推荐使用3.5.x,不要使用3.6以高版本,和JDK1.8冲突,事到如今,也不要直接brew install zookeeper--默认会下载最高版本!很难用! 下载二进制安装包: https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.5.10/apache-zookeeper-3.5.10-bin.tar.gz 解压缩: ```bash tar -zxvf apache-zookeeper-3.5.10-bin.tar.gz ``` 将conf目录下的zoo_sample.cfg文件更名为zoo.cfg,简单修改配置文件,自定义设置数据文件目录和日志文件目录。 新建文件夹data和log: ```bash $ zookeeper-3.5.10 ll total 48 -rw-r--r--@ 1 sss admin 11K 5 19 2022 LICENSE.txt -rw-r--r--@ 1 sss admin 432B 5 19 2022 NOTICE.txt -rw-r--r--@ 1 sss admin 1.5K 5 19 2022 README.md -rw-r--r--@ 1 sss admin 1.3K 5 19 2022 README_packaging.txt drwxr-xr-x@ 13 sss admin 416B 5 19 2022 bin drwxr-xr-x@ 5 sss admin 160B 3 8 17:49 conf drwxr-xr-x 2 sss admin 64B 3 8 17:50 data drwxr-xr-x@ 21 sss admin 672B 5 29 2022 docs drwxr-xr-x 54 sss admin 1.7K 3 8 17:46 lib drwxr-xr-x 2 sss admin 64B 3 8 17:50 log ``` 修改路径地址:dataDir 和 dataLogDir ```properties # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/Volumes/doc/zookeeper-3.5.10/data dataLogDir=/Volumes/doc/zookeeper-3.5.10/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=60 # # 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 # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 ``` ##### 配置环境变量 sudo vi ~/.bash_profile ``` export ZK_HOME=/Volumes/doc/zookeeper-3.5.10/ export PATH=$PATH:$ZK_HOME/bin ``` ```bash $ cd bin $ bin zkServer.sh start ZooKeeper JMX enabled by default Using config: /Volumes/doc/zookeeper-3.5.10/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ``` ## 3 常用命令 ### 3.1 启动 执行命令zkServer: ```bash $ zkServer ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo.cfg Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd} ``` zkServer status ```bash $ zkServer status ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo.cfg Mode: standalone ``` zkServer start ```bash $ zkServer start ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo.cfg Starting zookeeper ... STARTED ``` ```bash brew services start zookeeper brew services restart zookeeper ``` ### 3.2 查看运行状态 ```bash $ zkServer status ZooKeeper JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo.cfg Mode: standalone ```
目录
相关文章
|
6月前
|
机器学习/深度学习 监控 算法
分布式光伏储能系统的优化配置方法(Matlab代码实现)
分布式光伏储能系统的优化配置方法(Matlab代码实现)
322 1
|
8月前
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
149 2
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
10月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
299 11
|
5月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
405 12
|
6月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
317 2
|
8月前
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
349 1
分布式新闻数据采集系统的同步效率优化实战
|
9月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
2506 7
|
10月前
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
912 4
|
5月前
|
消息中间件 分布式计算 资源调度
《聊聊分布式》ZooKeeper与ZAB协议:分布式协调的核心引擎
ZooKeeper是一个开源的分布式协调服务,基于ZAB协议实现数据一致性,提供分布式锁、配置管理、领导者选举等核心功能,具有高可用、强一致和简单易用的特点,广泛应用于Kafka、Hadoop等大型分布式系统中。