博客
关于我
zookeeper安装部署步骤
阅读量:433 次
发布时间:2019-03-06

本文共 4519 字,大约阅读时间需要 15 分钟。

安装步骤

本安装教程,采用zookeeper 3.6.1

  1. 装java
  2. 下载zk包,分发到各个机器
  3. 确定或创建一个zookeeper的数据存放路径,并在该路径下创建一个myid文件,其中设置当前zookeeper节点的编号,编号范围1~255。整个zookeeper集群唯一
  4. 在数据文件夹创建一个initialize文件,初始化集群时使用,启动后,集群会自动删除该文件。后续重启集群,不需要该文件

initialize文件

3.6.0的zk,在启动后,如果发现自己的data 目录是空的,则不会参与集群选举,知道该节点连上一个master, 然后从其同步过完整的数据后,才具有选举权 ,之所以这么做的原因是。万一谁不小心删了数据文件,这个时候重启该节点,如果运行该节点参与选举,要是该节点被选成master, 会导致怎个集群数据丢失。

但第一次启动集群,大家确实都没数据,如果都没有选举权的话,第一次选举就不会进行,所以要在data 目录下创建一个initialize文件,暂时屏蔽调3.6.0的数据丢失保护功能。集群启动,正常选举后,该文件会被删除,进入数据丢失的保护机制

配置文件

一般可直接配置zk发型包conf下的zoo.cfg文件

tickTime=2000dataDir=/var/lib/zookeeper/datadataLogDir=/var/lib/zookeeper/log #默认dataLogDir和dataDir在一起,最好将其分开,以提高zk性能。因为同时写数据和日志到一个磁盘,磁盘会有些瓶颈限制autopurge.purgeInterval=1 #开启定期清理功能,以免数据和日志文件过大autopurge.snapRetainCount=1000clientPort=2181 #zk集群对外提供服务的端口initLimit=5syncLimit=2server.1=zoo1:2888:3888 #"server.1"中的1,即是该机器在数据文件夹中配置的myid。 zoo1,zoo2,zoo3是zk集群的节点hostname或ip。 2888是follower用来跟leader通信的端口,3888是用来选举leader的端口server.2=zoo2:2888:3888server.3=zoo3:2888:3888

一些安装异常

异常1

2015-07-02 21:06:01,682 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormallyorg.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: Master.Hadoop:3888at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.
(QuorumPeer.java:205)at org.apache.zookeeper.server.quorum.flexible.QuorumMaj.
(QuorumMaj.java:89)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.createQuorumVerifier(QuorumPeerConfig.java:401)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseDynamicConfig(QuorumPeerConfig.java:425)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:291)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:126)at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:110)at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)Invalid config, exiting abnormally

这种错误是因为配置文件,端口号后面有空格,去掉空格就可以了

影响性能的点

数据盘独立

磁盘的读写性能会严重影响到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"fiif [ "x$ZOOCFG" = "x" ]then    ZOOCFG="zoo.cfg"fiZOOCFG="$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 serverZK_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

配置kerberos认证

上述配置,启用的是普通zk集群。如果一个启用了kerberos的hadoop、hive集群链接该zk,则会报错。所以我们需要对zk也启用kerberos。

zk启用kerberos有两个维度

  1. 对zk各组件之间通信启用kerberos认证,一般不需要配置,实在要配的地址为:
  2. 在zk服务端启用kerberos配置,专门用来实现需要使用kerberos认证跟zk通信的客户端,下面着重讲这种,对应的文档为:

client-server kerberos认证配置

首先在zoo.cfg中添加如下配置

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider # optional SASL related server-side properties: # you can instruct ZooKeeper to remove the host from the client principal name during authentication# (e.g. zk/myhost@EXAMPLE.COM client principal will be authenticated in ZooKeeper as zk@EXAMPLE.COM)# kerberos.removeHostFromPrincipal=true # you can instruct ZooKeeper to remove the realm from the client principal name during authentication# (e.g. zk/myhost@EXAMPLE.COM client principal will be authenticated in ZooKeeper as zk/myhost)# kerberos.removeRealmFromPrincipal=true

其次,在zk的配置文件中,创建一个jaas.conf,用来配置zk服务端在跟各种客户端通信时的kerberos证书信息

Server {       com.sun.security.auth.module.Krb5LoginModule required       useKeyTab=true       keyTab="/path/to/server/keytab"       storeKey=true       useTicketCache=false       principal="zookeeper/yourzkhostname";};

然后再zk的配置目录中,添加java.env文件,再其中配置上述jaas.conf的环境变量信息

SERVER_JVMFLAGS="-Djava.security.auth.login.config=/path/to/server/jaas/jaas.conf"

完了启动服务即可。

特别说明SASL

SASL全称Simple Authentication and Security Layer,是一个权限认证的抽象层,其下的具体权限认证可以是kerberos,也可以是TLS

参考资料

转载地址:http://vhryz.baihongyu.com/

你可能感兴趣的文章
Hibernate入门(四)---------一级缓存
查看>>
[Python学习笔记]组织文件
查看>>
快服务流量之争:如何在快服务中占领一席之地
查看>>
Spring Boot 2.x基础教程:构建RESTful API与单元测试
查看>>
dojo/request模块整体架构解析
查看>>
互联网App应用程序测试流程及测试总结
查看>>
如何使用google搜索?
查看>>
IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
查看>>
微软XAML Studio - WPF, Sliverlight, Xamarin, UWP等技术开发者的福音
查看>>
(在模仿中精进数据可视化07)星球研究所大坝分布可视化
查看>>
(数据科学学习手札27)sklearn数据集分割方法汇总
查看>>
从零开始学安全(十六)● Linux vim命令
查看>>
阿里巴巴Json工具-Fastjson教程
查看>>
Spring Cloud Gateway - 快速开始
查看>>
Java对象转JSON时如何动态的增删改查属性
查看>>
Python 面向对象进阶
查看>>
Linux常用统计命令之wc
查看>>
并发编程——IO模型详解
查看>>
Java之封装,继承,多态
查看>>
使用js打印时去除页眉页脚
查看>>