首页 > 其他分享 >搭建zk,kafka环境所遇到的问题

搭建zk,kafka环境所遇到的问题

时间:2023-08-03 18:05:05浏览次数:57  
标签:Zookeeper 配置 zk zookeeper ZOO sh kafka com 搭建


env:

jdk 1.8
centos 7.1

zookeeper 3.4.6 选这版体是因为对kafka做了很多优化,修改

 


Q1:zk启动不了

A1:  ./zkServer.sh start-foreground     发现少了myid 

解决 :在zk数据文件存放目录下(见 $ZK/conf/zoo.cfg,dataDir属性),创建myid文件并写入一个数字用来标识本节点(类似这个节点的身份证)。

#示例节点 dataDir=/home/crxj-coll/zookeeper-3.4.5/data
cd /home/crxj-coll/zookeeper-3.4.5/data
#这个节点准备命名为 第8号节点,新建文件myid并写入数字8
echo '8' > /var/tmp/zookeeper/myid

Q2:status 状态访问不了,Error contacting service. It is probably not running.

A2:通

这里有一个很好的Pdf,介绍了很多zookeeper的东东,作者是zookeeper的committer之一:

另外,这里有一个总结:http://marcin.cylke.com.pl/blog/2013/03/21/zookeeper-tips/
配置zookeeper开机启动





if [ "x${ZOO_LOG_DIR}" = "x" ]  
then  
    ZOO_LOG_DIR="$ZOOBINDIR/../logs"  
fi  
  
if [ "x${ZOO_LOG4J_PROP}" = "x" ]  
then  
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"  
fi




再在/etc/init.d目录下增加zookeeper1文件,并加个可执行权限:




cd /etc/init.d  
touch zookeeper1  
chmod +x zookeeper1



再修改zookeeper1的内容为:






#/bin/sh   
#chkconfig: 2345 20 80     
# description:  zookeeper1  
case $1 in  
          start) su zookeeper /home/zookeeper/zookeeper345_1/bin/zkServer.sh start   ;;  
          stop) su zookeeper /home/zookeeper/zookeeper345_1/bin/zkServer.sh stop;;  
          status) su zookeeper /home/zookeeper/zookeeper345_1/bin/zkServer.sh status;;  
          restart) su zookeeper /home/zookeeper/zookeeper345_1/bin/zkServer.sh restart;;  
              *)  echo "require start|stop|status|restart"  ;;  
esac


最后用chkconfig -add zookeeper1 增加服务。这样就搞定了。注意用su zookeeper来切换到zookeeper用户。如果是想配置Upstart方式的启动

zookeeper VIRT虚拟内存占用过大的问题:
这个和zookeeper的实现有关,参考这里:http://zookeeper-user.578899.n2.nabble.com/setting-zookeeper-heap-size-td6983511.html


Unreasonable length的问题:
https://issues.apache.org/jira/browse/ZOOKEEPER-1513目前线上用的是345版本,而zookeeper最后的release版本就是这个,有大概一年多没更新了。。这个问题有可能是client尝试向zookeeper上放超过1M的数据时,出现的。想修改这个默认配置,则可以修改"jute.maxbuffer"这个环境变量。参考:http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html但是我们线上是因为端口扫描工具造成的,这个就相当地诡异了。停止端口扫描工具之后,就没有这个问题了。


watches数量多的问题:
dubbo对于每个结点都会watch,导致watch数很多,随便都几千个。用wchs,wchc,wchp这些命令可以查看watches的信息,包括总数,每条路径上的watch的数量。每个client的。


查找不能成功启动原因:
zookeeper会有很多原因启动不成功,可以通过:



./zkServer.sh start-foreground


来查看启动时报的是什么异常,同时也可以查看运行过程中的异常。另外,通过:



./zkServer.sh print-cmd



可以查看zookeeper启动的各个参数,包括java路径等,也可以便于查找问题。


配置自动清理日志:
从3.4.0开始,会自动清理日志了,所以这个通常不用配置。
配置autopurge.snapRetainCount 和 autopurge.purgeInterval 参数。
保留的snapshop的数量,默认是3个,最小也是3.




autopurge.snapRetainCount=3  
autopurge.purgeInterval=1



参考这里:http://nileader.blog.51cto.com/1381108/932156



配置zookeeper.out的位置及log4j滚动日志输出
今天发现线上的bin/zookeeper.out 居然有6G大小。看了下zkServer.sh的代码,这个zookeeper.out实际上是nohup的输出。

研究了下bin/zkServer.sh和conf/log4j.properties,发现zookeeper其实是有日志相关的输出的配置,只要定义相关的变量就可以了。

zkServer.sh里的:

if [ ! -w "$ZOO_LOG_DIR" ] ; then  
mkdir -p "$ZOO_LOG_DIR"  
fi  
  
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"  
  
    nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \  
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1


log4j.properties里的:




#  
# Add ROLLINGFILE to rootLogger to get log file output  
#    Log DEBUG level and above messages to a log file  
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender  
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}  
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}



而zkServer.sh会加载zkEnv.sh。

https://gist.github.com/hengyunabc/61d74672e7a662a5366c




if [ "x${ZOO_LOG_DIR}" = "x" ]  
then  
    ZOO_LOG_DIR="$ZOOBINDIR/../logs"  
fi  
   
if [ "x${ZOO_LOG4J_PROP}" = "x" ]  
then  
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"  
fi




还可以修改下conf/log4j.properties,设置滚动日志最多为10个:






# Max log file size of 10MB  
log4j.appender.ROLLINGFILE.MaxFileSize=10MB  
# uncomment the next line to limit number of backup files  
log4j.appender.ROLLINGFILE.MaxBackupIndex=10


Too many connections from 错误
这个错误是因为同一个IP的zookeeper socket 连接数大于60了。zookeeper server默认限制每个IP最多60个连接。

修改为:

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_advancedConfiguration
This ZooKeeper instance is not currently serving requests 的错误提示

通常在,只启动第一台zookeeper时会报这个错误。

Exception causing close of session 0x0 due to java.io.IOException: ZooKeeperServer not running
Zookeeper连接速度很慢,Dubbo初始化很慢,应用启动很慢的问题

启动过程没有报错,只是Dubbo的注册信息日志一直在比较慢地刷。

再检查Zookeeper的配置,磁盘的空间,应用的dubbo配置,jvm配置,发现都没有问题。

这样确认是zookeeper本身比较慢,不是应用的问题。

于是问了下运维的同事,原来新机器是用共享磁盘的,所以速度很慢。

后来运维的同事换为本地磁盘,一切恢复正常。

管理工具:

Zookeeper官方自带的管理员工具:
http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html    官方的命令行工具可以胜任绝大部分工作了。



zktop
https://github.com/phunt/zktop  python写的小工具,很有意思


taokeeper
项目地址:https://github.com/alibaba/taokeeper
淘宝出品的一个监控工具,还有可以用脚本来监控的功能。虽然开源了,但是实际上很难用,代码也很难扩展,而且有些jar包是淘宝内部的。
我修改了下,可以正常使用,代码地址在:https://github.com/hengyunabc/taokeeper
但是我们线上也没有用这个,线上只有zabbix的监控。
安装配置参考:

编译
1.下载这两个项目:  git clone https://github.com/hengyunabc/common-toolkit.git  git clone https://github.com/nileader/zkclient.git  先分别执行 mvn -Dmaven.test.skip install2.下载本项目:  git clone https://github.com/hengyunabc/taokeeper.git  执行  mvn -Dmaven.test.skip clean package  到taokeeper-monitor/target/目录就可以看到生成的War包了。



部署
taokeeper使用mysql数据库来保存一些配置和日志。 导入taokeeper-build/etc/taokeeper.sql 文件,也可以从这里下载:文件:Taokeeper.sql.zip 。 配置tomcat启动参数,增加JVM启动参数:  JAVA_OPTS=-DconfigFilePath="~/taokeeper/taokeeper-monitor-config.properties"并在上面的配置中配置好参数,例如: systemInfo.envName=TEST#DBCPdbcp.driverClassName=com.mysql.jdbc.Driverdbcp.dbJDBCUrl=jdbc:mysql://localhost:3306/taokeeperdbcp.characterEncoding=GBKdbcp.username=rootdbcp.password=rootdbcp.maxActive=30dbcp.maxIdle=10dbcp.maxWait=10000#SystemConstantSystemConstent.dataStoreBasePath=~/taokeeper/#SSH account of zk serverSystemConstant.userNameOfSSH=helloSystemConstant.passwordOfSSH=hello其中SSH用户密码要配置对,zookeeper部署的机器要开放SSH服务。 把生成的War包改为ROOT.war,放到tomcat的webapps目录下,启动tomcat。 如果报log4j错误,则还要配置webapps/ROOT/WEB-INF/classes/log4j.properties 文件。也可以在编绎前先修改好。 打开 http://localhost:8080/ ,就可以看到taokeeper的界面了。

工作原理
taokeeper通过SSH连接到zookeeper部署的机器上,再在上面执行zookeeper的Four Letter Words来得到统计信息,再分析保存到mysql数据库中。 参考:http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#sc_zkCommands 监控目标机器的负载,也是通过SSH连接到目标机器,再执行top等命令,再分析得到数据。 注意事项
在chrome浏览器下,“机器监控”这个功能有时会把信息显示下浏览器的下面,要拉到最后才能看到,并不是这个功能不能工作。



Exhibitor


Exhibitor的主要功能 监控本机的Zookeeper服务,可以自动重启挂掉的Zookeeper服务; 定期备份数据; 定期清理Zookeeper日志; 提供了一个Web界面可以修改Zookeeper的数据; REST API。

Exhibitor安装
Exhibitor提供了三种运行方式:独立的jar文件,War包,core jar。推荐用jar方式运行,配置管理都很方便。 安装方法可以参考这里:https://github.com/Netflix/exhibitor/wiki/Building-Exhibitor,也可以从这里下载已经编绎好的jar文件:文件:Exhibitor-war-1.0-jar-with-dependencies.zip,下载后要修改后缀为jar。

运行
java -jar /exhibitor-xxx.jar -c fileExhibitor自动创建配置文件,在web界面所做的配置更改都会保存到exhibitor.properties中。

配置项
参考:https://github.com/Netflix/exhibitor/wiki/Configuration-UI 在配置“Servers”参数时,一定要注意要配置的是hostname,而不是IP。所以如果配置的是IP的话,一定要到目标机器上去检查hostname和IP是否一致。

注意事项
Exhibitor通过jps命令来判断Zookeeper服务是否运行,所以要配置好jps命令,如果没有当前没有jps命令的话,可以通过类似如下的命令创建一个软链接: ls -s /home/www/jdk/jdk1.7.0_15/bin/jps /usr/bin/jps Exhibitor会自动创建并覆盖zookeeper的配置文件,所以要在Web界面上把Zookeeper的所有参数都配置, 否则如果Zookeeper被Exhibitor重启后,可以会出现因为配置有错误而无法启动的状况。 在“control panel”面板中,当显示绿色,则说明Zookeeper服务正常,可以对外服务,当显示黄色或者红色, 则Zookeeper不能对外提供服务(这个和Zookeeper进程是否存在,是两个概念,即使Zookeeper进程存在,也可能无法对外提供服务)。 Exhibitor会定时探测Zookeeper服务是否正常,但是时间间隔默认配置为0,这个会导致机器CPU被消耗。要在Web界面中配置好“Live Check (ms)”参数。 因为Exhibitor如果探测到Zookeeper服务没有启动,会自动启动Zookeeper进程,所以在升级Zookeeper之前,要先停掉Exhibitor。

其它的一些东东:

性能测试相关:
https://github.com/brownsys/zookeeper-benchmark
这个工具输出结果比较乱,不过用起来还不错。
    mvn -DZooKeeperVersion=3.4.5 package
    ./runBenchmark.sh  test
然后在test文件夹下,会有生成的信息。主要在zk-benchmark.log这个文件里。

http://zookeeper.apache.org/doc/r3.4.5/zookeeperOver.html 
http://wiki.apache.org/hadoop/ZooKeeper/ServiceLatencyOverview 自带的文档里有一点,不过貌似没更新过http://wiki.apache.org/hadoop/ZooKeeper/ServiceLatencyOverview   Hadoop里带的一个测试https://ramcloud.stanford.edu/wiki/display/ramcloud/ZooKeeper+Performance http://rdc.taobao.com/team/jm/archives/1070  淘宝的一个测试

 

标签:Zookeeper,配置,zk,zookeeper,ZOO,sh,kafka,com,搭建
From: https://blog.51cto.com/u_6186189/6951586

相关文章

  • Kafka 2.11 安装和测试
    1.简介 kafka(官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率。  i.消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。 ii.多个broker协同合作,producer、consumer和broker三者之间通过zooke......
  • 使用ELK搭建社工库
    ELK是什么东西?ELK是ElasticSearch、Logstash、Kibana三个应用的缩写。ElasticSearch简称ES,主要用来存储和检索数据。Logstash主要用来往ES中写入数据。Kibana主要用来展示数据。为什么用ELK?传统的社工库通常用MySQL数据库来进行搭建,在相当大的数据下检索效率非常低下。在这种关......
  • 如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包
    背景知识:在理论上,任何.NET程序集(.dll文件或.exe文件)都可以被反编译。C#是一种托管语言,其代码编译成中间语言(IL)或称为CIL(CommonIntermediateLanguage),然后在.NET运行时中执行。反编译工具可以将IL代码还原回C#源代码,使得原本的C#代码可以被查看和修改。 最......
  • kafka权威指南(阅读摘录)
    零复制Kafka使用零复制技术向客户端发送消息——也就是说,Kafka直接把消息从文件(或者更确切地说是Linux文件系统缓存)里发送到网络通道,而不需要经过任何中间缓冲区。这是Kafka与其他大部分数据库系统不一样的地方,其他数据库在将数据发送给客户端之前会先把它们保存在本地缓......
  • python以及java环境搭建+解决不同版本环境共存问题
    1.搭建python环境1.安装python3.9.7,选择自定义安装、将文件添加至环境路径,然后选择下一步。2.默认、然后选择下一步。3.选择适用于所有使用者,选择自己想要存放的路径,然后选择点击安装。等待片刻。。。4.点击安装完成。使用cdm命令,输入python查看是否安装成功。5.安装python2......
  • Go 语言入门指南: 环境搭建、基础语法和常用特性解析 | 青训营
    Go语言入门指南:环境搭建、基础语法和常用特性解析|青训营从零开始Go语言简介Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由RobertGriesemer,RobPike,KenThompson主持开发,后来还加入了IanLanceTaylor,RussCox等人,并最终......
  • devchat环境搭建
    步骤参考的就是官网的那个教程:https://zh.devchat.blog/devchat-vscode-installation-guide注册devchat,获取KeyId。https://www.devchat.ai/?utm_medium=bokeyuan&utm_source=hutao&utm_content=go-pool-1&utm_campaign=devchat-1下载vscode扩展,devchat进入后,ctrl+shift+p,搜......
  • Linux搭建jmeter环境
    Linux环境搭建: 下面简单的描述了jmeter在Linux服务期上面的安装及配置。1.将Windows电脑上的jmeter压缩成zip文件(如果没有可以在官网上面进行安装包的下载)   文件上传到Linux服务器上,如果rz命令的工具无法使用的话,则可以使用下面的命令进行安装:   yuminstalll......
  • Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo
    前言  上一篇使用mingw32版本的gdal,过程曲折,为更好的更方便搭建环境,在windows上msvc方式对于库比较友好。<br>大地坐标简介概述  大地坐标(Geodeticcoordinate)是大地测量中以参考椭球面为基准面的坐标,地面点P的位置用大地经度L、大地纬度B和大地高H表示。原理  当点在......
  • kratos项目中使用kafka实现延迟队列
    项目地址https://gitee.com/huoyingwhw/kratos_kafkaB站视频地址B站视频地址——kratos项目中使用kafka实现延迟队列......