Exhibitor 是 Netflix 开源的一个用于 ZooKeeper 配置监控和管理的系统。现在 Netflix Exhibitor 已经成为社区开源公共维护项目 Soabase Exhibitor。Exhibitor 是 ZooKeeper 实例监控,备份,恢复,清理和可视化工具,是 ZooKeeper 的监控管理系统。
使用 Exhibitor 监控管理 ZooKeeper
2019 年 01 月 07 日 - 初稿
阅读原文 - https://wsgzao.github.io/post/exhibitor/
exhibitor - https://github.com/soabase/exhibitor
ZooKeeper co-process for instance monitoring, backup/recovery, cleanup and visualization.
Exhibitor is a Java supervisor system for ZooKeeper. It provides a number of features:
https://github.com/soabase/exhibitor/wiki
Exhibitor 主要包括以下特性 / 功能:
实例监控
Exhibitor 实例监控在同一服务器上运行的 ZooKeeper 服务器。如果 ZK 没有运行,Exhibitor 会写入 zoo.cfg 文件(请参阅下面的 ZK 集群配置)并启动它。如果 ZooKeeper 由于某种原因崩溃,Exhibitor 也会重新启动它。
日志清理
在 ZooKeeper 3.4.x 之前的版本中,日志文件需要维护,Exhibitor 会负责定期维护。
备份 / 还原
ZooKeeper 集群中的备份比传统数据存储(例如 RDBMS)更复杂。一般来说,ZooKeeper 中的大部分数据是短暂的。盲目恢复整个 ZooKeeper 数据集可能会造成更大危害,因此,需要选择性的恢复以防止对数据集的子集造成意外损坏。Exhibitor 提供了这一功能。
Exhibitor 会定期备份 ZooKeeper 的事务文件,备份后,就可以对这些事务文件建立索引。
集群配置
Exhibitor 为整个 Zookeeper 集群提供了一个独立的控制台,通过它所做的配置更改会对整个集群有效。以下是一些共享配置值:
Name | Description |
---|---|
ZooKeeper Install DirPath | to the ZooKeeper server installation |
ZooKeeper Data Dir | Path where ZooKeeper should store its data |
Log Index Dir | Path where indexed transaction logs should be kept |
Servers | List of servers/server-ids in the ensemble |
Additional Config | Additional fields/values to store in zoo.cfg |
集群滚动升级
Exhibitor 可以以滚动方式更新集群中的服务器,以便在进行更改时让 ZooKeeper 集群确保 Quorum 设定的最低服务能力。
自动实例管理
Exhibitor 可以配置为自动向集群中添加新实例,并删除陈旧的实例。这使得 ZooKeeper 集群可以实现 “无接触交钥匙管理”。
可视化
Exhibitor 为 ZooKeeper 提供了 ZNode 层次结构的图形树视图。
ZK 数据维护
启用后,维护人员可以在 ZooKeeper 的存储层次结构中创建 / 更新 / 删除节点。
死锁检测
当使用 Curator 的锁方案(或类似)时,Exhibitor 可以分析一组表示锁的 ZNode,并确定是否存在潜在的死锁。
Curator 集成
Exhibitor 和 Curator 可以集成工作,当集群中的信息变更时,Curator 实例可以同步更新。
REST API
Exhibitor 提供了一组用于程序集成的 REST API。
重要事项
使用
Exhibitor 的部署构件可以从 Maven 仓库获取。构件分为两种:
GroupID/Org | ArtifactID/Name | Description |
---|---|---|
com.netflix.exhibitor | exhibitor-standalone | 自包含的,可执行的 Exhibitor 版本(可以是独立应用,也可以是 War) |
com.netflix.exhibitor | exhibitor-core | 类库的形式,可以嵌入到应用中 |
官方分享了 Maven 和 Gradle 两种 build 方法,这里以 Maven 为例
https://github.com/soabase/exhibitor/wiki/Building-Exhibitor
# install maven yum install -y maven # build exhibitor mkdir exhibitor cd exhibitor/ wget https://github.com/soabase/exhibitor/archive/exhibitor-1.7.1.zip unzip exhibitor-1.7.1.zip cd exhibitor-exhibitor-1.7.1/exhibitor-standalone/src/main/resources/buildscripts/standalone/maven mvn clean package [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing /root/exhibitor/exhibitor-exhibitor-1.7.1/exhibitor-standalone/src/main/resources/buildscripts/standalone/maven/target/exhibitor-1.6.0.jar with /root/exhibitor/exhibitor-exhibitor-1.7.1/exhibitor-standalone/src/main/resources/buildscripts/standalone/maven/target/exhibitor-1.6.0-shaded.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 44.624s [INFO] Finished at: Tue Jan 08 11:28:59 SGT 2019 [INFO] Final Memory: 15M/94M [INFO] ------------------------------------------------------------------------ cp target/exhibitor-1.6.0.jar /tmp # Once built, Exhibitor is completely self-contained and can be run from the command line: java -jar <path>/exhibitor-xxx.jar -c file [root@localhost ~]# java -jar exhibitor-1.6.0.jar -c file v1.6.0 INFO com.netflix.exhibitor.core.activity.ActivityLog Exhibitor started [main] Jan 08, 2019 11:32:38 AM java.util.prefs.FileSystemPreferences$1 run INFO: Created user preferences directory. INFO org.mortbay.log Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog [main] INFO org.mortbay.log jetty-1.6.0 [main] Jan 08, 2019 11:32:38 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate INFO: Initiating Jersey application, version 'Jersey: 1.18.3 12/01/2014 08:23 AM' INFO org.mortbay.log Started SocketConnector@0.0.0.0:8080 [main] Jan 08, 2019 11:33:00 AM java.util.prefs.FileSystemPreferences$6 run WARNING: Prefs file removed in background /root/.java/.userPrefs/prefs.xml INFO com.netflix.exhibitor.core.activity.ActivityLog State: latent [ActivityQueue-0] # You can test that it’s running correctly by going to this URL in a browser: http://localhost:8080/exhibitor/v1/ui/index.html http://192.168.56.103:8080/exhibitor/v1/ui/index.html
如果需要通过 Exhibitor 管理 zookeeper 集群需要在集群的每个机器上安装 Exhibitor
https://github.com/soabase/exhibitor/wiki/Configuration-UI
重点提一下 Ensemble 中的 Servers 配置: