分类存档: 云和虚拟化

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

agent分别使用NioConnection派生的NioClient和NioServer管理出链接和入链接。 NioServer收到请求数据后通过配置的工厂(factory->agent.create)生产Task(ServerHandler),并执行,将Task数据交给AgentRequestHandler处理(最终是调用Agent.processRequest)。 若cmd非系统操作命令(cron,upgrade,shutdown等会有相应操作,不再往下走)则会调用实现ServerResource接口的相应资源操作插件处理。 而相应的资源插件则通过进一步调用libvirt、shell …

继续阅读 »

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

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

CloudStack Virtual Router功能分析

  ①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 …

继续阅读 »

OpenVZ备份

一、fsfreeze fsfreeze – suspend access to a filesystem (Linux Ext3/4, ReiserFS, JFS, XFS) fsfreeze -f mountpoint fsfreeze -u mountpoint 挂起被冻结的分区上的写操作,所有写动作被阻塞,直至分区被解冻 二、vzdump   1.stop   备份时停止VM,离线时间较长。      2.suspend   ①对于OpenVZ,这一模式使用rsync拷贝VM到一个临时位置(–tmpdir选项),然后挂起VM做第二次rsync同步改变的文件,最后V …

继续阅读 »

为什么8核宿主机可以开出8核以上的虚拟机?

qemu代码内用Coroutine协程将vm内的一个核模拟为host上的一个线程, 以达到vm的cpu核与host的cpu核的相关性绑定。 也就是vm内的os把host上一个线程(即一个vm cpu核)获得的执行时间再分成若干时间片,然后分给vm内的线程按os调度策略执行。 一个qemu进程当然可以有多于宿主机cpu核数的线程,所以vm内的cpu核数也当然可以比host多,但是这时vm的某些核并不能并行执行,也就没什么意义了。

通过xenstore探索亚马逊EC2

已知xen的各dom之间通过xenstore共享配置信息。 so,先装上xenstore-utils 加载xenfs,并挂载到/proc/xen路径下。 然后就可以读取dom配置信息了。 由于权限问题。这里只能读自己的。

lvm快照有点不一样

lvm的快照与其他普通文件镜像的快照有些不一样。 lvm的快照也是通过COW(copy on write)保存逻辑卷的瞬时状态。 但是实际上lvm的快照是创建一个新的逻辑卷。需要指定size。 快照创建之后源卷和快照卷都是可写的,源卷改变时改变前的内容会通过COW记录到快照卷,快照卷的改变内容也会记录到快照卷这size大的空间内。 需要特别注意的是,size空间一定要给足或及时扩充,不然一旦快照卷空间用尽,即Allocated to snapshot达到100%,快照卷就会立即变为不可用,若已挂载则会自动卸载。这时再去mount系统可就不认喽。

guestfish工作原理

guestfish是在宿主机里编辑虚拟机镜像的工具,guestfish命令只是对libguestfs接口的封装。 guestfish打开和操作vm镜像的过程如下: 首先libguestfs调用febootstrap取宿主机的资源准备vm环境,包括 ①在临时目录中建立到取宿主机内核的链接。 ②取基本内核模块、init、modules列表打包为启动内存盘initrd ③建立稀疏文件准备制作vm启动磁盘镜像 ④取宿主机的基本命令程序、配置文件和libguestfs的集成命令等等在vm镜像中构建rootfs 然后启动kvm,命令如下: