Zookeeper详解

Zookeeper---动物管理员

特性

1、数据一致性---从任意的节点获取到的数据是一致的

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

3、可靠性---简单,良好的性能。如果消息m被一台服务器接收,那么它会 被所有的服务器接收

4、顺序性---操作a先于b发生,那么在zookeeper中,a的事务一定咸鱼b

5、实时性---在网络较好的情况下,可以对子节点进行监控;zookeeper保证

客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器宕机信 息,但由于网络延迟等原因,zookeeper有时不能保证俩个客户端同时得到 更新的数据,如果需要最新数据,在读取数据之前调用sync()接口--同步接口

6、过半性---过半选举、过半执行、过半服务:集群中的节点数一般是奇数 个--防止脑裂(集群中产生2个以上的leader)

特点:

1、本身是一个树状结构 --- Znode树

2、每一个节点称之为znode节点

3、根节点是 /

4、Zookeeper的所有操作都必须以根节点为基准进行计算  /

5、每一个znode节点都必须存储数据

6、任意一个持久节点都可以有子节点

7、任意一个节点的路径都是唯一的

8、Znode树是维系在内存中 --- 目的是为了快速查询

9、Zookeeper不适合存储海量数据。

原因: 1)维系在内存中,如果存储大量数据会耗费内存

2) 不是一个存储框架而是一个服务协调框架

10、Zookeeper会为每一次事务(除了读取以外的所有操作都是事务)分配一个全局的事务id ---Zxid

Zookeeper投票协议:ZAB协议(2pc协议基础的延伸)-用于崩溃恢复和原子广播

将节点分为了协调者和参与者。当来一个请求的时候,协调者是将请求分发给每一个参与者,如果所有的参与者决定执行这个请求,那么协调者就真正提交操作,有参与者执行,参与者在执行完成之后返回Ack表示执行成功。如果协调者将请求分发给每一个参与者之后,有一个或者多个参与者不同意执行或者是没有返回消息,那么将这个操作回滚,不执行 --- 一票否决

原子广播:--先写到日志log文件

 

zookeeper接受请求

在Zookeeper中,接收一个请求之后,leader会将请求分发给每一个节点,由所有的节点投票确定是否执行这个请求 --- 如果有超过一半的节点同意执行这个请求,那么这个时候leader才会决定执行这个操作

 

(离线批处理--只存储),follower、leader、ObServer、looking(选举状态)

其中ObServer不参与投票,就算宕机也对整个集群没有影响--例如阿里的应用

如果超过一半的服务器宕机,那么此时Zookeeper不再对外提供服务 --- 过半性

 

 

 

Zookeeper的选举机制

1、所有的节点都会推荐自己当leader并且发送自己的选举信息(最大事务 id - pZxid,编号 - myid,逻辑时钟值)

2、选举原则:先比较最大事务id,谁的事务id大谁就胜出;如果最大事务 id一样,则比较myid,谁的myid大谁就胜出

3、选举出的leader的胜出要满足过半性:即要比至少一半的节点大

4、如果在集群中新加入一个节点,节点的事务id比leader的事务id大,新 的节点是否会成为leader? --- 不会。只要选定了一个leader,那么后续节点 的事务id和myid无论是多少,一律都是follower

5、如果leader宕机,集群中会自动选举一个新的leader

 

Zookeeper的单机版安装

Zookeeper可以安装在Linux下,也可以安装在Windows中,但是官网上声明在Windows中Zookeeper不保证稳定性

关闭Linux的防火墙 

临时关闭:service iptables stop

永久关闭:chkconfig iptables off

下载并且安装jdk,要求jdk是1.6以上的版本

下载Zookeeper的安装包

解压安装包:tar -xvf zookeeper-3.4.8.tar.gz

进入Zookeeper的安装目录中的conf目录:cd zookeeper-3.4.8/conf

将zoo_sample.cfg复制为zoo.cfg:cp zoo_sample.cfg zoo.cfg

Zookeeper在启动的时候会自动加载zoo.cfg,从里面读取配置信息,需要修改zoo.cfg,将其中的dataDir进行修改:dataDir=/home/software/zookeeper-3.4.8/tmp

创建指定的数据存储目录:mkdir tmp

进入bin目录:cd bin

启动服务器端:sh zkServer.sh start

启动客户端:sh zkCli.sh

注意

Zookeeper返回Started不代表启动成功,可以通过jps或者是sh zkServer.sh status来查看是否启动成功

如果使用的是jps,查看是否有QuorumPeerMain

如果使用的是sh zkServer.sh status, 查看是否有Mode:standalone

当Zookeeper启动之后,在bin目录下会出现zookeeper.out文件 --- 记录Zookeeper的启动过程的日志文件

 

 

 

Zookeeper的为伪布式集群安装

关闭防火墙

安装jdk

下载Zookeeper的安装包

解压Zookeeper的安装包

进入Zookeeper的安装目录中conf目录

将zoo_sample.cfg复制为zoo.cfg

编辑zoo.cfg,修改dataDir属性:

dataDir=/home/software/zookeeper-3.4.8/tmp

server.1=10.9.162.133:2888:3888 # 1是编号,要求每一个节点的编号是数字且不重复;

server.2=10.9.152.65:2888:3888 #2888,3888是端口号,只要不和已经占用的端口号冲突即可

server.3=10.9.130.83:2888:3888

创建存储数据的目录

进入数据存储目录

编辑文件myid, 将当前机器的编号写到myid中

将配置好的Zookeeper的安装目录拷到其他集群主机中:scp -r zookeeper-3.4.8 10.9.130.83:/home/software/

根据指定的编号修改对应的myid

 

其他:

在Zookeeper集群中,单独启动一台主机是不对外提供服务的

Zookeeper在使用过程中,会进行选举,选举出主节点-leader,其他的节点就会成为从节点-follower

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值