zookeepre集群的搭建

 

zookeepre的简单原理

ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

 

Zookeeper设计目的

最终一致性:client不论连接到那个Server,展示给它的都是同一个视图

可靠性:具有简单、健壮、良好的性能、如果消息m被到一台服务器接收,那么消息m将被所有服务器接收。

实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。

等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。

原子性:更新只能成功或者失败,没有中间状态。

顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

 

zookeeper的工作原理

 

在zookeeper的集群中,各个节点共有下面3种角色和4种状态

角色:leader、follower、observer

状态:leading、following、observing、looking

 

每个Server在工作过程中有4种状态:

LOOKING:当前Server不知道leader是谁,正在搜寻。

LEADING:当前Server即为选举出来的leader。

FOLLOWING:leader已经选举出来,当前Server与之同步。

OBSERVING:observer的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。

 

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议(ZooKeeper Atomic Broadcast protocol)。

Zab协议有两种模式,它们分别是恢复模式(Recovery选主)和广播模式(Broadcast同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

 

Zookeeper集群节点

Zookeeper节点部署越多,服务的可靠性越高,建议部署奇数个节点,因为zookeeper集群是以宕机个数过半才会让整个集群宕机的。

需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper是高性能的。如果你的集群负载很重,不要把zookeeper和RegionServer运行在同一台机器上面,就像DataNodes和TaskTrackers一样

 

 

 

第一步

 

机器

我这边拿二台虚拟机,centos7的

主节点IP地址:192.168.0.153

副节点IP地址:192.168.0.154

 

JDK8

zookeeper是需要jdk8的

JDK8安装文章:http://www.linux91.cn/c/Liunx__centos7__JDK8%E5%AE%89%E8%A3%85

 

下载

我这边是先下载好的

版本:zookeeper-3.4.12

官方下载地址:https://zookeeper.apache.org/doc/r3.4.13/

 

 

 

第二步

以下的操作二台主机都要操作

 

解压:tar -zxf zookeeper-3.4.12.tar.gz 

移动:mv zookeeper-3.4.12 /usr/local/zookeeper

进入:cd /usr/local/zookeeper/conf/

拷贝配置文件:cp -a zoo_sample.cfg zoo.cfg

创建数据目录:mkdir -p /data/zookeeper/logs

 

配置zoo.cfg

以下是需要修改跟增加的配置行
dataDir=/data/zookeeper       ##数据目录

dataLogDir=/data/zookeeper/logs  ##日志目录

server.1=192.168.0.153:2888:3888
server.2=192.168.0.154:2888:3888
##集群配置方式
server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。
    

 

创建集群标识,myid文件

注意:这个标识跟我们上面配置文件高架的server有关

192.168.0.153这台机的标识就是1,因为我们在配置文件设置了,server.1=192.168.0.153:2888:3888

192.168.0.154这台机的标识就是2,因为我们在配置文件设置了,server.2=192.168.0.154:2888:3888

 

myid这个文件要放在zookeeper的数据目录,我们设置的数据目录是在/data/zookeeper/目录中

在192.168.0.153主机的操作

echo "1" > /data/zookeeper/myid

在192.168.0.154主机的操作

echo "2" > /data/zookeeper/myid

 

 

 

第三步

启动

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

 

查看集群

机器:192.168.0.153
[root@localhost ~]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower


机器:192.168.0.154
[root@localhost ~]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader


集群有二种模式,follow、leader
follow模式是代表副节点
leader模式是代表主节点
zookeepre集群的主副节点,是随机选中的

 

 测试集群

/usr/local/zookeeper/bin/zkCli.sh -server 192.168.0.154:2181

 

 

 

 

转载请注明原文链接:zookeepre集群的搭建

发表评论:

共有 0 条评论

 Top