离线版centos8环境部署迁移监控操作笔记
嗨咯,前两天总结记录了离线版centos8下docker的部署笔记,今天正好是2021年的最后一天,今天正好坐在本次出差回家的列车上,车上没有上面事做,索性不如把本次离线版centos8环境安装的其他过程做一次总结记录,岂不美哉。
Haha,文笔有限,技术更是有限,就当一次操作总结,如有说的不妥之处,欢迎指教,多多海涵。
1. 背景说明
开始之前,还是简单说明一下环境背景,不然看了一头雾水,不知所云,本次环境部署是基于离线centos8操作系统,以docker为容器,部署前端网站+业务API应用。关于离线版centos8 的docker部署在前一篇文章中已经做了总结,本次主要记录centos下的相关应用部署,包括:基础镜像迁移、业务API部署、服务监控。
2. 基础镜像迁移
本次环境部署涉及到的基础镜像包括:nginx、.netcore相关环境,基础镜像的迁移思路:找一台部署好的在线服务器环境,然后将镜像拷贝到离线环境即可,下面以nginx的迁移为例子,其他的都是依葫芦画瓢即可。
2.1拷贝nginx镜像
登录到部署了nginx的服务环境,通过执行以下命令即可拷贝nginx镜像
docker save -o /home/installpack/nginx.zip nginx
参数说明:docker save -o 【生成的镜像的存放路径】 【镜像名称】
将生成好的镜像文件nginx.zip拷贝到离线服务器上,我一般还是放在/home/ installpack目录下。
2.2服务器镜像还原
多的不说少的不唠,直接执行以下命令即可:
# 进入到镜像所在文件夹 cd /home/installpack # 还原镜像 docker load < nginx.zip # 查看镜像 docker images
看到下面的镜像列表有nginx,大功告成

nginx的具体配置就不写了,根据自己实际需要配置即可
3. 业务API部署
其实API部署就简单了,直接将发布文件拷贝到服务器指定目录,生成镜像+运行镜像即可。
我一般会写一个services.sh文件,并将其放在/home/sh/services.sh,把该服务器上涉及的所有服务都写成批处理命令,这样方便快速安装部署,具体文件内容如下:
#!/bin/bash
# 该命令分两部分:第一部分,全部重新部署安装;第二部分:指定服务部署安装
restartContainers="$1"
if [ ! $restartContainers ]; then
#重启全部服务
#部署安装用户服务
echo "用户服务启动中 ..."
docker rm -f usermic && docker rmi user
docker build -t user /home/project/user && docker run -d -m 1024M --memory-swap -1 --restart=always --name usermic -p 8081:8081 -v /home/app/user/Log:/app/Log -v /home/app/user/wwwroot:/app/wwwroot user
echo "日志服务启动中 ..."
docker rm -f logmic && docker rmi log
docker build -t log /home/project/log && docker run -d -m 1024M --memory-swap -1 --restart=always --name logmic -p 8086:8086 -v /home/app/log/Log:/app/Log -v /home/app/log/wwwroot:/app/wwwroot log
# 依葫芦画瓢部署其他服务
else
#启动指定的服务,不同服务间通过,链接
#对IFS变量 进行替换处理
OLD_IFS="$IFS"
IFS=","
restartContainersArray=($restartContainers)
IFS="$OLD_IFS"
for var in ${restartContainersArray[@]}
do
case $var in
"usermic")
echo "用户服务启动中 ..."
docker rm -f usermic && docker rmi user
docker build -t user /home/project/user && docker run -d -m 1024M --memory-swap -1 --restart=always –name usermic -p 8081:8081 -v /home/app/user/Log:/app/Log -v /home/app/user/wwwroot:/app/wwwroot user
;;
"logmic")
echo "日志服务启动中 ..."
docker rm -f logmic && docker rmi log
docker build -t log /home/project/log && docker run -d -m 1024M --memory-swap -1 --restart=always --name logmic -p 8086:8086 -v /home/app/log/Log:/app/Log -v /home/app/log/prologs:/app/prologs -v /home/app/log/wwwroot:/app/wwwroot log
;;
# 依葫芦画瓢部署其他服务
esac
done
fi
# 查看服务容器是否正常运行
docker ps -a
服务启动命令说明:其实run命令相信您一点都不陌生,只是有三点个需要注意:
- --restart=always不要漏掉,他会帮助您重启docker时自动启动服务
- -m 1024M 最好配置,他是设置容器的最大消耗内存,当内存消耗达到设定砸值,服务会自动重启,具体值根据自身服务器环境配置。
- -v /宿主机目录:/容器目录 文件挂载不能少,将配置文件、日志文件、数据文件、静态资源文件最好挂载映射到物理主机,避免容器销毁到不回来数据,具体要挂载那一些文件,根据具体的服务自己定义。
文件执行示例说明:
# 初始化部署全部服务 sh /home/sh/services.sh # 部署安装某一个服务,如用户服务: sh /home/sh/services.sh usermic # 部署安装多个服务,如用户服务、日志服务: sh /home/sh/services.sh usermic, logmic
业务部署方式说明:有很多大佬在部署的时候,直接将整个API服务挂载的物理机,除第一次初始化创建的容器服务需要用到上述命令外,其他升级只需要将更新包上传到指定挂载的物理机,重启对应的容器即可,这是一个很好的方法。
4. 服务监控
服务监控,其实有很多可视化的第三方工具来完成,我还是用的最原始的方式来监控,那就是通过centos crontab的定时任务来监控容器和服务响应来实现。
具体监控思路分两个方面的服务监控:基础服务监控、业务服务监控
基础服务监控:通过监听容器状态是否正常,如果不正常直接重启一次服务,如:nginx等
业务服务监控:业务服务没有直接通过监控容器状态来实现,因为有遇到过,容器正常运行,但是服务不能提供对外服务,这样监控也是徒劳的,所以业务服务直接调用服务的健康检查接口,如果不能调通,那么说已经不能正常提供服务,直接执行services.sh来初始化对应的服务。
4.1监控命令文件准备
监控命令文件我一般也会在每一个服务上写一个/home/sh/serviceGuard.sh,将该服务对应的所有服务监控写在此文件中,具体文件内容如下:
#!/bin/sh
# 先定义实现检查的方法
# 检查一个镜像是否存在
function checkContainerStats
{
exist=`docker inspect --format '{{.State.Running}}' $1`
if [ "${exist}" != "true" ]
then
return 0
else
return 1
fi
} # 检查一个服务是否正常提供服务(通过健康检查地址来判断是否正常提供服务)
function checkContainerHealthStats
{
webUrl="$1"
serviceCode=$(curl -I -m 10 -X GET -o -s -w %{http_code} $webUrl)
if [ $serviceCode -eq 200 ]
then
return 1
else
return 0
fi
} # 根据名称检查容器的运行状态,如果不存在,并重启
function checkContainer
{
#容器名称
containerName="$1"
echo ""
echo "开始检查${containerName}的运行状态" # 查看进程是否存在
# 判断服务是否存在,如果不存在,那么直接重启一次
if checkContainerStats ${containerName}
then
echo "服务断开,开始重启服务"
docker start ${containerName}
echo "重启完成"
else
echo "正常服务中..."
fi
} # 通过检查检查地址,检查服务是否正常提供服务,并做自动修复
function checkContainerHealth
{
#容器名称
containerName="$1"
echo ""
echo "开始检查${containerName}的运行状态" # 判断服务是否存在,如果不存在,那么先直接重启一次,重启后,在检查一次,如果还是不存在,那么直接删除掉容器重新创建容器
if checkContainerHealthStats $2; then
echo "服务断开,开始重启服务"
docker start ${containerName}
# 在通过进程检查一次是否重启成功,如果失败,那么直接删掉,镜像,容器,重启创建
if checkContainerStats ${containerName}; then
echo "重启失败,直接全新部署"
sh /home/sh/services_22.sh ${containerName}
echo "全新部署完成"
else
echo "重启完成"
fi
else
echo "正常服务中..."
fi
} #检查分两部分检查,服务检查+基础容器检查 now=`date +"%Y-%m-%d %H:%M:%S"`
echo
echo "${now} 开始检查docker中各个容器的对应的进程是否存在"
#检查基础服务
checkContainer nginx #检查每一个业务服务的运行情况
# 检查用户服务
checkContainerHealth usermic http://localhost:8081/api/Consul/heathle
# 检查日志服务
checkContainerHealth logmic http://localhost:8086/api/Consul/heathle
#其他服务
4.2启动监控定时任务
多的不说少的不唠,直接执行以下命令即可:
进入到 centos任务设置界面
crontab -e #所有任务检查都是每一分钟检查一次 * * * * * sh /home/sh/ serviceGuard.sh >> /var/log/cron_log_$(date +\%Y-\%m-\%d).log 2>&1 / 退出保存后 重启centos # 重新加载crond 重启crond 设置crond为开机启动
/sbin/service crond reload && /sbin/service crond restart && chkconfig crond on
5. 几个注意点
- 容器不能和外部服务通讯:如果数据库连接等,此时最简单粗暴的方式就是:直接关闭宿主机的防火墙,具体命令如下:
# 关闭防火墙 systemctl stop firewalld.service # 设置开机禁止启动防火墙,这一句不能忽视,不然重启服务器又开启了 systemctl disable firewalld.service
- 容器连接orcel数据库问题,需要配置时区,不然orcle连接会报时区错误,时区设置直接在Dockerfile文件中加上如下配置即可:
# 设置时区,是为了能够访问orcel数据库
ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
6. 结束
好了,时间刚刚好,也快要到站了,收拾收拾准备下车,写的不好,希望有帮助就好。
END
为了更高的交流,欢迎大家关注我的公众号,扫描下面二维码即可关注,谢谢:

离线版centos8环境部署迁移监控操作笔记的更多相关文章
- 离线版centos8安装docker笔记
嗨嗨哈哈,已经很久没有坐下来胡编乱造一点笔记了,平时云服务器搞惯了,一个命令就安装好了docker了的,但这次生不逢时的新机房就没那么幸运了,有多不逢时超乎想象,不仅仅服务器没有外网,就连周围方圆一公 ...
- centos7.4下Jira6环境部署及破解操作记录(完整版)
废话不多说,以下记录了Centos7针对Jira6的安装,汉化,破解的操作过程,作为运维笔记留存. 0) 基础环境 192.168.10.212 Centos7.4 mysql 5.6 jdk 1.8 ...
- MongoDB副本集(一主一备+仲裁)环境部署-运维操作记录
MongoDB复制集是一个带有故障转移的主从集群.是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复.MongoDB复制集模式中没有固定的主结点,在启动后,多个服务节点间将自动选举产生一 ...
- 分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
公司在IDC机房的一台服务器上部署了MongoDB,由于所存储的业务数据比较重要,所以对MongoDB的监控显得尤为重要!Zabbix监控MongoDB性能的原理:通过echo "db.se ...
- Jenkins实现生产环境部署文件的回滚操作(Windows)
由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...
- Linux下smokeping网络监控环境部署记录
smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),通过它可以监控到公司IDC的网络状况,如延时,丢包率,是否BGP多线等:smokeping会向目标设备和系统发 ...
- NodeJS项目迁移兼Ubuntu下NodeJS环境部署
前言 之前做的几个项目都托管在阿里云服务器,但是最近要到期了.想着到底要不要续期,毕竟100/月.后面看着阿里云有个活动,800/三年.果断买下.环境部署折腾了一天,其中也遇到几个坑. 目录 一.安装 ...
- Saltstack自动化操作记录(1)-环境部署【转】
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...
- InfluxDB+Grafana大数据监控系列之基础环境部署(一)
一.单节点环境部署 机器节点信息及 InfluxDB.Grafana 版本选择: 节点 Linux版本 部署服务 10.223.1.198 Centos 6.8 InfluxDB 1.7.7 10.2 ...
随机推荐
- day09 orm查询优化相关
day09 orm查询优化相关 今日内容概要 orm字段相关补充 orm查询优化相关 orm事务操作 图书管理系统练习 今日内容详细 orm事务操作 """ 事务:ACI ...
- 【DFS与BFS】洛谷 P1135 奇怪的电梯
题目:奇怪的电梯 - 洛谷 (luogu.com.cn) 因为此题数据范围较小,有dfs及bfs等多种做法. DFS 比较正常的dfs,注意vis数组一定要回溯,不然会漏情况 例如这个数据 11 1 ...
- 2019广东工业大学新生杯决赛 I-迷途的怪物
题目:I-I-迷途的怪物_2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛) (nowcoder.com) 将(p-1)^n 按照多项式定理拆开,会发现只有一项没有p,其余项都有p,可直接约掉. ...
- struct vs class in C++
在C++中,除了以下几点外,struct和class是相同的. (1)class的成员的默认访问控制是private,而struct的成员的默认访问权限是public. 例如,program 1会编译 ...
- SpringBoot+MybatisPlus实现批量添加的两种方式
第一种: 因为Mysql数据每次发送sql语句的长度不能超过1M,所以,每次发送insert语句以固定长度发送: 将sql语句在provider中,以固定长度装入List集合中,然后返回service ...
- 使用$.ajax方式实现页面异步访问,局部更新的效果
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- js--生成器总结
前言 生成器gengrator是es6 新增的函数功能,它允许你定义一个包含自有迭代算法的函数, 同时它可以自动维护自己的状态. 本文来总结一下JavaScript 中生成器的相关知识点. 正文 1. ...
- 如何为Dash/Zeal生成c++ 文档: 以abseil文档为例
目录 1. 软件安装 2 Sample源文件下载: 3. 生成步骤 3.1 使用doxygen生成html文件 3.2 使用docsetutil 生成 dash/Zeal 格式 1. 软件安装: 1. ...
- MySQL如何随机筛选25000条数据
一.SELECT * FROM sheet1 t1 ORDER BY RAND() LIMIT 10000; 二.SELECT * FROM sheet1 AS t1 JOIN (SELECT ROU ...
- 【C++】使用VS2022开发可以在线远程编译部署的C++程序
前言: 今天没有前言. 一.先来一点C++的资源分享,意思一下. 1.c++类库源码以及其他有关资源.站点是英文的,英文不好的话可以谷歌浏览器在线翻译.http://www.cplusplus.com ...