Zookeeper配置参数与简介(1)

By | 04月14日
Advertisement

[前言:这是一次艰苦的旅行...]

一.初始ZK


1. 什么是ZK
:ZK是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集团管理/leader选举等。关键词:分布式协调 高性能
2. 设计目标

  • 简单:ZK中的namespace组织结构类似与标准的文件系统,通过这些共享的有层次的namespace来互相协调分布式中的多个进程,这些namespace由ZNodes组成,ZK数据被保存在内存中,这也意味着ZK将可以达到较高的吞吐量/较低的延迟。ZK的核心目标就是高性能,高可用,严格有序存取。高性能标志着ZK可以被使用在大规模分布式环境中,高可用标志着ZK避免单点故障,具有较强的容错能力;严格有序(strict ordering)意味着客户端可以实现复杂的同步。
  • 复制:ZK的数据将会在ZK Cluster中的每台机器上协作复制(备份),构成ZK服务的机器必须能够互相感知对方。它们保持了一个内存视图状态(in-memory image of state),同时伴随这tnx log和snapshot的持久存储。只要大部分server有效,那么ZK 服务也是有效的。客户端只与一个zk server建立链接,client通过建立的TCP连接来进行请求/响应/获取事件/发送心跳等。如果此TCP连接失效,client将会尝试连接其他的ZK server。
  • 全序性:对于每个update请求,ZK(leader)都会为其生成唯一的Zid来表示其事务的顺序,接下来的操作可以使用zid的顺序实现同步原语(队列)。
  • 高效快速:ZK在“读主导”的应用中表现的非常的优秀。ZK应用可以运行在数台机器上,并且在read远大与write的场景中,是非常适合的,通常这个比例为10:1.

3. ZK server组成: ZK server根据其身份特性分为三种:leader,Follower,Observer,其中Follower和Observer又统称Learner(学习者)。

  • Leader:负责客户端的writer类型请求
  • Follower:负责客户端的reader类型请求,参与leader选举等
  • Observer:特殊的“Follower”,其可以接受客户端reader请求,单不参与选举。(扩容系统支撑能力,提高了读取速度。因为它不接受任何同步的写入请求,只负责与leader同步数据)

4. zoo.cfg配置文件详解(参考源码:org.apache.zookeeper.server.quorum.QuorumPeerConfig):
//最小化配置

  • tickTime=2000 //the length of single tick,it's the base time unit.(heartbeats,timeout,sessionTimeOut)
  • clientPort=2181 //the port that client should connnect to.
  • dataDir= //the location :memory database snapshots
  • dataLogDir= //the location :the txn log file,if not specified,it's the same as 'dataDir'

//扩展配置

  • globalOutstandingLimit(系统属性:zookeeper.globalOutstandingLimit) //default 1000.如果有大量client,会造成ZK server对请求的处理速度小于client的提交请求的速度,会造成server端大量请求queue滞留而OOM,此参数控制server最大持有未处理请求的个数。
  • preAllocSize(系统属性:zookeeper.preAllocSize) //为了避免大量磁盘检索,ZK对txn log文件进行空间预分配,默认为64M。每当剩余空间小于4K时,将会再次“预分配”。你可以尝试减小此值,比如当SNAP较为频繁时(snapCount较小).
  • snapCount(系统属性:zookeeper.snapCount) //默认为100000,在新增log(txn log)条数达到snapCount/2 + Random.nextInt(snapCount/2)时,将会对zkDatabase(内存数据库)进行snapshot,将内存中DataTree反序为snapshot文件数据,同时log计数置为0,以此循环。snapshot过程中,同时也伴随txn log的新文件创建(这也是snapCount与preAllocSize参数的互相协调原因)。snapshot时使用随机数的原因:让每个server snapshot的时机具有随即且可控,避免所有的server同时snapshot(snapshot过程中将阻塞请求)。参见SyncRequestProcessor.run()
  • traceFile(系统属性:requestTraceFile) //请求跟踪文件,如果设置了此参数,所有请求将会被记录在traceFile.year.month.day,类似与nginx的request log,不过此参数的配置,会带来一定的性能问题(Debug model)。
  • maxClientCnxns=60 //default 60,一个client与server上最大的socket链接数(socket层),根据IP区分。设置为0,取消此限制。此值在一方面是为了避免DOS攻击。
  • ClientPortAddress //new in 3.3.0,IP或者hostName,指定侦听clientPort的address。此参数是可选的,默认是clientPort会绑定到所有的IP上,在物理server具有多个网络接口时,可以设置特定的IP。
  • minSessionTimeout //new in 3.3.0,default 2*tickTime,也是server允许的最小值,如果设置的值过小,将会采用默认值。
  • maxSessionTimeout //new in 3.3.0,default 20*tickTime,也是server允许的最大值。
  • autopurge.snapRetainCount //new in 3.4.0,zk server启动时会开启一个DatadirCleanupManager的线程,用于清理“过期”的snapshot文件和其相应的txn log file,此参数用于设定需要被retain的文件个数。(源码中关于清理机制,还有点意思)
  • autopurge.purgeInterval //new in 3.4.0,和上述参数配合,清理任务被处罚的时间间隔,单位:hours,实现原理为Timer.scheduleAtFixedRate(...)

//cluster环境配置

  • electionAlg= //default 3.使用何种选举方式,(0,1,2,3),“0”表示使用原生的UDP(LeaderElection),“1”表示使用非授权UDP,“2”表示授权UDP,“3”基于TCP的快速选举(FastLeaderElection)。目前保留“3”,其他方式将在未来版本不予支持,参见QuorumPear.createElectionAlgorithm(int alg)
  • initLimit=10 //Leader与Learner建立的链接中(终端为learner),sock通讯read所阻塞的时间(initLimit * tickTime),此值为tick的倍数 ,如果Learner数量较多或者Leader的数据很大,建议增加此值。参见LearnerHandler.run()。
  • SyncLimit=5 //Learner与Leader建立的链接中,sock通讯read阻塞的时间。其中包括数据同步/和数据提交操作等,此值为tick的倍数,参见learner.connectToLeader()/syncWithLeader().
  • peerType //ZK server类型:observer,participant
  • leaderServes(系统属性:zookeeper.leaderServes) //leader是否接受client请求,默认为“yes”即leader可以接受client的链接。在ZK cluster环境中,当节点数量》3时,建议关闭。
//server列表
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
server.4=127.0.0.1:2891:3891
server.5=127.0.0.1:2892:3892
//上述为ZK 节点列表,格式:server.sid = hostname:followingPort:electionPort,如果采用UDP方式,electionPort可以不用设置。
//Leader选举成功之后,Follower可以在followingPort上与leader建立链接,以便此后进行各种通讯.比如server.1为Leader,那么其他机器将会在127.0.0.1:2888上建立链接.
//electionPort为Leader选举的端口,当集群处于危险期时,每个server都会根据server列表中配置,和其他server的electionPoint建立链接,并在此后通过此连接发送"选举"信息.

  • cnxTimeout(系统属性:zookeeper.cnxTimeout) //leader选举时,socket链接打开的时长。只有在elctionArg为3时生效。

//不安全配置(不建议修改部分)

  • skipACL(系统属性:zookeeper.skipACL) //默认为no。是否忽略所有的ACL检查。
  • forceSync(系统属性:zookeeper.forceSync) //默认为yes。在update执行前,是否强制对操作立即持久写入txn log文件。关闭此选项,会造成服务失效后,尚未持久的数据丢失。
  • Jute.maxbuffer(系统属性:jute.maxbuffer) //默认为1024,单位KB,即表示节点可挂载的data最大为1M。如果修改此值,请首先确保所有的server上一致。

4. ZK Commands:
四字指令(指令为四个字符组成),是方便我们获取ZK cluster状态信息的简单的方式,开发者可以使用"命令"的方式操作,其通过telnet或者nc的方式向ZK的clientPort发送指令.(源码:FourLetterWordMain.java)
【$echo “cmd” | nc ip clientPost】,如下为”cmd”合法值列表:
conf:打印server配置信息
cons:列举出与server建立的所有链接/session详情,包括数据接收/发送量,sessionId,操作延迟等等。
crst:reset关于链接/session的统计信息。
dump:列举所有的session和临时节点,只能在leader上生效。
envi:打印server的环境
ruok:检测server是否正常,如果响应“imok”则表示正在运行。
srst:重置server的统计信息
stat:列举server主要的信息。(比如可以获取此server是否为Leader)
mntr:输出cluster的健康监控参数数据。

5. 其他;
data被存储在data文件夹,txn log被存储在日至文件夹中,默认这两个路径一样。对于每个ZK Server还需要一个myid的文件,此文件作为一个data文件放置与data目录下,用于标识此server的SID,cluster中sid用于区分通讯中server信息,且不能有重复值(myid文件中只包含一个Integer的数字)。snapshot文件即为ZKDatabase的“快照”,其文件名称格式为 snapshot.zid,其中zid为“快照”开始时最大的zid。

Similar Posts:

  • ZooKeeper配置参数

    配置文件说明,官网的最权威 ZooKeeper官网配置参数详解 http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html#sc_minimumConfiguration 下面列出一些自认为比较有用和重要的参数: clientPort 客户端连接server的端口,即对外服务端口,一般设置为2181吧. dataDir 存储快照文件snapshot的目录.默认情况下,事务日志也会存储在这里.建议同时配置参数dataLogDir, 事务日志

  • 网络学习(十七)虚拟机相关配置参数简介

    虚拟机相关配置参数简介 1.创建好的虚拟机配置,如虚拟机的内存大小.硬盘数量.网卡数量和连接方式.声卡.USB接口等并不是一成不变的,用户可以根据需要随时修改(主要内容引用王春海老师的著作). 下面开始介绍: 一般我们应该在虚拟机关机的情况下,修改虚拟机的配置:在VMware Workstation 6.5及其以后的版本中,可以在虚拟机运行(不是挂起)的时候,配置.添加或删除部分设备. 2.我们先介绍"Hardware"选项卡: (1)在下面的图中,虚拟机是处于关机状态,我们可以修改内

  • Kafka 配置参数汇总及相关说明

    问题导读 1.如何深入理解kafka? 2.kafka有哪些重要的配置参数? Kafka为broker,producer和consumer提供了很多的配置参数. 了解并理解这些配置参数对于我们使用kafka是非常重要的. 本文列出了一些重要的配置参数. 官方的文档 Configuration比较老了,很多参数有所变动, 有些名字也有所改变.我在整理的过程中根据0.8.2的代码也做了修正. Boker配置参数 下表列出了Boker的重要的配置参数, 更多的配置请参考 kafka.server.Ka

  • Crystal框架配置参数加载机制详解?

    前言 定义 配置参数定义的形式 配置参数文件定义在哪里? 配置参数加载的优先级 如何使用配置参数? 最佳实践 Jar项目中如何定义配置参数? War项目中如何定义或重载Jar包中的配置参数? 开发人员如何自定义配置参数? 如何采用数据库管理配置参数? 相关的文章 前言 基于Crystal框架开发的应用,在开发和部署过程中,不可或缺的需要和配置参数打交道,本文详细介绍下Crystal框架对配置参数的加载机制. 支持以下功能的框架最低版本为:v2.2.0,建议采用v2.3.0以上版本. 定义 什么是

  • linux 中网卡配置命令 ifconfig简介

    ifconfig 无论是Linux自动安装还是我们手工安装,Linux都会向你询问有关网络的问题并配置相关的软件.这个用于配置网卡的基本命令就是ifconfig. 在执行ifconfig命令后,系统将在内核表中设置必要的参数,这样Linux就知道如何与网络上的网卡通信.ifconfig命令有以下两种格式: ※ifconfig [interface] ※ifconfig interface [aftype] option | address - ifconfig的第一种格式(或使用不带任何参数的i

  • 针对Properties中实时性要求不高的配置参数,用Java缓存起来

    Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求非常高.项目中,有些参数要求实时性非常高,即在系统运行中,IT人员修改了该参数值,该新参数值要求立即在程序中生效: 二.实时性要求不高.其实,并不是每个配置参数都要求实时性那么高,有些配置参数基本不会在项目运行当中修改,或即使在运行当中修改,也只要求其在下一次项目启动时生效. 针对第二种情况,鉴于程

  • MongDB使用配置文件配置参数启动【MongDB系列之八】

    可以分别在mongdb 下写入配置文件,将参数放入配置文件进行启动,这样就不会每次都写很多参数了. 配置文件以key=value 的方式存储: dbpath=D:\MongDB_D\data\db shardsvr=27018 bind_ip=192.168.1.101 port=7700 replSet=shard2/192.168.1.101:7700 将上述配置参数写入文件 D:\MongDB_D\bin\d.config 启动的时候: mongod -config d.config 即可

  • sap入门--sap配置参数详解

    SAP 系统参数设置 path: /usr/sap/PRD/SYS/profile profile: PRD_DVEBMGS00_sapapp 如果您想查看所有的参数及当前设定,可使用SA38 执行程序 RSPARAM 修改附加配置 T-CODE:RZ10 进行SAP系统参数的设置,设置后需激活参数并重启SAP实例,配置参数才会生效 login/system_client 登录时默认的Client号 login/password_expiration_time 密码有效期 login/fails

  • Hadoop YARN配置参数剖析(3)—MapReduce相关参数

    MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中作为默认参数,也可以在提交应用程序时单独指定,注 意,如果用户指定了参数,将覆盖掉默认参数. 以下这些参数全部在mapred-site.xml中设置. 1. MapReduce JobHistory相关配置参数 在JobHistory所在节点的mapred-site.xml中配置. (1) mapr

  • Mysql Server端关于字符编码的配置参数

    在Mysql Server端有很多关于字符编码的配置参数,比如 | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_s

Tags: