安装和环境搭建--Zookeeper学习笔记

Zookeeper,一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。

Zookeeper集群包含一个Leader、若干个follower,集群只要有半数以上节点存活Zookeeper集群就能正常服务。

  • 集群全局数据一致;
  • 更新请求顺序进行:来自同一个Client的更新请求按其发送顺序依次执行;
  • 数据更新原子性:一次数据更新要么成功,要么失败。
  • 实时性:在一定时间范围内,Client能读到最新数据。

Zookeeper安装

先将下载好的安装包解压

[root@hadoop102 software]# tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/

安装包解压后,修改zoo_sample.cfg文件名称为zoo.cfg

[root@hadoop102 apache-zookeeper-3.5.8]# cd conf/
[root@hadoop102 conf]# mv zoo_sample.cfg zoo.cfg 

修改该文件内容

[root@hadoop102 conf]# vim zoo.cfg

新建文件夹zkData,

修改dataDir为/opt/module/apache-zookeeper-3.5.8/zkData

启动Zookeeper

[root@hadoop102 apache-zookeeper-3.5.8]# bin/zkServer.sh start

内部原理

选举机制

  • 半数机制:集群半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
  • Zookeeper工作时,一个节点为Leader,其他为Follower,Leader是通过内部选举机制临时产生的。
  • Zookeeper提供了三种方式LeaderElection、AuthFastLeaderElection、FastLeaderElection(最新默认),这里主要分析FastLeaderElection。

选举流程简述:

目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:

  • 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
  • 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
  • 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
  • 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
  • 服务器5启动,后面的逻辑同服务器4成为小弟。

节点类型

Zookeeper服务器的节点Znode有两种类型:

  • 短暂(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除

  • 持久(persistent):客户端和服务器端断开连接后,创建的节点不删除

Znode有四种形式的目录节点(默认是persistent )

  • 持久化目录节点(PERSISTENT):客户端与zookeeper断开连接后,该节点依旧存在;

  • 持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL):客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号;

  • 临时目录节点(EPHEMERAL):客户端与zookeeper断开连接后,该节点被删除;

  • 临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL):客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

分布式部署

一共有三台机器102、103、104,在102上已经安装好了Zookeeper,同步文件到103、104

[root@hadoop102 module]# xsync zookeeper-3.4.10/

接着配置服务器编号,

新建文件

[root@hadoop102 zookeeper-3.4.10]# cd zkData/
[root@hadoop102 zkData]# touch myid

编辑

[root@hadoop102 zkData]# vim myid

里面写上2(对应的服务器号码),注意不能有其他空格。

拷贝文件到103、104

[root@hadoop102 zkData]# xsync myid

再分别修改103、104中文件内容为3、4。

修改文件,增加配置

[root@hadoop102 zookeeper-3.4.10]# vim conf/zoo.cfg
############cluster############
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888

其中hadoop102是服务器ip(这里配置了域名),2888是这个服务器与集群中Leader服务器交换信息的端口,3888是执行选举时服务器相互通信的端口(万一Leader服务器挂了,就需要重新选举,这就会用到这个端口)。

然后拷贝该文件到其他服务器

[root@hadoop102 zookeeper-3.4.10]# xsync conf/zoo.cfg

分别在3个机器上启动Zookeeper

[root@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh start
[root@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh start
[root@hadoop104 zookeeper-3.4.10]# bin/zkServer.sh start

查看状态

[root@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh status
[root@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh status
[root@hadoop104 zookeeper-3.4.10]# bin/zkServer.sh status

然后发现103成为了Leader、其他服务器是Follower。

现在可以进入客户端了

[root@hadoop102 zookeeper-3.4.10]# bin/zkCli.sh

猜你喜欢

转载自blog.csdn.net/liuliusix/article/details/109402534