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


    我一哥们考虑把他的一些基于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的大机器上。

  • 相关阅读:
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Python long() 函数
    Python int() 函数
    Python 变量类型
    Python 基础语法
    Python 中文编码
    深度学习点云语义分割:CVPR2019论文阅读
    自动泊车技术短暂困境,前景可期
    深度学习网络模型压缩剪枝详细分析
    用OpenCV4实现图像的超分别率
  • 原文地址:https://www.cnblogs.com/ongoing/p/3099331.html
Copyright © 2020-2023  润新知