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.log、logs/start.out、logs/cluster.log。 - 统一版本与配置,避免节点混用不同版本与参数。
- 生产环境开启日志归档与监控告警。
八、练习(操作+预期)
1. 端口冲突演练
- 操作:先启动一个占用 8848 的进程,再启动 Nacos。
- 预期:logs/start.out 出现端口占用报错;通过 ss -lntp 查到占用并释放后恢复。
2. 数据库连接异常演练
- 操作:临时修改 spring.datasource.password 为错误值。
- 预期:启动失败,logs/nacos.log 出现 JDBC 连接错误,恢复密码后正常启动。
3. 集群通信演练
- 操作:在 cluster.conf 中故意写错一个节点 IP。
- 预期:cluster.log 出现通信失败提示,修正后节点视图一致。