我们有一个非常繁忙的服务器集群。我们的 16 个应用服务器通过每台机器上的本地 SSD 为我们的应用程序提供服务,但它们也处理图像,然后由我们的 CDN 提供服务。正因为如此,我们有几个中央图像服务器,我们从我们的应用服务器 nfs 挂载。
我们最近遇到了图像服务器的问题,我们需要在其中关闭它们。没什么大不了的,我们的 CDN 仍会为我们的大部分图像提供服务,因此没有人会注意到停机时间。不完全的..
应用服务器没有继续正常操作,而是负载激增并崩溃,或者变得无响应。经过一天的挖掘,我们将问题缩小到我们的 nfs 挂载。即使没有读取或写入 nfs 挂载,它关闭的简单事实也导致 apache 完全冻结。
没什么大不了的,我们做了一些研究,发现我们将 nfs 卷挂载为硬挂载,我们需要切换到软挂载,使用intr,并设置 timeo 值和 retr 值。我们将重试次数设置为 0,并设置timeo=1(它在十分之一秒内,所以我相信 1 尽可能低)。有了这些设置,我们关闭了图像服务器以复制早期的崩溃并等待看看发生了什么。
结果更好,但只是整个系统没有崩溃,而是服务因为太慢以至于它可能已经停机了。似乎即使是十分之一秒,这对于 nfs 挂载超时来说也太长了,因此我们最终会在负载均衡器上积压大量连接,可能只有 1/10 的容量。
为了验证我的结果,我从 16 个应用服务器中的 4 个卸载了 nfs 挂载,并且对这 4 个服务器的请求级别完全正常。
那么,有没有办法为 nfs 挂载设置较低的超时时间,或者在出错时卸载驱动器,并在关闭的服务器重新联机后自动重新挂载?或者,是否有另一个我忽略的解决方案不会给我们的系统增加一堆复杂性?
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |