Zookeeper安装和配置
准备工作
安装 JDK,此步略。
下载 zookeeper
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz# 或者curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
解压 zookeeper
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/
创建软链,方便版本转换
ln -s zookeeper-3.4.6 zookeeper
单机版安装
切换到 zookeer 软链目录下执行
cd usr/local/zookeeper/conf/cp zoo_sample.cfg zoo.cfg
编辑 zoo.cfg 配置文件
vim zoo.cfg
启动服务
# 启动服务bin/zkServer.sh start# 测试连接bin/zkCli.sh –server 127.0.0.1:2181
集群安装
在zoo.cfg 添加配置,并按照下面的配置部署到相应的机器上,并在相应的服务器的数据目录下创建 myid
文件,并填写本机对应的 server.NUM 数值.如 server.1,则填 1。
## 真集群示例 server.1=192.168.101:2888:3888 server.2=192.168.102:2888:3888 server.3=192.168.103:2888:3888 ## 伪集群示例 # server.1=127.0.0.1:2888:3888 # server.1=127.0.0.1:2889:3889 # server.1=127.0.0.1:2890:3890
配置文件详解
Zookeeper 的默认配置文件为 zookeeper/conf/zoo_sample.cfg
,需要将其修改为 zoo.cfg
。
## CS通信心跳数 ## Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,以毫秒为单位。 tickTime=2000 ## 初始通信时限 ## 集群中的follower与leader之间初始连接时能容忍的最多心跳数(tickTime的数量)。 initLimit=10 ## LF同步通信时限 ## 集群中的follower与leader之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。 syncLimit=5 ## 数据文件目录 ## 保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。 dataDir=/home/ling/zookeeper/data ## 日志文件目录 ## 保存日志文件的目录。 dataLogDir=/home/ling/zookeeper/log ## 客户端连接端口 ## 客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2181 ## 服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口) ## 这个配置项的书写格式比较特殊,规则如下: ## 如 server.N=YYY:A:B ## N 表示服务器编号; ## YYY 表示服务器的IP地址; ## A为LF通信端口表示该服务器与集群中的leader交换的信息的端口; ## B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader) ## 一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能时A端口和B端口不一样 ## 真集群示例 server.1=192.168.101:2888:3888 server.2=192.168.102:2888:3888 server.3=192.168.103:2888:3888 ## 伪集群示例 # server.1=127.0.0.1:2888:3888 # server.1=127.0.0.1:2889:3889 # server.1=127.0.0.1:2890:3890 ## 最大请求堆积数 ## 默认是1000。在 server 无空闲来处理更多的客户端请求时,允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。 # globalOutstandingLimit=1000 ## 预先开辟磁盘空间 ## 用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数 # preAllocSize=65536 ## 快照 ## 每进行snapCount次事务日志输出后,触发一次快照(snapshot), 此时,ZK会生成一个snapshot.*文件,同时创建一个新的事务日志文件log.*。默认是100000.(真正的代码实现中,会进行一定的随机数处理,以避免所有服务器在同一时间进行快照而影响性能) # snapCount=100000 ## 用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能 # traceFile= ## session 超时时间,单位为毫秒 ## 默认值分别为2和20,即tickTime的2倍和20倍 # minSessionTimeout=2 # maxSessionTimeout=20 ## 不支持以系统属性方式配置 ## 从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和 # maxClientCnxns=60 ## 单位为字节 ## 配置单个数据节点上可以存储的最大数据量大小。在变更该参数时,需要变更集群中所有机器以及客户端上均设置才能生效。 # jute.maxbuffer=1048575 ## 单位为字节,仅支持系统属性方式配置:jute.maxBuffer。用于配置单个数据节点上可以存储的最大数据量大小。在变更该参数时,需要变更集群中所有机器以及客户端上均设置才能生效。 # clientPortAddress= ## 默认值为3,不支持以系统属性方式配置。用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。此参数的最小值为3,如果配置的值小于3会自动调整到3。 # autopurge.snapRetainCount=3 ## 默认值为0,单位为小时,不支持以系统属性方式配置。用于配置Zookeeper进行历史文件自动清理的频率。如果配置为0或负数,表示不需要开启定时清理功能。 autopurge.purgeInterval=1 ## 最大保留文件的个数,搭配 autopurge.purgeInterval 使用 autopurge.snapRetainCount=3 ## 默认值为1000,单位为毫秒,仅支持系统属性方式配置 ## 配置Zookeeper进行事务日志fsync操作时消耗时间的报警阈值。一旦fsync操作消耗的时间大于该参数指定的值,就在日志中打印出报警日志 # fsync.warningthresholdms=1000 ## 默认值为yes,可配置项为“yes”和“no”,仅支持系统属性方式配置 ##配置Zookeeper服务器是否在提交的时候,将日志写入操作强制刷入磁盘,默认情况下,每次事务日志写入操作都会实时刷入磁盘,如果设置为“no”,则能一定程度的提高ZooKeeper的写性能,但会存在类似机器断电等安全风险。 ## forceSync=yes ## 默认值为yes,可选配置项为“yes”和“no”,仅支持系统属性方式配置 ## 用于配置Leader服务器是否能够接受客户端的连接,即是否允许Leader向客户端提供服务。默认情况下,Leader服务器能够接受并处理客户端的所有读写请求。在Zookeeper的架构设计中,Leader服务器主要用来进行对事务更新 # leaderServes=yes ## 默认值为no,可选配置项为“yes”和“no”,仅支持系统属性方式配置 ## 用于配置ZooKeeper服务器是否跳过ACL权限检查,默认情况下,会对每一个客户端请求进行权限检查。如果设置为“yes”,则能一定程度的提高ZooKeeper的读写性能,但同时也将向所有客户端开放Zookeeper的数据,包括之前设置过ACL权限的数据节点,也不在接受权限控制 # skipAcl=no ## 默认值为5000,单位毫秒,仅支持系统属性方式配置 ## 配置在Leader选举过程中各服务器之间进行TCP连接创建的超时时间 # cnxTimeout=5000