-
Notifications
You must be signed in to change notification settings - Fork 1
工作原理
downgoon edited this page Jan 11, 2018
·
1 revision
提醒: 请阅读下 [memcloud相关术语定义] (https://github.com/downgoon/memcloud/wiki/%E6%9C%AF%E8%AF%AD%E5%AE%9A%E4%B9%89#memcloud-%E6%9C%AF%E8%AF%AD%E5%AE%9A%E4%B9%89)
mem-client
& mem-dns
交互流程概述:
-
AppClient
(又名mem-client
)启动时,给mem-dns
发送Lookup请求(输入AppId
)。 -
mem-dns
返回 memcached group (术语是“mem-cluster
”)。并告诉mem-client
以什么频率来刷新mem-dns
的解析结果。 -
mem-client
给mem-cluster
内的所有mem-sharding
建立连接(注意:每个mem-sharding
包含两个相互备份的mem-instance
)。在选择其中一个mem-instance
作为Master(通常选择排序在前面的那个),并给每个mem-instance
发送心跳。 -
mem-client
如果发现Master的心跳失败,就会自动切换到Slave (mem-sharding
的另一个mem-instance
)。
提醒: mem-sharding
之间是双向复制的,测试请阅读 replication-testing
mem-agent
交互流程概述:
-
mem-agent
从远程软件仓库下载memcached相关软件包。目前存放在github.com上(也可以存在mem-dns上)。如果已经下载到本地了,就不会再下载。 -
mem-agent
下载完相关软件包后,就会自动执行安装过程。 - 安装完成后,需要手动执行
mem-agent start
操作,并指定相关参数(比如侦听端口),以便启动一个新的mem-instance
。需要提醒的是“一个mem-host
可以运行多个mem-instance
”,另外如果需要双向复制的,还需在另外一台机器启动它的mem-peer
。 - 启动后,
mem-agent
会给mem-dns
发一个注册请求,把刚启动的mem-instance
添加到mem-dns
中(mem-dns
会把它们加入mem-instance pool
)。
mem-alert
交互流程概述:
-
CaptureScheduler
启动时向meta-server
(又名mem-dns
)发送scan请求。 -
meta-server
返回mapping-list(每个item是从appid到cluster集群实例的映射关系)。 -
CaptureScheduler
迭代mapping-list,并给每个AppId生成一个CaptureWorker
,由CaptureWorker
负责周期性的巡检该AppId下所有mem-instance
的可用性和数据采集。因此创建CaptureWorker
就设定了巡检周期和告警规则AlertRule
。 -
CaptureScheduler
给AppId下的每个mem-instance
发送stat
命令(memcached的原生指令,用于采集memcached当前运行状态信息)。 -
memcloud
集群(隶属具体AppId的)返回运行统计信息。 -
CaptureWork
把运行统计信息入库到TSDB(具体实现可以是InfluxDB,OpenTSDB或者MongoDB循环库)。 -
CaptureWork
写TSDB,同时用AlertRule
告警规则检查。 - 告警规则,如果发现异常(比如系统挂了或者数据波动剧烈),把异常信息推送到
AlertNotify
平台。 -
AlertNotify
先把异常信息(告警事件)入库。 - 入库后,发送短信给用户。短信中携带了一个详情链接。
- 在详情页面可以点击ACK按钮,表示告警知道了,正在处理。
-
AlertNotify
收到用户ACK反馈,把告警事件状态修改成“已通知到,正在处理”。