ZooKeeper监控命令详解
在分布式系统中,ZooKeeper作为一个非常重要的协调服务,它的健康状态直接影响到整个系统的可靠性和稳定性。因此,对ZooKeeper进行有效监控是非常必要的。本文将详细介绍ZooKeeper提供的命令行工具zkCli.sh,这些工具可以帮助我们监控和管理ZooKeeper服务器。
ZooKeeper简介
ZooKeeper是一个开源的分布式协调服务,它提供了一组简单的原语用于构建更高级的同步服务。ZooKeeper主要用于解决分布式系统中的一些关键问题,如数据一致性、系统配置管理、分布式锁等。
ZooKeeper监控的重要性
监控系统的性能和健康状况对于确保ZooKeeper的高可用性和可靠性至关重要。通过监控,我们可以及时发现潜在的问题并采取相应的措施。例如,我们可以监控ZooKeeper的连接数、会话数、磁盘使用情况等指标。
ZooKeeper操作命令
zkCli.sh 是 ZooKeeper 提供的命令行客户端工具,可用于连接 ZooKeeper 服务器并执行各种操作,包括监控和管理 ZooKeeper 数据树。以下是 zkCli.sh 中的一些常用操作命令:
连接到 ZooKeeper 服务器:
bash
./zkCli.sh -server <server_host>:<server_port>
列出指定节点下的所有子节点:
bash
ls -s /path
例如,列出根节点下的子节点:
bash
ls /
查看节点数据:
bash
get /path/to/node
查看节点状态:
bash
stat /path/to/node
Zookeeper四个字母监控
ZooKeeper作为一种分布式协调服务,内置了一系列简短却实用的四字母命令,这些命令可通过TCP客户端连接ZooKeeper的服务端口(默认为2181)进行发送,从而实现对ZooKeeper服务器的基本监控与诊断。开发者们可以利用诸如telnet或nc(netcat)等工具与ZooKeeper进行交互,执行这些命令以获取服务器的关键状态信息。
以下列举了几种常见的四字母命令及其功能:
-
stat 命令:用于揭示ZooKeeper服务的基本状态参数,包括当前的连接数、活跃会话数、节点总量等重要数据。
-
ruok 命令:用于检测ZooKeeper服务是否处于正常的运行状态,若服务运转正常,ZooKeeper将返回字符串"imok"。
-
conf 命令:用于输出ZooKeeper服务器当前所应用的配置详情,帮助运维人员确认配置是否符合预期。
-
srvr 命令:提供更为详尽的服务器状态报告,涵盖了更多有关ZooKeeper服务器内部状态的细节信息。
-
wchs 命令:展示ZooKeeper中当前已注册Watcher的整体数量。
-
wchc 命令:列举出所有已被客户端观察的ZooKeeper节点及其对应的路径。
-
wchp 命令:展示每个被观察节点的路径与其关联的Watcher数量。
值得注意的是,默认情况下并非所有四字母命令都在ZooKeeper中启用,为了安全起见,管理员需在zoo.cfg配置文件中通过4lw.commands.whitelist配置项明确指定允许执行的四字母命令集合。例如:
bash
4lw.commands.whitelist=stat,ruok,conf,srvr,wchs,wchc,wchp
AdminServer
ZooKeeper 从 3.5.0 版本起引入了一个名为 AdminServer 的内置 Jetty 服务器,该服务器提供了一个 HTTP 接口,用于执行四字命令。在默认配置下,此服务器会监听 8080 端口,并可通过访问 URL "/commands/[命令名]" 来执行相应命令,例如通过 http://localhost:8080/commands/stat 来获取服务器状态。这些命令的响应将以 JSON 格式返回。与原先仅接受四个字母的命令不同,新版本中的命令名称更加灵活,可以采用多个字符;例如,"STMK"也可以命名为"set_trace_mask"。若要查看所有可用命令的列表,只需在浏览器中访问 URL /commands(如 http://localhost:8080/commands)。 可用命令包括:
-
connection_stat_reset/crst:重置所有客户端连接统计信息。不返回新的字段。
-
configuration/conf/config:打印服务的基本配置信息,例如客户端端口和数据目录的绝对路径。
-
connections/cons:提供与服务器建立的客户端连接的相关信息。注意,如果客户端连接数量很大,执行此操作可能较为昂贵(即可能影响服务器性能)。返回一个包含连接信息对象的列表"connections"。
-
hash:事务摘要的历史记录列表中的摘要信息,每128个交易记录一个摘要。返回一个包含事务摘要对象的列表"digests"。
-
dirs:日志文件目录和快照目录的大小(以字节为单位)信息。返回"datadir_size"和"logdir_size"两个字段。
-
dump:会话过期和临时节点信息。注意,如果全局会话和临时节点数量较大,此操作可能影响服务器性能。返回映射"expiry_time_to_session_ids"和"session_id_to_ephemeral_paths"。
-
environment/env/envi:所有定义的环境变量。每个变量都作为单独的字段返回。
-
get_trace_mask/gtmk:当前的跟踪掩码。这是一个只读版本的set_trace_mask命令。有关更多信息,请参阅关于stmk四字命令的描述。返回字段"tracemask"。
-
initial_configuration/icfg:打印用于启动节点的配置文件文本。返回字段"initial_configuration"。
-
is_read_only/isro:指示服务器是否处于只读模式的布尔值。返回字段"read_only"。
-
last_snapshot/lsnp:提供关于ZooKeeper服务器最后一次成功保存到磁盘的快照的信息。如果在服务器启动和首次保存快照期间调用此命令,将返回启动服务器时读取的快照信息。返回字段"zxid"和"timestamp",其中"timestamp"使用秒作为时间单位。
-
leader/lead:如果集群配置为仲裁模式,则显示当前节点的领导者状态和当前领导者的地理位置。返回字段"is_leader"、"leader_id"和"leader_ip"。
-
monitor/mntr:输出多种用于监控的有用信息,包括性能统计、内部队列信息以及数据树概览(以及其他诸多内容)。每个信息都作为单独的字段返回。
-
observer_connection_stat_reset/orst:重置所有观察者连接统计信息。与observers命令相辅相成,不返回新的字段。
-
restore/rest:从输入流中恢复数据库到当前服务器。响应负载中返回的字段:"last_zxid"(String)。注意:此API受到速率限制(默认每5分钟一次),以防止服务器过载。
-
ruok:空操作命令,检查服务器是否正在运行。响应的存在并不一定意味着服务器已加入仲裁,仅表示管理服务器已激活并绑定了指定的端口。不返回新的字段。
-
set_trace_mask/stmk:设置跟踪掩码(因此需要一个参数)。get_trace_mask命令的写入版本。有关更多信息,请参阅关于stmk四字命令的描述。返回字段"tracemask"。
-
server_stats/srvr:服务器信息。返回多个字段,提供服务器状态的简要概述。
-
snapshot/snap:在当前服务器的数据目录中拍摄快照,并通过流输出数据。可选查询参数:"streaming":布尔值(如果未提供参数,则默认为true)。通过Http头部返回以下信息:"last_zxid"(String)和"snapshot_size"(String)。注意:此API受到速率限制(默认每5分钟一次),以防止服务器过载。
-
stats/stat:与server_stats相同,但也返回"connections"字段(有关详细信息,请参阅connections命令)。注意,如果客户端连接数量很大,此操作可能影响服务器性能。
-
stat_reset/srst:重置服务器统计信息。这是server_stats和stats返回信息的一个子集。不返回新的字段。
-
observers/obsr:提供与服务器建立的观察者连接的信息。在领导者节点上始终可用,在充当学习主节点的跟随者节点上也可用。返回字段"synced_observers"(整数)和"observers"(观察者属性的列表)。
-
system_properties/sysp:所有定义的系统属性。每个属性都作为单独的字段返回。
-
voting_view:提供当前参与投票的ensemble成员列表。返回字段"current_config"(一个映射)。
-
watches/wchc:按会话聚合的监视器信息。注意,如果监视器数量很多,此操作可能影响服务器性能。返回映射"session_id_to_watched_paths"。
-
watches_by_path/wchp:按路径聚合的监视器信息。注意,如果监视器数量很多,此操作可能影响服务器性能。返回映射"path_to_session_ids"。
-
watch_summary/wchs:汇总的监视器信息。返回字段"num_total_watches"、"num_paths"和"num_connections"。
-
zabstate:指示节点当前正在运行的Zab协议阶段以及它是否为投票成员。节点可能处于以下阶段之一:ELECTION、DISCOVERY、SYNCHRONIZATION、BROADCAST。返回字段"voting"和"zabstate"。
总结
通过以上介绍的ZooKeeper命令,我们可以方便地查看ZooKeeper服务器的各种信息,从而更好地监控和管理ZooKeeper。在实际使用中,我们可以根据需要选择适当的命令进行监控。同时,我们还可以通过编写脚本或使用第三方监控工具,定期执行这些命令并将结果发送到指定的邮箱或监控系统,以实现自动化监控。