服务挂了,怎么自动恢复?

简介: 架构设计上,避免单点,使用故障自动转移固然能够保证系统的高可用,是否还有其他的方案,让挂掉的服务自动启动呢,这里给大伙推荐一个常见的运维工具 supervisor。

大家或许都碰到过这样的情况:

  • tomcat挂了,站点应用访问不了
  • service出core了,服务挂了

架构设计上,避免单点,使用故障自动转移固然能够保证系统的高可用,是否还有其他的方案,让挂掉的服务自动启动呢,这里给大伙推荐一个常见的运维工具 supervisor。

画外音:supervisor是很常见的运维工具,以下几个小问题旨在让不熟悉的同学简单了解相关原理,献丑了。

supervisor是什么?

答:用Python开发的通用的进程管理工具。

supervisor有什么用?

答:supervisor能把一个普通进程变为后台daemon进程,并监控进程状态,在进程异常退出时能够自动重启(或者告警),同时还提供一些相关的管理功能。

supervisor是怎么做到的?

答:supervisor通过fork/exec的方式,把被管理的进程当作其子进程来启动,在被管理的子进程异常退出时(例如tomcat出异常挂掉,或者服务出core挂掉,或者收到异常信号挂掉),作为父进程可以获取相关信息,以选择后续如何处理。

之前没用过supervisor,这玩意是否靠谱?

答:额,supervisor诞生10年以上了,绝对靠谱,绝大部分运维同学都熟知它。

作为程序员,了解一些运维的知识有用么?

答:额,知道“&”与“nohup”的区别,对写程序可能没帮助,但对理解整个技术体系及思路肯定是有好处的。

希望没有浪费这一分钟。

调研:“&”与“nohup”的区别是啥呀?

目录
相关文章
|
2月前
|
弹性计算 Linux Shell
宕机自动恢复服务
在服务或脚本运行过程中,可能会因为程序异常、服务器重启或掉电等原因停止运行,导致业务受损。通过使用云助手插件 `ecs-tool-servicekeepalive`,可以在服务或脚本被中断时快速恢复运行,确保其可靠性和持续性。该插件基于 Linux 系统的 systemd service 实现,用户只需输入启动命令即可自动生成 systemd service 配置,无需手动配置。具体实践包括启动插件、查看配置状态及取消自恢复等功能。
|
3月前
|
运维 监控 定位技术
故障转移和自动恢复
故障转移和自动恢复
120 1
|
3月前
|
运维 监控 安全
自动恢复机制在哪些情况下可能无法正常工作
自动恢复机制在哪些情况下可能无法正常工作
|
缓存 容灾 NoSQL
变形记---容灾恢复 ,异常崩溃引发服务器丢档或无法正常运行
最近我给M部门面试服务器主程序开发的职位,我只问他们的架构设计经验,我发现相当一部分5-12年“本应该有足够开发经验”的开发组长,或开发主程序缺乏设计,缺乏容错,缺乏创新,比如一些服务器宕机如何崩溃拉起恢复玩家数据,数据库的异步线程读写如何避免被其他线程写回呢,至少目前能听到合理方案的面试者的回答不多,这也是我想写这篇文章的出发点,以此来分享给大家, 不仅仅是为了应付面试,更是解决实际问题的一种思路。 如题,举例说明:游戏服务器(或者其他业务服务器)正常运行中出现了异常崩溃,可能是异常断电引发,可能是云服务商的软硬件问题引发,这种情况下,你们的服务器架构有没有做灾难恢复处理? 使得
|
运维 监控 NoSQL
记一次redis主从切换导致的数据丢失与陷入只读状态故障
背景 最近一组业务redis数据不断增长需要扩容内存,而扩容内存则需要重启云主机,在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障,这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从,通过sentinel集群实现故障时的自动主从切换,这套架构已经平稳运行数年,经历住了多次实战的考验。 高可用架构大体如下图所示: 简单说一下sentinel实现高可用的原理: 集群的多个(2n+1,N>1)哨兵会定期轮询redis的所有master/slave节点,如果sentinel集群中超过一半的哨兵判定redis某个节点已主观下线,就会将
|
应用服务中间件 PHP nginx
记一次服务器重启后网站502的恢复过程
记一次服务器重启后网站502的恢复过程
278 0
我是如何完美解决WIN10崩溃无法自动恢复启动问题的
用U盘启动盘启动电脑,检查硬盘状态。确认硬盘状态良好。但是我注意到一件事情,就是我的c盘盘符下不是启动盘内容了;之前C盘下启动盘内容盘符变成了G盘;
我是如何完美解决WIN10崩溃无法自动恢复启动问题的
|
网络安全
F5实现一键备份和恢复功能
脚本内容:  root@ltm2:Active:Standalone] tmp # more backup1.sh #!/bin/sh cd /shared/tmp date_tag=`date +%Y%m%d%H%M%S` XXXX save sys  ucs    /shared/tmp/$HOSTNAME-$date_tag.
1173 0
|
存储 关系型数据库 数据库