zookeeper把8080端口给霸占了?

本文详细介绍了ZooKeeper 3.5.5版本启动时占用8080端口的原因,解释了AdminService的功能及其提供的HTTP服务,包括默认开启的8080端口和一系列四字命令。同时,文章还提供了如何配置和监控ZooKeeper的相关信息。

默认配置的zookeeper 3.5.5会占用8080端口

场景

今天下载了stable 3.5.5版本的zookeeper,启动的时候发现zookeeper讲8080端口给占用了?日志如下

2019-09-10 16:22:59,991 [myid:] - INFO [main:JettyAdminServer@112] - Started AdminServer on address 0.0.0.0, port 8080 and command URL /commands

用的还是jetty做的web容器,访问 localhost:8080/commands 如下所示
在这里插入图片描述

简介

AdminService是一个内置的HTTP服务,提供一些四字命令。系统默认开启,绑定8080端口。你可以打开 http://localhost:8080/commands 查看所有短句命令。你可以像这样"/commands/[command name]" 把需要运行的命令加载路劲参数中进行调用。有别于原声协议的是HTTP接口将返回JSON数据,其次四字命令其实是一种缩写模式 如 “stmk” 全称为 “set_mask_trace”。系统并不要求你必须使用缩写模式,使用stmk 或者 set_mask_trace 将获得同样的结果。你也可以通过配置,或者移除zookeeper 对jetty的依赖来关闭AdminService

配置

提供了rest-api给到开发者监控zookeeper。看了文档是在3.5.0版本更新的这个功能。3.5.5支持TSL证书加密。基础配置参数如下

  • admin.enableServer : (Java system property: zookeeper.admin.enableServer)是否开启AdminService

  • admin.serverAddress : (Java system property: zookeeper.admin.serverAddress) 内置jetty绑定的ip地址

  • admin.serverPort : (Java system property: zookeeper.admin.serverPort) 内置jetty绑定的port

  • admin.idleTimeout : (Java system property: zookeeper.admin.idleTimeout) 超时时长 默认30000ms

  • admin.commandURL : (Java system property: zookeeper.admin.commandURL) 服务地址根目录,默认/commands

命令

名称描述
conf输出配置
cons输出详尽的连接信息
crst重置所有连接的连接/会话统计信息
dump列出未完成的会话和临时节点。这只对leader节点有效.
envi输出服务运行的系统信息
ruok如果服务运行正常将返回imok ,否则不会有任何响应。 “imok”的响应不一定表示服务器已加入仲裁,只是表示服务器进程处于活动状态并绑定到指定的客户端端口 Use “stat” for details on state wrt quorum and client connection information.
srst重置服务统计
srvr输出服务详情
stat列出自身的信息,包括服务,连接,客服端信息
wchs列出有关服务器监视的简要信息
wchc按会话列出有关服务器监视的详细信息。这将输出会话(连接)和关联监视(路径)的列表。注意,根据监视的数量,此操作可能很昂贵(即影响服务器性能),请小心使用
dirs显示快照以及日志的大小
wchp按路径列出有关服务器监视的详细信息。这将输出路径列表,同样取决于服务的个数,会影响到服务性能。
mntr输出可用于监视群集运行状况的变量列表

连接文档zookeeper document

<think>嗯,用户这次询问的是ZooKeeper 8080端口的作用。结合之前的对话历史,用户似乎对技术细节有明确需求,且偏好结构化回答(参考之前关于快速排序的示例)。用户特意强调8080端口,说明可能遇到了端口占用问题或监控配置需求。 关于8080端口,我记得ZooKeeper 3.5.0版本开始引入了AdminServer功能,这个服务默认就绑定在8080端口。它的核心价值在于提供RESTful风格的运维接口——比如用curl就能直接获取服务器状态,比传统JMX方式轻量多了。不过需要提醒用户,这个端口和客户端连接的2181端口完全不同,属于管理平面功能。 用户可能没意识到的是:这个配置其实可以修改。在zoo.cfg里admin.serverPort参数就能调整端口号,如果用户遇到端口冲突问题,这个信息会很实用。另外补充一点安全提示:生产环境暴露8080可能带来风险,最好用防火墙限制访问范围。 考虑到用户的技术背景,后续问题可以往高级配置方向延伸。比如四元监控问题就涉及如何通过这个端口获取集群健康指标,而安全配置问题则针对防护措施——这两个都是运维人员实际会遇到的痛点。另外版本兼容性也值得探讨,毕竟3.5.0之前的用户用不到这个功能。 </think>ZooKeeper 的 **8080 端口** 是其 **AdminServer 功能的默认端口**,主要用于提供**轻量级的 RESTful 管理接口**(自 3.5.0 版本引入)。核心作用如下: --- ### 一、核心功能 1. **HTTP 命令接口** 通过 HTTP GET 请求获取 ZooKeeper 节点状态信息,无需 Java 依赖或客户端工具。 **常用命令示例**: - 健康检查:`curl http://localhost:8080/commands/healthcheck` → 返回 `{"status":"imok"}` - 服务器状态:`curl http://localhost:8080/commands/stat` → 返回连接数、节点数等监控数据 - 配置查看:`curl http://localhost:8080/commands/conf` 2. **四字命令 (Four Letter Words) 的 HTTP 封装** 将传统需通过 Telnet 发送的四字命令(如 `ruok`, `srvr`)转为 REST API,降低运维复杂度。 3. **简化监控集成** 监控系统(如 Prometheus)可直接通过该端口拉取 JSON 格式的指标数据,无需解析 TCP 响应[^1]。 --- ### 二、配置方式 在 `zoo.cfg` 中启用/修改参数: ```properties # 启用 AdminServer(默认开启) admin.enableServer=true # 修改端口(如避免冲突) admin.serverPort=8888 ``` --- ### 三、与客户端端口的区别 | 端口 | 默认值 | 作用 | 协议 | |------|--------|-------------------------------|--------| | **8080** | 默认 | **管理接口(AdminServer)** | HTTP | | 2181 | 默认 | 客户端连接(Client 端口) | TCP | | 2888 | 默认 | 集群节点通信(Leader 选举) | TCP | | 3888 | 默认 | 集群节点通信(数据同步) | TCP | > ⚠️ **注意**:若未显式配置 `admin.enableServer=false`,8080 端口会自动启用。 --- ### 四、安全建议 1. **生产环境防护** 通过防火墙限制访问来源(如仅允许监控服务器 IP)。 2. **禁用未使用功能** 若无 REST 管理需求,在 `zoo.cfg` 中添加: ```properties admin.enableServer=false ``` --- ### 常见问题场景 - **端口冲突**:若 8080 被占用,启动日志会报 `Address already in use`,需修改 `admin.serverPort`。 - **版本兼容性**:3.5.0 以下版本无此功能(需升级或使用 JMX 监控)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值