Docker守护进程宕机的处理机制

按照Docker的设计,当通过systemctl stop docker 命令停止docker或者docker的守护进程异常退出的时候,内部的容器也随之关闭,此时多个容器同时失效,不再具备高可用,原因是所有的docker容器的进程都是守护进程的子进程。

从docker1.12版本开始,增加了live-restore选项,去掉了docker守护进程的依赖,即使docker守护进程关闭,内部的容器照样可以运行,当守护进程恢复后,容器又重新被守护进程管理。

配置方法:

编辑配置文件vim /etc/docker/daemon.json,在其中加入”live-restore”: true命令,在/usr/lib/systemd/system/docker.service中添加KillMode=process命令,如图:

KillMode=process的意思是当停止docker守护进程时只停掉主进程,而主进程产生的子进程是不会被停止,SSH服务也是这个模式,配置完成后,当执行systemctl stop/start/restart docker的时候,内部容器不会受到影响,会继续运行。

注意:

1、live-restore选项仅可以恢复重启前后配置相同的Daemon,例如,如果daemon重启之后使用了不同的网桥IP地址或者不同的graphdirve,则live-restore无法工作。

2、Daemon长时间离线会对内部的容器产生影响,因为容器在运行的时候需要向Daemon写入日志,如果Daemon变得不可用而无法处理输出,那么缓存将会被填满而影响容器写入日志,此时需要重启容器来刷新缓存,默认的缓存为64kb,可以通过改变/proc/sys/fs/pipe-max-size的值来更改内核缓存的大小。

3、live-restore选项与Docker Engine Swarm模式不兼容,当Docker Engine运行在Swarm模式下时,编排功能管理任务无法使容器根据服务规范运行。

标签