heartbeat 高可用nfs服务器 不能停止nfsd 无法重启nfs

最近在用heartbeat构建一个高可用的nfs服务器,heartbeat的配置很顺利,一共也就需要修改三个配置文件。


通过heartbeat可以启动nfs服务,并且当一台机器down掉之后,nfs服务也可以切换到另一台机器上。


但是存在的一个问题是:运行heartbeat stop时,停止脚本无法完全终止nfs服务,系统中残留有nfsd进程,导致后续nfs服务的启动出现问题。


原因分析:

查看heartbeat的日志后发现,/etc/init.d/nfs stop脚本成功被调用,但是为什么nfsd没有被正常结束掉呢?

在/etc/init.d/nfs stop脚本中,发现如下的部分:

 stop)
        # Stop daemons.
        echo -n $"Shutting down NFS mountd: "
        killproc rpc.mountd
        echo
        echo -n $"Shutting down NFS daemon: "
        killproc nfsd -2

其中nfsd是通过killproc 函数杀死的,并且传递了一个参数2;

进一步查看killproc函数的实现,发现后边的那个-2代表以哪种信号杀死nfsd进程,无参数时表示SIGKILL(也就是-9),而-2代表的信号是SIGINT。

可见问题就处在使用SIGINT信号无法结束掉nfsd进程。


问题的原因找到之后,那解决的方法就很简单了。

(1)删除nfs结束脚本中的-2

(2)在heartbeat的脚本中添加相关的进程结束脚本:

        StopHA
        `ps ax|grep nfsd|grep -v 'grep'|awk '{print $1}'|xargs -L 1 kill -9`



至于,为什么用/etc/init.d/nfs start直接启动的nfsd,可以用 killproc nfsd -2 结束掉

而用/etc/init.d/heartbeat start间接启动的nfsd,无法用killproc nfsd -2结束掉,这中间的原因尚不清楚





你可能感兴趣的:(heartbeat 高可用nfs服务器 不能停止nfsd 无法重启nfs)