CloudFoundry hm9000原理及排错
- hm9000跟hm_next(healthmanager)功能类似。在cloudfoundry集群中担任至关重要的角色
- 尝试启动缺失情况下的实例,停止异常实例
- 获知和报告应用执行的实际实例个数
- 从DEA中迁移应用到其它DEA - hm9000组件工作须要获取的两种状态
- desired state: 期望的状态,哪些apps应该是running状态,哪些instances应该是running状态。这些信息是通过http协议从CC中发送过来
- actual state: 实际状态,哪些instances实际上是running状态。这些信息通过via Nats和DEAs中接收,每一个DEA节点会周期性的发送heartbeat心跳来确认running应用 - hm9000存储desired state和actual state在etcd中,有了这两种状态。hm9000能够决定是否启动或者停止一个实例.这个信息通过Nats发送到CC。最后CC通过Nats发送消息到DEA决定是否启动或者停止一个实例
- 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” - 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 - 排错
- 确保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虚拟机中执行这个命令。能够更直观的看日志 - 我遇到的hm9000问题是应用正常启动,可是cf apps显示state和instances不对
- 按上述步骤排查之后发现时fetcher问题也就是和cc通信问题,问题所在市ssl证书没能得到验证,cc主动拒绝链接
解决方法在bosh 部署文档中改动skip_cert_verify: true此选项设置为true的时候是告诉cc忽略不对的ssl证书 - 至此问题解决。OK~!
CloudFoundry hm9000原理及排错的更多相关文章
- 【工具学习】——教你读懂Maven的配置文件
[前言] 最近在项目中用到了maven工具,相信很多第一次接触maven的人都有这样的困惑,maven的文件很简单,就像下图中的结构一样,但是它的功能十分强大,那是怎么做到的呢?配置文件!配置文件里是 ...
- 编译lineageos3
待更 上次尝试将小米开源的内核Xiaomi_Kernel_OpenSource升级到最新版本,花了几天时间解决lineageos编译报错 最后总算成功编译出镜像文件了 but twrp刷入镜像在启动界 ...
- iOS hash
一.iOS hash 下图列出 Hash 在 iOS 中的应用分析整理 知乎上的一句话: 算法.数据结构.通信协议.文件系统.驱动等,虽然自己不写那些东西,但是了解其原理对于排错.优化自己的代码有很大 ...
- 蓝鲸-监控 排错思路 - 原理push - bkdata报错 - saas的日志
1.现象和报错 .[10.253.124.21] paas_agent() paas_agent FATAL Exited too quickly (process log may have deta ...
- ETCD相关介绍--整体概念及原理方面
etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点. 简单:基于HTTP+JSON的API让你用curl就可以轻松使用. 安全:可选SSL ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- 二.TimesTen原理及应用场景
声明:本文章转自麻袋爸爸 一,TimesTen应用场景 在谈论TimesTen内存数据库应用场景之前,我们先来介绍一下什么是内存数据库,及其工作原理吧.内存数据库,顾名思义就是将数据存放在内存中,并通 ...
- ssh连接失败,排错经验
一.场景描述 ssh连接服务器,发现连接失败,但是对应服务器的ip能够ping通. 场景: [root@yl-web ~]# ssh root@10.1.101.35 ssh_exchange_ide ...
- servlet生命周期与工作原理
→ Jsp的本质是Servlet,Servlet是服务器端的小程序,运行在服务器,用于处理及响应客户端的请求. Servlet和JSP的区别: servlet是特殊的Java类,必须继承HttpS ...
随机推荐
- Codeforces 472D
看官方题解提供的是最小生成树,怎么也想不明确.you can guess and prove it! 看了好几个人的代码.感觉实现思路全都不一样,不得不佩服cf题目想法的多样性 以下说说我自己的理解, ...
- jquery源码01---(2880 , 3042) Callbacks : 回调对象 : 对函数的统一管理
// optionsCache : { 'once memory' : { once : true , memory : true } } var optionsCache = {}; // once ...
- 如何让hudson的两个job共用一个svn工作目录
作者:朱金灿 来源:http://blog.csdn.net/clever101 现在我的需求是这样的:一个软件需要编译完全版本和基础版本,完全版本的基础功能较多,基础版本只包含了基础功能.有时只需要 ...
- the night the room
http://bogifabian.com/?page_id=2529 I am trying to creat dreamful atmospheres, paint walls and floor ...
- go语言的一个gui 开源 项目 https://github.com/andlabs/ui
go语言的一个gui 开源 项目 https://github.com/andlabs/ui 1 安装 mingw-w64 链接地址: http://mingw-w64.sourceforge. ...
- node搭建服务器
创建简单的服务器,可以简单连接 var http = require("http"); var server = http.createServer(); server.on(&q ...
- 小米开源文件管理器MiCodeFileExplorer-源码研究(4)-文件操作工具类FileOperationHelper
文件操作是非常通用的,注释都写在源代码中了,不多说~需要特别说明的是,任务的异步执行和IOperationProgressListener.拷贝和删除等操作,是比较费时的,采用了异步执行的方式~ An ...
- POJ——T 1961 Period
http://poj.org/problem?id=1961 Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 18542 ...
- [Angular & Unit Testing] Automatic change detection
When you testing Component rendering, you often needs to call: fixture.detectChanges(); For example: ...
- 快速排序的期望复杂度O(nlogn)证明。
快速排序的最优时间复杂度是 \(O(nlogn)\),最差时间复杂度是 \(O(n^2)\),期望时间复杂度是 \(O(nlogn)\). 这里我们证明一下快排的期望时间复杂度. 设 \(T(n)\) ...