离线版centos8环境部署迁移监控操作笔记

嗨咯,前两天总结记录了离线版centos8下docker的部署笔记,今天正好是2021年的最后一天,今天正好坐在本次出差回家的列车上,车上没有上面事做,索性不如把本次离线版centos8环境安装的其他过程做一次总结记录,岂不美哉。

Haha,文笔有限,技术更是有限,就当一次操作总结,如有说的不妥之处,欢迎指教,多多海涵。

1. 背景说明

开始之前,还是简单说明一下环境背景,不然看了一头雾水,不知所云,本次环境部署是基于离线centos8操作系统,以docker为容器,部署前端网站+业务API应用。关于离线版centos8 的docker部署在前一篇文章中已经做了总结,本次主要记录centos下的相关应用部署,包括:基础镜像迁移、业务API部署、服务监控。

2. 基础镜像迁移

本次环境部署涉及到的基础镜像包括:nginx、.netcore相关环境,基础镜像的迁移思路:找一台部署好的在线服务器环境,然后将镜像拷贝到离线环境即可,下面以nginx的迁移为例子,其他的都是依葫芦画瓢即可。

2.1拷贝nginx镜像

登录到部署了nginx的服务环境,通过执行以下命令即可拷贝nginx镜像

sql;gutter:true; docker save -o /home/installpack/nginx.zip nginx</p> <pre><code> 参数说明:docker save -o 【生成的镜像的存放路径】 【镜像名称】 将生成好的镜像文件nginx.zip拷贝到离线服务器上,我一般还是放在/home/ installpack目录下。 ### 2.2服务器镜像还原 多的不说少的不唠,直接执行以下命令即可: ;gutter:true;
进入到镜像所在文件夹

cd /home/installpack

还原镜像

docker load < nginx.zip

查看镜像

docker images

看到下面的镜像列表有nginx,大功告成

离线版centos8环境部署迁移监控操作笔记

nginx的具体配置就不写了,根据自己实际需要配置即可

3. 业务API部署

其实API部署就简单了,直接将发布文件拷贝到服务器指定目录,生成镜像+运行镜像即可。

我一般会写一个services.sh文件,并将其放在/home/sh/services.sh,把该服务器上涉及的所有服务都写成批处理命令,这样方便快速安装部署,具体文件内容如下:

sql;gutter:true;</p> <h1>!/bin/bash</h1> <p>该命令分两部分:第一部分,全部重新部署安装;第二部分:指定服务部署安装</p> <p>restartContainers="$1"</p> <p>if [ ! $restartContainers ]; then</p> <pre><code>#重启全部服务 #部署安装用户服务 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 # 依葫芦画瓢部署其他服务 </code></pre> <p>else</p> <pre><code> #启动指定的服务,不同服务间通过,链接 #对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 </code></pre> <p>fi</p> <p># 查看服务容器是否正常运行</p> <p>docker ps -a</p> <pre><code> 服务启动命令说明:其实run命令相信您一点都不陌生,只是有三点个需要注意: * --restart=always不要漏掉,他会帮助您重启docker时自动启动服务 * -m 1024M 最好配置,他是设置容器的最大消耗内存,当内存消耗达到设定砸值,服务会自动重启,具体值根据自身服务器环境配置。 * -v /宿主机目录:/容器目录 文件挂载不能少,将配置文件、日志文件、数据文件、静态资源文件最好挂载映射到物理主机,避免容器销毁到不回来数据,具体要挂载那一些文件,根据具体的服务自己定义。 文件执行示例说明: ;gutter:true;
初始化部署全部服务

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,将该服务对应的所有服务监控写在此文件中,具体文件内容如下:

sql;gutter:true;</p> <h1>!/bin/sh</h1> <p>先定义实现检查的方法 检查一个镜像是否存在 function checkContainerStats { exist=<code>docker inspect --format '{{.State.Running}}' $1</code> if [ "${exist}" != "true" ] then return 0 else return 1 fi }</p> <p>检查一个服务是否正常提供服务(通过健康检查地址来判断是否正常提供服务) 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 }</p> <p>根据名称检查容器的运行状态,如果不存在,并重启 function checkContainer { #容器名称 containerName="$1" echo "" echo "开始检查${containerName}的运行状态"</p> <pre><code> # 查看进程是否存在 # 判断服务是否存在,如果不存在,那么直接重启一次 if checkContainerStats ${containerName} then echo "服务断开,开始重启服务" docker start ${containerName} echo "重启完成" else echo "正常服务中..." fi </code></pre> <p>}</p> <p>通过检查检查地址,检查服务是否正常提供服务,并做自动修复 function checkContainerHealth { #容器名称 containerName="$1" echo "" echo "开始检查${containerName}的运行状态"</p> <pre><code> # 判断服务是否存在,如果不存在,那么先直接重启一次,重启后,在检查一次,如果还是不存在,那么直接删除掉容器重新创建容器 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 } </code></pre> <p>#检查分两部分检查,服务检查+基础容器检查</p> <p>now=<code>date +"%Y-%m-%d %H:%M:%S"</code>   echo   echo "${now} 开始检查docker中各个容器的对应的进程是否存在"   #检查基础服务   checkContainer nginx</p> <p>#检查每一个业务服务的运行情况   # 检查用户服务   checkContainerHealth usermic http://localhost:8081/api/Consul/heathle   # 检查日志服务   checkContainerHealth logmic http://localhost:8086/api/Consul/heathle   #其他服务</p> <pre><code> ### 4.2启动监控定时任务 多的不说少的不唠,直接执行以下命令即可: 进入到 centos任务设置界面 ;gutter:true;
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. 几个注意点

  • 容器不能和外部服务通讯:如果数据库连接等,此时最简单粗暴的方式就是:直接关闭宿主机的防火墙,具体命令如下:

sql;gutter:true; # 关闭防火墙</p> <p>systemctl stop firewalld.service</p> <p># 设置开机禁止启动防火墙,这一句不能忽视,不然重启服务器又开启了</p> <p>systemctl disable firewalld.service</p> <pre><code> * 容器连接orcel数据库问题,需要配置时区,不然orcle连接会报时区错误,时区设置直接在Dockerfile文件中加上如下配置即可: 设置时区,是为了能够访问orcel数据库 ;gutter:true;
ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

6. 结束

好了,时间刚刚好,也快要到站了,收拾收拾准备下车,写的不好,希望有帮助就好。

END
为了更高的交流,欢迎大家关注我的公众号,扫描下面二维码即可关注,谢谢:

离线版centos8环境部署迁移监控操作笔记

Original: https://www.cnblogs.com/xiaoXuZhi/p/15752631.html
Author: 程序员修炼之旅
Title: 离线版centos8环境部署迁移监控操作笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612747/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • RPA工单查询和下载流程机器人

    bash;gutter:true;1、登录业务系统,输入用户名和密码2、进入下载模块3、输入下载查询条件4、进入文件明细单5、下载文件视频地址:https://www.bilibi…

    Linux 2023年6月7日
    0147
  • go将青龙面板里面的脚本文件都下载到本地

    纯粹练手用的,大家轻喷青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,F12一下就知道了,青龙面板使用Request H…

    Linux 2023年6月7日
    0151
  • C++类结构体与json相互转换

    1. 背景与需求 之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如: class Project { public st…

    Linux 2023年6月8日
    0105
  • OpenStack glance对接swift

    配置 切换环境变量 [root@controller ~]# source keystonerc_admin 复制glance配置文件备份 [root@controller ~(k…

    Linux 2023年6月8日
    093
  • Java — 枚举

    枚举是 JDK5 中引入的特性,由 enum 关键字来定义一个枚举类。 格式: enum 枚举类名 { 枚举项1, 枚举项2, …; 成员变量; 构造方法 成员方法 } 说明:…

    Linux 2023年6月8日
    097
  • Linux远程连接管理(命令)

    1.ftp服务器的搭建 ftp的作用:文件的上传和下载,不允许操作目录,如果想操作目录只能用tar打包。 (1)服务器端: ①.输入”sudo apt-get inst…

    Linux 2023年6月8日
    0120
  • 解决Docker容器iptables不能用

    最近使用frp做跳板远程运维内网的服务器,尽管已经屏蔽了海外IP对vps服务器的访问,但是总觉得直接暴露远程管理的端口在互联网上还是不安全。于是想着用Ocserv做服务端先vpn拨…

    Linux 2023年5月27日
    0107
  • 我叫Mongo,干了「查询终结篇」,值得您拥有

    这是mongo第三篇”查终结篇”,后续会连续更新5篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟…

    Linux 2023年6月14日
    0134
  • Golang环境安装

    一、下载地址 Golang: Downloads – The Go Programming Language GoLand编辑器: Download GoLand: A…

    Linux 2023年6月13日
    0110
  • Rabbitmq安装与部署

    安装包otp_src_22.3.tar.gz,下载到部署服务器tar -zxvf解压 mv otp_src_22.3 ./erlang变更文件夹名字 可能需要安装的依赖包 yum …

    Linux 2023年5月27日
    0102
  • [Git专题] 环境搭建

    环境搭建 在正式使用 Git 之前,首先应当安装 Git 并完成一些基础配置,本章内容就教大家在 Ubuntu 和 CentOS 上安装 Git 的方法。 如果你使用的是基于 De…

    Linux 2023年5月27日
    0100
  • [Python]批量替换PPT字体脚本

    使用说明 脚本代码 配置文件 使用说明 将脚本放置在需要批量修改的PPT文件夹根目录 修改配置文件 conf.ini 中的字体 执行脚本文件 ​ exe文件 下载:https://…

    Linux 2023年6月13日
    0119
  • MySQL概述

    数据库 ~存储数据的仓库,数据是有组织的进行存储 ~英文:Database,简称DB 数据库管理系统 ~管理数据库的大型软件 ~英文:DataBase Management Sys…

    Linux 2023年6月7日
    0104
  • 015 Linux 标准输入输出、重定向、管道和后台启动进程命令

    1 三种标准输入输出 2 什么是重定向?如何重定向? (1)什么是重定向? (2)如何重定向? 3 管道符以及和它容易混淆的一些符号使用 (1)管道符 | (2)&和&am…

    Linux 2023年5月27日
    0117
  • linux下通过命令连接wifi

    故事背景:我司是做新零售的,机器支持4G、wifi、网线,可能会涉及到网络的切换和连接 项目需求:用户在web端输入wifi名称和密码,客户端可以通过服务端下发的信息进行连接 技术…

    Linux 2023年6月13日
    094
  • Redis集群的节点通信原理

    Redis集群搭建中,数据如何在节点分布的原理,下面来介绍一下节点之间是如何进行通信(节点握手) 一、基础通讯原理 1、维护集群的元数据的两种方案介绍及对比 在分布式存储中需要提供…

    Linux 2023年5月28日
    0153
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球