这是我参与「第四届青训营 」笔记创作活动的第25天
一、zookeeper概述
1.zookeeper是也给分布式协调服务,就是为用户的分布式程序提供协调服务 2.zookeeper本身也是一个分布式程序 3.zookeeper是为别的分布式程序服务的(只要节点半熟以上存活,zookeeper就能对外提供服务) 3.zookeeper集群包含两个角色:Leader、Floower
二、zookeeper的核心功能
1.管理用户程序提交的数据 2.为用户程序提供数据节点的监听服务
三、zookeeper的应用场景
1.主从协调 2.服务器的动态上下线 3.统一的配置管理 4.分布式共享锁 5.统一的名称服务
四、zookeeper的特性
zookeeper是由一个leader和多个follower组成的集群 全局数据一致性:每一个server都保存了一份相同的数据副本。client无论连接哪个server,数据都是一致的 分布式读写,更新请求转发,写请求只能由leader来实现,follower会将请求转发给leader来实施 更新请求按顺序进行,所有来自client的更新请求按照发送的先后顺序执行 数据更新的原子性:一次数据要么更新成功,要么更新失败 实时性:在一定时间范围内,client都能读到最新的数据
五、zookeeper的安装
1.zookeeper安装
- 将安装程序zookeeper-3.4.5-cdh5.14.0-e3base3.0.0.tar.gz拷贝到对应的一台主机如e3base03的/e3base/cdh5140目录下
- 使用tar -zxvf zookeeper-3.4.5-cdh5.14.0-e3base3.0.0.tar.gz命令进行解压。
- 使用软连接 ln -s /e3base/cdh5140/zookeeper-3.4.5-cdh5.14.0-e3base3.0.0 /e3base/zookeeper
- 创建$E3_INFO_HOME/zookeeper目录
(2)修改权限 chown root:root -R zookeeper-3.4.10
(3)更新配置文件(如下图所示) export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.10 export PATH=ZOOKEEPER_HOME/bin
source /etc/profile
(4)删除 doc、src文件 rm -rf docs src
(5)配置zookeeper的参数 cd zookeeper-3.4.10/conf 将/opt/apps/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg
先复制一份文件,再修改文件名
mv zoo_sample.cfg zoo.cfg
修改文件
vi zoo.cfg
修改tmp目录
dataDir=/opt/apps/zookeeper-3.4.10/data
为了做内部通信的数据传输,配置服务器节点,需要配置下面的内容(2888是数据传输的端口,3888是选举端口)内部实现细节如下图(server.1表示第1台服务器的id)
server.1=host01:2888:3888
server.3=host03:2888:3888
server.4=host04:2888:3888
有几台节点选几台
(6)在/opt/apps/zookeeper-3.4.10/这个目录上创建data文件夹(这里必须手动创建,和 hdfs 不同,hdfs 里面的配置不需要手动创建。) mkdir data
(7)带data目录下配置节点的id,创建 myid 文件:echo "1" >> data/myid
(8)分发安装包 scp -r zookeeper-3.4.10 root@host03:PWD
(9)修改host03和host04的myid内容 host03: echo "3" > data/myid host04: echo "4" > data/myid
(10)操作Zookeeper bin/zkServer.sh start 查看状态 bin/zkServer.sh status 或者jps
(11)将/etc/profile分发到另外两台机器host03、host04
(12)启动日志在zookeeper-3.4.10/zookeeper.out中,启动出错可以进去查看
六、选举机制
全新集群,第一次启动zookeeper的选举过程(id)大的为老大 先启动第一台机器,选举,第一台机器发送选票,满足不了半数存活要求,LOOKING状态 继续启动第二台机器,选举,第一轮选举,平手,都知道对方的存在。第二轮选举,都选id号大的,则选出2为Leader。。。 只有再启动其他机器就不会再选举leader了,因为已经选举出来了。。。。。。 非全新集群选举机制 (1)由数据的version,节点的id、逻辑时钟决定谁是leader leader挂了,选举过程中,leader又起来了,leader的数据版本号大,但是逻辑时钟小,会忽略本次选举 (2)统一逻辑时钟(参与了多少次选举),数据版本大的节点为大 如果数据版本相同,则id大的为leader