linux上安装
集群模式
-
准备java运行环境
-
下载ZooKeeper的安装包
http://mirrors.hust.edu.cn/apache/zookeeper/ -
配置zoo.cfg文件 初次使用ZooKeeper , 需要将%ZK_HOME%/conf目录下的zoo_sample.cfg文件重命名zoo.cfg,并且按照如下代码进行简单配置即可
dataDir=/var/lib/zookeeper/ clientPort=2181 initLimit=5 syncLimit=2 server.1=ip1:2888:3888 server.2=ip2:2888:3888 server.3=ip3:2888:3888 # server.id=host:port1:port2 # id被称为ServerId,用来标识该机器 在集群中的机器序列号(1-255) # port1 用于指定Follower服务器与Leader进行运行时通信和数据同步所使用的端口 # port2 专门用于进行leader选举过程中的投票通信
-
创建myid文件
在dataDir目录下,创建myid文件,在该文件的第一行写上一个数字,和zoo.cfg中当前的机器编号对应上 -
按照相同的步骤,配置其他机器的zoo.cfg和myid文件
-
启动服务器
%ZK_HOME%/bin/zkServer.sh start -
验证服务器
单机模式
-
只需要对zoo.cfg做如下修改,不需要myid(也可以有)
tickTime=2000 dataDir=/var/lib/zookeeper/ clientPort=2181 initLimit=5 syncLimit=2 #和myid保持一致,要不都有要不都没有 server.1=127.0.0.1:2888:3888
伪集群
-
解压到三个不同的目录下
-
修改各个zoo.cfg:
tickTime=2000 dataDir=./data 服务端口不同 clientPort=2181 initLimit=5 syncLimit=2 server.1=127.0.0.1:2777:3777 server.2=127.0.0.1:2888:3888 server.3=127.0.0.1:2999:3999
-
分别在各个dataDir目录下建立myid文件,在该文件的第一行写上一个数字,和zoo.cfg中当前的机器编号对应上
windows下安装
-
准备java 运行时环境
-
下载ZooKeeper安装包,ZooKeeper针对不同的平台使用的安装包是一样的2. 下载ZooKeeper,ZooKeeper针对不同的平台使用的安装包是一样的
http://mirrors.hust.edu.cn/apache/zookeeper/
下载后的文件名为zookeeper-x.x.x.tar.gz 解压该文件到三个不同的文件夹 -
配置文件 zoo.cfg
和linux平台上的配置方式一致,第一次部署Zookeepr服务,需要将%ZK_HOME%\conf目录下的
zoo_sample.cfg 文件重命名为zoo.cfg,并且按照如下步骤进行配置tickTime=2000 dataDir=../data clientPort=2181 initLimit=5 syncLimit=2 server.1=127.0.0.1:2777:3777 server.2=127.0.0.1:2888:3888 server.3=127.0.0.1:2999:3999
-
在 dataDir所配置的目录下,创建呀一个名为myid的文件,在该文件第一行写一个数字,使其与zoo.cfg中当前机器的编码号相对应
-
按照相同的步骤,在其他的目录都配置导航zoo.cfg 和 myid 文件
-
双击每个 peer的bin目录下的zkServer.cmd 文件来启动服务器
ZooKeeper 配置详解
基本配置
参数列表 | 说明 | 是否必须配置 | 默认值 |
---|---|---|---|
clientPort | 当前服务器对外的服务端口,客户端会通过该端口和ZooKeeper服务器创建连接,一般设置为2181. 每台ZooKeeper服务器都可以配置任意可用的端口,同事,集群中的所有服务器不需要保持clientPort端口一致 | 是 | 无 |
dataDir | 用于配置ZooKeeper服务器存储快照文件的目录.默认情况下如果没有配置参数dataLogDir,那么事务日志也会存储在这个目录中.考虑到事务日志的写性能直接影响ZooKeeper整体的服务能力,因此建议同时通过参数dataLogDir来配置ZooKeeper事务日志的存储目录 | 是 | 无 |
tickTime | 用于配置ZooKeeper中最小时间单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的.例如,ZooKeeper中的回话的最小超时时间默认是2*tickTime | 否 | 3000(ms) |
高级配置
参数列表 | 说明 | 是否必须配置 | 默认值 |
---|---|---|---|
dataLogDir | 用于配置ZooKeeper服务器存储书屋日志文件的目录.默认情况下,ZooKeeper会将事务日志文件和快照数据存储在同一个目录中,应该尽量将这两者的目录区分开来.另外,如果条件允许,可以将事务日志的存储配置在一个单独的磁盘上. | 否 | dataDir |
initLimit | 该参数用于配置leader服务器等待Follower启动,并完成数据同步的时间.通常情况下运维人员不用太在意这个参数的配置,使用器默认值即可 | 是 | 10(10*tickTime) |
syncLimit | 该参数用于配置leader服务器和Follower之间进行心跳检测的最大延时时间 | 是 | 5(5*tickTime) |
snapCount | 用于配置相邻两次数据快照之间的事务操作次数 | 否 | 100000 |
preAllocSize | 该参数,用于配置ZooKeeper事务日志文件,预分配的磁盘空间大小 | 否 | 65536 |
minSessionTimeout | 该参数用于服务端对客户端超时时间进行限制,最小超时时间 | 否 | 2(2*tickTime) |
maxSessionTimeout | 该参数用于服务端对客户端最大超时时间 | 否 | 20(20*tick) |
maxClientCnxns | 从Socket层面限制单个客户端与单台服务器之间的并发连接数,如果设置为0,则表示对连接数不做任何限制 | 否 | 60 |
jute.maxbuffer | 该参数用于配置单个数据节点上可以存储的最大数据量大小.通常情况下运维人员不需要改动该参数.同时考虑到ZooKeeper上不事宜存储太多数据,往往还需要将该参数设置的更小 | 否 | 1048575(byte) |
clientPortAddress | 针对那些多网卡的机器,该参数允许每个ip地址指定不同的监听端口 | 否 | 无 |
server.id=host:port1:port2 | 该参数没有默认值,单机模式下可以不配置,不支持系统属性配置.id = servierId,与每台服务器myid文件中的数字相对应.端口一用于指定Follower与Leader进行运行时通信和数据同步时使用的端口,第二个端口则专门用于进行Leader选举过程中的投票通信 | 否 | 无 |
autopurge.snapRetainCount | 自从zk3.4.0版本开始,zk开始提供了对历史事务日志和快照数据自动清理的支持.该参数用于配置zk在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件 | 否 | 3 |
autopurge.purgeInterval | 和上面的参数配套使用,用于配置zk进行历史文件自动清理的频率.如果配置该值为0或负数,那么就表明不需要开启定时清理功能 | 否 | 0 |
fsync.warningthresholdms | 用于配置zk进行事务日志fsync操作时消耗时间的阀值 | 否 | 1000(ms) |
forceSync | 该参数用于配置zk服务器是否在事务提交的时候,将日志写入操作强制刷入磁盘,默认情况下默认是yes,即每次事务日志写入操作都会实时刷入磁盘.如果将其设置为’no’,则一定程度的提高zk的写性能,但是同时会存在类似于机器断电这样的安全风险 | ||
globalOutstandingLimit | 用于配置zk服务器最大请求堆积数量 | 否 | 1000 |
leaderServes | 该参数用于配置leader服务器是否能够借口客户端的连接,即是否允许Leader向客户端提供服务,默认情况下,Leader服务器能够接受并处理客户端的所有读写请求. | 否 | yes |
SkipAcl | 该参数用于配置ZooKeeper服务器是否跳过Acl权限检查,默认情况下是no,即会对每个客户全连接请求进行权限检查.如果将其设置为yes,则能一定程度上提高zk的读写性能,但同时也将向所有客户端开发zk的数据包,包括那些之前设置过acl权限的数据节点,也将不在接受权限控制 | 否 | no |
cnxTimeout | 该参数用于配置在Leader选举过程中,各服务器之间进行tcp连接创建的超时时间 | 否 | 5000(ms) |
electionAlg | 没用啦 | 否 | 无 |