eucalyptus源代码初步分析.docx
《eucalyptus源代码初步分析.docx》由会员分享,可在线阅读,更多相关《eucalyptus源代码初步分析.docx(18页珍藏版)》请在冰点文库上搜索。
eucalyptus源代码初步分析
Eucalyptus源代码初步分析
上海大学云计算实验室
目录
一、Clc3
二、Cluster3
1.CCclient.c3
2.handlers.h/handlers.c3
3.cc-client-marshal.h3
4.cc-client-marshal-adb.c3
5.server-marshal.h/server-marshal.c3
三、Node4
1.NCclient.c4
2.handlers.h/handlers.c4
3.handlers_kvm.c4
4.handlers_xen.c4
5.handlers_default.c4
6.client-marshal.h/client-marshal-local.c/client-marshal-adb.c4
7.server-marshal.h/server-marshal.c4
8.stress_NCclient.sh4
9.test_nc.c/test.c4
四、Storage7
1.Wclient.c7
2.walrus.h/walrus.c7
3.storage.h/storage.c7
4.Test.c7
五、Net7
1.dhcp.h/dhcp.c7
2.vnetwork.h/vnetwork.c7
3.Test.c7
六、Tools7
1.eucalyptus-cloud.in7
2.eucalyptus-cc.in7
3.eucalyptus-nc.in8
4.httpd.conf8
5.eucalyptus.conf8
6.vtunall.conf.template8
7.add_key.pl8
8.gen_libvirt_xml8
9.gen_kvm_libvirt_xml8
10.detach.pl8
11.partition2disk8
12.get_xen_info9
13.get_sys_info9
14.euca_ipt9
15.euca_upgrade9
16.populate_arp.pl9
17.euca_conf.in9
18.euca_plete11
19.euca_sync_key11
20.connect_iscsitarget.pl11
21.disconnect_iscsitarget.pl11
22.get_iscsitarget.pl11
七、util11
1.data.h/data.c11
2.euca_auth.h/euca_auth.c11
3.ipc.h/ipc.c11
4.misc.h/misc.c11
5.euca_mountwrap.c12
6.euca_rootwrap.c12
7.eucalyptus-config.h.in12
8.eucalyptus.h12
9.pwcb.c12
10.test.c12
八、gatherlog12
1.GLclient.c12
2.handlers.h/handlers.c12
3.gl-client-marshal.h/gl-client-marshal-adb.c12
4.server-marshal.h/server-marshal.c12
九、wsdl13
1、Clc
该部分主要是些前段界面的代码,用java编写,没有研究
二、Cluster
1.CCclient.c
2.handlers.h/handlers.c
3.cc-client-marshal.h
4.cc-client-marshal-adb.c
5.server-marshal.h/server-marshal.c
文件的功能总结:
1、生成动态库libEucalyptusCC.so:
功能:
首先是生成CC控制节点的动态库,libEucalyptusCC.so的功能是对节点请求运行实例,查询实例情况,查询资源状况,获取控制台输出,重启实例,终止实例,启动网络,终止网络,分配地址,取消地址分配。
查询公共地址,查询网络状况,配置网络,请求连接逻辑卷,取消逻辑卷作出回应。
具体说明:
CC、NC等各个部件之间是通过SOAP协议来进行通信的,而wsdl文档中封装了这种消息机制,wsdl文档是基于XML进行表示的,我们后面有专门说明,通过wsdl2c.sh脚本可以将wsdl文件夹下面的wsdl文档结构转化成c语言文件,而且每个文件包含的是wsdl提供的一个服务,服务分为了服务端和客户端,其中包含skel的是服务端文档,而包含stub指的的客户端的文档。
在cluster文件夹下面会自动新建generated文件夹,将wsdl生成的c语言文件放于generated文件夹里面。
libEucalyptusCC.so主要是由server-marshal.o,handlers.o,generated/*.o等文件生成的,生成命令如下:
gcc-sharedgenerated/*.oserver-marshal.ohandlers.o$(SCLIBS)$(NCLIBS)$(VNLIBS)$(WSSECLIBS)$(CC_LIBS)-olibEucalyptusCC.so(个别变量源代码中说明)
2、生成CC节点的客户端CCclient_full
功能:
这个程序的功能是提交一些请求,用来管理资源,镜像文件等,主要有这些功能:
请求运行实例,查询实例情况,获取终端输出,重启实例,终止实例,查询资源状况,启动网络,查询网络情况,配置网络,终止网络运行,分配地址,取消地址分配,连接逻辑卷,断开逻辑卷,查询公共地址,终止所以实例。
说明:
前面我们说到wsdl生成的服务有服务端和客户端,这里生成的CCclient_full,我们用到的是客户端。
CCclient_full主要是由generated/adb_*.o,generated/axis2_stub_*.o,../util/misc.o,../util/euca_auth.o,cc-client-marshal-adb.c,CCclient.c这些文件组成,生成CCclient_full的命令如下:
gcc-o$(CLIENT)_full$(CFLAGS)$(INCLUDES)$(CC_LIBS)generated/adb_*.ogenerated/axis2_stub_*.o../util/misc.o../util/euca_auth.o$(CLIENT).ccc-client-marshal-adb.c-DMODE=1
3、生成CC节点的客户端euca_killall
功能:
这个程序的功能就一个,那就是,终止本机上所有实例的运行
说明:
前面我们说到wsdl生成的服务有服务端和客户端,这里生成的CCclient_full,我们用到的是客户端。
CCclient_full主要是由generated/adb_*.o,generated/axis2_stub_*.o,../util/misc.o,../util/euca_auth.o,cc-client-marshal-adb.c,CCclient.c这些文件组成,生成CCclient_full的命令如下:
gcc-o$(CLIENT)_full$(CFLAGS)$(INCLUDES)$(CC_LIBS)generated/adb_*.ogenerated/axis2_stub_*.o../util/misc.o../util/euca_auth.o$(CLIENT).ccc-client-marshal-adb.c-DMODE=0
4、euca_killall与CCclient_full
其实,这两个程序的内容是完全一样的,他们编译时所用的文件也都一样,区别在于编译他们的时候,-DMODE选项的区别,当DMODE选项为0,程序中就执行euca_killall中说的功能,当DMODE选项为1,程序就执行CCclient_full中说的功能。
三、Node
1.NCclient.c
2.handlers.h/handlers.c
3.handlers_kvm.c
4.handlers_xen.c
5.handlers_default.c
6.client-marshal.h/client-marshal-local.c/client-marshal-adb.c
7.server-marshal.h/server-marshal.c
8.stress_NCclient.sh
9.test_nc.c/test.c
文件的功能总结:
1、生成动态库libEucalyptusNC.so:
功能:
首先是生成NC节点的动态库,libEucalyptusNC.so的功能是对节点请求运行实例,查询实例情况,查询资源状况,获取控制台输出,重启实例,终止实例,启动网络,停止电源,请求连接逻辑卷,取消逻辑卷作出回应。
此外,动态库还封装了对虚拟机进行控制的函数,如:
关闭虚拟机电源,查看虚拟机实例,运行实例,终止实例,重启实例,获取输出终端,启动网络连接,连接逻辑卷,断开逻辑卷。
而且,还有一些为上层提供帮助的底层代码函数。
具体说明:
CC、NC等各个部件之间是通过SOAP协议来进行通信的,而wsdl文档中封装了这种消息机制,wsdl文档是基于XML进行表示的,我们后面有专门说明,通过wsdl2c.sh脚本可以将wsdl文件夹下面的eucalyptus_nc.wsdl文档转化成c语言文件,而且每个文件包含的是wsdl提供的一个服务,服务分为了服务端和客户端,其中包含skel的是服务端文档,而包含stub指的的客户端的文档。
在node文件夹下面会自动新建generated文件夹,将wsdl生成的c语言文件放于generated文件夹里面。
libEucalyptusNC.so主要是由server-marshal.o,handlers.o,generated/adb_*.ogenerated/axis2*_skel_*.o等文件生成的,生成命令如下:
gcc-olibEucalyptusNC.so-shared$(NC_LIBS)generated/adb_*.ogenerated/axis2*_skel_*.oserver-marshal.ohandlers.o$(NC_HANDLERS)../storage/*.o../net/*.o../util/*.o(?
?
?
?
?
?
?
?
?
?
)
2、生成NC节点的客户端NCclient
功能:
前面提到各功能部件之间的通信是通过SOAP进行的,而这些都封装在了wsdl里面,NC节点下,生成了两个客户端程序,一个可以跟远程各部件进行通信,一个则是用在本地进行虚拟机,资源的处理。
这里的程序NCclient是可以用来进行跟远程各部件进行通信的,它的本质功能如:
运行实例,获取输出控制台,终止实例,重启实例,查看实例,查看资源,启动网络,启动虚拟机电源,连接逻辑卷,断开逻辑卷,特别是可以从远程部件拷贝实例到本机,如下列出调用该程序的一些命令
NCclient[command][options]
commands:
requiredoptions:
runInstance
[-m-k]
terminateInstance
[-i]
describeInstances
无
describeResource
无
attachVolume
[-i-V-R-L]
detachVolume
[-i-V-R-L]
一些选项说明:
toptions
-d
printdebugoutput
-h
thishelpinformation
-w[host:
port]
Walrusendpoint
-n[host:
port]
NCendpoint
-i[str]
instanceID
-e[str]
reservationID
-m[id:
path]
idandmanifestpathofdiskimage
-k[id:
path]
idandmanifestpathofkernelimage
-r[id:
path]
idandmanifestpathoframdiskimage
-a[address]
MACaddressforinstancetouse
-c[number]
numberofinstancestostart
-V[name]
nameofthevolume(forreference)
-R[device]
remote/sourcedevice(e.g./dev/etherd/e0.0)
-L[device]
local/targetdevice(e.g.hda)
-F
forceVolumeDetach
-U[string]
userdatatostorewithinstance
-I[string]
launchindextostorewithinstance
-G[str:
str:
]
groupnamestostorewithinstance
说明:
前面我们说到wsdl生成的服务有服务端和客户端,这里生成的NCclient,我们用到的是客户端。
NCclient主要是由client-marshal-adb.o,generated/adb_*.o,generated/axis2_stub_*.o,../util/*.o,../storage/*.o,../net/*.o,NCclient.c这些文件组成,生成NCclient的命令如下:
gcc-o$(CLIENT)$(CFLAGS)$(INCLUDES)$(NC_LIBS)generated/adb_*.ogenerated/axis2_stub_*.oclient-marshal-adb.o../util/*.o../storage/*.o../net/*.oNCclient.c(一些变量请看源代码)
3、生成NC节点的客户端NCclient_local
功能:
前面说了,上一个程序NCclient可以用来与远程部件进行通信的,而这里生成的生成则不用与远程部件进行通信。
本程序主要用来对虚拟机进行初始化,运行实例,终止实例,重启实例,查看实例,查看资源情况,关闭电源,启动网络,连接逻辑卷,断开逻辑卷。
这个程序少了远程操作函数。
说明:
由于本程序不进行远程通信,所以生成程序时,没有用到wsdl生成的文件,主要用到的文件如下:
client-marshal-local.o,../util/*.o,../storage/*.o,../net/*.ohandlers.o,handlers_xen.o,handlers_kvm.o,handlers_default.o,NCclient.c,生成NCclient_local的命令如下:
gcc-oNCclient_local$(INCLUDES)$(CFLAGS)client-marshal-local.o../util/*.o../storage/*.o../net/*.ohandlers.o$(NC_HANDLERS)$(CLIENT).c$(NC_LIBS)(一些变量的定义,请看源代码)
四、Storage
1.Wclient.c
说明:
这是walrus管理入口文件,主要调用walrus.h/walrus.c的功能函数
2.walrus.h/walrus.c
说明:
这两个文件实现加密镜像文件的管理和用户数据对象的管理
3.storage.h/storage.c
说明:
实现sc的功能
4.Test.c
说明:
测试storage的功能
五、Net
1.dhcp.h/dhcp.c
功能:
实现dhcp功能配置
2.vnetwork.h/vnetwork.c
功能:
网络模式的配置、互联与管理文件
3.Test.c
功能:
对dhcp.h和dhcp.c的功能进行测试
六、Tools
Tools文件夹里面的文件主要是些管理eucalyptus和与eucalyptus有关的文件
1.eucalyptus-cloud.in
说明:
该文件经过automake执行后生成eucalyptus-cloud文件,安装在$(EUCALYPTUS)/etc/init.d目录下面,
功能:
启动或者停止eucalyptus的CLC服务
$EUCALYPTUS/etc/init.d/eucalyptus-cloud[start|stop|restart|status]
2.eucalyptus-cc.in
说明:
该文件经过automake执行后生成eucalyptus-cc文件,安装在$(EUCALYPTUS)/etc/init.d目录下面,
功能:
启动或者停止eucalyptus的clustercontroller(CC)服务
$EUCALYPTUS/etc/init.d/eucalyptus-cc[start|cleanstart|stop|cleanstop|restart|cleanrestart|config|status]
3.eucalyptus-nc.in
说明:
该文件经过automake执行后生成eucalyptus-nc文件,安装在$(EUCALYPTUS)/etc/init.d目录下面,
功能:
启动或者停止eucalyptus的nodecontroller(NC)服务
$EUCALYPTUS/etc/init.d/eucalyptus-nc[start|stop|restart|config|status]
4.httpd.conf
功能:
该文件安装在$(EUCALYPTUS)/etc/eucalyptus目录下,这是apache用于eucalyptus的配置文件,用它来加载axis2c模块,以便与WebServices联系
5.eucalyptus.conf
功能:
该文件安装在$(EUCALYPTUS)/etc/eucalyptus目录下,这个是Eucalyptus的配置文件
6.vtunall.conf.template
功能:
...
7.add_key.pl
说明:
该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下,这是一个perl文件
8.gen_libvirt_xml
说明:
这是一个perl文件,该文件适用于xen,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
功能:
该文件将为libvirt的域名规范生成一个XML模板,它是针对NC节点上的一个实例
9.gen_kvm_libvirt_xml
说明:
这是一个perl文件,该文件与gen_libvirt_xml文件功能一样,只是该文件适用于kvm,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
功能:
该文件将为libvirt的域名规范生成一个XML模板,它是针对NC节点上的一个实例
10.detach.pl
说明:
这是一个perl文件,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
11.partition2disk
说明:
这是一个perl文件,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
功能:
Eucalyptus请求该文件来将分区转化成硬盘。
如果有一个分区,它将用包含该分区的硬盘来重写,另外,也可以用交换区和暂时分区来重写它。
如果硬盘只有一个分区,该文件将扩展硬盘以容纳交换分区和暂时分区。
如果一个硬盘不止有一个分区,这个功能就不起作用。
12.get_xen_info
说明:
这是一个perl文件,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus/get_xen_info目录下
功能:
用来获取xen的相关信息
13.get_sys_info
说明:
这是一个perl文件,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus/get_sys_info目录下
功能:
用来获取系统的相关信息
14.euca_ipt
说明:
这是一个perl文件,文件调用iptables命令,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
功能:
用来管理与eucalyptus有关的路由信息
15.euca_upgrade
说明:
这是一个shell脚本,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
功能:
主要用来对eucalyptus进行升级
16.populate_arp.pl
说明:
这是一个perl脚本,该文件安装在$(EUCALYPTUS)/user/share/eucalyptus目录下
17.euca_conf.in
说明:
这是一个shell脚本,该文件通过automake生成euca_conf文件,将euca_conf安装在$(EUCALYPTUS)/usr/sbin目录下
功能:
该文件主要是用于配置Eucalyptus部件
例子:
$EUCALYPTUS/usr/sbin/euca_conf-d$EUCALYPTUS--hypervisorkvm--instances/usr/local/eucalyptus--usereucalyptus--setup
功能列表:
选项
功能说明
-d
pointEUCALYPTUSto
--no-rsync
don'tusersync
--no-scp
don'tusescp
--skip-scp-hostcheck
skipscpinteractivehostkeycheck
--get-credentials
downloadcredentialsto
--register-nodes\"hosthost...\"
addnewnodestoEUCALYPTUS
--deregister-nodes\"hosthost...\"
removenodesfromEUCALYPTUS
--register-cluster
addnewclustertoEUCALYPTUS
--deregister-cluster
removeclusterfromEUCALYPTUS
--register-walrus
addwalrustoEUCALYPTUS
--deregister-wal