面试官:Zookeeper集群怎么搭建?

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 本文介绍如何搭建Zookeeper集群。

一、前言



作为一名Java拧螺丝选手,不必要掌握造火箭的能力就可以工作,但是面试官偏偏要难为兄弟们,这我就有点看不下去了,我只能带上家里的火箭当场向面试官证明自己。


虽然我这个二踢脚可能算不上火箭,但是跟火箭的原理差不多,都是点火往天上发射的,我掌握了这个就相当于掌握了造火箭的能力。


关键是我这玩意它好使呀,往面试官桌子上一摆,面试官直接跟我谈薪资了,会造火箭就是不一样。


至于你问为什么面试官明明只招拧螺丝的选手,但是却问火箭的底层原理、火箭的集群怎么搭建,怎么保证火箭的投递可靠性(发射失败我就再发射一颗),怎么保证火箭的幂等性(同一颗火箭发射多次和发射一次是一样的效果)


这个问题就不需要你去问面试官啦,我上次已经问过了,面试官的回答让我哑口无言。。。


我:面试官您好,请问为什么招我进去拧螺丝,却问我火箭的底层原理呢?


面试官:这特么还不都怪你们。。。


我:我们?我们怎么了。。。


面试官:十年前我面试员工,那个时候只有一部分人说会拧螺丝,我面试一个录取一个。


面试官:八年前我面试员工,所有人都说会拧螺丝了,我不知道该录取谁了,然后有一两个人说他会造摩托,我一听这俩人不错呀,毕竟我也刚刚只会造摩托就这俩吧,花拧螺丝的钱招了两个造摩托的。


面试官:五年前我面试员工,所有人都说会造摩托了,我又不知道该录取谁了,然后有一两个人说会造汽车,我心想这不错呀,我这的老员工没有会造汽车的,你既然会就来吧,工资给你比老员工高点。


面试官:三年前我面试员工,所有人都说会造汽车了,我又又不知道该录取谁了,然后有一两个人说会造火箭,我特么只能录取这两个会造火箭的了。。。,并且为了面试我还去学了一些火箭的原理,我们这个摩托车修理店根本用不到这些原理,但是没办法,谁让这些人这么卷呢。


面试官:今天,我只能面试会造火箭的人了,虽然他们进来也只会拧螺丝。。。


我:那既然说会造火箭的人也只会拧螺丝,那你为什么不直接录取只会拧螺丝的选手呢?


面试官:你以为我没有招收面试只会拧螺丝的吗,我招收了,结果。。。


我:结果怎么样?


面试官:他把公司唯一的火箭给拆了。。。


二、面试



在一个晴朗的周二,我来到了“决战天通苑、生死西二旗”中著名的西二旗桥下。


我怀着一颗忐忑的心走向即将要去赴约面试的公司,一路上我忐忑不安,不知道今天的面试会不会顺利,一会面试官会不会刁难我,接待我的hr小姐姐好不好看。。。


不知不觉我来到了公司楼下,打电话给hr,她说给你留门了,门没锁,直接上来吧。。。


HR:小奇是吧,带简历了吗?


我:带,带,带了。。。(吸溜),我把简历交给了HR,并急切的询问什么时候开始呢,我等不及了。。。


HR:别急嘛,先做一套笔试题


我:哦,我领取了一份笔试题,并来到了做题的会议室,这个会议室不大,但是坐满了人。。。


我:我做完了题后发现好基友微信群里问我在干嘛,我就随手拍了一张照片发给了他们,我不是故意拍答案的呀,但是这桌子太小人太多,毕竟0.8平米的桌子围着坐了8个人。。。


我:后来公司里人要开会,差点把我们正在做题的人撵走,我也是服了这个公司了,看我一会虐不虐他们的面试官就完了。


面试官:做一个自我介绍吧。


我:面试官你好,我本科毕业于山东翔蓝,精通挖掘机技术,研究生进入华清大学学习火箭研发技术,博士进入大北大学学习在火箭高并发发射情况下如何保证火箭一致性问题,不会造成误发射了其它队友的火箭。


三、Zookeeper集群模式与集群角色



面试官:可以呀小伙子,那你说说zookeeper集群有哪些模式吧


我:zookeeper集群无非有三种搭建方式,一是单机模式、二是伪分布模式、三是分布式模式。


面试官:嗯。zookeeper集群中都有哪些角色呢


我:有三种角色,一是Leader角色,可以处理读写请求,集群中只能有一个Leader角色,二是Follower角色,只能处理读请求,同时也是Leader的候选节点,如果Leader节点挂了,Follower节点就可以选举为Leader节点,三是Observer节点,该节点只能处理读请求,不能参与Leader的选举。


1.png


四、Zookeeper集群搭建方式



面试官:嗯,那你说说zookeeper集群搭建的具体步骤吧


我:首先我们下在zookeeper后有一个配置文件为zoo_sample.cfg,我们可以修改为zoo1.cfg这样更好记一些,然后我们编辑配置文件


2.png


dataDir=[保存数据的目录]

clientPort=[客户端连接zookeeper服务器的端口]

server.[数字表示第几台服务器]=[服务器的ip][服务器与集群中其他服务器通信的端口][表示如果Leader服务器挂了,用这个备用端口来进行选举][表示服务器的角色]


我这里配置好后就是一个集群的节点了,这里我们再将zoo1.cfg复制三个出来,表示另外三个集群节点,我这里是在一台机器上建立四个节点来搭建一个伪集群,真实的集群只要对应上ip地址和端口就可以了。


现在我们有四个cfg文件,分别为zoo1.cfg、zoo2.cfg、zoo3.cfg、zoo4.cfg,这四个文件只有clientPort不相同即可,因为客户端连接不同的服务器要有指定的端口号,这里我们在一台机器上搭建的伪集群,所以dataDir数据存储路径也应该设置为不同的。


这个时候我们来根据这四个配置文件来启动四个zookeeper实例。


3.png


这个时候我们会发现启动失败,因为需要我们设置标识ID,这个时候我们找到我们dataDir目录下,在我们的zookeeper1目录下新建一个myid文件,并且在里面写上1,然后在zookeeper2目录下也新建一个myid文件,并且在里面写上2,以此类推,然后我们再启动这四个配置文件。


4.png


这个时候我们发现启动成功了,我们可以使用status命令来查看各个节点的角色情况。


5.png


这个时候我们可以看到每个节点的角色了。


五、Zookeeper羊群效应



面试官:嗯,小伙子非常棒,你能说一下zookeeper羊群效应是怎么回事吗,如何避免呢


我:zookeeper用来实现分布式锁的时候,如果有一个客户端A拿到了锁,那么客户端B、C、D都会监听A有没有变化,如果A处理完业务释放了锁,那么这个时候B、C、D都监听到了消息,都会去抢锁,假如有一百个正在等待的,那么就会有100个上去抢锁,像羊群一样蜂拥而至。


我:这样的话就会造成资源的浪费,因为这么多节点被惊动了,但是拿到锁的只有一个节点,为何不只惊动一个节点呢。这里的话我们就要使用zookeeper的公平锁了。


六、Zookeeper公平锁怎么实现



面试官:嗯。那zookeeper公平锁怎么实现的呢


我:在上一次面试的时候我回答了zookeeper有哪些特性,其中就有一个临时顺序节点的特性,这个时候我们可以每一次都建立一个临时顺序节点,然后后一个节点监听前一个节点的变化,只有前一个节点有变化他才能感知到,再往前的节点变化他无法感知到,也就不存在抢锁的问题。


6.png


我:这样的话就可以通过临时顺序节点来实现公平锁。


面试官:小伙子真厉害啊,我这边没有什么要问的了,你还有什么问题要问(面试官两眼放光)


我:额。。。咱们公司的会议室就那一个吗,那里面的餐桌是不是有点小了。。。


面试官:哎呀,现在公司正在高速发展阶段,钱都用在了二手电脑的购买上,这样,你进来干两年,给公司挣了钱了咱们换个超大的桌子


我:(电脑还是二手的。。。)这样吧,我考虑考虑吧,我现在手上还有几个预约好的面试没有面呢,等我面完了再答复你吧。


面试官:行,你平时怎么学习呀,这么厉害


我:我通过看小奇的趣学编程系列,干货很多又非常有趣。


面试官:那你再给我推荐几个小奇趣学编程系列的读者过来吧,我急需人才


我:那你先买个大点的桌子吧放在会议室吧,人才也需要桌子才能办公(说罢我夺门而出,留下了潇洒的背影)


七、总结



这里关于zookeeper还没有整理完毕,文章后面持续更新,建议收藏。


文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。





相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
109 7
|
1月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
62 1
|
1月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
42 1
|
1月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
42 1
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
48 1
|
2月前
|
Java 程序员
反问面试官:如何实现集群内选主
这个示例展示了多个节点通过投票选举一个新的主节点的过程。Netty 用于节点间的通信,而每个节点则负责发起和响应选举消息。
反问面试官:如何实现集群内选主
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
49 0
|
4月前
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
74 2
|
4月前
|
运维 关系型数据库 MySQL
面试题MySQL问题之MySQL集群的单点失效如何解决
面试题MySQL问题之MySQL集群的单点失效如何解决
129 2
下一篇
无影云桌面