zookeeper集群安装


前言

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

一、原理

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos做了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。
ZooKeeper的基本运转流程:

  1. 选举Leader。
  2. 同步数据。
  3. 选举Leader过程中算法有很多,但要达到的选举标准是一致的。
  4. Leader要具有最高的执行ID,类似root权限。
  5. 集群中大多数的机器得到响应并接受选出的Leader。

二、特点

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。
那么Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。

三、实现

Zookeeper集群最好至少安装3个节点,这里端口采用默认zookeeper默认端口:2181
在这里插入图片描述

安装jdk组件

参考之前的文章:
https://blog.csdn.net/RougeK/article/details/108676056

创建相关目录

mkdir /usr/local/zookeeper

下载安装包并解压

推荐官网地址:http://www.apache.org/dyn/closer.cgi/zookeeper/
选择需要的安装包,此处需要注意的是XX-bin.tar.gz 和XX.tar.gz区别:前者解开就能用,包含的是二进制程序和一些配置;后者解开是完整开发目录,需要去编译才能安装使用。

cd /usr/local/zookeeper/
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
mv /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/* /usr/local/zookeeper/

编辑配置文件

cd /usr/local/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

# The number of milliseconds of each tick
#CS通信心跳时间,单位是毫秒
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
#集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
#集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数。
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
#对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等。
dataDir=/usr/local/zookeeper/conf/
# the port at which the clients will connect
#客户端连接的接口,客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181。
clientPort=2181

还需要新增一段集群配置信息

##集群信息的配置
#格式:service.N =YYY:A:B
#N:代表服务器编号(也就是myid里面的值)
#YYY:服务器地址
#A:表示 Flower 跟 Leader的通信端口,简称服务端内部通信的端口(默认2888)
#B:表示 是选举端口(默认是3888)
server.1=172.16.12.31:2888:3888
server.2=172.16.12.32:2888:3888
server.3=172.16.12.33:2888:3888

新增myid文件

cd cd /usr/local/zookeeper/conf/
vim myid

在集群zookeeper服务在启动的时候回去读取zoo.cfg这个文件,从这个文件中找到这个属性然后获取它的值也就是dataDir 的路径,它会从这个路径下面读取mydi这个文件,从这个文件中获取要启动的当前服务器的地址,当它找不到这个地址的时候就会抛出异常。所以在创建myid的时候给的值是多少,那么在zoo.cfg里面配置集群信息的时候要准确指出!

启动节点

cd /usr/local/zookeeper/bin
sh zkServer.sh start

在这里插入图片描述
启动后会在/usr/local/zookeeper/logs目录下生成log文件,启动失败后可供排错使用。
三台节点都启动后可以查看他们在集群中的角色:

sh zkServer.sh status

在这里插入图片描述
至此,zookeeper集群部署成功。

四、使用

使用bin目录下的客户端登录脚本:zkCli.sh

./zkCli.sh

登录后可以做一些其他的操作
在这里插入图片描述

五、集群测试

模拟停掉"leader"节点,另外两台会通过之前设定的3888这个端口来重新选举leader

sh zkServer.sh stop

在这里插入图片描述

sh zkServer.sh status

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值