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结束掉,这中间的原因尚不清楚





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值