在上篇中谈到了micro Iron Foundry和micro Cloud Foundry的安装事宜,那紧接着自然是安装Iron Foundry和Cloud Foundry,和了解熟悉这两者。
Requirements
首先需要了解的还是安装的一些前提条件。这次的安装环境貌似要比上次宽松不少,这里需要两台机器(物理机,虚拟机均可,这里不涉及nested VMs和VT支持的问题,而笔者是在虚拟机上完成了安装)。虽然两台机器的要求不是很严格,但是这两台机器的操作系统还是有一定的要求。这个大家应该都知道,Cloud Foundry安装在Linux操作系统下(笔者使用Ubuntu 10.04), Iron Foundry安装在Windows操作系统下(按官网介绍,笔者先后尝试了Windows Server 2008 r2和 Windows Server 2008 r2 sp1 with server core,至于效果,后边会谈及)。 以下便是安装过程。
Installation
和两个的micro之间的关系一样,Iron Foundry说白了只是Cloud Foundry的一个DEA组件,安装只需要将Iron Foundry DEA service连接到Cloud Foundry上即可,但是需要注意的是,此时的Cloud Foundry(由github上Iron Foundry vcap安装,地址https://github.com/IronFoundry/vcap)和之前的github上的Cloud Foundry vcap(地址https://github.com/cloudfoundry/vcap)安装出来的Cloud Foundry略有不同。前者在后者的基础上,改动了极少部分,使前者可以为支持.net完成一些基础工作。
在这次安装过程中,Cloud Foundry(由Iron Foundry改动过的版本)由实验室大牛学长磊哥完成(新浪微博ID:柳烟堆雪)。据学长磊哥所述,这次安装十分顺利(执行 dev_setup/bin/vcap_dev_setup),不像安装原始的Cloud Foundry安装那样会出现各种奇奇怪怪的错误,比如说下不到外部依赖等。安装完毕以后执行dev_setup/bin/vcap_dev start 以启动Cloud Foundry。
以上便是Cloud Foundry的安装了,由于涉及Iron Foundry,之前或多或少肯定涉及过Cloud Foundry的安装,过对于具体操作不再赘述。
以下是Iron Foundry的安装过程。在叙述该过程之前,我先说一下我们vlis实验室的安装经历,主要分三步:1.第一次尝试Windows Server 2008 R2 sp1 with server core安装Iron Foundry,结果失败,安装步骤可参考Iron Foundry官网博文http://blog.ironfoundry.org/2012/01/cloud-foundry-with-iron-foundry-windows-core-install/;2.在第一次失利以后,尝试使用micro Iron Foundry,通过手动安装Iron Foundry,之后连接Cloud Foundry,结果成功;3.在第二步成功的情况下,尝试使用Windows Server 2008 R2安装Iron Foundry,之后连接Cloud Foundry,结果成功。当然安装过程并非一帆风顺,出现了不少问题,但都一一解决了。
那接下来就按三次安装来详细说明
Installation 1
安装环境必须是Windows Server 2008 R2 sp1 with server core。所以在安装时,首先安装Windows Server 2008 R2 server core,然后在安装Microsoft的更新程序service pack 1(sp1),900多MB。如果对于Windows 2008 server core不大了解,可以参考Windows 2008 server core up and running。随后执行:
c:\Users\Administrator> start /w ocsetup IIS-WebServerRole
c:\Users\Administrator> start /w ocsetup WAS-NetFxEnvironment
c:\Users\Administrator> start /w ocsetup IIS-ISAPIExtensions
c:\Users\Administrator> start /w ocsetup IIS-ISAPIFilter
c:\Users\Administrator> start /w ocsetup IIS-NetFxExtensibility
c:\Users\Administrator> start /w ocsetup IIS-ASPNET
c:\Users\Administrator> start /w ocsetup MicrosoftWindowsPowerShell
c:\Users\Administrator> start /w ocsetup ServerCore-WOW64
c:\Users\Administrator> start /w ocsetup NetFx2-ServerCore
c:\Users\Administrator> start /w ocsetup NetFx2-ServerCore-WOW64
将dotNetFx40_Full_x86_x64_SC.exe拷贝到C:\User\Administrator目录下,执行,则安装好.net Framework 4.0运行环境。下一步是在注册表中添加项以便于启动IIS远程管理服务c:\Users\Administrator> reg add HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WebManagement/Server /v EnableRemoteManagement /t REG_DWORD /d 1。安装完以上内容后,重启机器。重启完毕以后,启动wmsvc,使用命令为c:\Users\Administrator> net start wmsvc。接着到指定目录下安装Iron Foundry DEA service,使用命令为 c:\Users\Administrator> msiexec /i IronFoundry.Dea.Service.x64.msi,则将该组件安装完毕。最后一步,则为启动该组件,进入目录c:\Program Files\Iron Foundry\DEA执行可执行文件。
以上操作为均为Iron Foundry的官方指导,其中以上步骤我们实验室均全部完成,理论上可以安装完成。但是我们的server core却不能与外界通信(外界可以访问该机器,但是该机器访问不了外界),在郁闷中,我们尝试了以下Installation 2.
Installation 2
在安装1的郁闷中,我们尝试了该方法,并最后取得了该战役的胜利,着实振奋人心,哈哈。
在micro Iron Foundry中的操作很方便,因为在查看了一番micro Iron Foundry的文件结构以后,发现他的文件结构与Iron Foundry的几乎一致,所以可以将其当成是一个Iron Foundry。第一步首先要做的就是卸载micro Iron Foundry,这里肯定有人会问,为什么要卸载呢?原因是micro Iron Foundry的连接主要是面向micro Cloud Foundry的,所以连接的很多部分都是指定的,不能更改。卸载micro Iron Foundry的命令为 c:\Users\Administrator> msiexec /i IronFoundry.Dea.Service.x64.msi。将其卸载后再重新安装,因为在重新安装过程中,我们就可以指定新的natshost的ip地址了,填写其中的四项,其他的可以不填:
NATS Host: 172.17.**.***(填你自己的Cloud Controller的ip地址)
NATS Port: 4222 (Cloud Foundry的nats默认监听端口为4222)
User:nats (nats的user和password都可以找到,在nats_server.yml和cloud_contrller.yml中)
Password:nats
这样的话,Iron Foundry的安装就完成了,接着就应该是启动这个DEA service来和Cloud Foundry连接了,进入目录c:\Program Files\Iron Foundry\DEA执行可执行文件。
这样的话,理论上可以完成最终连接,但是在这过程中我们又遇到了几个问题,而且尝试了几台机子,都遇到了这个问题。以下介绍一下遇到的问题。
问题1:在连接过程中,出现一个bug,bug的描述为某个端口12345已被占用。解决方案如下:
1.查看该端口端口的占用者,命令: netstat -aon|findstr “12345”;
2.找到占用者的进程,命令:tastlist|findstr “portNumber”;
3.最终使用tskill pid命令杀死掉IronFoundry.DEA.Service.exe进程。
一旦解决了问题1,那么在命令行中就能显示,connected to 172.17.**.***,这说明Iron Foundry已经和Cloud Foundry连接完毕,新鲜的Iron Foundry DEA service启用完毕啦,之后就等待你来push .net应用啦。
理论上讲(貌似说了不少“理论上讲”了,唉,无奈,安装工程实在折腾哈),做到这一步就算完成啦,但是后面还会出现一个奇怪的问题。
问题2:在push .net应用时,应用可以stage,但是在最后一步start的时候老是不能成功。但出现这种情况的时候,首先想的自然是支持.net DEA service到底有没有连上。抱着这样的疑惑,我们在查看Iron Foundry(micro Iron Foundry的变异版,哈哈)命令行的时候,发现老是循环出现一条信息unsupported runtime “clr40”,而另外一方面Iron Foundry抛出的自己支持的运行环境显示是“aspdotnet40”,这样的话,Iron Foundry和Cloud Foundry对于.net运行环境的支持描述就出现了不一致。在最后查阅Cloud Foundry源码的时候,发现了以下Cloud Foundry runtime支持:
aspdotnet40: description: "ASP.NET 4.0 (obsolete)" version: 4.0.30319clr40: description: ".NET CLR 4.0" version: 4.0.30319clr20: description: ".NET CLR 2.0" version: 2.0.50727可见aspdotnet40已经是被淘汰了的,而现在使用的正是clr40。可以看到aspdotnet.yml文件中看到:
---name: "aspdotnet"runtimes: - "aspdotnet40": version: "4.0.30319" description: "ASP.NET 4.0" - "clr40": version: "4.0.30319" description: ".NET CLR 4.0" default: true - "clr20": version: "2.0.50727" description: ".NET CLR 2.0"app_servers: - "iis": description: "Internet Information Services" executable: false default: truedetection: - "web.config": true # web.config must be presentstaged_services:手动改动runtime部分改为
# vim: filetype=yaml
runtimes: - "aspdotnet40": version: "4.0.30319" description: "ASP.NET 4.0" default:true - "clr40": version: "4.0.30319" description: ".NET CLR 4.0" default: false - "clr20": version: "2.0.50727" description: ".NET CLR 2.0" default:false
修改完毕以后,在push .net应用时就可以完成push了。Bingo,哈哈,有没有柳暗花明的感觉呀?如果你也尝试一下的话,做到这一步,肯定会很有感慨的。
这次使用的应用还是和上一篇博文中的一样,为一个简单的Hello World以及链接的应用,以下为链接http://code.msdn.microsoft.com/windowsazure/Windows-Azure-HelloWorld-ee52983e。
在这里,我觉得有必要简述一下,会出现问题2的原因。我们觉得其中可能是因为Cloud Foundry update得非常频繁,导致不少配置文件的改动;而Iron Foundry则没有Cloud Foundry更新那么频繁,由于开发.net运行环境或不成熟等原因,更新不足以赶上Cloud Foundry,所以会在出现问题2,但是Iron Foundry应该是可以支持之前某版本的Cloud Foundry的。关于这个问题我咨询过Iron Foundry的大牛Luke Bakken先生,他对此的回复如下:
Hongliang -
You are correct. I am in the process of doing some work on the .NET DEA and it only understands "aspdotnet40" right now.
You can also specify a runtime with the vmc command from the "vmc-IronFoundry" gem:
vmc push myappname --path C:\proj\myapp --runtime aspdotnet40
Installation 3
第三次安装的过程就比较简略了,因为有了第二次安装成功的经历。这一次主要是想检验在Windows server 2008 R2上是否也可以成功安装,结果令人满意。前面的安装步骤和Installation1中一致,只不过没有这四步,因为不是在server core模式下:
c:\Users\Administrator> start /w ocsetup MicrosoftWindowsPowerShell
c:\Users\Administrator> start /w ocsetup ServerCore-WOW64
c:\Users\Administrator> start /w ocsetup NetFx2-ServerCore
c:\Users\Administrator> start /w ocsetup NetFx2-ServerCore-WOW64
完成了Installation 1 的操作后,按照Installation 3来操作,会遇到同样的问题1和问题2,然后解决方案也一致,直至最后push成功.net应用。
这样,关于Iron Foundry和Cloud Foundry的通信问题也就解决了,希望能对大家的实战有用。
最后,还是再用一下那句话。
Do it and feel the love.