我一哥们考虑把他的一些基于linux的网站移到Azure上。如果你现在的网站是node.js,
ASP,ASP.NET,或PHP做的,使用Azure web站点是最容易的。我会在这篇文章里向你展示如何
在几分钟内用Git安装Azure web站点。它们对你隐藏了底层操作系统,自动更新,易扩展,
而且共享硬盘。
然而,他喜欢虚拟机和虚拟机赋予他的控制,另外他可以到处运行,移动东西,控制他的世
界。
我会在Azure上使用开源的(GitHub)跨平台CLI工具(命令行接口)。如果你有node
package manager你可以使用“npm install azure-cli--global”命令导入你的签名。你也
可以从www.windowsazure.com下载安装命令行工具。
设立一个linux虚拟机
我们会用门户创建一个初步的虚拟机(我会向你展示如何在一分钟内用命令行做到)。这个
虚拟机会被用来设立一个虚拟机镜像模版。我要创建一个Ubuntu 13.04服务器,然后安装
Apache和PHP。然后我就获得了一个我现在安装的机器的通用的镜像,可以被拷贝添加到farm
。这个镜像将会在Azure 门户的“我的镜像”里显示。
注意:在Open Tech VM Depot上有个很棒的社区驱动的关于准备虚拟机镜像的类别。这像是
最值得保存的Azure秘密。我待会儿会在上面发布,但这确实值得深入查看一下。
从Azure门户开始,我开始新建|虚拟机|然后选择Ubuntu Server 13.04。
名字不重要,但我要配置一个用户名和密码(或者使用SSH密钥):
注意我要创建一个独立的虚拟机了:
贴士:如果我根本不想用门户创建虚拟机,我甚至可以通过命令行编程来发现虚拟机镜像,
然后创建虚拟机实例。使用“azure vm list”命令能帮我获取到可选取的虚拟机列表。我想
要的那个Ubuntu是“Ubuntu-13_04-amd64-server-20130501-en-us-30GB”(名字里带了个
guid)。所以我只要键入“azure vm create MyDNSName ImageName [options]”处理他们。
一旦这个linux虚拟机启动,我会通过SSH进入。你可以看到Azure已经为虚拟机内部的SSH端
口22随机匹配了一个高数值的公共端口。
我用SSH进去。我将要添加Apache,PHP,重启apache,然后添加一个test.php,这会显示PHP
和当前的IP地址都正常工作,如此我就知道哪台机器处理的请求。
我将添加一个 test.php
然后
加入
接着我将退出SSH。虚拟机默认的被锁上了,所以为了测试这个我要添加一个终端。我可以通
过门户来做,但我更想看看可否通过Azure命令行来做。
运行vm endpoint create来匹配外部的80端口到内部的80端口。
这时候我可以点击mylinuxtemplate.cloudapp.net:80/test.php看是否工作。
酷。这样我已经得到了我想要的linux虚拟机模版。现在我想把它做成镜像,这样就可以做的
更多。这个linux上的“waagent”和windows上的“sysprep”一样。
通过SSH会话,运行waagent -deprovision。
windows用户:如果你是windows用户,你可以用你喜欢的方式安装windows,然后运
行%windir%\system32\sysprep.exe,获得一个虚拟机的镜像然后像这篇博文里一样操作。
我可以关机并从门户获得一个镜像,但是再一次,今天我们要玩命令行。注意,关机可能要
花一点时间。
capture命令会删除虚拟机。记住这只是个模版。然而,我有一个可重用的镜像!我可以看到
azure虚拟机列表里的镜像都可用,包括用户镜像和gallery镜像。
注意:当你删除虚拟机,你只是删除了虚拟机的配置。你没有删除相关的硬盘,这让你可以
再次启动虚拟机。如果你真的想移除这些东西,确保你删除了虚拟机实例并删除了硬盘。
通过命令行创建一个linux虚拟机farm
现在我的存储账户里有了一个镜像,可以用它创建N个虚拟机。我要开始建一个虚拟机。建完
后我可以在“azure站点列表”里看到它启动。当机器准备就绪,我可以做的更多!确保你使
用--ssh switch否则你无法通过SSH进入机器!
奇怪:Azure有个概念叫“云服务”,这是个很烂的名字。对我们来说,就把它当作我们虚拟
机的容器吧。这是个逻辑上的容器,会包含并关联所有的虚拟机(和其他的云之类的东西)
到一起。当你有一个虚拟机的时候,你将有一个云服务关联到它,但你在门户上看不到这个
云服务,因为还没有真正用到。当你在一个容器中有两个虚拟机,接着你就会发现门户里出
现了“容器”云服务。
我现在已经创建了一个hanselmanlinuxfarm 虚拟机,所以也就有了一个hanselmanlinuxfarm
云服务“容器”。现在,我要创建更多的虚拟机,但要和第一台虚拟机连接起来。有两种方
法。第一种,用命令行里的connect选项。注意,如果你在意的话,你不用这样控制你的虚拟
机名字。如果你有上百台机器,你一定不想这样做。
命令行会发现存在的云服务(还是,“容器”),然后创建一个新的虚拟机。我将运行这个
命令两次,这样我总共将有3台虚拟机。
很重要:在第二台虚拟机上用到的connect命令被称作key。这创建了第二台(以后还有N+1)
虚拟机并添加到一样的云服务“容器”。看起来这些虚拟机都互相关联。下一台虚拟机的名
字将是-2,接着-3,等等。但他们也用一样的外部名字,像
hanselmanlinuxfarm.cloudapp.net。
我将这样做两次,每次使用不同的SSH端口号来匹配内部的22端口号。如果我不想SSH暴露在
外面,之后可以删除公共终端。
当创建一个linux虚拟机的时候,你必须添加一个--ssh标识到命令行否则你将无法通过SSH进
去。确保添加高数值的端口号,这样你可以匹配端口22,比如12346->22等等。如果你通过门
户创建的这些虚拟机,会随机给你分配端口。当你通过命令行做的时候要自己选择。
这会儿,azure vm list说我有三台。两台已经准备就绪,最后一台现在被创建好了。你可以
看到这些虚拟机在同样的云服务“容器”里运行,因为DNS名是一样的。这些虚拟机正式称呼
是“farm”。
好了,现在通过门户创建第四台虚拟机,只是给你看看。
通过门户创建一个linux虚拟机并添加到farm
就像你知道的,你也可以从门户添加虚拟机到你的farm。
给你的新虚拟机起个名字,然后“连接到一个已有的虚拟机”。我不喜欢这表述,我也很好
奇你是怎么想的。基本上这里的意思是“添加这个虚拟机到虚拟机集合中”。这无关那个你
从下拉列表中选取的,只要你从云服务“容器”中选取一个。
我不会点击OK,但如果我点击了,这会儿我已经有第四台虚拟机了,这个是通过门户创建的
。
让我的linux虚拟机farm负载平衡
我已经有了三个一样的虚拟机运行着Apache和PHP还有我的test.php页面。
让我打开这三台机器上的80端口。我想让它们负载平衡但是不行,这是匹配单一非负载平衡
的端口方法。
为了负载平衡的端口我需要使用“create-multiple”。我不仅想一次打开多个端口,为了负
载平衡我还想要一个探索安装。例如,我用http,如果有从test.php返回的200个结果,我会
希望虚拟机从farm中拉出来。如果30秒内没有回应,也将会把虚拟机从回转中拉回来。
这里我创建了这些80端口到80端口的匹配,但还更多的监控test.php,不只一个HTTP 200状
态。
这里的“HttpTrafficIn”就是我所说的负载平衡集的名字。
注意:我在做一个拉取请求来添加一个通过终端命令查看探索路径的功能,但现在你可以在
“azure vm show”里看到:
好,现在我们来看一下我是不是已经有一个负载平衡的farm。
注意:为了从你的Azure虚拟机(或其他云虚拟机)获得最好的性能,考虑放入一些像
MySQL/PostgreS 数据库,放到不同的盘上,用不同的缓存大小。你要让系统盘和数据盘分开
。例如,我有一个windows 虚拟机运行MySQL。系统盘在一个标准的30G的盘上,但MySQL数据
库在单独的一个5G的附加的盘上。这让东西分开,整洁,并且性能更好。
查看我的新farm
如果我登入门户,我可以看到每个独立的虚拟机或把farm看成一个“云服务”。懂?
让我的farm更可靠
我想确信我的新虚拟机都在Azure数据中心的不同机架上。我知道它们在“West US”,因为
我把它们放在那里,但我不清楚它们是在一个机架上还是相邻的或是其他什么。因为一个机
架在一个“错误域”中,意味着一个机架可能,我不知道,自爆?我想告诉Azure,所有这些
虚拟机都是一个“可用集”的一部分。这个名字是我用在虚拟机上的,意思是“通过把它们
分开让这些机器更具可用性”。
从门户上我将选择第一台虚拟机并选择配置,然后创建一个可用集。我把它命名
为“hanselmanlinux”,但它可以是任何名字。
添加可用集意味着Azure可以移动我的虚拟机到数据中心的其他任何地方,而且这可能需要重
启。有时候很快,有时候要花一到十分钟,看最初大小。所以要明白,放在这个集的东西要
小。
当这些做好后,转头去把其他的虚拟机一个个添加到一样的可用集里。这看起来像是在门户
中,现在我保证了我的三台虚拟机都在不同的错误域(机架)上。
点击我的web farm
现在我可以点击hanselmanlinuxfarm.cloudapp.net/test.php并看到IP改变(还有在门户中
看到cup利用率的改变)或者甚至可以通过SSH观察HTOP,得到一个实时的视图。嗨,我已经
有一个小的Linux farm了!
这里有我用SSH进入其中一个,看看htop(比top还棒)
我的完整脚本,总结
这里是我的完整脚本。我使用azure vm image list | find /I "13_04"来发现一个Ubuntu镜
像。我也可以用bash完成它。
一旦我发现一个镜像,我用命令行在自己选定的路径下创建我的第一个虚拟机。再次,这是
linux,不要忘了-ssh
用你喜欢的方式得到它。用SSH进入,安装,运行waagent来prep它。关闭并捕获它。
最终,这里有个基础脚本文件来安装5台虚拟机。记住第一条命令不同于后面的。当然,用
bash你可以make一个脚本叫“spinup5”并以你想要的方式自动化。在终端创建中HTTP探测器
是可选的。
这些都运行完后,我进到门户并手动安装可用集。现在还只能用powershell,但很快就可用
跨平台工具来设置可用集了!
下次,也许我会尝试“azure vm scale”移动这些小虚拟机到8处理器56G的大机器上。