官网的介绍
意思是数据节点是一个树形结构,有点类似于文件系统,比如要访问a目录下的b目录下的c文件就是/a/b/c
但不同于文件系统,他的每一个层级也是一个数据节点,比如a也是一个数据节点,能保存数据的
节点类型有2种:永久节点、短暂节点
永久节点就是普通节点
短暂(临时)节点就是指这个节点的存在依赖于zk和client的连接(session),当zk或者client挂了时,session消失,同时临时节点随之消失。(很明显,可以用做分布式锁)
安装Zookeeper
- wget 官网的tar.gz链接 https://downloads.apache.org/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gz
- 解压至/opt/ricardo目录(随便搞的)
- 修改配置文件:
cd conf 复制zoo_sample.cfg 为 zoo.cfg
也可以设置集群:
其中,设置了4个节点,2888是当节点变成leader时,与follower进行同步数据的端口,3888是每个节点与其它节点通信的端口(如果leader挂掉了,主要就是通过3888来推选新的leader)
4个节点分别在dataDir下建立一个myid的文本文件(通常是选最大id为leader)
echo 1 > /var/lib/zookeeper/myid
最终运行效果:
在启动 1 2 3节点时,由于已经有过半的节点存活,所以直接就选举3作为leader了
再启动4节点,同时把3节点停一下再启动,leader马上被切换成4
客户端任意连接一个节点,都能进行读写操作,只不过写操作实际上是交给了leader来做
zk的一个特点就是快速(选举新的leader上),那是怎么做到的?