面试官:Zookeeper集群怎么搭建?
哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新
一、前言
作为一名Java拧螺丝选手,不必要掌握造火箭的能力就可以工作,但是面试官偏偏要难为兄弟们,这我就有点看不下去了,我只能带上家里的火箭当场向面试官证明自己。

虽然我这个二踢脚可能算不上火箭,但是跟火箭的原理差不多,都是点火往天上发射的,我掌握了这个就相当于掌握了造火箭的能力。
关键是我这玩意它好使呀,往面试官桌子上一摆,面试官直接跟我谈薪资了,会造火箭就是不一样。

至于你问为什么面试官明明只招拧螺丝的选手,但是却问火箭的底层原理、火箭的集群怎么搭建,怎么保证火箭的投递可靠性(发射失败我就再发射一颗),怎么保证火箭的幂等性(同一颗火箭发射多次和发射一次是一样的效果)
这个问题就不需要你去问面试官啦,我上次已经问过了,面试官的回答让我哑口无言。。。
我:面试官您好,请问为什么招我进去拧螺丝,却问我火箭的底层原理呢?
面试官:这特么还不都怪你们。。。
我:我们?我们怎么了。。。
面试官:十年前我面试员工,那个时候只有一部分人说会拧螺丝,我面试一个录取一个。
面试官:八年前我面试员工,所有人都说会拧螺丝了,我不知道该录取谁了,然后有一两个人说他会造摩托,我一听这俩人不错呀,毕竟我也刚刚只会造摩托就这俩吧,花拧螺丝的钱招了两个造摩托的。
面试官:五年前我面试员工,所有人都说会造摩托了,我又不知道该录取谁了,然后有一两个人说会造汽车,我心想这不错呀,我这的老员工没有会造汽车的,你既然会就来吧,工资给你比老员工高点。
面试官:三年前我面试员工,所有人都说会造汽车了,我又又不知道该录取谁了,然后有一两个人说会造火箭,我特么只能录取这两个会造火箭的了。。。,并且为了面试我还去学了一些火箭的原理,我们这个摩托车修理店根本用不到这些原理,但是没办法,谁让这些人这么卷呢。
面试官:今天,我只能面试会造火箭的人了,虽然他们进来也只会拧螺丝。。。
我:那既然说会造火箭的人也只会拧螺丝,那你为什么不直接录取只会拧螺丝的选手呢?
面试官:你以为我没有招收面试只会拧螺丝的吗,我招收了,结果。。。
我:结果怎么样?
面试官:他把公司唯一的火箭给拆了。。。

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

我怀着一颗忐忑的心走向即将要去赴约面试的公司,一路上我忐忑不安,不知道今天的面试会不会顺利,一会面试官会不会刁难我,接待我的hr小姐姐好不好看。。。
不知不觉我来到了公司楼下,打电话给hr,她说给你留门了,门没锁,直接上来吧。。。

HR:小奇是吧,带简历了吗?
我:带,带,带了。。。(吸溜),我把简历交给了HR,并急切的询问什么时候开始呢,我等不及了。。。
HR:别急嘛,先做一套笔试题
我:哦,我领取了一份笔试题,并来到了做题的会议室,这个会议室不大,但是坐满了人。。。

我:我做完了题后发现好基友微信群里问我在干嘛,我就随手拍了一张照片发给了他们,我不是故意拍答案的呀,但是这桌子太小人太多,毕竟0.8平米的桌子围着坐了8个人。。。
我:后来公司里人要开会,差点把我们正在做题的人撵走,我也是服了这个公司了,看我一会虐不虐他们的面试官就完了。
面试官:做一个自我介绍吧。
我:面试官你好,我本科毕业于山东翔蓝,精通挖掘机技术,研究生进入华清大学学习火箭研发技术,博士进入大北大学学习在火箭高并发发射情况下如何保证火箭一致性问题,不会造成误发射了其它队友的火箭。
三、Zookeeper集群模式与集群角色
面试官:可以呀小伙子,那你说说zookeeper集群有哪些模式吧
我:zookeeper集群无非有三种搭建方式,一是单机模式、二是伪分布模式、三是分布式模式。
面试官:嗯。zookeeper集群中都有哪些角色呢
我:有三种角色,一是Leader角色,可以处理读写请求,集群中只能有一个Leader角色,二是Follower角色,只能处理读请求,同时也是Leader的候选节点,如果Leader节点挂了,Follower节点就可以选举为Leader节点,三是Observer节点,该节点只能处理读请求,不能参与Leader的选举。

四、Zookeeper集群搭建方式
面试官:嗯,那你说说zookeeper集群搭建的具体步骤吧
我:首先我们下在zookeeper后有一个配置文件为zoo_sample.cfg,我们可以修改为zoo1.cfg这样更好记一些,然后我们编辑配置文件

dataDir=[保存数据的目录]
clientPort=[客户端连接zookeeper服务器的端口]
server.[数字表示第几台服务器]=[服务器的ip][服务器与集群中其他服务器通信的端口][表示如果Leader服务器挂了,用这个备用端口来进行选举][表示服务器的角色]
我这里配置好后就是一个集群的节点了,这里我们再将zoo1.cfg复制三个出来,表示另外三个集群节点,我这里是在一台机器上建立四个节点来搭建一个伪集群,真实的集群只要对应上ip地址和端口就可以了。
现在我们有四个cfg文件,分别为zoo1.cfg、zoo2.cfg、zoo3.cfg、zoo4.cfg,这四个文件只有clientPort不相同即可,因为客户端连接不同的服务器要有指定的端口号,这里我们在一台机器上搭建的伪集群,所以dataDir数据存储路径也应该设置为不同的。
这个时候我们来根据这四个配置文件来启动四个zookeeper实例。

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

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

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

五、Zookeeper羊群效应
面试官:嗯,小伙子非常棒,你能说一下zookeeper羊群效应是怎么回事吗,如何避免呢
我:zookeeper用来实现分布式锁的时候,如果有一个客户端A拿到了锁,那么客户端B、C、D都会监听A有没有变化,如果A处理完业务释放了锁,那么这个时候B、C、D都监听到了消息,都会去抢锁,假如有一百个正在等待的,那么就会有100个上去抢锁,像羊群一样蜂拥而至。

我:这样的话就会造成资源的浪费,因为这么多节点被惊动了,但是拿到锁的只有一个节点,为何不只惊动一个节点呢。这里的话我们就要使用zookeeper的公平锁了。
六、Zookeeper公平锁怎么实现
面试官:嗯。那zookeeper公平锁怎么实现的呢
我:在上一次面试的时候我回答了zookeeper有哪些特性,其中就有一个临时顺序节点的特性,这个时候我们可以每一次都建立一个临时顺序节点,然后后一个节点监听前一个节点的变化,只有前一个节点有变化他才能感知到,再往前的节点变化他无法感知到,也就不存在抢锁的问题。

我:这样的话就可以通过临时顺序节点来实现公平锁。
面试官:小伙子真厉害啊,我这边没有什么要问的了,你还有什么问题要问(面试官两眼放光)
我:额。。。咱们公司的会议室就那一个吗,那里面的餐桌是不是有点小了。。。
面试官:哎呀,现在公司正在高速发展阶段,钱都用在了二手电脑的购买上,这样,你进来干两年,给公司挣了钱了咱们换个超大的桌子
我:(电脑还是二手的。。。)这样吧,我考虑考虑吧,我现在手上还有几个预约好的面试没有面呢,等我面完了再答复你吧。
面试官:行,你平时怎么学习呀,这么厉害
我:我通过看小奇的趣学编程系列,干货很多又非常有趣。
面试官:那你再给我推荐几个小奇趣学编程系列的读者过来吧,我急需人才
我:那你先买个大点的桌子吧放在会议室吧,人才也需要桌子才能办公(说罢我夺门而出,留下了潇洒的背影)
七、总结
这里关于zookeeper还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
如果觉得我的文章还不错的话就点个赞吧

面试官:Zookeeper集群怎么搭建?的更多相关文章
- 大数据平台搭建-zookeeper集群的搭建
本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...
- Linux环境下ZooKeeper集群环境搭建关键步骤
ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...
- zookeeper集群的搭建以及hadoop ha的相关配置
1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...
- Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)
1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...
- [转]ZooKeeper 集群环境搭建 (本机3个节点)
ZooKeeper 集群环境搭建 (本机3个节点) 是一个简单的分布式同步数据库(或者是小文件系统) ------------------------------------------------- ...
- zookeeper集群环境搭建详细图文教程
zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...
- Docker 一步搞定 ZooKeeper 集群的搭建
Docker 一步搞定 ZooKeeper 集群的搭建 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 ...
- centos7下安装zookeeper&zookeeper集群的搭建
一.centos7下安装zookeeper 1.zookeeper 下载地址 https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 2.安装步骤 ...
- centos7 zookeeper集群的搭建
说明:该集群的搭建是为了服务于solr集群,请参考我的关于solr集群搭建的博客. 1.创建solr-cloud目录 mkdir /usr/local/solr-cloud 2.将解压的apache- ...
- Zookeeper集群快速搭建
Zookeeper集群快速搭建 1.cd /usr/local/zookeeper/conf(如在192.168.212.101服务器) mv zoo_sample.cfg zoo.cfg 修改con ...
随机推荐
- mysql 获取当前时间和时间戳
mysql 获取当前时间为select now()运行结果: 2012-09-05 17:24:15 mysql 获取当前时间戳为select unix_timestamp(now()) 运行结果:u ...
- CF1453D题解
VP 的时候发现的一道数学题( 在思考这个问题之前,先让我们思考一件事:走到距离上一个存档点 \(n\) 的位置的期望是多少?(假设这个值为 \(f[n]\)) 先思考 \(f[1]\) 是多少,很明 ...
- Kafka的优秀设计学习
一.Kafka基础 消息系统的作用 应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用. 引入一个场景,我们知道中国移动,中国 ...
- WindowsServer域用户批量创建方法
@font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...
- Betaflight Configurator开源仓库说明-中文版
Betaflight Configurator Betaflight Configurator是Betaflight飞行控制系统的跨平台配置工具. 它在Google Chrome中作为应用程序运行,允 ...
- 知识点简单总结——Lyndon分解
知识点简单总结--Lyndon分解 Lyndon串 定义:一个字符串的最小后缀就是整个串本身. 等效理解:这个串为其所有循环表示中最小的. Lyndon分解 定义:将字符串分割为 $ s_{1} s_ ...
- 你是怎么看Spring框架的?
Spring是一个轻量级的容器,非侵入性的框架.最重要的核心概念是IOC,并提供AOP概念的实现方式,提供对持久层,事务的支持,对当前流行的一些框架(Struts,Hibernate,MVC),Spi ...
- MySQL 数据库作发布系统的存储,一天五万条以上的增量, 预计运维三年,怎么优化?
1.设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率. 2.选择合适的表字段数据类型和存储引擎,适当的添加索引. 3.MySQL 库主从读写分离. 4.找规律分表,减少单表中 ...
- Spring Boot 的配置文件有哪几种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书写格式不同. 1).properties app.user.name = javastack 2).yml app: ...
- Java并发机制(1)--线程状态与方法(转)
Java并发编程:Thread类的使用 个人总结:参考:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920357.html 参考:https://blog ...