应用的健康检查



    健康检查针对的是App下的每一个Task,Marathon框架通过健康检查来实现应用的故障恢复,健康检查实现了对Task的生命周期的管理。

    Marathon将应用的可恢复性与监控检查结合在一起,在状态发现变化时,触发scale操作,保证原有的可用服务的数量,如图3-10所示是Marathon健康检查的状态机。

    Task有三种活动状态:健康,非健康和扩展中,状态变化根据逻辑运算进行判定,三个参数主要是:请求实例数i,健康实例数h,运行实例数r。当h=r !=i时,即健康实例数等于运行实例数但不等于请求实例数,运行状态将变为scaling,启动i-r个实例。

    Marathon 在健康检查中设置了相关选项,健康检查主要有三种方式:HTTP、TCP、COMMAND,主要选项有以下几种:其中 gracePeriodSeconds、intervalSeconds、MaxConsecutiveFailures、timeoutSeconds 适用于所有检查方式,portIndex、port适用于TCP与HTTP,path、ignoreHttp1xx只适用于HTTP。

    1)intervalSeconds:健康检查周期,默认为60s

    2)timeoutSeconds:健康检查等待的超时失败时间,默认为20s

    3)path:健康检查的请求访问路径,支持HTTP,默认为/

    4)gracePeriodSeconds:允许忽略的检查失败最长时间,默认为300s。

    5)MaxConsecutiveFailures:规定在多少次健康检查失败后为unhealthy服务,默认为3s

    6)protocol:健康检查采用的协议,对于COMMAND,欲使其有效,需要在Marathon启动时设置”--executor health_checks”选项,其表明未明确executor时的默认选择为HTTP

    7)portIndex:对服务进行健康检查时,访问的目的端口是host  port,在Marathon中是随机分配的,并且一个服务可以存在多个端口,因此使用portIndex定义健康检查的端口的索引值,默认为0。

    8)ignoreHttp1xx:忽略返回状态码100-199,默认为false,健康检查获取的返回码在此范围内,查询结果无效,状态保持不变。

    9)command:Marathon 的健康检查基于最初的端口资源规则,对于Docker容器,服务端口即监听端口地址都与此规则不同,例如Docker容器要求像虚机一样有主机的IP,并 且每个服务端口都是特定的,那么这样的情况就需要使用command方式,使用外部命令行实现。下述三个实例分别使用HTTP、TCP和COMMAND实 现健康检查。

应用之间存在依赖关系,依赖关系可以是应用级别的依赖,也可以是应用组级别的依赖,如果是应用组级别的依赖,那么组内的子分组、应用都会等待依赖服务对象可用后才会启动。依赖定义可以表述为相对路径或者绝对路径。

  

应用实例

1)Docker实例


{    
   "id": "simple-docker",    
   "container":
                       {      
                               "docker":
                                       {        
                                           "image": "busybox"      
                                           }    
                            },    
      "cmd": "echo hello from docker",    
      "cpus": 0.2,  
      "mem": 32.0,    
      "instances": 2
}

2) entry point的docker实例

{    
   "id": "simple-docker",    
    "container":
                            {      
                                    "docker":
                                             {        
                                                 "image": "mesosphere/inky"    
                                                  }    
                              },    
     "args": ["hello", "from", "docker"],    
     "cpus": 0.2,  
      "mem": 32.0,  
       "instances": 2
}


Docker 镜像“mesosphere/inky”的Dockerfile定义如下:

FROM busybox 

MAINTAINER support@mesosphere.io 

CMD ["inky"] 

ENTRYPOINT ["echo"]


   3)启动一个docker registry,并持久化数据到本地volume

{ 
    "id": "/docker/registry",  
    "instances": 1,
     "cpus": 0.5,
      "mem": 1024.0,  
      "disk": 128,
       "container":
               {    
                   "docker":
                           {      
                                   "type": "DOCKER",      
                                   "image": "registry:latest",    
                                    "network": "BRIDGE",    
                                    "parameters": [],    
                                    "portMappings":
                                                    [        
                                                        {          
                                                            "containerPort": 5000,          
                                                            "hostPort": 0,          
                                                            "protocol": "tcp",          
                                                            "servicePort": 5000        
                                                            }    
                                                       ]    
                                   },    
                          "volumes":
                                      [      
                                          {      
                                                "hostPath": "/local/path/to/store/packages",        
                                                "containerPath": "/storage",        "mode": "RW"      
                                             }  
                                       ]  
                    },  
        "env": {    "SETTINGS_FLAVOR": "local",    "STORAGE_PATH": "/storage"  },
        "ports": [ 0 ]
}


4) Marathon 0.8.2与Mesos 0.22.0支持在启动task前强制docker 先拉取镜像

{  
    "type": "DOCKER",  
    "docker":
        {    
            "image": "group/image",    
            "forcePullImage": true
          }
   }



结束语


    

    关于DCOS应用相关的文章后续会继续推出,本周即将推出的内容主要包括容器持久化方案、容器存储驱动等存储文章,敬请期待!感谢您对苏研DCOS的关注与支持,努力一直在路上!