暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker应用在nfs挂接正常的情况下才启动?

原创 jieguo 2023-10-27
232

需求问题:

两台主机,a为应用客户端192.168.52.241,b为nfs服务器192.168.52.243
a应用数据存储在b的nfs目录上,为保证a应用正常,需确保b的nfs在a上挂接正常以后才启动a应用。

曾经故障:
由于nfs服务器未正常启动挂接,a应用的数据写入到了a本地的/home/nfs目录下,最终a磁盘被占满。实际要求是a挂接b机存储的nfs的/home/nfs目录,数据应该在b存储上才对。

处理办法:

1.a应用:停止docker自启动–restart=always。
自启动脚本:
sudo docker run -it --runtime=nvidia --restart=always -p 9147:9147 -v /home/nfs:/home/nfs algo_jd_reco:v1.3

停止自启动
sudo docker rm -f 容器号
对某一个容器关闭自启动:
docker update --restart=no
取消所有自启动,命令如下:
docker update --restart=no $(docker ps -q)

2.a应用:调整/etc/systemd/system.conf延迟检查时间:5分钟改为1小时
DefaultTimeoutStartSec=3600s

3.a应用:增加docker自检启动脚本:/root/nfs_docker.sh

#!/bin/bash
nfs_stat=`df -h|grep 192.168.52.243 | grep -v grep | wc -l`
docker_stat=`netstat -tunlp|grep LISTEN|grep 9147 | grep -v grep | wc -l`
if [[ "${nfs_stat}" -gt 0 ]] && [[ "${docker_stat}" -eq 0 ]]; then
	docker run -it --runtime=nvidia -p 9147:9147 -v /home/nfs:/home/nfs algo_jd_reco:v1.3
else
	if [[ "${nfs_stat}" -eq 0 ]] && [[ "${docker_stat}" -gt 0 ]]; then
docker stop $(docker ps -a -q)
fi
fi

说明:
a主机192.168.52.241每分钟检查b主机192.168.52.243 的nfs目录是否可挂接成功,如果挂接上,并且9147的端口不存在,那么就启动docker应用,否则如果没有nfs挂接并且端口存在,那么就停掉docker应用。

chmod +x /root/nfs_docker.sh

在crontab系统任务每分钟检测一次:

* * * * * /root/nfs_docker.sh

测试验证:模拟断电重启两台机器

观察a应用是否等b主机正常后才启动
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论