背景
大家好,我是逐日,今天分享一个最近才遇到的小问题。前几天,测试在测一个功能时,感觉怎么都不符合预期,我也看了,感觉nacos里面配置也是对的,程序好像也没bug,但程序表现出来的行为就是很奇怪。
今天排查了下,记录下处理过程。
步骤
常规检查
服务是spring boot服务,先检查了下jar包版本,正常。检查了下bootstrap.yml中配置的nacos服务器地址也是对的,从nacos取配置的功能也是开了的。
然后从nacos管理控制台看到的配置也是对的。比如配置如下
yaml
app:
mockCurrentDate: 20260420
但是接口跑出来的逻辑感觉总是不对。
当时还在本地debug了一遍,也没发现有这个问题。
后面就想着看看,到底服务到底从nacos中取到的配置是啥。
查看服务拉取的nacos配置
于是直接在服务器上开了下抓包(服务所在服务器上和nacos之间的包,通过端口8848和9848来识别这部分流量)
shell
tcpdump -i any tcp port 8848 or tcp prt 9848 -w 9848-35.pcap
wireshark分析了下,发现拉取的配置真有问题,如下图,这个日期是20260715,和我在nacos的管理页面看到的不一样。

nacos数据库
然后就想着要不看看nacos集群(3台机器)连的数据库中的配置是啥吧(我们这个nacos中的配置是持久化到数据库的)。
ssh到nacos的其中一台机器后,ps找了下nacos进程,找到路径,找到配置文件:
[root@COMPASS-NACOS-3 conf]# pwd
/usr/local/nacos/conf
[root@COMPASS-NACOS-3 conf]# ll
total 108
-rw-r--r-- 1 root root 1250 May 22 2023 1.4.0-ipv6_support-update.sql
-rw-r--r-- 1 root root 127 May 22 2023 announcement.conf
-rw-r--r-- 1 root root 11662 Aug 6 2024 application.properties
-rw-r--r-- 1 root root 10917 Apr 25 2023 application.properties.bak
-rw-r--r-- 1 root root 9669 May 22 2023 application.properties.example
-rw-r--r-- 1 root root 82 Aug 11 14:16 cluster.conf
-rw-r--r-- 1 root root 691 May 22 2023 cluster.conf.example
-rw-r--r-- 1 root root 9169 May 22 2023 derby-schema.sql
-rw-r--r-- 1 root root 11046 May 22 2023 mysql-schema.sql
-rw-r--r-- 1 root root 31934 May 22 2023 nacos-logback.xml
从application.properties中找到了连的数据库:
db.url.0=jdbc:postgresql://1.1.1.1:5432/nacos?currentSchema=nacos_cfg
db.user=postgre
db.password=1111111
登到数据库看了下,就几个表,找了下对应的配置,发现数据库中的配置是对的。
三台机器是否都有问题
从这个步骤开始,就是在ai的指导下了,nacos3台机器之间的同步机制我也没学过,ai的建议是说先检查下nacos日志,是不是互相有同步失败。
shell
grep -i "distro\|snapshot\|config.*notify\" /usr/local/nacos/logs/nacos.log | tail -100
这个确实看到有一些失败,不过看不太懂。
然后ai建议说先分别用curl调用每台机器上的nacos api来获取配置,来检查是不是三台都有问题,还是只有部分机器有问题。
先是登录获取一个token:
shell
curl -X POST "http://127.0.0.1:8848/nacos/v1/auth/login" -d "username=1111&password=11111111"
上述接口会返回一个accessToken。
然后再用token去调用api获取配置:
shell
curl -s "http://三台机器的ip:8848/nacos/v1/cs/configs?dataId=xxxxx-ops-client-api-test.yaml&group=DEFAULT_GROUP&tenant=fadd2513-8f2a-41d3-9e97-4e4df5932683&accessToken=上述获取的token"
返回示例如下(这图是现截的,当时反正看到的配置就是有问题的):

三台机器我都分别试了下,结果都有问题。
检查服务器上的有问题的配置文件
我把上述结论继续告诉ai,然后ai告诉我,可以看看服务器上的配置文件,在此之前,我不知道服务器上还存了配置文件的(我以为只在数据库里存了呢)。
shell
cd /usr/local/nacos/data/tenant-config-data/fadd2513-8f2a-41d3-9e97-4e4df5932683/DEFAULT_GROUP
中间的fadd2513-8f2a-41d3-9e97-4e4df5932683就是你配置所在的namespace的值。

然后看了下这里配置,发现果然是有问题的。
备份并删除问题配置
ai的意思是,把这些有问题的配置备份下,然后删除,然后重启服务,保证都从数据库获取最新配置,看起来还是个缓存和数据库不一致的问题。。
shell
备份删除:
mv /usr/local/nacos/data/tenant-config-data /usr/local/nacos/data/tenant-config-data.bak.$(date +%Y%m%d%H%M%S)
shell
重启nacos服务:
/usr/local/nacos/bin/shutdown.sh
/usr/local/nacos/bin/startup.sh
重启后,果然即恢复正常。
结论
这个问题还是第一次遇到。ai最终没找出来到底为啥服务器上缓存的文件为啥是错的,只是指导我把有问题的配置删除并重启了服务,不过也已经很6了。