9.2.8 安装部署常见问题与排查

安装部署常见问题与排查围绕启动失败、连接异常、数据不一致、性能抖动与依赖组件问题展开。排查思路以“日志优先、配置校验、端口连通、依赖服务健康、版本与环境一致性”为主线。

文章图片

一、启动失败类(含命令与示例)
- 端口被占用:默认使用 8848/9848/9849。

# 查看端口占用
ss -lntp | egrep '8848|9848|9849'
# 或
lsof -i:8848

# 释放进程(示例)
kill -9 <PID>
  • Java 版本不兼容:确认 JDK 版本与 Nacos 版本匹配(常见 8/11)。
java -version
# 预期输出包含 "1.8""11"
  • 配置文件格式错误:优先查看 logs/start.out
sed -n '1,120p' logs/start.out
# 常见错误:配置项拼写、空格、转义导致解析失败
  • 数据库连接失败:检查 JDBC URL、用户名密码、表初始化与网络连通性。
# 1) 验证数据库端口连通
nc -vz 10.0.0.10 3306

# 2) 验证数据库登录
mysql -h 10.0.0.10 -u nacos -p

# 3) 核对配置文件
grep -E 'spring.datasource' conf/application.properties

二、服务注册/发现异常(含 API 验证)
- 客户端无法注册:核对 namespace/group/cluster/server-addr
- 服务列表为空:确认同一命名空间与持久化正常。
- 心跳超时被剔除:调整 clientBeat 与保护阈值。

# API 验证服务列表(替换为实际命名空间与服务名)
curl -s "http://127.0.0.1:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=10&namespaceId=public"

# 验证服务实例
curl -s "http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=demo-service&namespaceId=public"

三、集群节点异常(含网络与配置核对)
- 节点间通信失败:核对 cluster.conf IP/端口与网络互通。
- 集群成员不一致:启动参数/配置不统一导致“脑裂”。
- 数据库锁与事务异常:数据库性能不足或连接池过小。

# 1) 检查 cluster.conf
cat conf/cluster.conf

# 2) 验证节点互通(节点A到节点B)
nc -vz 10.0.0.21 8848

# 3) 查看集群日志
grep -i "cluster" logs/cluster.log | tail -n 50

四、配置持久化问题(含表结构核查)
- 配置无法保存或读取:检查 config_info 等表结构是否初始化。
- 配置发布延迟:数据库慢查询或事务堵塞。

# 1) 核对表是否存在
mysql -h 10.0.0.10 -u nacos -p -e "show tables like 'config_%';"

# 2) 检查慢查询(示例)
mysql -h 10.0.0.10 -u root -p -e "show variables like '%slow_query%';"

五、控制台访问异常(含代理与鉴权排查)
- 页面空白或 404:确认包完整、静态资源未被代理拦截。
- 登录失败:核对 nacos.core.auth.enabled、用户与 token 配置。

# 检查访问是否返回首页 HTML
curl -I http://127.0.0.1:8848/nacos/

# 检查关键鉴权配置
grep -E "nacos.core.auth.enabled|nacos.core.auth.default.token" conf/application.properties

六、性能与稳定性(含 JVM 与线程池观察)
- CPU/内存占用高:检查 JVM 参数、堆大小与 GC。
- 请求超时:排查数据库瓶颈、网络抖动或线程池耗尽。

# 查看 Java 进程与内存
ps -ef | grep nacos
jcmd <PID> VM.flags
jstat -gcutil <PID> 1000 5

# 查看线程池与请求堆积(通过日志)
grep -i "timeout|rejected" logs/nacos.log | tail -n 50

七、排查工具与建议(含一键检查脚本示例)

#!/usr/bin/env bash
# file: nacos_diag.sh
echo "== Ports ==" && ss -lntp | egrep '8848|9848|9849' || true
echo "== Java ==" && java -version 2>&1 | head -n 1
echo "== Logs ==" && tail -n 20 logs/start.out
echo "== DB Connectivity ==" && nc -vz 10.0.0.10 3306
echo "== API Health ==" && curl -s http://127.0.0.1:8848/nacos/ | head -n 1
  • 日志优先:logs/nacos.loglogs/start.outlogs/cluster.log
  • 统一版本与配置,避免节点混用不同版本与参数。
  • 生产环境开启日志归档与监控告警。

八、练习(操作+预期)
1. 端口冲突演练
- 操作:先启动一个占用 8848 的进程,再启动 Nacos。
- 预期:logs/start.out 出现端口占用报错;通过 ss -lntp 查到占用并释放后恢复。
2. 数据库连接异常演练
- 操作:临时修改 spring.datasource.password 为错误值。
- 预期:启动失败,logs/nacos.log 出现 JDBC 连接错误,恢复密码后正常启动。
3. 集群通信演练
- 操作:在 cluster.conf 中故意写错一个节点 IP。
- 预期:cluster.log 出现通信失败提示,修正后节点视图一致。