zookeeper3.4.14配置教程


​ zookeeper是一种分布式协调服务组件,它是Google chubby的一种开源实现。在日常工作中,zookeeper应用广泛,它不仅可以作为分布式协调服务使用,还常被用作配置维护、主从选举、集群管理、分布式锁等场景。

​ 由于工作中常用到zookeeper,为了之后服务搭建的方便,此处记录整个服务搭建的配置过程,以便之后查阅并快速配置。zookeeper的工作模式包括单机模式和集群模式,下面分别说明集群版的配置。zookeeper的配置项包括必选项和可选项两部分,其中必选项配置较为简单,可选项部分配置较多且复杂,但是在生产使用过程中,我们只需对必选项和可选项中的其中一部分进行配置即可。

1、Java JDK环境配置

​ 由于zookeeper是使用java语言编写,所以在搭建zookeeper服务之前,服务器必须具备java环境(若已具备该环境,可直接跳过)

1.1 jdk包下载

官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1.2 解压jdk包并将文件夹移动到指定位置
tar -xvzf jdk-8u231-linux-x64.tar.gz
mv jdk1.8.0_231 /usr/local/
1.3 添加系统环境变量

向/etc/profile文件末尾中添加如下配置后,并执行source /etc/profile

JAVA_HOME=/usr/local/jdk1.8.0_231
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
JVMFLAGS="-Xmx3550m -Xms3550m -Xmn2g -Xss128k"
1.4 检查是否配置成功
$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
$ javac 
Usage: javac <options> <source files>
...

2、集群版zookeeper 配置

​ 本文安装zookeeper使用版本3.4.14版本进行搭建,安装包从官网进行下载,Zookeeper机器间不需要设置免密码登录。本文使用三台服务器进行zookeeper集群的搭建,ip分别为:

  • 9.134.128.1
  • 9.134.128.2
  • 9.134.128.3
2.1 zookeeper安装包下载

​ 官网下载地址:https://archive.apache.org/dist/zookeeper/。

​ 特别注意,从版本3.5.5开始,需要下载带有bin名称的包,带有bin名称的包中有编译之后的的二进制包。而之前普通的tar.gz中只有源码无法直接使用。使用不带bin的包直接启动会报错:

​ Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

1.2 解压安装包并创建软连接

​ 此处安装创建软连接的目的是为了方便我们在使用的时候不需要带版本号方便,又能方便的知道当前zookeeper是那一版本的。

扫描二维码关注公众号,回复: 8542757 查看本文章
tar -xvzf ./zookeeper-3.4.14.tar.gz
ln -s /data/zookeeper-3.4.14/ /data/zookeeper
1.3 设置myid

​ myid是zookeeper集群中每台服务器的唯一标识,因此每台机器不能重复,建议从1开始进行递增。myid放在dataDir文件夹下,文件中只有一个id来标识这台机器。

此处约定:

IP 标识数值
9.134.128.1 1
9.134.128.2 2
9.134.128.3 3

分别在三台机器上添加myid文件

echo 1 > /data/zookeeper/data/myid
echo 2 > /data/zookeeper/data/myid
echo 3 > /data/zookeeper/data/myid
1.4 zookeeper配置zoo.cfg修改

zookeeper服务启动时默认寻找conf文件夹下的zoo.cfg,故在conf下创建文件zoo.cfg。

touch /data/zookeeper/conf/zoo.cfg

zoo.cfg内填入以下配置:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/datalog
clientPort=2181
autopurge.snapRetainCount=10
autopurge.purgeInterval=1

# extendedTypesEnabled=true

server.1=9.134.128.1:2888:3888
server.2=9.134.128.2:2888:3888
server.3=9.134.128.3:2888:3888

配置说明:

zookeeper必填的选填的配置项较多,其他配置项无需填写直接默认即可,只需要配置上述选项。

  • tickTime:服务器与服务器之间、服务器与客户端之间心跳检查的时间间隔。同时它也是一个时间单位,initLimit和syncLimit参数都以该值作为时间单位
  • initLimit:集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。此处表示当已经超过5个心跳时间之后leader还没收到follower的返回信息,则表示当前follower链接失败。
  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
  • dataDir:zookeeper保存快照数据的目录,默认情况下,zookeeper将写数据的日志也保留在这里。
  • dataLogDir:指定事务日志文件存放目录。若没指定该值,该日止写在dataDir下
  • clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
  • autopurge.snapRetainCount:指定自动清理快照文件和事务日志文件的时间,单位为小时,默认为0表示不自动清理,这个时候可以使用脚本zkCleanup.sh手动清理。不清理的结果是占用的磁盘空间越来越大。
  • autopurge.purgeInterval:指定保留快照文件和事务日志文件的个数,默认为3
  • extendedTypesEnabled:开启zookeeper扩展功能,如果需要使用到zookeeper的ttl node功能,需要设置当前参数为true。
  • server.N:用来配置该集群中的节点。N与后面的机器ip对应的myid保持一致。其中2888为服务器与集群中的leader交换信息的端口,3888为leader选举专用端口。
1.5 /bin/zkEnv.sh配置修改

zookeeper的系统运行日志默认打印在zookeeper.out文件中,由于zookeeper.out文件不会滚动和自动清理,会导致文件越来越大,所以此处需要修改zkEnv.sh配置,使其系统日志强制输出到日志文件中并支持滚动。

# 设置系统日志存放目录,将下面命令直接放在zkEnv.sh的最后
export ZOO_LOG_DIR=/data/zookeeper/datalog
# 设置日志输出方式,在zkEnv.sh中寻找ZOO_LOG4J_PROP,将该值修改为:
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
1.6 conf/log4j.properties 配置修改

设置每个日志文件大小为100M,滚动10个文件

log4j.appender.ROLLINGFILE.MaxFileSize=100MB
log4j.appender.ROLLINGFILE.MaxBackupIndex=10
1.7 启动、重启、暂停zookeeper集群

zookeeper集群启动部分先后顺序,可选择任意顺序启动,不过先启动的服务可能会连不上其他服务器,所以在启动之前会有错误日志,这个是正常情况。

# 启动zookeeper服务
cd /data/zookeeper/bin && ./zkServer.sh start

# 重启zookeeper服务
cd /data/zookeeper/bin && ./zkServer.sh restart

# 停止zookeeper服务
cd /data/zookeeper/bin && ./zkServer.sh stop
1.8 zookeeper服务验证

服务安装完毕后,需要验证zookeeper服务是否搭建成功,直接运行./zkServer.sh status即可。

# 对于leader命令返回值为:
$ ./zkServer.sh status
/usr/local/jdk1.8.0_231/bin/java
ZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

# 对于folllower 命令返回值为:
$ ./zkServer.sh status
/usr/local/jdk1.8.0_231/bin/java
ZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

# 若出现一下错误,可能是zookeeper服务还没完全起来,稍后在进行验证
[hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

参考链接:

1、ZooKeeper-3.4.6分布式安装指南

2、 ZooKeeper的配置文件优化性能(转)

3、zookeeper集群管理配置优化总结

4、分布式服务框架 Zookeeper — 管理分布式环境中的数据

发布了130 篇原创文章 · 获赞 40 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/u014630623/article/details/103549789