实战内容用的是go-micro v3版本,并且这里就不细讲micro服务的使用等其他内容,默认读者已掌握所需技术点:(可以只是了解,无需深入,在实践中去学习和总结)
文章最后附带完整代码
为了方便,这里我们都用docker容器来部署启动,简单直接。
这里新建一个工具目录grpc_util
存放相关工具操作,同时新建一个shell脚本 (middle_docker/middle.sh),用来启动mysql和consul,也方便后续直接添加其它服务。
//新建目录和脚本文件
# mkdir grpc_util
# cd grpc_util
# mkdir middle_docker
# vi middle.sh
//把以下内容覆盖
#!/bin/bash
##启动mysql容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123789 --name emysql mysql:5.7
##启动consul服务容器
docker run -d -p 8500:8500 --name econsul consul:1.1
//保存后退出
# cat middle.sh
#!/bin/bash
##启动mysql容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123789 --name emysql mysql:5.7
##启动consul服务容器
docker run -d -p 8500:8500 --name econsul consul:1.12
//给权限
# chmod 755 middle.sh
//执行脚本,启动服务
# ./middle.sh
采用的方案是,利用linux的cron定时任务,1分钟检测一次,监控服务挂了就自动重启。所以这里需要用到cron定时任务和一个shell脚本来监控和重启服务。
在grpc_util
目录新建一个监控目录monitor_process
,同时新建一个监控脚本eMonitor.sh和监控命令配置文件process.conf
监控脚本eMonitor.sh通过监控配置文件的命令,不存在则重启,并写log日志到当前目录的monitor_err.log
# mkdir monitor_process
# vi eMonitor.sh
//把内容覆盖进去
#!/bin/bash
echo "Monitor Start"
#所需监控的命令配置文件路径
file=/home/tool/golearn/src/emicro_1/grpc_util/monitor_process/process.conf
#当前时间
currTime=`date +"%Y-%m-%d %H:%M:%S"`
#docker容器的前缀,用来区分docker进程还是linux进程
docker_str="docker:"
#监控
while read command
do
is_docker=0
if [[ ${command} == ${docker_str}* ]]; then
is_docker=1
fi
#判断为docker容器
if [ ${is_docker} -eq 1 ]; then
exists=`docker inspect --format '{{.State.Running}}' "${command:7}"`
if [ $exists != "true" ]; then
echo "${currTime}: docker-${command:7} is restart" >> /home/tool/golearn/src/emicro_1/grpc_util/monitor_process/monitor_err.log
`docker start "${command:7}"`
fi
#判断为linux进程
else
count=`ps aux|grep -c "${command}"|grep -v "grep"`
if [ $count -lt 2 ]; then
echo "${currTime}: ${command} is restart" >> /home/tool/golearn/src/emicro_1/grpc_util/monitor_process/monitor_err.log
`nohup ${command} > /dev/null 2>&1 &`
fi
fi
done < ${file}
监控命令配置文件process.conf,监控以行为基准,一行为一个监控,使用的是启动命令。docker启动的则用docker:
为前缀,带上容器名,如docker:emysql
docker:econsul
docker:emysql
到这里,监控服务和重启的脚本已经编写完了,需要把该监控脚本放入cron定时任务,1分钟执行一次监控检测
# vi /etc/crontab
*/1 * * * * root /home/tool/golearn/src/emicro_1/grpc_util/monitor_process/eMonitor.sh