设为首页 收藏本站
查看: 874|回复: 0

[经验分享] zookeeper简介及安装

[复制链接]
发表于 2019-1-8 06:49:08 | 显示全部楼层 |阅读模式
1. Zookeeper简介


  • 1.1  概念
    zookeeper是一个维护配置信息、命名、提供分布式同步的集中式服务(也就是说主要用于分布式应用程序中)。它是一个分布式的协调服务。集群中节点个数最少是3个(必须为奇数个),同时集群是一致性的。
  • 1.2   作用
    zookeeper目的是将各种服务的复杂的核心功能封装,形成一个个简单的接口(对外提供服务),同时统一协调这些服务。
    功能:命名服务、配置管理、集群管理、分布式锁、队列管理
    优点:客户端发起事务请求,请求的结果在整个Zookeeper集群中所有机器上的应用情况是一致的,同时zookeeper能够保证客户端请求的顺序,每个请求zookeeper都会分配一个全局的且唯一的递增编号,此编号反映了事务操作的先后顺序。zookeeper将全量数据保存在内存中,并直接服务于所有的非事务请求,其中以读的操作场景性能非常优秀。
  • 1.3  应用场景
    主要用于Hadoop、Storm、消息中间件、RPC服务框架、分布式数据库同步系统,不适合存储大量的数据,存储key-value值
    1.4 etcd内部解剖
    使用的是zab协议,与raft协议很相似
    C/S架构,它由两种语言写的C+JAVA。
    zookeeper很像一个文件系统,zookeeper中的的每个znode都是一个路径,同时很多znodes共享一个name space,name space 更像一个独立的文件系统。znode都有一个父节点(最高为/,说白了类似于文件系统),同时如果这个znode有子节点那么这个znode是不能被删除的。但是它又不同于文件系统,每个znode都可以是目录并且它存储的数据是有限的。znode用于存储协调数据(状态信息、配置信息、位置信息等等),这些数据通常来以kilobyte为单位,所以很小,zookeeper会有内置的1M健康检查,防止一个大的数据存储进来。
    数据模型:

  架构模型:

  zookeeper集群中,会自动复制到集群中的每个节点,是数据保持一致。同时数据保留在内存中,所以有很低的延迟和高吞吐量,zookeeper的数据库的大小受宿主机的内存大小的限制,从而会限制znode的数量。
客户端连接zookeeper服务,必须知道zookeeper服务的列表(ip list),客户端只会连接一个zookeeper服务,当该服务挂了,就会找zookeeper服务列表里的其他地址并连接。
读请求---发送到客户端连接的zookeeper服务,而写请求会发送到所有的zookeeper服务,然后在这个写请求在完成集群中协商一致性后才会有回应客户端的行为。这里就体现了读和写的区别了,这种情况导致读取请求的吞吐量与服务器的数量成比例,写入请求的吞吐量随着服务器的数量增加而减少。
在zookeeper中顺序是非常重要的,响应的执行的顺序是强制的。它用的是一个唯一的zxid(ZooKeeper Transaction Id)来标记每一个请求,

2. Zookeeper安装
  系统要求

软件要求:
zookeeper运行于Java环境下,需要JDK1.6及以上。3个节点是最小的(奇数个),但是生产环境中最好使用5个,同时最好不要将这5台放到同一个交换机下,防止交换机宕机导致集群全部失效,以集群的形式运行,硬件要求2cpu/2G/80硬盘即可满足需求。
这里以集群形式讲解(以三个节点为例)
下载地址:
jdk: http://java.sun.com/javase/downloads/index.jsp
zookeeper: https://www.apache.org/dyn/closer.cgi/zookeeper/
当然可以选择就近的镜像站下载zookeeper:http://mirror.bit.edu.cn/apache/zookeeper/
wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
tar xf zookeeper-3.4.12.tar.gz -C /data/
cd /data/
ln -s zookeeper-3.4.12 zookeeper
至此安装完毕。


  •   2.1.1简单配置文件讲解:
    zookeeper有一个最小配置zoo_sample.cfg,这个一般就是最小配置。如下:

    [root@node1 conf]# grep -v ^# zoo_sample.cfg
    tickTime=2000    #以ms为单位,心跳和超时时间。
    initLimit=10
    syncLimit=5
    dataDir=/tmp/zookeeper  #zookeeper存储数据库快照地方及事务日志,生产中日志最好别再此处。
    clientPort=2181    #客户端连接的端口
  • 2.1.2 高级参数:
    以下参数是可选的,当然以下的有些参数可以在java系统属性中设置,一般是zookeeper.keyword这种形式。
    dataLogDir    #将zookeeper的事物日志直接写到这个目录下而不是dataDir,生产中有条件最好是可以将日志和快照分别存储,日志放到不繁忙的设备上(性能好的专有的设备)
  globalOutstandingLimit    (Java system property: zookeeper.globalOutstandingLimit.)
默认是1000的限制,它的作用主要是防止高并发场景zookeeper处理不了过多的客户端连接,从而导致超出系统内存,进一步导致zookeeper异常。
preAllocSize      (Java system property: zookeeper.preAllocSize)
默认block 大小为64M,如果快照频繁,那么需要调整该值,降低一些。
snapCount        (Java system property: zookeeper.snapCount)
我们知道zookeeper使用的是snapshot和事务日志来进行记录事务的。在一次快照前,snapCount决定了多少次事务记录到事务日志中。
maxClientCnxns
最大连接数量,说白了就是防止Ddos×××用,默认是60,如果设置为0表示不限制。
minSessionTimeout
默认是 tickTime的2倍
maxSessionTimeout
默认是 tickTime的20倍
fsync.warningthresholdms    (Java system property: zookeeper.fsync.warningthresholdms)
如果事务日志在写入日志时调用fsync函数,如果超过此值会在日志中显示警告的信息。默认是1000ms,这个值最好设置为系统的时间。
autopurge.purgeInterval
自动清理日志和快照的功能,默认是不开启的,适用于3.4版本,指定清理频率,单位是小时,默认是0,表示不清理。
autopurge.snapRetainCount
适用于3.4版本,当前面的开启后,那么zookeeper会保留多少文件来进行清除多余的快照和日志。默认是3,最小也是3
syncEnabled                 (Java system property: zookeeper.observer.syncEnabled)
默认开启,为了降低观察者从故障中恢复的时间。


  • 2.1.3 集群的参数:
    electionAlg
    它的值:0、1、2、3,其中0表示,默认是3,官网表示0、1、2将会在未来的版本取消。这个参数涉及的是选举基于哪个版本。
    initLimit
    跟ticktime有关,当集群中数据量变大时,最好调高该值(因为从的数量多了,leader同步数据时,时间会加长)
    leaderServes         (Java system property: zookeeper.leaderServes)
    想让Leader专注于集群中机器的协调,那么可以将这个参数设置为no,默认情况下是leader可以接受client的连接,如果设置为no,这样的leader会只负责集群中机器的调度,这样会大大提高集群的读写能力,它不会接受client的连接。生产环境中不建议设置为no
    server.x=[hostname]:nnnnn[:nnnnn], etc
    这里的x是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。  
    syncLimit
    同步时间,tickTime,允许F和L同步数据的时间,如果F过于落后,集群会将失败。
    group.x=nnnnn[:nnnnn]
    对机器分组
    weight.x=nnnnn
    权重设置
    cnxTimeout
    默认是5s,leader选举的超时时间。
    4lw.commands.whitelist
    命令的白名单,没有在的会禁止。4lw.commands.whitelist=stat, ruok, conf, isro
    ipReachableTimeout              (Java system property: zookeeper.ipReachableTimeout)
    ms为单位,ip到达的超时时间,
    tcpKeepAlive                     (Java system property: zookeeper.tcpKeepAlive)
    说白了就是集群中成员之间tcp的 keepalived。这个值是在操作系统层面的,首先设置操作系统,然后在设置这里为true。但是NAT网络和防火墙可能会终止这里tpc连接。默认是false
  • 2.1.4 集群间的认证和授权参数
    zookeeper.DigestAuthenticationProvider.superDigest
    (Java system property only: zookeeper.DigestAuthenticationProvider.superDigest)
    默认是关闭的。
    这个是权限控制及认证控制。
  • 2.1.5 生产测试的配置及启动:
    zoo.cfg配置文件如下:
    [root@node2 conf]# cat zoo.cfg
    tickTime=2000
    initLimit=5
    syncLimit=2
    dataDir=/data/zookeeper/data
    clientPort=2181
    server.1=node1:2888:3888
    server.2=node2:2888:3888
    server.3=node3:2888:3888
  注意:server.myid=host:port1:port2中,myid必须是唯一的,取值范围为1-255
配置全局变量jdk及zookeeper:

[root@node3 data]# tail -n 4 /etc/profile
export JAVA_HOME=/data/jdk
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export ZOOKEEPER_HOME=/data/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
source /etc/profile
  启动:zkServer.sh start
查看状态:zkServer.sh status

写入数据并读取:
任意个节点:
执行zkCli.sh 我们看到连接的是本地的2181端口

在其他节点也能查到该值。也就是说集群没有问题。
递归删除子节点

参考文章:
https://zookeeper.apache.org/
https://cwiki.apache.org/confluence/display/ZOOKEEPER/ProjectDescription
https://zookeeper.apache.org/doc/current/zookeeperAdmin.html




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660489-1-1.html 上篇帖子: 【zookeeper】集群安装 下篇帖子: 【ZooKeeper Notes 25】ZooKeeper运维之使用SnapshotFormatter可视化快照数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表