您的位置:首页 > 运维架构 > Linux

(译)如何用命令行在windows Azure上安装负载平衡的web Farm虚拟机(linux或其他)

2013-05-25 21:30 295 查看
我一哥们考虑把他的一些基于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的大机器上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: