1. hm9000跟hm_next(healthmanager)功能类似。在cloudfoundry集群中担任至关重要的角色

    - 尝试启动缺失情况下的实例,停止异常实例

    - 获知和报告应用执行的实际实例个数

    - 从DEA中迁移应用到其它DEA
  2. hm9000组件工作须要获取的两种状态

    - desired state: 期望的状态,哪些apps应该是running状态,哪些instances应该是running状态。这些信息是通过http协议从CC中发送过来

    - actual state: 实际状态,哪些instances实际上是running状态。这些信息通过via Nats和DEAs中接收,每一个DEA节点会周期性的发送heartbeat心跳来确认running应用
  3. hm9000存储desired state和actual state在etcd中,有了这两种状态。hm9000能够决定是否启动或者停止一个实例.这个信息通过Nats发送到CC。最后CC通过Nats发送消息到DEA决定是否启动或者停止一个实例
  4. hm9000是至关重要的组件,在hm9000正常工作前要确保hm9000所维护的环境都是正常状态,因此我们介绍下“freshness”的概念

    - 当hm9000能够与NATS通信而且能够周期性的从DEA节点中接收心跳而且能够正确的把actual state存储在etcd中。那么这个actual state是我们期望的“fresh”状态。假设它们中不论什么一个环节出现异常(NATS/no DEA heartbeats/etcd writes fail),这个actual state都将标记为“fressness”或者“not fresh”,这时候hm9000将停止不论什么会话(交互)动作

    - 当hm9000从CC中下载desired state成功(without timeout)而且能够正确存储在etcd中时,那么这个disired state是我们期望的"fresh"状态,同actual state一样不论什么一个环节出现异常都将导致hm9000工作异常。即上面所述的“fressness”
  5. hm9000中内置了5个组件,每一个组件都负责不同的作用于功能。而且每一个组件都有自己的日志记录

    - listener: 负责监听DEA heartbeats(心跳)通过NATS,来确定actual state,假设actual state状态是not fresh,那么能够查看listener的log来确定为什么hm9000不能维护   actual status

    - desired_state_fetcher: 周期性的从cc获得desired state,相同当disired_state状态时not fresh时,能够查看fetcher的log来确定问题所在

    - analyzer: 分析actual state和disired state来make decisions(做决定)

    - sender: 运行analyzer所做出的决定而且向CC发送通知

    - api_server: 对cc的app state(应用状态包含实例个数)request做出response
  6. 排错

    - 确保CC配置能正确訪问hm9000:CC的配置中有一项hm9000_noop项,假设设置为true那么cc将仅仅listen health_manager_next,而且仅仅对health_manager_next请求实例执行个数,假设设置成false那么将被hm9000代替

    - 确保etcd不是错误的状态,当etcd是错误状态的时候,那么state不能被写入etcd,会引起hm9000 freness,那么bosh ssh进入每一个etcd节点执行monit stop all然后删除/var/vcap/store文件夹再执行monit start all

    - /var/vcap/packages/hm9000/hm9000 dump --config=/var/vcap/jobs/hm9000/config/hm9000.json在hm9000虚拟机中执行这个命令。能够更直观的看日志
  7. 我遇到的hm9000问题是应用正常启动,可是cf apps显示state和instances不对
  8. 按上述步骤排查之后发现时fetcher问题也就是和cc通信问题,问题所在市ssl证书没能得到验证,cc主动拒绝链接

    解决方法在bosh 部署文档中改动skip_cert_verify: true此选项设置为true的时候是告诉cc忽略不对的ssl证书
  9. 至此问题解决。OK~!

CloudFoundry hm9000原理及排错的更多相关文章

  1. 【工具学习】——教你读懂Maven的配置文件

    [前言] 最近在项目中用到了maven工具,相信很多第一次接触maven的人都有这样的困惑,maven的文件很简单,就像下图中的结构一样,但是它的功能十分强大,那是怎么做到的呢?配置文件!配置文件里是 ...

  2. 编译lineageos3

    待更 上次尝试将小米开源的内核Xiaomi_Kernel_OpenSource升级到最新版本,花了几天时间解决lineageos编译报错 最后总算成功编译出镜像文件了 but twrp刷入镜像在启动界 ...

  3. iOS hash

    一.iOS hash 下图列出 Hash 在 iOS 中的应用分析整理 知乎上的一句话: 算法.数据结构.通信协议.文件系统.驱动等,虽然自己不写那些东西,但是了解其原理对于排错.优化自己的代码有很大 ...

  4. 蓝鲸-监控 排错思路 - 原理push - bkdata报错 - saas的日志

    1.现象和报错 .[10.253.124.21] paas_agent() paas_agent FATAL Exited too quickly (process log may have deta ...

  5. ETCD相关介绍--整体概念及原理方面

    etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点. 简单:基于HTTP+JSON的API让你用curl就可以轻松使用. 安全:可选SSL ...

  6. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  7. 二.TimesTen原理及应用场景

    声明:本文章转自麻袋爸爸 一,TimesTen应用场景 在谈论TimesTen内存数据库应用场景之前,我们先来介绍一下什么是内存数据库,及其工作原理吧.内存数据库,顾名思义就是将数据存放在内存中,并通 ...

  8. ssh连接失败,排错经验

    一.场景描述 ssh连接服务器,发现连接失败,但是对应服务器的ip能够ping通. 场景: [root@yl-web ~]# ssh root@10.1.101.35 ssh_exchange_ide ...

  9. servlet生命周期与工作原理

    →   Jsp的本质是Servlet,Servlet是服务器端的小程序,运行在服务器,用于处理及响应客户端的请求. Servlet和JSP的区别: servlet是特殊的Java类,必须继承HttpS ...

随机推荐

  1. Eclipse上开发IBM Bluemix应用程序

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要解说了怎样使用安装EclipseIBM Bluemix插件.并在Eclipse ...

  2. 绕过open_basedir读文件脚本

    绕过open_basedir读文件脚本 2016年11月13日 01:28:21 阅读数:1221 参加了一场2016年的sycsec感觉又学到不少东西 废话不多说,首先啥是open_basedir? ...

  3. Android ijkplayer在windows下编译并导入Android Studio

     我是看着里面的步骤来做的,由于我自己对Linux环境和命令不熟悉,导致我对Cygwin的知识为零,在编译ijkplayer的时候走了一点弯路,需要的同学先去看一下上面的这篇文章,我这边是对上面文章做 ...

  4. 上市公司恋上互联网金融 目前已有14家涌入P2P

    时至今日,互联网金融已蔚然成风,诸多上市公司正前赴后继介入到P2P业务中,据记者初步统计,目前至少有14家A股上市公司参与了P2P业务.央行6月份的报告显示,中国当前有600多家P2P公司,交易额达到 ...

  5. ocdefirst安装更新数据库

    数据迁移(Migrations) 启用数据迁移在控制台中输入如下命令:Enable-Migrations 这时会在项目目录中增加一个Migrations文件夹,里面放置了两个文件:EF会通过C#代码的 ...

  6. start_kernel----lcokdep_init

    void lockdep_init(void) { int i; /* * Some architectures have their own start_kernel() * code which ...

  7. 图片裁剪的js有哪些(整理)

    图片裁剪的js有哪些(整理) 一.总结 一句话总结:如果用了amaze框架就去amaze框架的插件库里面找图片裁剪插件,如果没用,jcrop和cropper都不错. 1.amazeui的插件库中有很多 ...

  8. php数组时按值传递还是按地址传递

    php数组时按值传递还是按地址传递 一.总结 1.数组都是按值:php普通变量和数组的赋值(=)是按值传递,对象的赋值(=)是按址传递 2.对象和按值和按址:对象的clone(用clone关键字)是按 ...

  9. javascript创建对象的方法--工厂模式(非常好理解)

    javascript创建对象的方法--工厂模式(非常好理解) 一.简介 创建对象的方法 本质上都是把"属性"和"方法",封装成一个对象 创建对象的基本模式 普通 ...

  10. select发生改变使用js提交form表单(get传值)

    form表单如下: <form id="my_form" method="get" action=""> <input t ...