ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

zookeeper简介

2021-11-24 14:04:19  阅读:170  来源: 互联网

标签:zookeeper 选举 简介 ZooKeeper 集群 Leader 客户端


一 zookeeper介绍

ZooKeeper是一个开源的分布式应用程序协调系统。简称ZK,ZK是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于它实现数据的发布/订阅、负载均衡、名称服务、分布式协调/通知、集群管理、Master选举、分布式锁盒分布式队列等等功能。它运行在JAVA环境之中,并具有JAVA和C的绑定。

二 zookeeper集群角色

  • Leader:领导者,通过集群选举产生的主节点,负责集群的读与写工作
  • Follower:追随者,有资格参与集群选举,但未能被成功选举为Leader的备用选举节点,负责集群的读服务
  • Observer:观察者,没有资格参与集群选举,负责集群的读服务,同步Leader状态
注意:当Leader故障之后ZooKeeper集群会通过Follower选举新的Leader,如果老的Leader故障修复之后,会再次接管集群中的Leader脚本,新的Leader则退回Follower角色。一般集群当中无需设置Observer节点,Follower节点即可。  

三 ZAB协议

ZooKeeper(ZooKeeper Atomic Broadcast,ZooKeeper原子广播协议)是通过ZAB协议来完成了Client各个节点选举的信息,ZAB协议是整个ZooKeeper的核心,支持崩溃保护机制,用于在Leader崩溃时重新选举出新的Leader,而且还要确保数据的完整性和一至性,此协议不仅能够保证ZooKeeper集群本身的选举,还能管理使用ZooKeeper协调服务的分布式程序的选举工作。

3.1 ZAB状态

  • Looking:集群刚启动,开始选举Leader,或者Leader崩溃之后再次选举新的Leader时,正在选举,被称为Looking状态。
  • Following:Following就是Follower状态,这个时候集群中已经存在Leader,这些机器属于Follover节点称之为Following状态。
  • Leading:Leader就被称为Leading状态。

3.2 ZAB阶段

  • 选举:election
  • 发现:discovery
  • 同步:sync
  • 广播:Broadcast
 

四 zookeeper使用场景

  • 数据订阅与发布
  • Nameserver
  • 分布式通知
  • 分布式锁
  • 注册中心
  • 分布式队列

五 ZooKeeper配置详解

官方文档:http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration

tickTime=2000 #ZooKeeper服务器之间或客户单与服务器之间维持心跳的时间间隔,单位是毫秒,默认为2000。
initLimit=10 #zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。
syncLimit=5 #标识ZooKeeper的leader和follower之间同步消息,请求和应答时间长度,最长不超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
dataDir=/tmp/data #存储内存数据库快照的位置;ZooKeeper保存Client的数据都是在内存中的,如果ZooKeeper节点故障或者服务停止,那么ZooKeeper就会将数据快照到该目录当中。
clientPort=2181 #ZooKeeper客户端连接ZooKeeper服务器的端口,监听端口
maxClientCnxns=60 #ZooKeeper可接受客户端连接的最大数量,默认为60
dataLogDir=/tmp/logs #如果没提供的话使用的则是dataDir。zookeeper的持久化都存储在这两个目录里。dataLogDir里是放到的顺序日志(WAL)。而dataDir里放的是内存数据结构的snapshot,便于快速恢复。为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,这样就可以充分利用磁盘顺序写的特性
autopurge.snapRetainCount=3 #ZooKeeper要保留dataDir中快照的数量
autopurge.purgeInterval=1 #ZooKeeper清楚任务间隔(以小时为单位),设置为0表示禁用自动清除功能
quorumListenOnAllIPs=true #该参数设置为true,Zookeeper服务器将监听所有可用IP地址的连接。他会影响ZAB协议和快速Leader选举协议。默认是false。
globalOutstandingLimit=1000 #最大请求堆积数。默认是1000。Zookeeper运行过程中,尽管Server没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。 
preAllocSize=64M  #预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。
snapCount=100000  #每进行snapCount次事务日志输出后,触发一次快照, 此时,Zookeeper会生成一个snapshot.*文件,同时创建一个新的事务日志文件log.*。默认是100,000.
traceFile=false  #用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能。
maxClientCnxns=10 #最大并发客户端数,用于防止DOS的,默认值是10,设置为0是不加限制。
clientPortAddress / maxSessionTimeout  #对于多网卡的机器,可以为每个IP指定不同的监听端口。默认情况是所有IP都监听 clientPort 指定的端口。
minSessionTimeout #Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 *  tickTime ~ 20 * tickTime 这个范围 
fsync.warningthresholdms #事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息。默认是1000ms。
syncEnabled  #Observer写入日志和生成快照,这样可以减少Observer的恢复时间。默认为true。
initLimit  #Observer和Follower启动时,从Leader同步最新数据时,Leader允许initLimit * tickTime的时间内完成。如果同步的数据量很大,可以相应的把这个值设置的大一些。
leaderServes  #默 认情况下,Leader是会接受客户端连接,并提供正常的读写服务。但是,如果你想让Leader专注于集群中机器的协调,那么可以将这个参数设置为 no,这样一来,会大大提高写操作的性能。一般机器数比较多的情况下可以设置为no,让Leader不接受客户端的连接。默认为yes
server.x=[hostname]:nnnnn[:nnnnn]  #“x”是一个数字,与每个服务器的myid文件中的id是一样的。hostname是服务器的hostname,右边配置两个端口,第一个端口用于Follower和Leader之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。  
syncLimit  #表示Follower和Observer与Leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
group.x=nnnnn[:nnnnn] #“x”是一个数字,与每个服务器的myid文件中的id是一样的。对机器分组,后面的参数是myid文件中的ID
weight.x=nnnnn #“x”是一个数字,与每个服务器的myid文件中的id是一样的。机器的权重设置,后面的参数是权重值
cnxTimeout  #选举过程中打开一次连接的超时时间,默认是5s
standaloneEnabled #当设置为false时,服务器在复制模式下启动
forceSync #该参数确定了是否需要在事务日志提交的时候调用 FileChannel .force来保证数据完全同步到磁盘。对应的java系统属性:zookeeper.forceSync
jute.maxbuffer #该参数只能设置为java系统属性。没有zookeeper前缀。它指定了Znode可以存储最大的数据量的大小。默认是1M。如果要改变该配置,就必须在所有服务器和客户端中设置。
skipACL #跳过ACL检查,这样可以是Zookeeper的吞吐量增加。只是会使所有用户都有访问权限。对应的java系统属性:zookeeper.skipACL
                 

标签:zookeeper,选举,简介,ZooKeeper,集群,Leader,客户端
来源: https://www.cnblogs.com/wangguishe/p/15597122.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有