自定义LSF服务管理

自定义LSF服务管理

背景

传统的LSF服务管理是通过命令行操作的,而且需要如下多个命令:

  • 启动LSF服务

lsadmin limstartup
lsadmin resstartup
badmin hstartup

  • 停止LSF服务

badmin hshutdown
lsadmin resshutdown
lsadmin limshutdown

可见管理很不方便。后续又引入了单条命令来管理LSF服务:

  • 启动LSF服务

lsf_daemons start

  • 停止LSF服务

lsf_daemons stop

相对来讲简化了操作,但并不符合操作系统的服务管理规范。因此又引入了 lsfd.service 服务,可以通过 systemctl 服务管理工具来管理LSF服务。

问题

LSF服务由三个服务进程组成,分别是LIM、RES、SBD;在实践中发现lsfd.service并不能有效地管理这三个服务,如果其中的一个服务掉线后并不能自动拉起。
为了解决这个问题,在最新的LSF 10.1.14 pack中在保留原有lsfd.service的基础上又引入三个服务,分别管理LIM、RES和SBD服务进程,这样LSF的服务项达到了四个之多。感觉增加了管理的复杂度。

解决方案

我们可以通过自定义LSF服务的方法简化管理。方法是在服务进程中定时查看LIM、RES和SBD服务进程,如果发现有进程掉线就及时拉起服务。
以下是示例:

  1. lsfd.service 示例
[Unit]
Description=IBM Spectrum LSF
After=remote-fs.target network.target nfs.service autofs.service gpfs.service nscd.service

[Service]
Type=simple
Environment="LSF_ENVDIR=/lsf/conf"
Environment="LSF_BINDIR=/lsf/10.1/linux3.10-glibc2.17-x86_64/bin"
Environment="LSF_SERVERDIR=/lsf/10.1/linux3.10-glibc2.17-x86_64/etc"
Environment="LSF_LIBRDIR=/lsf/10.1/linux3.10-glibc2.17-x86_64/lib"
ExecStartPre=/bin/bash -c '(timer=12; while (( $timer )); do if [ ! -d "/lsf/10.1/linux3.10-glibc2.17-x86_64/etc" ]; then sleep 5; else exit 0; fi; timer=$[$timer-1]; done; echo "/lsf/10.1/linux3.10-glibc2.17-x86_64/etc not found." 1>&2; exit 1;)'
ExecStart=/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsfwatchdog.sh start
ExecStop=/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsfwatchdog.sh stop
KillMode=none
LimitMEMLOCK=infinity
Delegate=yes

[Install]
WantedBy=multi-user.target
  1. lsfwatchdog.sh 示例
#!/bin/bash

function checkLSFService() {
    .  $LSF_ENVDIR/profile.lsf
    logfile="/lsf/log/watchdog.`hostname`.log"
    lim_num=$( ps -lf -u root |grep $LSF_SERVERDIR/lim|grep -v grep |wc -l )
    [ $lim_num -eq 0 ] && {
        echo "`date` - LSF LIM service is missing." >> $logfile
        $LSF_BINDIR/lsadmin limstartup
        sleep 1
        echo "`date` - LSF LIM service started [`ps -lf -u root |grep $LSF_SERVERDIR/lim|grep -v grep`]" >> $logfile
    }
    res_num=$( ps -lf -u root |grep $LSF_SERVERDIR/res|grep -v grep |wc -l )
    [ $res_num -eq 0 ] && {
        echo "`date` - LSF RES service is missing." >> $logfile
        $LSF_BINDIR/lsadmin resstartup
        sleep 1
        echo "`date` - LSF RES service started [`ps -lf -u root |grep $LSF_SERVERDIR/res|grep -v grep`]" >> $logfile
    } 
    sbd_num=$( ps -lf -u root |grep $LSF_SERVERDIR/sbatchd|grep -v grep |wc -l )
    [ $sbd_num -eq 0 ] && {
        date >> $logfile
        echo "`date` - LSF SBD service is missing." >> $logfile
        $LSF_BINDIR/badmin hstartup
        sleep 1
        echo "`date` - LSF SBD service started [`ps -lf -u root |grep $LSF_SERVERDIR/sbatchd|grep -v grep`]" >> $logfile
    }   
}

function start() {
    while true
    do
        checkLSFService
        sleep 10
    done
}

function stop() {
    .  $LSF_ENVDIR/profile.lsf
    logfile="$LSF_ENVDIR/../log/watchdog.`hostname`.log"
    echo "`date` - Stop LSF Services." >> $logfile
    $LSF_SERVERDIR/lsf_daemons stop
    for p in `cat /sys/fs/cgroup/memory/system.slice/lsfd.service/tasks`; do kill -9 $p; done

}

case $1 in
"start")
    start
    ;;
"stop")
    stop
    ;;
esac

结论

在 LSF 10.1.12 集群中经测试,目前运行良好,掉线的服务可以被及时拉起。
同时,在系统运维操作需要停止服务时也能迅速停止服务。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值