HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. *Read more...*
A little more about DEA¶
DEAの位置¶
DEAの仕事¶
- 概要
- CCの要求を受け,APを操作する
- a) インストール/起動
- b) 終了/アンインストール
- c) URI更新
- APインスタンスの状態を監視し,
- a) CCの要求を受けて報告する
- b) HMに報告する
- c) RtにURIを登録/登録抹消する
- d) リソース消費状況に応じてインスタンスを終了する
入口¶
dea/lib/dea/agent.rb#L256-265
受動的処理
NATS.subscribe('dea.status') { |msg, reply| process_dea_status(msg, reply) } # <= (使われていない)
NATS.subscribe('droplet.status') { |msg, reply| process_droplet_status(msg, reply) }# <= (使われていない)
NATS.subscribe('dea.discover') { |msg, reply| process_dea_discover(msg, reply) } # <= インスタンスのインストール先として立候補する
NATS.subscribe('dea.find.droplet') { |msg, reply| process_dea_find_droplet(msg, reply) } # <= インスタンスの情報をCCに報告
NATS.subscribe('dea.update') { |msg| process_dea_update(msg) } # <= インスタンスのURIの更新
NATS.subscribe('dea.stop') { |msg| process_dea_stop(msg) } # <= インスタンスの終了
NATS.subscribe("dea.#{uuid}.start") { |msg| process_dea_start(msg) } # <= インスタンスのインストール&起動
NATS.subscribe('router.start') { |msg| process_router_start(msg) } # <= RouterにURIを登録する
NATS.subscribe('healthmanager.start') { |msg| process_healthmanager_start(msg) } # <= DEA/インスタンスの状態をHMに報告
NATS.subscribe('dea.locate') { |msg| process_dea_locate(msg) } # <= (使われていない?)
dea/lib/dea/agent.rb#L271-276
能動的処理
EM.add_periodic_timer(@heartbeat_interval) { send_heartbeat } # <= Health Manager にdropletの起動状態を送信する
EM.add_periodic_timer(@advertise_interval) { send_advertise } # <= 自分自身の状態を広報する
EM.add_timer(MONITOR_INTERVAL) { monitor_apps } <= dropletの状態をチェックする(psコマンド,duコマンド)
EM.add_periodic_timer(CRASHES_REAPER_INTERVAL) { crashes_reaper } # <= クラッシュして一定時間たったdropletを削除する
EM.add_periodic_timer(VARZ_UPDATE_INTERVAL) { snapshot_varz } # <= varzを更新する
EM.add_periodic_timer(DROPLET_FS_PERCENT_USED_UPDATE_INTERVAL) { update_droplet_fs_usage } # <= ファイルシステムの状態を把握する(dfコマンド)
CCの要求を受け,APを操作する¶
インストール/起動¶
- process_dea_discover
起動要求に立候補する - process_dea_start
インスタンスをインストール&起動する(詳細(一部)は #754 を参照)
終了/アンインストール¶
URI更新¶
APインスタンスの状態を監視し,¶
EM.add_timer(MONITOR_INTERVAL) { monitor_apps } EM.add_periodic_timer(CRASHES_REAPER_INTERVAL) { crashes_reaper } EM.add_periodic_timer(VARZ_UPDATE_INTERVAL) { snapshot_varz } EM.add_periodic_timer(DROPLET_FS_PERCENT_USED_UPDATE_INTERVAL) { update_droplet_fs_usage }
- monitor_apps
メモリ,CPU,ディスクの使用量を測定&合算する- monitor_apps_helper
- (疑問) send_data って?
- crashes_reaper
CRASH状態で一定時間以上経ったインスタンスを削除する - snapshot_varz
Component@varzを定期的に更新する - update_droplet_fs_usage
dropletを格納しているファイルシステムの容量状況をチェックする
CCの要求を受けて報告する¶
- process_dea_find_droplet
条件(dea/lib/dea/agent.rb#L430-436 )droplet = @droplets[droplet_id] if droplet droplet.each_value do |instance| version_matched = version.nil? || instance[:version] == version instance_matched = instance_ids.nil? || instance_ids.include?(instance[:instance_id]) index_matched = indices.nil? || indices.include?(instance[:instance_index]) state_matched = states.nil? || states.include?(instance[:state].to_s)
に合うインスタンスについて,要求元(=CC)に情報を返す - process_dea_locate
2012-02-07に追加された新しいメソッド
要求に応じて残メモリと対応frameworkの一覧を返す
https://github.com/cloudfoundry/vcap/commit/e6e5c4eab13d3429ce1bbf125983e00f7d2e6307
HMに報告する¶
- send_heartbeat
(HMに)ハートビートを送信する - process_healthmanager_start
HM起動時にsend_heartbeatを呼び出す
RouterにURIを登録/登録抹消する¶
- register_instance_with_router
RouterにURIを登録
呼ばれる契機 - unregister_instance_from_router
RouterからURIを登録抹消
呼ばれる契機 - process_router_start
(再掲)Rt起動時にURIを登録
リソース消費状況に応じてインスタンスを終了する¶
Interfaces¶
→ http://apidocs.cloudfoundry.com/
In(→Out)¶
TBF
In¶
TBF
Out¶
TBF
(参考)初期値一覧¶
- 設定ファイル
TBF
- コンストラクター
TBF