安装步骤
本安装教程, 采用 zookeeper 3.6.1
装 java
下载 zk 包, 分发到各个机器
确定或创建一个 zookeeper 的数据存放路径, 并在该路径下创建一个 myid 文件, 其中设置当前 zookeeper 节点的编号, 编号范围 1~255. 整个 zookeeper 集群唯一
在数据文件夹创建一个 initialize 文件, 初始化集群时使用, 启动后, 集群会自动删除该文件. 后续重启集群, 不需要该文件
initialize 文件
3.6.0 的 zk, 在启动后, 如果发现自己的 data 目录是空的, 则不会参与集群选举, 知道该节点连上一个 master, 然后从其同步过完整的数据后, 才具有选举权 , 之所以这么做的原因是. 万一谁不小心删了数据文件, 这个时候重启该节点, 如果运行该节点参与选举, 要是该节点被选成 master, 会导致怎个集群数据丢失.
但第一次启动集群, 大家确实都没数据, 如果都没有选举权的话, 第一次选举就不会进行, 所以要在 data 目录下创建一个 initialize 文件, 暂时屏蔽调 3.6.0 的数据丢失保护功能. 集群启动, 正常选举后, 该文件会被删除, 进入数据丢失的保护机制
配置文件
一般可直接配置 zk 发型包 conf 下的 zoo.cfg 文件
- tickTime=2000
- dataDir=/var/lib/zookeeper/data
- dataLogDir=/var/lib/zookeeper/log #默认 dataLogDir 和 dataDir 在一起, 最好将其分开, 以提高 zk 性能. 因为同时写数据和日志到一个磁盘, 磁盘会有些瓶颈限制
- autopurge.purgeInterval=1 #开启定期清理功能, 以免数据和日志文件过大
- autopurge.snapRetainCount=1000
- clientPort=2181 #zk 集群对外提供服务的端口
- initLimit=5
- syncLimit=2
- server.1=zoo1:2888:3888 #"server.1" 中的 1, 即是该机器在数据文件夹中配置的 myid. zoo1,zoo2,zoo3 是 zk 集群的节点 hostname 或 ip. 2888 是 follower 用来跟 leader 通信的端口, 3888 是用来选举 leader 的端口
- server.2=zoo2:2888:3888
- server.3=zoo3:2888:3888
影响性能的点
数据盘独立
磁盘的读写性能会严重影响到 zk 的性能. 所以尽量将 zk 的数据存储目录防止带单独的磁盘. 有条件的话, 将其日志文件路径也放置到单独磁盘. 同其它程序共用一个磁盘, 当磁盘读写性能出现瓶颈时, zk 的性能会急速下降
内存不要超机器限制
当 zk 申请的内存超过操作系统的空闲内存, 那么操作系统会启用 swap 机制, 即利用硬盘做为交换内存. 这也将严重影响 zk 的性能. 所以如果系统有 4g 内存, 那么 zk 申请内存最好小于等于 3G.
两种启动方式
使用自带脚本
在 bin 下 ./zkServer.sh start
该 zkServer.sh 会首先执行 zkEnv.sh
zkEnv.sh 中有整个 zk 执行相关环境变量设置, 从 zkEnv.sh 代码中可以看到
- if [ -f "${ZOOCFGDIR}/zookeeper-env.sh" ]; then
- . "${ZOOCFGDIR}/zookeeper-env.sh"
- fi
- if [ "x$ZOOCFG" = "x" ]
- then
- ZOOCFG="zoo.cfg"
- fi
- ZOOCFG="$ZOOCFGDIR/$ZOOCFG"
- if [ -f "$ZOOCFGDIR/java.env" ]
- then
- . "$ZOOCFGDIR/java.env"
- fi
它回去 zk 配置目录, 也即 CONF 中找 zookeeper-env.sh, 和 java.env. 所以我们可以将相关的环境变量设置到这两个文件中 (没有就创建)
.env 文件其实跟 shell 差不多, 启动定义的环境变量格式为 key=value, 最终生效, 通过执行该文件, 或者 source 它都可以.
从 zkEnv.sh 中还可以得出的信息是, 要设置 zk server 端的内存占用大小, 是通过 ZK_SERVER_HEAP 来, 因为 zkEnv.sh 有如下代码
- # default heap for zookeeper server
- ZK_SERVER_HEAP="${ZK_SERVER_HEAP:-1000}"
- export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS"
当然其它一些 - D 的 java 参数, 可以设置到这个变量上 SERVER_JVMFLAGS
使用 java 命令
上述脚本实际上最终入口, 是执行了 zookeeper 的 jar. 我们当然也可以直接通过 java 命令启动 zookeeper 的 jar, 并加装指定配置
java -cp zookeeper.jar:lib/*:conf org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.conf
参考资料
来源: https://www.cnblogs.com/niceshot/p/12961251.html