标签归档:分布式

服务器不稳定的罪魁祸首找到了

迁移到分布式集群后,困扰了我们很长时间的突发性Load异常终于在昨天找到原因了,原来是NFS的挂载选项引起的,我们之前挂载用的是sync模式,导致集群的web后端在往挂载于NFS服务器的日志目录打日志时会产生严重的延时,引起MySQL产生大量的sleep进程。而且在高并发的情况下,这种情况会不断的恶化,因为多个后端需要抢占日志文件,而sync决定了大家同时只能有一个后端在操作日志文件,其他的请求必须排队,高并发时nfsd的调度能力下降,会导致php-fpm出现大量的无法自己清理的sleep进程。

而且,由于我们自定义的日志是频繁打开和关闭文件的,于是,nfs用的portmap会产生大量的getattr类型的rpc call,查阅RedHat的文档的时候发现,频繁的getattr会大大降低nfs的性能,于是情况更加恶化了。所以前段时间妖气一直都不是很稳定。

经过在测试机上做的测试,把挂载选项调整为async后,往nfs上进行简单文件操作的php总执行时间从sync模式的25ms左右缩短到0.9ms,虽然和本机文件的0.0x ms比慢不少,但至少可以接受了。

async模式下,nfs服务端5s刷新一次脏数据到硬盘中,这个间隔还是可以接受的。调整为async后,日志都正常开启,MySQL的process list里面sleep终于没有了,偶尔有也是不超过1s的,正常了。

分布式系统带来的新的的技术难点和需要注意的地方真的很多,考虑的地方多很多。

妖气加油!