主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
Zookeeper是Apache的顶级项目。它为分布式应用程序提供高效、高可用的分布式协调服务,并提供分布式基本服务,如数据发布/订阅、负载平衡、命名服务、分布式协调/通知和分布式锁定。zookeeper由于其使用方便、性能优异和稳定性好,被广泛应用于大型分布式系统中,如Hadoop、HBase、Kafka和Dubbo。
Zookeeper有三种操作模式:单机模式、伪集群模式和集群模式。
- 独立模式:此模式通常适用于开发和测试环境。一方面,我们没有那么多的机器资源。另一方面,正常的开发和调试不需要很好的稳定性。
- 集群模式:zookeeper集群通常由一组机器组成。通常,3台以上的机器可以组成一个可用的zookeeper集群。zookeeper集群中的每台机器都将在内存中保持当前服务器状态,并且每台机器都将彼此保持通信。
- 伪集群模式:这是一种特殊的集群模式,即集群中的所有服务器都部署在一台机器上。当您手头有一台好的机器时,如果您将其部署为独立模式,将浪费资源。在这种情况下,zookeeper允许您通过启动不同的端口在一台机器上启动多个zookeeper服务实例,从而提供具有集群特征的外部服务。
动物园管理员的相关知识
- zookeeper中的角色负责人:负责发起和决定投票,并更新系统状态
- Follower:用于接收客户端请求并将结果返回给客户端,并在选择主节点的过程中进行投票
- 观察者:可以接受客户端连接,将写请求转发给领导,但观察者不参与投票过程,只是为了扩展系统,提高读取速度。
动物园管理员数据模型
- 分层目录结构和命名符合通用文件系统规范,类似于Linux
- 每个节点在zookeeper中称为znode,并具有唯一的路径ID
- 节点znode可以包含数据和子节点,但临时类型的节点不能有子节点
- znode中的数据可以有多个版本。例如,如果某个路径下有多个数据版本,则需要使用该版本来查询该路径下的数据
- 客户端应用程序可以在节点上设置监视器
- 该节点不支持部分读写,但支持一次完全读写
zookeeper节点的生命周期取决于节点的类型。在zookeeper中,节点可以根据持续时间分为持久节点和短暂节点。根据节点是否有序(默认为无序),可以将节点分为顺序节点和无序节点。
创建持久节点后,它将始终保存在zookeeper中,除非它被主动删除(它不会因为创建节点的客户端会话失败而消失)和临时节点
Zookeeper是一个高度可用的分布式数据管理和系统协调框架。该框架基于Paxos算法的实现,保证了分布式环境下数据的强一致性。zookeeper正是基于这一特性解决了许多分布式问题。
值得注意的是,zookeeper本质上并不是为这些应用场景而设计的。它是许多开发人员根据其框架的特点使用其提供的一系列API接口(或原语)探索的一种典型使用方法。
发布订阅模式,顾名思义,就是发布者将数据发布到ZK节点,供用户动态获取数据,实现配置信息的集中管理和动态更新。例如,面向服务的服务框架的全局配置信息和服务地址列表非常适合使用。
应用程序中使用的一些配置信息放在ZK上进行集中管理。这种场景通常是这样的:当应用程序启动时,它会主动获取配置。同时,它将在节点上注册一个观察者。这样,以后每次更新配置时,都会实时通知订阅的客户端,以达到获取最新配置信息的目的。在分布式搜索服务中,索引的元信息和服务器集群机的节点状态存储在ZK的一些指定节点中,用于每个客户端订阅。分布式日志收集系统。该系统的核心工作是收集分布在不同机器上的日志。收集器通常根据应用程序分配收集任务单元。因此,有必要在ZK上创建一个以应用程序名称作为路径的节点P,并以子节点的形式在节点P上注册应用程序的所有机器IP。这样,当机器发生变化时,它可以通知收集器实时调整任务分配。系统中的一些信息需要动态获取,并且会有关于手动修改这些信息的问题。它通常公开接口,如JMX接口,以获取一些运行时信息。引入ZK后,您不需要自己实现一组方案,只需将这些信息存储在指定的ZK节点上即可。注意:在上面提到的应用场景中,有一个默认前提:数据量很小,但数据更新可能很快。
负载平衡
这里的负载平衡指的是软负载平衡。在分布式环境中,为了确保高可用性,通常同一应用程序或服务提供商将部署多个副本以实现对等服务。用户需要从这些对等服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中的生产者和消费者负载平衡。
命名服务
命名服务也是分布式系统中的常见场景。在分布式系统中,通过使用命名服务,客户端应用程序可以根据指定的名称获取资源或服务的地址、提供者等信息。命名实体通常可以是集群中的机器、提供的服务地址、远程对象等&mdash—所有这些都可以统称为它们的名字。在一些分布式服务框架中,更常见的是服务地址列表。通过调用ZK提供的用于创建节点的API,可以轻松创建全局唯一路径,该路径可用作名称。
阿里巴巴集团的开源分布式服务框架Dubbo使用zookeeper作为其命名服务来维护全球服务地址列表。在Dubbo实现中:当服务提供者启动时,它将其URL地址写入ZK上指定节点的/Dubbo/${servicename}/providers目录。此操作完成服务的发布。当服务使用者启动时,订阅/Dubbo/${servicename}/providers目录中的提供者URL地址,并将其自己的URL地址写入/Dubbo/${servicename}/consumers目录。请注意,向ZK注册的所有地址都是临时节点,这确保服务提供者和使用者可以自动感知资源更改。
此外,Dubbo还通过订阅/Dubbo/${servicename}目录中所有提供者和使用者的信息来监视服务粒度。
分布式通知/协调
zookeeper独特的观察者注册和异步通知机制可以很好地实现分布式环境下不同系统之间的通知和协调,实现数据变化的实时处理。使用方法通常是不同的系统在ZK上注册相同的znode,并监听znode的变化(包括znode本身和子节点的内容)。如果一个系统更新znode,另一个系统可以接收通知并相应地进行处理。
另一种心跳检测机制:被检测系统和被检测系统没有直接的联系,而是通过ZK上的一个节点,这大大降低了系统耦合。另一种系统调度模式:系统由控制台和推送系统组成。控制台的职责是控制推送系统执行相应的推送工作。管理者在控制台上执行的一些操作实际上修改了ZK上某些节点的状态,ZK将这些更改通知给注册观察者(即推送系统)的客户机,以便他们执行相应的推送任务。
另一种工作报告模式:有些类似于任务分发系统。子任务启动后,到ZK注册一个临时节点,并定期报告其进度(将进度写回临时节点),以便任务管理器能够实时了解任务进度。
分布式锁
分布式锁主要是由于zookeeper保证了数据的强一致性。锁服务可以分为两类:一类是保持独占性,另一类是控制定时。
所谓keep exclusive是指只有一个试图获得锁的客户端才能成功获得锁。通常的方法是将ZK上的znode视为锁,并通过创建znode来实现它。所有客户端创建/分发锁节点(最终成功创建的客户端)拥有锁。控制定时是指所有查看以获取锁的客户端最终都将被安排执行,但有一个全局定时。该方法基本上与上述方法类似,只是此处/distribute_uu;Lock已经预先存在,并且客户端在其下创建一个临时有序节点(这可以由节点属性:createmode控制)。短暂的(连续的)。ZK(/distribute)uulock)的父节点维护一个序列,以确保创建子节点的时间,从而形成每个客户端的全局时间。
由于同一节点的子节点的名称不能相同,因此只要在节点下创建znode,成功创建表示成功锁定。注册一个侦听器以侦听此znode。只要删除此znode,就会通知其他客户端锁定它。创建临时顺序节点:在节点下创建节点。当请求到来时,创建一个节点。因为它是连续的,所以序列号最小的一个获得锁。释放锁后,通知下一个序列号以获取锁。
分布式队列
就队列而言,有两种类型:一种是传统的先进先出队列,另一种是等待队列成员聚集后再按顺序执行。第一种类型的队列符合上述分布式锁服务中控制定时场景的基本原理,这里不再重复。
第二个队列实际上是基于FIFO队列的增强。通常,可以在/queue的znode下预先建立/queue/num节点,并分配n(或直接分配n到/queue),表示队列大小。然后,每次队列成员加入时,判断队列大小是否已达到,并决定是否可以开始执行。这种用法的典型场景是,在分布式环境中,当许多子任务完成(或条件就绪)时,需要执行大型任务a。此时,当其中一个子任务完成(准备就绪)时,转到/tasklist创建您自己的临时计时节点(createmode)。短暂的)uuSequential),当/tasklist发现它下面的子节点数量符合指定的数量时,它可以按顺序进入下一步。
我们已经介绍了很多关于zookeeper的应用场景。接下来,我们将学习如何构建zookeeper集群,然后执行上面的应用场景。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 版本:39,;3.4' 服务:;zoo1:;图片:zookeeper;重新启动:始终;主机名:zoo1;端口: ; ;-2181:2181;环境:nbsp;动物园我的id:1和nbsp;zoo_uu服务器:server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181;zoo2:;图片:zookeeper;重新启动:始终;主机名:zoo2;端口: ; ;-2182:2181;环境:nbsp;动物园我的id:2 nbsp;zoo_uu服务器:server.1=zoo1:2888:3888;2181服务器。2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181;zoo3:;图片:zookeeper;重新启动:始终;主机名:zoo3;端口: ; ;-2183:2181;环境:nbsp;动物园我的id:3 nbsp;zoo_uu服务器:server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181服务器3=0.0.0.0:2888:3888;二千一百八十一 |
在此配置文件中,docker运行三个zookeeper映像,并通过ports字段将本地端口2181、2182和2183绑定到相应容器的端口2181。
zoo_uuMy_uuid和zoo_uuuu服务器是构建zookeeper集群所需的两个环境变量。zoo_uu_u;my_uuuID标识服务的ID。它是一个介于1和255之间的整数,在群集中必须是唯一的。zoo_uu服务器是群集中的主机列表。
在docker-compose.yml所在的目录中执行docker compose up,您可以看到启动日志。
集群启动后,我们可以连接zookeeper来执行与节点相关的操作。
首先,我们需要下载zookeeper。Zookeeper下载地址。将其解压到conf目录并删除zoo_uuchange示例。CFG到zoo.CFG
外形描述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #每个滴答声的毫秒数#滴答声时间:CS通信心跳#服务器之间或客户端与服务器之间保持心跳的时间间隔,即每次滴答声将发送一个心跳。滴答声时间以毫秒为单位。ticktime=2000#初始#同步阶段可采取的节拍数#initlimit:LF initial communication time limit#群集中跟随服务器(f)和引导服务器(L)之间初始连接期间可容忍的最大心跳数(节拍数)。initlimit=5#在#发送请求和获得确认#synclimit之间可以传递的节拍数:LF同步通信时间限制集群中跟随者服务器和领导者服务器之间的请求和响应之间可以容忍的最大心跳数(节拍数)。synclimit=2#存储快照的目录。#不要将/TMP用于存储,这里的/TMP只是示例dataDir:存储快照的目录zookeeper保存数据。默认情况下,Zookeeper还保存在该目录中写入数据的日志文件。datadir=/data/soft/zookeeper-3.4.12/data ;Datalogdir:log file directory#保存日志文件的目录。datalogdir=/data/soft/zookeeper-3.4.12/logs客户端将连接的端口#clientport:客户端连接端口#客户端连接到zookeeper服务器的端口。Zookeeper将侦听此端口并接受客户端的访问请求。clientport=2181#客户端连接的最大数量。#如果需要处理更多客户端,请增加此值#maxclientcnxns=60####在启用自动推送之前,请务必阅读#管理员指南#的维护部分。#http://zookeeper.apache.org/doc/current/zookeeperadmin.html#sc#maintenance##要保留在datadir中的快照数#autopush.snapretaincount=3#清除任务间隔(小时)#设置为";0“;要禁用自动清除功能#autopurge.purgeinterval=1服务器名称和地址:集群信息(服务器编号、服务器地址、LF通信端口、选择端口)#此配置项具有特殊的写入格式。规则如下所示:server.n=yyy:a:b其中n表示服务器编号,YYY表示服务器的IP地址,a表示LF通信端口,它表示服务器与群集中的领导者之间交换的信息端口。B为选择端口,表示选择新领导时服务器之间相互通信的端口(领导挂断时,其他服务器将相互通信并选择新领导)。一般来说,集群中每台服务器的a端口是相同的,每台服务器的B端口也是相同的。但是,使用伪集群时,IP地址相同,只有端口a和端口B不同。 |
默认配置正常,无需修改zoo.cfg。接下来,执行命令。/zkcli.sh-要连接的解压缩bin目录中的服务器127.0.0.1:2181。
欢迎来到动物园管理员!
2020-06-01 15:03:52512[myid:]-信息[主发送线程(本地主机:2181):clientcnxn$sendthread@1025]-打开到服务器本地主机的套接字连接/127.0.0.1:2181。将不会尝试使用sasl进行身份验证(未知错误)
jline支持已启用
2020-06-01 15:03:52576[myid:]-信息[主发送线程(本地主机:2181):clientcnxn$sendthread@879]-已建立到本地主机的套接字连接/127.0.0.1:2181,启动会话
2020-06-01 15:03:52599[myid:]-info[主发送线程(本地主机:2181):clientcnxn$sendthread@1299]-在服务器localhost/127.0.0.1:2181上完成会话建立,会话ID=0x1000014008000,协商超时=30000
观察者::
watchedevent状态:syncconnected类型:无路径:null
[zk:127.0.0.1:2181(已连接)0]
命令:LS/
[动物园管理员]```
新的znode节点“zk”以及与之关联的字符串
创建/zk[zk:127.0.0.1:2181(已连接)12]ls/[zk,zookeeper][zk:127.0.0.1:2181(已连接)13]```
mydata czxid=0x400000008 ctime=mon jun 01 15:07:50 cst 2020 mzxid=0x400000008 mtime=mon jun 01 15:07:50 cst 2020 pzxid=0x400000008 cversion=0 dataversion=0 aclversion=0 ephemeralowner=0x0 datalength=6 numchildren=0
```
[zk:127.0.0.1:2181(已连接)15]ls/[zookeeper]```
由于篇幅有限,下一篇文章将根据上面提到的zookeeper应用场景以代码逐一实现它。
从GitHub中提取项目,并在zookeeper文件夹中执行docker compose up命令
参考文章
http://www.jucaiylzc.cn /2011/10/08/1232/
http://www.dongdongrji.cn /2019/04/25/1_uu动物园管理员%E8%AF%A6%E8%A7%A3/
https://www.jintianxuesha.com /cyfonly/p/5626532.html
http://www.hengxuangyul.com .com/docker zookeer cluster/
https://www.qiaoheibpt.com maizitoday.github.io/post/zookeeper%E5%85%A5%E9%97%A8/
总结
这是本文的结尾,介绍了历史上构建zookeeper服务器最方便的方法。有关构建zookeeper服务器的更多信息,请搜索server home之前的文章或继续浏览下面的相关文章。我希望你将来能支持服务器家庭!
以上就是主机参考分享的关于 历史上构建zookeeper服务器最方便的方法(推荐) 的内容,部分内容来源自网络,不代表本站观点。
转载请注明:https://zhujicankao.com/?p=65070
这几篇文章你可能也喜欢:
- Mondoze:住宅IP/原生IP/IDC IP,VPS低至$8.33/马来西亚服务器/AS152742/11.11促销
- torchbyte 罗马尼亚 VPS 起价为 20 美元/年,AMD Ryzen9+ NVMe 硬盘,免费 DDoS 防护
- zlidc(智联IDC):韩国原生IP云服务器,35.9美元/季度,4核/4G内存/50G SSD/300M优质网络@2.5T月流量
- 椰草云双11活动:香港云服务器81元/年,香港实体服务器199元/月(香港云服务商)
- Casbay 的黑色星期五促销活动为热门 VPS 提供高达 30% 的折扣,每月仅需 5.59 美元
本文由主机参考刊发,转载请注明:历史上构建zookeeper服务器最方便的方法(推荐) https://zhujicankao.com/65070.html
评论前必须登录!
注册