Zookeeper系统性学习-应用场景以及单机、集群安装

Zookeeper 是什么?

Zookeeper 为分布式应用提供高效且可靠的分布式协调服务,提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面,ZooKeeper 并没有直接采用 Paxos 算法,而是采用了名为 ZAB 的一致性协议

ZooKeeper 主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储。但是 ZooKeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控存储数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理

很多大名鼎鼎的框架都基于 ZooKeeper 来实现分布式高可用,如:Dubbo、Kafka 等

Zookeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心

Zookeeper 数据结构

Zookeeper 数据结构为一棵树,每一个节点成为 ZNode,每个 ZNode 默认存储 1MB 数据

Zookeeper 应用场景

统一命名服务

对多个相同服务进行统一命名,可以负载均衡以及提高可用性

统一配置管理

在分布式环境下,保证所有节点配置信息一致,并保证在修改配置文件之后,快速可以同步到各个节点中

实现:在 Zookeeper 中维护一份配置文件,客户端监听配置文件,保证配置文件修改后可以同步到最新配置

Zookeeper 安装

https://zookeeper.apache.org/

去官网下载 3.5.7-bin-tar.gz

单机

  1. 安装 jdk
  2. 下载 bin.tar.gz 包
  3. 解压 tar -zxvf xxxbin-tar.gz -C /解压目录

修改 zookeeper 配置文件 ./conf/zoo.cfg

bash 复制代码
cd conf
# 将示例配置文件复制一份
cp zoo_sample.cfg zoo.cfg
# 修改配置文件
vi zoo.cfg
# 修改 dataDir 数据存储目录,可以在安装的zookeeper目录下创建 zkData 目录,将数据存储目录设置为 zkData 目录
dataDir= 

# 启动服务
./bin/zkServer.sh start
# 查看是否启动
jps -l

# 启动客户端
./bin/zkCli.sh

# 查看 zookeeper 状态
bin/zkServer.sh status

配置文件解析

Zookeeper 配置文件内容如下:

bash 复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
  • tickTime

    通信心跳时间,单位毫秒,是 Zookeeper 服务器与客户端心跳事件

  • initLimit

    LF 初始通信时间,Leader 和 Follower 初始连接时能容忍的最多心跳数

    即如果 initLimit=2,tickTime=2000,那么 Leader 和 Follower 初始连接时间最大不能超过 2 * 2000ms = 2秒

  • syncLimit

    LF 同步通信时限

    Leader 和 Follower 之间通信如果超过 syncLimit * tickTime,则 Leader 认为 Follower 挂掉,从服务器列表中删除 Follower

  • dataDir:保存 Zookeeper 中的数据

    默认 tmp 目录,Limux 中 tmp 目录定期删除,一般不用默认目录

Zookeeper 集群安装

在 3 台服务器上部署 zookeeper,假设服务器分别为:zk1、zk2、zk3

部署流程为:

1、解压安装

解压安装到 /develop/ 目录下,并且改名为 zookeeper,最终 zookeeper 目录为 /develop/zookeeper/

2、配置服务器编号

单台服务器编号配置

bash 复制代码
# 在 /develop/zookeeper/ 目录下创建目录 zkData,用于存放数据
cd /develop/zookeeper
mkdir zkData

# 在 zkData 目录下创建 myid 文件
vi myid

# myid 文件内容,作为身份标识
1

将上述的 zookeeper 目录拷贝到其他两台服务器,并且修改 myid 内容分别为 2、3

3、配置 zoo.cfg 文件

bash 复制代码
# 在每一台服务器将 zoo_sample.cfg 命名为 zoo.cfg
mv zoo_sample.cfg zoo.cfg
vim zoo_cfg

# 修改数据存储路径
dataDir=/develop/zookeeper/zkData
# 增加集群配置
server.1=ip:2888:3888
server.2=ip:2888:3888
server.3=ip:2888:3888

上边集群配置参数解释:

server.A=B:C:D

A 表示为服务器的 myid

B 表示服务器 ip

C 表示服务器 Follower 和集群中的 Leader 服务器交换信息的端口

D 表示集群中 Leader 如果挂了,需要用来选举的通信端口

4、启动集群

在每台服务器中进行启动

zkServer.sh start

可以使用命令 zkServer.sh status 查看启动状态,当集群超过半数节点启动后,状态才为正常(如果不超过半数启动,无法选举 Leader)

相关推荐
weixin_4462608517 分钟前
AI大模型学习
人工智能·学习
行然梦实23 分钟前
学习日记_20241126_聚类方法(Affinity Propagation)
学习·聚类
GivemeAK24 分钟前
[Foc学习记录00]导览
学习
zmd-zk2 小时前
kafka命令的使用——主题命令(topic)
大数据·分布式·学习·kafka
Octopus20772 小时前
【Linux】vim的使用
linux·笔记·学习·vim
飞天大拖把2 小时前
RabbitMQ
分布式·rabbitmq
shiming88792 小时前
RabbitMQ高级特性:TTL、死信队列与延迟队列
分布式·rabbitmq·ruby
red_redemption2 小时前
自由学习记录(25)
学习·lua
bylander2 小时前
【AI学习】Mamba学习(十八):S6的硬件感知设计
人工智能·深度学习·学习·机器学习
人不走空3 小时前
【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
分布式·zookeeper·kafka