7.6 zookeeper介绍和搭建

为什么使用zookeeper:
大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进 程(如资源、任务分配等)
目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制
协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器
ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用;保证分布式数据一致性
zookeeper优点:
最终一致性;为客户端展示同一个视图
可靠性;如果消息被到一台服务器接受,那么它将被所有的 服务器接受
实时性;Zookeeper不能保证两个客户端能同时得到刚更新 的数据,如果需要最新数据,应该在读数据之前调 用sync()接口
独立性;各个Client之间互不干预
原子性;更新只能成功或者失败,没有中间状态
顺序性;所有Server,同一消息发布顺序一致
zookeeper的工作原理:
1.每个Server在内存中存储了一份数据;
2.Zookeeper启动时,将从实例中选举一个leader(Paxos 协议)
3.Leader负责处理数据更新等操作
4.一个更新操作成功,当且仅当大多数Server在内存中成功修 改数据。

zookeeper的安装和配置(集群模式):
准备 zookeeper
  1. 三台zookeeper:node2,node3,node4
  2. 编辑conf/zoo.cfg配置文件   自己创建
tickTime=2000   
initLimit=5   
syncLimit=2   
dataDir=/opt/zookeeper/data   
dataLogDir=/var/logs/zookeeper   
clientPort=4180          // 这里端口号注意core-site.xml 配置的端口号一致
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=node4:2888:3888
 mkdir -p /opt/zookeeper/data    先创建dataDir 文件夹
  1. 在dataDir目录中创建一个myid的文件,文件内容为2,3,4
  2. 在bin下vim zkEnv.sh  修改ZOO_LOG_DIR="/var/logs/zookeeper"   日志路径
启动三个zookeeper(/conf ) ./zkServer.sh start    注意先启动的zookeeper 服务器要和其他几台服务器做免密登陆
/bin/zkCli.sh 进入本机的客户端默认2181端口
./zkCli.sh -server :4180 进入本地4180端口
./zkCli.sh -server 192.169.188.5:4180 进入192.169.188.5的4180端口

为什么要奇数台
从容错角度考虑
例如:5台的一半是2.5,大于一半是3;6台一半是3,大于一半是4;这2种就都允许我们挂2台,
这样就没有必要浪费一个节点,
如果不考虑浪费,偶数台也比奇数台更新要慢(投票的机器数多就慢)
6台机器挂2台比5台机器挂2台的概率大
防脑裂
奇数台比偶数台更健壮一些
比如6台,一半一半中间网络不联通,就无法选举出Leader;如果是5台,即使一半一半,也可以有一边选举出Leader
zookeeper的角色:
领导者( leader),负责进行投票的发起和决议,更 新系统状态
学习者(learner),包括跟随者( follower)和观察 者(observer),follower用于接受客户端请求并想 客户端返回结果,在选主过程中参与投票
Observer可以接受客户端连接,将写请求转发给 leader,但observer不参加投票过程,只同步leader 的状态,observer的目的是为了扩展系统,提高读取 速度
客户端(client),请求发起方
Zookeeper的 读写机制
Zookeeper是一个由多个server组成的集群
一个leader,多个follower
每个server保存一份数据副本
全局数据一致
分布式读写
更新请求转发,由leader实施
Zookeeper的 保证
更新请求顺序进行,来自同一个client的更新请求按其 发送顺序依次执行
数据更新原子性,一次数据更新要么成功,要么失败
全局唯一数据视图,client无论连接到哪个server,数 据视图都是一致的
实时性,在一定事件范围内,client能读到最新数据
Follower主要有四个 功能
1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消 息);
2 .接收Leader消息并进行处理;
3 .接收Client的请求,如果为写请求,发送给Leader进行投票;
4 .返回Client结果。
Follower的消息循环处理如下几种来自Leader的消息:
1 .PING消息: 心跳消息;
2 .PROPOSAL消息:Leader发起的提案,要求Follower投票;
3 .COMMIT消息:服务器端最新一次提案的信息;
4 .UPTODATE消息:表明同步完成;
5 .REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的 session还是允许其接受消息;
6 .SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制 得到最新的更新。
Zookeeper的 节点(每个节点在zookeeper中叫做 znode,并且其有一个唯 一的路径标识):
Znode有两种类型,短暂的( ephemeral)和持久的( persistent
Znode的类型在创建时确定并且之后不能再修改
短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短 暂znode不可以有子节点
持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode 时才会被删除
watcher:
Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以 监控目录节点的数据变化以及子目录的变化,一旦这 些状态发生变化,服务器就会通知所有设置在这个目 录节点上的 Watcher,从而每个客户端都很快知道它 所关注的目录节点的状态发生变化,而做出相应的反 应
可以设置观察的操作:exists,getChildren,getData
可以触发观察的操作:create,delete,setData
注意:watcher只会通知一次
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值