接触Azure几个月,总想写点什么,迟迟没有动笔,一是怕自己技术粗鄙,写的东西会令人捧腹,二是工作原因,时间比较匆忙,在此再次声明,以下写的东西都是我个人看法,若有不足,请多多包涵!!!
情景是这样的,我需要创建多台虚拟机作为web前端,client通过域名或者IP地址访问web,经由SLB,达到负载均衡的目的;
实验条件:国内版的azure账号
1.登陆ASM portal,笔者使用的是国内版的azure账号,具体登陆网址与方式这里就不在赘述;
2.创建虚拟机,在创建虚拟机之前,我有几点建议,我们最好养成几个习惯,创建虚机之前最好按照如下顺序创建好云服务(cloud service),存储账号(storage account),以及虚拟网络(Vnet),
同时合理的给它们命名,在创建Vnet时要合理的划分子网,由于在ASM中没有NSG(网络安全组)的概念,不同子网中的VM仍然可以使用DIP直接进行通信,那么有人会问笔者,这么做有什么意思呢,
最大的好处是使网络层次更加清晰,不至于后期网络规模扩大造成混乱,所以笔者建议web,app,以及数据库都划分为不同的subnet;
创建VM,在ASM中创建虚拟机主要有两种方式,一种直接在portal中创建,另一种是通过power shell,这里第一种方式就不再详细阐述,创建结果如下
创建cloud service
创建存储账户
创建虚拟网络以及subnet
创建虚拟机
第二种方式通过powershell创建
打开power shell
输入如下命令
Add-AzureAccount -Environment AzureChinaCloud
输入账户与密码
登陆成功后会看到如下信息
接下来我们要做的第一件事先看一下azure给我们提供了的虚拟机镜像
输入Get-AzureVMImage,可以看到了如下结果,这里只选取了部分截图;
这里包含了windows和linux的操作系统,在本次场景中我们选择windows 2102的操作系统;
输入(Get-AzureVMImage)[1].ImageName,会显示该镜像的详细信息
这里有人会问笔者,为什么明明选择的是[1],却显示第二个镜像的信息,在这里我要提醒大家,1表示在Azure VM Image所有镜像中的第二个,因为一般队列中,第一位的次序为0,不要问我为什么,这是规定;
言归正传,接下来我们创建一台虚拟机:具体参数如下,vm名称为vm1,vm选型为ExtraSmall,DNS名称为cloudyangyang(云服务名称),OS选择windows-server-2012.用户名为yangyang,密码为Chenjie19941117,数据中心为China East;
现在我们输入如下命令
New-AzureVMConfig -Name 'vm1' -InstanceSize 'ExtraSmall' -ImageName (Get-AzureVMImage)[1].ImageName ` | Add-AzureProvisioningConfig -Windows
-AdminUsername 'yangyang' -Password 'Chenjie19941117' ` | New-AzureVM -ServiceName 'cloudyangyang' -Location 'China East'
回到portal中可以看到如下结果:
根据上图我们发现该过程其实是异步的,power shell中显示成功,而portal仍处于创建过程;
有人会问笔者如果我要指定存储账户与虚拟网络呢,应该怎么去做,接下来我们创建一个更复杂的vm实例,首先,我们删除刚刚创建的云服务及其部署;
具体参数如下,DNS名称为cloudyangyang(因为刚才已被删除),虚拟机名称仍为vm1,虚拟机类型为A5,OS选择windows-server-2012,用户名为yangyang,密码为Chenjie19941117,数据中心为China East;
同时指定存储账号为storageyang,指定虚拟网络为Vnet2,指定子网为subnet-1(注意,虚拟网络,子网必须在portal中已经建好才能指定,存储账户也是这样);
第一步用power shell登陆到你的账户,步骤同上,第二步查看当前订阅名称
输入命令
Get-AzureSubscription -Current
结果显示
可以看到订阅名称为testyangyang
接下来我们来指定存储账户,输入如下命令
Set-AzureSubscription -SubscriptionName 'testyangyang' -CurrentStorageAccount 'storageyang'
这样就成功指定存储账户了,接下来输入如下命令
$vm = New-AzureVMConfig -Name 'vm7' -InstanceSize A5 -ImageName (Get-AzureVMImage)[2].ImageName $vm | Add-AzureProvisioningConfig ` -Windows ` -AdminUsername 'yangyang' ` -Password 'Chenjie19941117' $vm | Set-AzureSubnet -SubnetNames 'Subnet-1' $vm | New-AzureVM -ServiceName 'cloudyangyang' -Location 'China East' -VNetName 'Vnet2'
回到portal中等待虚拟机的建立完成,可以观察到如下结果:
说明实验成功,以上实验就是通过power shell建立简单的虚拟机操作,完成以后为了省钱就删掉,赤裸裸的屌丝心态,好了废话不能再说了,接下进入正题;
在前面我们已经在portal中建立了六台虚拟机做为web前端,点击虚拟机vm1,再点击终结点,可以看到如下结果
我们可以看到只有两个终结点,只有Powershell,Remote Desktop这两个,并没有http,所以我们要新建终结点
点击添加,看到如下选项,我们选择第一个选项
然后下一步
】
这里的负载平衡集的名称我们就叫SLB
这样虚拟机vm1的HTTP终结点已经创建好了,并且同时创建了负载均衡集SLB,而且将刚刚建好的HTTP终结点加入了该终结点,这句话一定要理解,这就是我们刚刚所做的工作!!!
接下来我们的工作就是在其它虚拟机上创建HTTP终结点,并且加入刚刚创建的负载均衡集SLB
我们选择vm2,然后点击终结点,然后点击添加,我们会发现刚刚创建的负载均衡集SLB出现了在下面的选项中;
这里为了区分我们名称仍用HTTP为名称,在这里有人会向笔者发问,为什么在建vm1的HTTP终结点时我们可以对公有端口进行选择(私有端口不可以选择是因为HTTP服务所对应就是80端口,故私有端口不能进行选择),而建vm2的HTTP终结点时公有端口不能进行选择了,只能是80端口,这是什么原因,在这里我要说一下,vm1是先创建的HTTP终结点,而后将该终结点加入负载均衡集,而vm2是已经存在了负载均衡集,并且选择了将新建的终结点加入已建的负载均衡集,故不能选择,只能由建好的负载均衡集,所以不能相混淆。
至于vm3到后续的vm6都是同样的操作,这里就不在一一演示,好了,基于端口的负载均衡就完成了
那么实验就算完成了吗,当然没有,接下来我们还要将每台虚拟机安装IIS使其实现web前端功能,选择虚拟机vm1,点击连接,通过RDP登陆到该虚拟机上面,输入用户名与密码,然后安装IIS,该过程在这里就不在细说,如果不会可以自行百度,待每一台VM都将IIS安装好,我们就可以访问该web前端了
在个人pc端或移动端的浏览器中输入1314520chenjie.chinacloudapp.cn(一生一世我爱你,没错,我就是通过这个向我女票告白的),就是云服务的域名,或者输入IP地址139.219.199.101,该IP地址就是VIP,这里就不再多费笔墨解释,笔者以后会专门罗列一章关于的Azure的IP地址的详细介绍,如VIP,DIP,PIP等等,这里你可以先把VIP当成该云服务的IP地址(其实这么说是不准确的),然后不停地按住F5进行刷新,就可以看到web页面,但是由于IIS默认的静态web页面图片相同,所以即使不断刷新,也不会看到任何改变,为了看到实验现象,我们将默认的图片替换掉,默认的web静态页面保存在web服务器C盘的inetpub目录的wwwroot文件夹下,即路径为C:\inetpub\wwwroot,我们可以将本地的图片上传上去
有人会问笔者本地的文件如何上传到虚拟机呢,如果是linux虚拟机通过SSH直接上传,这里就不在详细说明了,这里说一下如何上传到windows虚拟机
在windows搜索框中输入远程桌面连接,打开远程桌面连接,输入云服务域(或者VIP)名加远程连接的端口号,该端口号是vm1的终结点Remote Desktop的公有端口
先别点击连接,先点击下面的显示选项
点击本地资源,选择详细详细信息,勾选C盘,由于笔者要上传的本地图片就是位于C盘,故勾选C盘,读者根据自己需要自行选择
最后单击确定,通过RDP登陆回到vm1界面,打开这台电脑,会发现本地的C盘也出现在里面了,此时我们可以找到我们要上传的图片了,上传图片要记得两点,删除原来的图片(原片图名称为iis-85),将上传的图片名字改为iis-85,至于原因是由于在C:\inetpub\wwwroot文件夹中,除了保存一张默认的图片名为iis-85图片外,还有一个名叫iisstart的html文档,感兴趣的读者可以用记事本打开看看,会发现很多有意思的东西,这里就不再详细介绍了。
分别在每一台vm中按以上的步骤上传不同的图片,完成以上的步骤就可以通过浏览器观察实验现象了,笔者是通过在iphone中的safari中输入1314520chenjie.chinacloudapp.cn来观察,然后不停地刷新,可以看到不同的六幅图片。
没错,我就在这里秀恩爱了,你能把我咋滴,开个玩笑,有人做完实验会发现一个奇怪的现象,如果是在wifi环境中,无论PC端还是还是移动端设备都会出现这样的一个奇怪现象,就是无论你怎么刷新都很难跳转到另一个页面,需要你不停地按住F5或者过一段时间以后再刷新才会跳转,有人不禁会问笔者,难道我们的负载均衡没有效果,还是说我们的负载均衡集配错了,其实不是这样的,Azure的SLB机制是基于五元组做的,何为五元组,即source IP(源IP) source Port (源端口) destination IP(目的IP) destination Port (目的端口) protocol type(协议类型),正是由于Azure的负载均衡是基于此设计,才实现了真正的负载均衡,但在一些的特殊情况下,比如企业用户的应用程序需要保留会话(session)的时候,需要将该规则进行修改,该为二元组,即通过source IP和destination IP或三元组实现,关于azure的负载均衡原理笔者会在后续的博文中在详细说明
刚刚说我们在wifi环境中需要不挺地刷新才能看到实验现象,但是在移动终端设备上用流量绝大多数只要刷新一次就会跳转新的页面,关于这个问题,笔者也在研究,等有了结果会与大家分享。