nacos-group / r-nacos

Nacos server re-implemented in Rust.
https://r-nacos.github.io/docs/
Apache License 2.0
807 stars 84 forks source link

重启可能会导致数据丢失假象 #88

Closed Clownsw closed 2 months ago

Clownsw commented 3 months ago

反复重启(停止 -> 开启) r-nacos, 配置、用户全部丢失假象(回到默认状态), 非连续性触发了十次有个五六次 (windows) r-nacos: 0.5.7 (配置文件默认)

Clownsw commented 3 months ago

与 #85 类似

heqingpan commented 3 months ago

确认几个点:

我平时开发没怎么用windows,之前自己没有遇到过这个问题。我晚点抽空在windows试试能不能复现。

r-nacos数据是写入本地文件存储的,为了平衡性能写入后不会马上flush,而是通过定时间隔0.5秒统一写入。

服务关闭后,系统也会把缴存区的数据flush,这部分的功能和不同系统内核有关。

heqingpan commented 3 months ago

如果方便的话,可以按你在windows重启的方式在linux服务测试几遍,看看两个系统的表现是不是一致?

Clownsw commented 3 months ago

如果方便的话,可以按你在windows重启的方式在linux服务测试几遍,看看两个系统的表现是不是一致?

Linux容器倒是没这个问题

Clownsw commented 3 months ago

确认几个点:

  • 重启过程关闭和启动间隔是不是很短?
  • 重启之后,查看数据与启动时间间隔大概多长时间?
  • 出现配置为空之后,过一段时间之后能查到数据吗?还是需要重启之后才能恢复?
  • 出问题前,重启之前的数据量多吗?

我平时开发没怎么用windows,之前自己没有遇到过这个问题。我晚点抽空在windows试试能不能复现。

r-nacos数据是写入本地文件存储的,为了平衡性能写入后不会马上flush,而是通过定时间隔0.5秒统一写入。

服务关闭后,系统也会把缴存区的数据flush,这部分的功能和不同系统内核有关。

  1. 间隔大概在一两秒左右
  2. 查看配置大概在四五秒后
  3. 过一段时间也不能查看必须重启
  4. 两个用户 一个命名空间 一个配置, 且在重启前没有进行任何更新操作
Clownsw commented 3 months ago

确认几个点:

  • 重启过程关闭和启动间隔是不是很短?
  • 重启之后,查看数据与启动时间间隔大概多长时间?
  • 出现配置为空之后,过一段时间之后能查到数据吗?还是需要重启之后才能恢复?
  • 出问题前,重启之前的数据量多吗?

我平时开发没怎么用windows,之前自己没有遇到过这个问题。我晚点抽空在windows试试能不能复现。

r-nacos数据是写入本地文件存储的,为了平衡性能写入后不会马上flush,而是通过定时间隔0.5秒统一写入。

服务关闭后,系统也会把缴存区的数据flush,这部分的功能和不同系统内核有关。

这个是一种假象(因为并没有数据变更, 只是重启出现 和 不出现), 就像启动后读取数据失败

heqingpan commented 3 months ago

收到,看来我得先到windows系统尝试复现确认问题。

heqingpan commented 2 months ago

此问题已复现并在v0.5.15解决。

其原因是:在windows环境下关闭进程后快速打开,第二次启动时可能因为第一资关闭的文件没有完全释放,导致第二次进程没能加载历史数据(数据列表为空白);重启后可以数据能重新加载恢复。

解决方案:主动引入文件锁(一个放到nacos_db目录的空文件);进程启动时先获取文件锁,如果获取不到则直接报错退出;应用应用退出时自动释放文件锁。

引入文件机制锁后,按之前的方式操作没有再出现这个现象,就当做这个问题已处理。