Zookeeper分布式应用程序协调服务,记一次面试经历

本文介绍了Zookeeper中的版本号机制如何实现乐观锁,以及Zookeeper服务器的启动、管理与客户端操作。还详细讲解了分布式场景中如何使用Zookeeper进行并发控制,以及集群的端口配置和基本操作。
摘要由CSDN通过智能技术生成

Zookeeper里面的版本号和我们理解的版本号不同,它表示的是对数据节点的内容、子节点列表或者ACL信息的修改次数。节点创建时dataversion、aclversion,cversion都为0,每次修改响应内容其对应的版本号加1。

这个版本号的用途就和分布式场景的一个锁概念有关。比如演出售票中的一个座位,显然每个场次中的每个座位都只有一个,不可能卖出2次。如果A下单的时候显示可售,他想买,那么为了保证他可以下单成功,此时别人就不能买。这时候就需要有一种机制来保证同一时刻只能有一个人去修改该座位的库存。这就用到了锁。锁有悲观锁和乐观锁。

  • 悲观锁:它会假定所有不同事务的处理一定会出现干扰,数据库中最严格的并发控制策略,如果一个事务A正在对数据处理,那么在整个事务过程中,其他事务都无法对这个数据进行更新操作,直到A事务释放了这个锁。

  • 乐观锁:它假定所有不同事务的处理不一定会出现干扰,所以在大部分操作里不许加锁,但是既然是并发就有出现干扰的可能,如何解决冲突就是一个问题。在乐观锁中当你在提交更新请求之前,你要先去检查你读取这个数据之后该数据是否发生了变化,如果有那么你此次的提交就要放弃,如果没有就可以提交。

Zookeeper中的版本号就是乐观锁,你修改节点数据之前会读取这个数据并记录该数据版本号,当你需要更新时会携带这个版本号去提交,如果你此时携带的版本号(就是你上次读取出来的)和当前节点的版本号相同则说明该数据没有被修改过,那么你的提交就会成功,如果提交失败说明该数据在你读取之后和提交之前这段时间内被修改了。

这里通过set命令并携带版本号提交更新,版本号相同更新就会成功。

Zookeeper服务器客户端操作

启动服务器

/opt/zookeeper-3.4.9/bin/zkServer.sh start

查看服务器状态

[root@rich bin]# /opt/zookeeper-3.4.9/bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /opt/zookeeper-3.4.9/bin/…/conf/zoo.cfg

Mode: standalone

日志文件

zookeeper.out

停止服务器

/opt/zookeeper-3.4.9/bin/zkServer.sh stop

使用客户端登录服务器,登录之前要启动服务器

/opt/zookeeper-3.4.9/bin/zkCli.sh -server 192.168.200.100:2181

如果是本机和默认2181端口号-server后面部分可以省略

Zookeeper常用命令

ZooKeeper服务器与客户端

/opt/zookeeper-3.4.9/bin目录下

启动服务器:./zkServer.sh start

停止服务器:./zkServer.sh stop

制作开机启动的脚本

把如下脚本复制进去,注意:先i,然后在复制

#!/bin/bash

#chkconfig:2345 20 90

#description:zookeeper

#processname:zookeeper

ZK_PATH=/opt/zookeeper

export JAVA_HOME=/opt/jdk1.8.0_152

case $1 in

start) sh $ZK_PATH/bin/zkServer.sh start;;

stop) sh $ZK_PATH/bin/zkServer.sh stop;;

status) sh $ZK_PATH/bin/zkServer.sh status;;

restart) sh $ZK_PATH/bin/zkServer.sh restart;;

*) echo “require start|stop|status|restart” ;;

esac

ZK_PATH=/opt/zookeeper

export JAVA_HOME=/opt/jdk1.8.0_152

注意:这二处地方要改成自己opt目录下对应的zookeeper

然后把脚本注册为Service

增加权限

初始化zookeeper配置文件

拷贝/opt/zookeeper/conf/zoo_sample.cfg

到同一个目录下改个名字叫zoo.cfg

然后咱们启动zookeeper

以上状态即为安装成功。

/opt/zookeeper-3.4.9/bin目录下

启动客户端:./zkCli.sh

退出客户端:[zk: localhost:2181(CONNECTED) 6] quit

查看节点的子节点:ls /zookeeper/quota

获取指定节点的值:get /zookeeper

设置指定节点的值:set /zookeeper hello

创建节点:create /fruit water

删除节点:delete /fruit/apple只能删除空节点

删除节点rmr /fruit空节点和非空节点都可以删除

-s:含有序列

创建有序列的节点:create -s /fruit/apple red

apple后面的0000000000就是序列

-e:临时(重启或者超时消失)

创建临时节点:create -e /fruit/orange yellow在重启后再查看就没有这个节点了

通过-e和-s可以把节点分为四个象限,四个情况的节点

Zookeeper集群搭建

集群中服务器间通信时用到3种端口号

  • 客户端访问端口号

  • 集群中服务器间数据同步端口号

  • 集群中follower服务器选举leader服务器端口号

集群中服务器编号

编号形式:1、2、3、……

指定编号:数据目录/myid文件中写入编号

编号和端口号在配置文件中的配置方式

客户端端口号

clientPort

编号和端口号

在配置文件末尾指定如下格式:

server.编号=IP地址:数据同步端口号:选举端口号

server.1=127.0.0.1:6001:6002

server.2=127.0.0.1:7001:7002

server.3=127.0.0.1:8001:8002

zkone步骤

创建目录

mkdir /opt/cluster_zk

重新解压Zookeeper

tar -zxvf /opt/zookeeper-3.4.9.tar.gz -C /opt/cluster_zk/

进入集群目录

cd /opt/cluster_zk

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-jyhax0xh-1712678739097)]

[外链图片转存中…(img-20Qib4hX-1712678739097)]

[外链图片转存中…(img-pQ11E2rb-1712678739097)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-QVPkU4wP-1712678739098)]

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值