2014年4月 的存档

cloudstack通过agent实现生产机远端控制功能

cloudstack_agent_gray

agent分别使用NioConnection派生的NioClient和NioServer管理出链接和入链接。

NioServer收到请求数据后通过配置的工厂(factory->agent.create)生产Task(ServerHandler),并执行,将Task数据交给AgentRequestHandler处理(最终是调用Agent.processRequest)。

若cmd非系统操作命令(cron,upgrade,shutdown等会有相应操作,不再往下走)则会调用实现ServerResource接口的相应资源操作插件处理。

而相应的资源插件则通过进一步调用libvirt、shell、python等等途径实现对生产机资源的管理。

哈哈,cloudstack代码涉嫌故意卖萌

cloudstack 4.2.1
AgentManagerImpl.java: 469

assert noDbTxn() : "I know, I know.  Why are we so strict as to not allow txn across an agent call?  ...  Why are we so cruel ... Why are we such a dictator .... Too bad... Sorry...but NO AGENT COMMANDS WRAPPED WITHIN DB TRANSACTIONS!";
Command[] cmds = commands.toCommands();
assert cmds.length > 0 : "Ask yourself this about a hundred times.  Why am I  sending zero length commands?";

虽然这样的报错不太恰当,不够简洁明确,但是我喜欢这样的态度和风格。
coding不应该是枯燥无趣的工作。

CloudStack Virtual Router功能分析

cloudstack_virtualRouter
  ①Virtual Router为一系统功能虚机,链接内网与外网.
  ②系统通过agent控制Virtual Router,如配置StaticNat时 routerMgr 会调用 agentMgr.send 把控制指令发送给Virtual Router 上的Agent 处理。
  ③Virtual Router的VM中包含DHCP、FW、NAT等多种网络服务。
  ④当vm添加网卡到network时,DHCP会在网桥的subnet上添加Host记录,实现内网IP、MAC、Name绑定。
  ⑤network分为基本共有共享和高级私有隔离。其中高级模式中每个用户都有一个独立的Virtual Router和subnet,而基本模式则为多用户共享。
  ⑥外网IP统一通过Virtual Router的Static Nat、LB、Port Forwarding关联到内网的一台或多台虚机上。