birk 发表于 2015-11-21 08:56:19

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




  


  


  


  
页: [1]
查看完整版本: heartbeat 高可用nfs服务器 不能停止nfsd 无法重启nfs