资讯专栏INFORMATION COLUMN

zookeeper基础运维详解

IT那活儿 / 2767人阅读
zookeeper基础运维详解





  前 言  




ZooKeeper 是一个分布式应用协调服务,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。





 组件服务 




zookeeper组件只有一个服务名字Server,安装在多个节点组成集群使用(一般建议3或5个),zookeeper是一个java进程,使用jps命令可以快速找出zk的进程id。一般名为QuorumPeerMain。如果主机跑了多个zk,这里也会显示多个QuorumPeerMain(但官方建议最好不要出现跑多个zk实例合用一个磁盘的情况,容易出现IO问题)

使用ps -ef命令或find查看当前服务器中存在的zk实例节点目录,再通过dir/logs中最后一条log的最近时间来判断此zk是不是当前正在运行的。最后通过查看conf/zoo.cfg的配置信息,查看此zk集群的规模(几个节点)、客户端端口等信息来判断出问题的是否是此zk集群。





  日  志  




zk的三种日志:
zookeeper服务器会产生三类日志:事务日志、快照日志和log4j日志。

在zookeeper默认配置文件zoo.cfg(可以修改文件名)中有一个配置项dataDir,该配置项用于配置zookeeper快照日志和事务日志的存储地址。在官方提供的默认参考配置文件zoo_sample.cfg中,只有dataDir配置项。其实在实际应用中,还可以为事务日志专门配置存储地址,配置项名称为dataLogDir,在zoo_sample.cfg中并未体现出来。在没有dataLogDir配置项的时候,zookeeper默认将事务日志文件和快照日志文件都存储在dataDir对应的目录下。建议将事务日志(dataLogDir)与快照日志(dataLog)多带带配置,因为当zookeeper集群进行频繁的数据读写操作,会产生大量的事务日志信息,将两类日志分开存储会提高系统性能,而且,可以允许将两类日志存在在不同的存储介质上,减少磁盘压力。log4j用于记录zookeeper集群服务器运行日志,该日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置项为“zookeeper.log.dir=.错误! 超链接引用无效。” 时,在该文件夹下会产生zookeeper.out日志文件。下面主要介绍事务日志与快照日志。


事务日志:

事务日志指zookeeper系统在正常运行过程中,针对所有的更新操作,在返回客户端“更新成功”的响应前,zookeeper会保证已经将本次更新操作的事务日志已经写到磁盘上,只有这样,整个更新操作才会生效。
快照日志:

zookeeper的数据在内存中是以树形结构进行存储的,而快照就是每隔一段时间就会把整个DataTree的数据序列化后存储在磁盘中,这就是zookeeper的快照文件。

zookeeper快照日志的存储路径同样可以在zoo.cfg中查看,如上文截图所示。访问dataDir路径可以看到version-2文件夹:

从截图中可以看出,zookeeper快照文件的命名规则为snapshot.**,其中**表示zookeeper触发快照的那个瞬间,提交的最后一个事务的ID。

运行日志:

log4j日志,服务的运行日志。





配置详解 




Clientport:客户端连接端口
Ticktime:心跳时间(zk时间的基本单位,单位毫秒)
initLimit:zk启动的初始化时间,本例10表示10*Ticktime=4000毫秒
syncLimit:zk进行sync同步的时间
maxClientCnxns:最大客户端连接数,0表示无显示(此参数值为IP级别,默认60
dataDir:zk快照数据目录
dataLogDir:zk操作记录数据目录
Autopurge.* :表示快照及日志的保留策略,本例24小时和500个。
snapCount:表示进行多少次update操作,进行一次快照,默认是100000


服务操作命令:

一旦确认集群服务异常,就使用bin/zkServer.sh stop先在所有节点运行停止zk集群服务(如果leader运行正常,只重启单个异常服务即可);

启动完成后,使用bin/zkServer.sh status查看是否角色是否正常(一个leader,多个follower)


zkCli.sh命令

使用bin/zkCli.sh命令可以进入到zk-shell内部进行操作,直接操作zk的文件系统。

注意如果zk进行了acl配置,直接zkCli.sh可能会进入失败,此时需使用zkCli.sh -server IP:port  命令进入,ip:port为zk的服务地址和端口;

zk-shell内部命令十分有限,合起来不到50个,常用的有

create     创建znode

delete     删除节点

connect  连接其他zk节点

addauth   添加认证,通常添加用户密码认证用这个

setAcl       添加acl认证,通常添加ip白名单等

getAcl      查看路径的权限情况

get         查看zk路径中的具体值





监控(4字命令)




zk的监控主要采用自带四字命令实现,运行方法有多种,基础方法是

echo 【四字命令】 |nc  IP:port,如 echo mntr |nc localhost 2181

因服务器系统不同,有些可能没有nc命令,可尝试使用nc6、netcat等替换nc命令也可以。如以上命令都没有又想查看,可直接使用telnet IP:port,然后在等待命令处直接输入四字命令:(如下图srvr即为我们输入的四字命令)

常用四字命令有mntr、srvr、conf、cons、envi等,具体会根据zk版本不同有增减,新版支持的命令会更多。

监控常使用mntr,运行结果可监控以下字段:

zk_outstanding_requests指标(即zk连接排队情况)使用监控工具监控文件中的值如果 >10则报警num_alive_connections存储zk_num_alive_connections指标(即当前节点活动的连接数),使用监控工具监控此文件中值如果>1500则报警

max_latency存储当前所有连接中的延迟最大的连接指标,当延迟毫秒数超过10个ticktime=20000时,进行报警

具体的监控指标及方法一定是经过业务的调试和反复测试后才能发挥应有的效果的。


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129926.html

相关文章

  • 从小白程序员一路晋升为大厂高级技术专家我看过哪些书籍?(建议收藏)

    摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...

    sf_wangchong 评论0 收藏0
  • 必看!java后端,亮剑诛仙(最全知识点)

    摘要:鉴于目前大多数服务器环境都是,提前接触能够相辅相成。正则也是必须要掌握的一个知识点。有多种创建多线程的方式,不过目前使用线程池的多一些。 原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。 你可能有所感悟。零散的资料读了很多,但是很难有提升。到处是干货,但是并没什么用,简单来说就是缺乏系统化。另外,噪音太多,雷同的框架一大把,我不至于全都要去学了吧。 这里,我...

    陈江龙 评论0 收藏0
  • Java学习必备书籍推荐终极版!

    摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...

    Steve_Wang_ 评论0 收藏0
  • Dubbo Cloud Native 之路的实践与思考

    摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。是基于开发的服务代理组件,在使用场景中,它与和整合,打造具备服务动态更新和负载均衡能力的服务网关。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 摘要: Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Fo...

    niceforbear 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<