浅谈Zookeeper及windows下详细安装步骤

news2024/12/23 9:47:20

1. Zookeeper介绍

1.1 分布式系统面临的问题

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

面临的问题:系统每个节点之间信息同步及共享

  • 以一个小团队为例,面临的问题

image.png

  • 通过网络进行信息共享
    开发Leader在会上把任务分配下去,组员通过Leader的命令或者邮件 之类的系统知道自己要干什么.在分配有变化时,Leader会通知到具体的人,或者再次开会,通过人与人之间的直接沟通,完成信息传递
  • 通过共享存储
    Leader将任务分配放到SVN或者git等上,组员每天去svn,git上拉取最新的任务分配表,然后干活,其中svn,git 就是共享存储,更好一点的做法是,当svn,git文件更新时,触发邮件通知,每个组员再去拉,任务表,image.png

Zookeeper如何解决分布式系统面临的问题

ZooKeeper对分布式系统的协调,使用的是第二种方式,即共享存储。其实共享存储,分布式应用也需要和存储进行网络通信。
image.png

Zookeeper解决分布式系统协同工作问题

1.2 什么是Zookeeper

举个例子

美团,饿了么,等等应用都是zookeeper的现实生活版, 我开了个饭店,如何才能让大家都能吃到我们的饭菜?需要入驻美团,这样大家就可以在美团app中看到我的饭店,下订单,从而完成一次交易.

image.png

ZooKeeper是一个开源的分布式协调服务,由Apache软件基金会开发和维护。它旨在帮助构建分布式应用程序,提供高可用性和可靠性。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

ZooKeeper的主要特点如下:

  • 分布式协调:ZooKeeper提供了一个可靠的协调机制,使得分布式系统中的各个组件能够相互通信和协调工作。它维护了一个分层的命名空间,类似于一个文件系统,允许客户端创建、删除、查看和更新节点。
  • 高可用性:ZooKeeper通过在集群中多个服务器之间复制数据来实现高可用性。当其中一个服务器发生故障时,其他服务器能够接管服务并继续提供数据访问。
  • 顺序一致性:ZooKeeper提供了强一致性的保证,即所有的更新操作将按照它们被提交的顺序进行处理。这对于分布式系统中需要有序操作的场景非常重要,例如选举算法或分布式锁的实现。
  • 小巧灵活:ZooKeeper的设计简单轻量,核心功能集中在分布式协调方面,使其易于部署和集成到现有系统中。它使用Java编写,但也提供了对其他编程语言的支持。

1.3 Zookeeper的应用场景

1) 配置管理

  • 通常在分布式系统或集群中,所有节点的配置应该一致,比如Hadoop集群,要求对配置的修改,能够快速同步到各个节点中,可以通过 Zookeeper 实现

image.png

2) 服务注册中心

  • ZooKeeper服务注册中心,服务提供者将自己的服务信息(例如IP地址、端口号等)注册到ZooKeeper中,而服务消费者则通过查询ZooKeeper来发现可用的服务。

image.png

  1. 启动一个秒杀服务之后会向 ZooKeeper 进行注册操作(向 ZooKeeper 的指定文件夹写入该秒杀服务的信息,如 name、ip、port);然后 ZooKeeper 会创建当前秒杀服务的节点
  2. 客户端(服务调用者)连接 ZooKeeper 并获取秒杀服务的地址列表信息(① 不是每次发送请求都会获取地址列表信息,客户端会把地址列表信息缓存到本地;② 客户端会绑定节点改变事件)
  3. 客户端获得了秒杀服务的地址列表信息,在地址列表信息中随机选择一台秒杀服务发送请求
  4. 假如有秒杀服务宕机,ZooKeeper 会在注册中心移除掉该秒杀服务的地址信息并通知客户端进行地址列表信息的更新(ZooKeeper 通过心跳机制知道服务器是否宕机)
  5. 客户端接收到 ZooKeeper 的通知,并修改地址列表信息

3) 主从协调

image.png

上图,两台服务器 server 01、server 02 构成集群。如果是主备集群,那台服务器一开始是 Active ?那台服务器一开始是 Standby ? 可通过 ZooKeeper 进行协调指定。

  1. 两台服务器启动,向 ZooKeeper 注册中心写入注册信息,并绑定对应的值绑定事件
  2. 两台服务器都判断一下自己写入的注册信息在 ZooKeeper 注册中心的注册信息列表中是否是第一条记录?第一条记录作为 Active 节点或 Master 节点,除第一条记录之外的都是 Standby 节点或 Slave 节点。
  3. ZooKeeper 的节点信息发生改变(新的服务器加入、旧的服务器宕机)之后,① 通知所有的已绑定值改变事件的客户端更新节点列表信息;② 向所有的服务器发送值改变的通知
  4. 所有的服务器接收到值改变通知后,执行步骤 2

4) 分布式锁

image.png

  1. 全部的订单服务在调用 createId 接口前都往 ZooKeeper 的注册中心的指定目录写入注册信息(如 /lock/server 01)和绑定值改变事件
  2. 全部的订单服务判断自己往注册中心指定目录写入的注册信息是否是全部注册信息中的第一条?如果是,调用 createId 接口(不是第一条就等着)。调用结束后,去注册中心移除自己的信息
  3. ZooKeeper 注册中心信息改变后,通知所有的绑定了值改变事件的订单服务执行第 2 条

3. 搭建Zookeeper服务器

3.1 windows下部署

3.1.1 下载安装包

下载地址: https://mirrors.cloud.tencent.com/apache/zookeeper/zookeeper-3.7.1/

也可以直接从资料中获取

3.1.2 修改配置文件

image.png

  • 打开apache-zookeeper-3.7.0-bin\conf目录,将 zoo_sample.cfg复制一份,命名为 zoo.cfg
  • 打开 zoo.cfg,修改 dataDir路径,新增日志 dataLogDir路径
 dataDir=../data
 dataLogDir=../log
3.1.3 zoo.cfg 配置文件说明
 # zookeeper时间配置中的基本单位 (毫秒)
 tickTime=2000
 # 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
 initLimit=10
 # 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
 syncLimit=5
 #zookeper 数据存储目录及日志保存目录(如果没有指明dataLogDir,则日志也保存在这个文件中)
 dataDir=/tmp/zookeeper
 #对客户端提供的端口号
 clientPort=2181
 #单个客户端与zookeeper最大并发连接数
 maxClientCnxns=60
 # 保存的数据快照数量,之外的将会被清除
 autopurge.snapRetainCount=3
 #自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
 autopurge.purgeInterval=1
3.1.4 启动Zookeeper
  • 启动Zookeeper服务端

image.png

  • 启动Zookeeper客户端

image.png

3.2 linux下部署

3.2.1 上传zookeeper

前提:由于zookeeper是使用java语言开发的,所以,在安装zookeeper之前务必先在本机安装配置好java环境!

1) 上传zookeeper

image.png

2) 解压zookeeper

image.png

3.2.2 配置环境变量

1) 配置conf

进入到安装目录的…/conf目录下

image.png

可以看到这里有个zoookeeper给我们的一个样例配置文件:zoo_sample.cfg,我们在配置我们自己的zk时,需要做的就是将这个文件复制一份,并命名为:zoo.cfg,然后在zoo.cfg中修改自己的配置即可。

[root@localhost conf]# cp zoo_sample.cfg  zoo.cfg
[root@localhost conf]# vim zoo.cfg 

zoo.cfg的相关配置项其实并不多,这边各个配置项的详细说明如下:

# zookeeper内部的基本单位,单位是毫秒,这个表示一个tickTime为2000毫秒,在zookeeper的其他配置中,都是基于tickTime来做换算的
tickTime=2000

#集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)。
initLimit=10

#syncLimit:集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)
syncLimit=5

# 数据存放文件夹,zookeeper运行过程中有两个数据需要存储,一个是快照数据(持久化数据)另一个是事务日志
dataDir=/tmp/zookeeper

# 客户端访问端口
clientPort=2181

2) 配置环境变量

vim /etc/profile

export ZOOKEEPER_PREFIX=/root/software/apache-zookeeper-3.7.1-bin
export PATH=$PATH:$ZOOKEEPER_PREFIX/bin

执行下面的命令,使配置生效

source profile
3.2.3 启动服务
zkServer.sh start

image.png

可以看到我们的zkServer以及启动好了。
可以查看下启动状态:

zkServer.sh status

image.png

客户端连接

image.png

根目录下有一个自带的/zookeeper子节点,它来保存Zookeeper的配额管理信息,不要轻易删除。

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024契约锁新春年会|拓百城·聚万力·共价值

契约锁全国各地的伙伴齐聚上海前滩香格里拉,携手开启“2024联结伙伴 深耕百城 聚焦大客户”的新征程! 年会精彩看点回顾2023持续向上发展,感恩客户伙伴的支持! 这一年,电子签章成为组织数字化建设中的刚性需求&#…

idea常用设置

1、内存优化 根据自己电脑本身的内存,对idea安装包里bin目录下的idea64.exe.vmoptions文件进行修改 -server -Xms256m -Xmx2048m -XX:MaxPermSize1024m -XX:ReservedCodeCacheSize256m -ea -Dsun.io.useCanonCachesfalse -Djava.Net.preferIPv4Stacktrue -Djsse.e…

nginx日志格式脚本

​ Nginx日志主要分为两种: access_log(访问日志):记录客户端请求的信息,可以指定 log_format。 error_log(错误日志):记录应用程序问题等信息,不可以指定log_format …

【数据结构 09】哈希

哈希算法:哈希也叫散列、映射,将任意长度的输入通过散列运算转化为固定长度的输出,该输出就是哈希值(散列值)。 哈希映射是一种压缩映射,通常情况下,散列值的空间远小于输入值的空间。 哈希运…

Redis核心技术与实战【学习笔记】 - 22.浅谈Redis的ACID相关知识

概述 事务是数据库的一个重要功能。所谓的事务,就是指对数据进行读写的一系列操作。事务在执行时,会提供专门的属性保证,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isol…

python脚本将照片按时间线整理

说明:有一次自己瞎折腾,然后把服务器相册搞崩了,后来做了备份同步给找了回来,但是相册的时间线全乱了,看起来非常难受。所以就想通过文件夹的形式把照片重新分类,分类后的结构如下(红色字体为文件夹)&#…

西瓜书学习笔记——核化线性降维(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 核化线性降维是一种使用核方法(Kernel Methods)来进行降维的技术。在传统的线性降维方法中,例如主成分分析(PCA)和线性判别分析(LDA),数据被映…

React实例之完善布局菜单(三)

接着上篇的内容继续。规划界面布局。界面分为三个部分,左边为菜单部分,右边上部有个 80 px 高度左右的功能区,下面是主内容区。 依据这个设计,我们进行下面的步骤: 在 SMenu项目中创建一个目录: SLayout, …

解放网工双手-SNMP如何做好运维辅助?

1. SNMP为什么被誉为“网管神器”? 2. SNMP不同版本有何区别? 3. SNMP有哪些问题及Telemetry有何优势? ---- SNMP ----- 简单网络管理协议 U2000:传输设备管理 企业,银行 esight:华为 iMaster NCE-Camp…

【webpack】技巧使用

webpack和TypeScript 安装webpack相关内容安装TS相关内容配置初始化数据初始化运行展示和目录展示报错解决(缺失文件配置) 安装前端必备神奇lodash测试一下entry配置index.html模板配置修改打包出来的index.html的titleinject注入chunks 属性多页面配置 …

从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践

原文来源: https://tidb.net/blog/a38c72a4 本文作者:骏伯网络 唐帆,PingCAP 贺美存 骏伯网络简介 广州骏伯网络是一家以数据驱动的科技公司,聚焦移动互联网营销服务,坚持以客户为中心,深耕 APP、运营…

大数据学习之Redis,十大数据类型的具体应用(四)

3.8 Redis基数统计(HyperLogLog) 需求 统计某个网站的UV、统计某个文章的UV 什么是UV unique Visitor ,独立访客,一般理解为客户端IP 大规模的防止作弊,需要去重复统计独立访客 比如IP同样就认为是同一个客户 需要去…

sqli.labs靶场(29到40关)

29、第二十九关 id1 id1 尝试发现是单引号闭合, -1 union select 1,2,3-- -1 union select 1,2,database()-- -1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)-- -1 union select 1,2,(select…

国内最全的Spring Boot系列之七

• 阿里巴巴前高级研发工程师 • 三家千万级互联网企业技术顾问 • MBTI/盖洛普技术专家 • 厦门某高校外聘教师 • 51CTO特约合作讲师 • 网易云课堂签约讲师 •《深入理解设计模式》作者 一转眼马上要过年了,回首2023年,感觉自己无所事事、碌碌无…

python爬虫5

1.selenium交互 无页面浏览器速度更快 #配置好的自己不用管 from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschrome_options Options()chrome_options.add_argument(‐‐headless)chrome_options.add_argument(‐‐disable‐gpu)# path…

编程效率的跃升之路

编程是一门需要大量的时间和精力投入的技能,提高编程效率则是一个需要不断学习和实践的过程。结合笔者写bug多年的经验,一些学习建议和资源和大家share下。 一、编程如何提效: 熟悉开发工具:掌握常用的开发工具,如集…

flutter抓包绕过

lutter的证书校验 起因: 最近工作上让做个app的复测,把apk发我后,开始尝试挂代理抓包,结果发现抓不到 为是证书没弄好,想着前几天不是刚导入了吗(雾)。又重新导入了下还是不行。然后各种lsp模…

OJ_找位置

题干 代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<algorithm> #include<map> using namespace std;int main() {char str[200] { 0 };scanf("%s", str);map<char, vector<int>> times…

ROS入门之通信机制及常用API

文章目录 前言一、话题通信1.话题通信理论2.话题通信常用API&#x1f357;发布者advertisepublish &#x1f356;订阅者subscribe 3.自定义msg 二、服务通信1.服务通信理论2.服务通信常用API&#x1f386;服务端advertiseService &#x1f387;客户端serviceClientros::service…

[大厂实践] Pinterest通用计算平台实践

Pinterest平台团队开发实现了名为PinCompute的高性能通用计算平台&#xff0c;支持Pinterest的大量异构用例和服务。本文介绍了团队在开发这一平台过程中的经验和实践&#xff0c;对于其他平台团队来说&#xff0c;具有很好的参考意义。原文: PinCompute: A Kubernetes Backed …