zookeeper
安装步骤:
解压:tar -zxvf xxxx
配置文件: cd zookeeper cd config
复制一份:cp zoo_sample.cfg zoo.cfg
修改添加:dataDir=/usr/zookeeper-3.6.2/zkData
dataLogDir=/usr/zookeeper-3.6.2/zkLog
创建文件zkLog和zkData:mkdir zkLog, mkdir zkData
启动zookeeper:cd bin 在./zkServer.sh start(./zkServer.sh restart)
(sh zkServer.sh start)
查看zookeeper状态: ./zkServer.sh status
启动客户端: ./zkCli.sh (退出 quit)
了解配置参数:
1.进入conf
2.vim zoo.cfg
3.tickTime=2000 通信心跳数,zookeeper服务器与客户端心跳时间,单位毫秒
initLimit=10 lf初始通信时限(集群中的follower跟随者服务器与leader领导者服务器之间,启动时能容忍的最多心跳数 为10*2000毫秒)
syncLimit=5 LF同步通信时限(启动后集群中的follower跟随者服务器与leader领导者服务器之间,超过leader就会认为follwer已经死掉,会将follower从服务器列表中删除)
dataDir:数据文件目录+数据持久化路径
dataLogDir:日志文件目录
clientPort=2181:客户端连接端口 (监听客户端连接的端口)
客户端命令行操作:
启动客户端:./zkCli.sh
显示所有操作命令:help
查看当前zonde中所包含的内容:ls /
查看当前节点的详细数据:ls -s /
帮助可查看:help
监听:addwath(如 addwatch /chain)
修改节点数据:set /usa "abc"
创造子节点:create /usa/NewYork
查看节点:get
删除目录及子节点:deleteall /usa
zookeepeer是一个集群:
1.是一个leader和多个follower来组成的集群 (集群工作一样,分布式工作不一样)、
2.集群只有半数以上的节点存活,zookeeper就能正常工作(集群为奇数)
3.全局数据一致
4.数据更新原子性,一次数据要么成功,要么失败
5.实时性
6.更新的请求按照顺序执行(按传来的数据)
zookeeper整体上可以看成是一棵树状结构
应用场景:1.统一命名服务
2.统一配置管理
3.服务器节点动态上下线
4.软负载均衡(zookeepeer会记录每台服务器的访问数,让访问最少的服务器去处理最新的客户请求)
*****zookeeper内部原理:
选举机制:半数机制,集群中半数机器存活,集群可用所以zookeeper适合奇数台服务器(zookeeper工作时有一个节点为Leader其他为follower,leader是通过内部选举机制临时产生的,不是永恒的)
zookeeper节点类型:
1.持久化(与zookeeper断开后该节点依然存在):持久化目录节点、持久化顺序编号目录节点
2.短暂型(与zookeeper断开后该节点自动删除):临时目录节点、临时顺序编号目录节点
zookeeper分布式安装部署(集群思想:先搞定一台服务器在克隆出两台行成集群)
1.配置服务器编号:在/usr/zookeeper/zkData 创建mymid文件 vim myid
2.进入confg 中编辑zoo.cfg
server.1=192.168.129.129:2888:3888(2888指leader服务器交换信息的端口,3888指选举时专用端口当leader挂了需要一个端口重新选举选出一个新的leader)
server.2=192.168.129.130:2888:3888
server.3=192.168.129.131:2888:3888
3.创建虚拟机(要修改ip)
zookpeeper采用分布式锁
1.所有请求进来,如在/lock下创建零时顺序节点zookeeper会帮你编码排序
2.判断自己是不是/lock下最小的节点(是,获得锁;不是对前面小我一级的节点进行监听)
3.获得锁请求,处理完业务逻辑,释放锁(删除节点),后一个节点得到通知
4.重复步骤2
zookpeeper实现的分布式锁可靠性比较高,redis实现的分布式锁性能高
Curator实现分布式锁:
1.引包:<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
![2021-05-08_144222]()