查看状态时如何修复 MARS(多版本异步复制存储)超时?

查看状态时如何修复 MARS(多版本异步复制存储)超时?

我在两个远程位置之间运行 MARS(多版本异步复制存储),并且大多数情况下它的运行都可以满足我的需求。

作为监控的一部分,我定期发出命令

 marsadm view maildata

最初,这个问题会在几秒钟内恢复,但几个月后,需要将近 5 分钟才能恢复,并告诉我一切正常。这个时间范围逐渐变长 - 这似乎是自设置复制以来时间的函数,而不是与负载或一天中的时间有关。此问题在主服务器和辅助服务器上都会发生。

我尝试添加--timeout = 90,但这似乎没有任何区别。

服务器的数据传输量非常低(大约 1 兆位),但通过延迟为 200 毫秒的连接传输,该连接具有超过 10 兆位的可用带宽。我的服务器在 8 核或更多核 CPU 上的负载徘徊在“1”左右。

/mars 显示两侧的空间利用率均为 1%。我正在镜像的卷大小小于 1TB,位于 SSD 上。

我手动运行marsadm 定时任务在两台服务器上都执行了此命令,然后重新发出了该命令。结果并无明显差异。

我的主要状态如下

LocalDevice /dev/mars/maildata [Opened, 4 IOPS]
maildata [2/2] UpToDate Replicating DCASFR Primary marsvmserver1 

同样,在我的第二

  maildata [2/2] UpToDate Replaying dCASFR Secondary marsvmserver1 

我确实不知道该看哪里,但我没有找到任何表明任何问题的日志条目。

我从源代码编译了一个基于5.4.20的内核,可以看到mars模块已经被加载。

我该如何修改以便能够在几秒钟内(或至少在 2 分钟内)获取 marsadm 状态信息?

更新

(仍然不知道发生了什么)

/mars/resource-maildata 有大量空的符号链接文件,格式如下:

version-000005492-marsvmserver2 -> b2ae552972debb9835fe7510ef059430,log-000005492-marsvmserver1,23019520:247d0e2c5721f303cc46da3ba7ab51e5,log-000005491-marsvmserver1,18510436

在对我的数据采取足够的预防措施后,我尝试删除这些文件,但它们立即又出现了。(它们也存在于辅助设备上)。

有趣的是,我在辅助服务器上运行了“marsadm invalidate”,这似乎确实在做某物- 重新验证似乎需要几个小时。符号链接文件的数量已减少了约一半,但正在逐渐增加。执行 marsadm view maildata 的时间也减少了约一半。

更新 2(部分修复)

毫无疑问,这是非常错误的,对我的数据来说也很危险。我对此并不完全满意 - 但这是进步

如果有人能正确/更好地解决我的问题,我将不胜感激。

数据重新同步后,我仍然剩下 5000 多个版本文件 - 似乎来自辅助节点的版本文件已经消失,但来自主节点的版本文件被保留了下来。

我尝试了 marsadm log-purge-all,但没有任何效果。

无奈之下,我尝试了以下方法,大大加快了响应速度(几秒钟) - 但我不知道副作用是什么 -

我确保磁盘基本同步。

在 SECONDARY 上,我发出了“rmmod mars”,然后继续删除几天前的版本文件。它们没有自动重新创建。然后,我在主服务器上删除了相同的文件,然后在辅助服务器上发出了“modprobe mars”。几秒钟后,它显示它已过期并在辅助服务器上同步,它就成为了主服务器。

然后,我在主服务器上写入了更多数据,在辅助服务器上创建了 MARS 复制底层磁盘的 LVM 快照,挂载了该快照,然后看到我在主服务器上写入的新数据出现在辅助服务器上。(然后我卸载并销毁了快照)

我注意到每 10 分钟就会添加一次新版本文件 - 经过检查,我每 10 分钟运行一次“marsadm cron”。我将其改为每 1 分钟运行一次,果然这些文件的创建速度增加到每分钟 1 个 - 因此问题可能与 marsadm cron 作业有关。

相关内容