目录
介绍
就是一个协调组件,保证数据的一致性;(动态的进行更新,就是出错后可以进行及时的容错处理),
主要是由若干个进程以及简单的数据存储组成(每个节点中只能存储1M左右)
Chubby是谷歌闭源的,是用的paxos算法;
总结:
1、协调一致的操作当中,所以后数据的同步处理都有leader处理,leader不是固定的,是有选举产生的,如果leader挂了,会选举新的leader;
安装与配置
1、集群问题
zookeeper的使用一定不是一台机器,而是服务集群,同时zookeeper依赖于JDK环境,
2、配置ZK集群主机(多台主机)
2.1、准备机器
2.2、安装jdk、上传zk安装包、解压、配置环境变量、创建工作目录、
复制一个zoo_sample.cfg 名称为zoo.cfg
2.3、zoo.cfg配置文件
tickTime:心跳时间间隔;
dataDir:工作目录,如果自己创建了目录记得修改;
clientPort:客户端链接端口;默认2181(如果java程序要链接ZK要使用端口)
添加配置:
server.x=主机名称(所有存活的ZK主机列表)
![]() |
2.4、工作目录中创建主机编号
![]() |
2.5、将本机配置好的工具包复制到(发送)其他主机上
1>解压的文件
2>环境变量并生效
3>工作目录
4>配置各自的主机编号
3、启动集群
3.1、 安装目录下bin/执行
![]() |
3.2、查看服务状态:zkServer.sh status ,会返回两种结果一个是leader,一个是 follower
3.3、此时如果关闭leader服务(zkServer.sh stop),则会重新选举出一个leader;
3.4、jps查看进程是如果出现如下,则表示成功启动并可以提供服务
![]() |
客户端
![]() |
1、进入客户端后可以使用help命令查看所有支持的命令
2、ZK默认会有一个‘/’节点,不要删除,此节点由ZK维护;
3、创建节点并添加数据
![]() |
4、取出几点数据
java:节点中真正保存的数据 czxid:节点最后发生一次修改的标志id ctime:节点创建时间 mtime:节点最后一次修改时间 cversion:子节点的更新次数 dataVersion:子节点的数据更新次数 numchildren:子节点数量 |
5、更新值
![]() |
6、 删除节点
![]() |
7、监听控制,多台主机操作的时候使用,针对于数据的变化进行监听(只能监听一次变化)
比如当A连接创建了一个节点并监听,B来修改这个节点数据,修改完之后A能看到修改的数据,但B再次修改则A不能再监听到数据变化;(ZK地资源消耗,不能长时间占用资源,可以使用循环监听)
java操作ZK
1、添加依赖(下载的ZK服务中也有依赖)
2、java类编写示例:获取链接对象
需要将服务器集群列表全部配置上,这样其中一台服务不可用后不影响使用,会自动寻找可用的服务;
![]() |
2.2、通过链接对象获取ZK所有节点信息
![]() |
3、创建ZNode(节点)
|- 用户定义名称-序列 永久节点:客户端链接或关闭后依赖保留节点信息; 临时节点:客户端连接时保留节点,客户端关闭时删除节点; |
代码示例
![]() |
4、判断节点数据是否存在
exists方法,返回的是Stat对象,如果有节点则不为空;
![]() |
5、获取节点信息
状态返回 |
6、修改节点数据(此方法没有监听)
![]() |
7、删除节点(没有监听)
版本使用-1表示不受版本控制;
![]() |
8、数据监听(监听类型选择数据改变)--只能监听当前节点数据,没办法监听子节点
![]() ![]() |
9、子节点监听(需要监听节点-大部分都会对节点进行监听,不会对数据进行监听,所以监听节点的时候,如set方法是修改了节点数据,所以监听不到)
很多方法都会被监听,如:
![]() |
代码示例:代码有点乱,待整理
|
应用
参考路径:https://download.youkuaiyun.com/learn/3868/67980?spm=1002.2001.3001.4143