浅谈ASM中的SLB
接触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)[].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)[].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环境中需要不挺地刷新才能看到实验现象,但是在移动终端设备上用流量绝大多数只要刷新一次就会跳转新的页面,关于这个问题,笔者也在研究,等有了结果会与大家分享。
浅谈ASM中的SLB的更多相关文章
- 浅谈数据库系统中的cache(转)
http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转) Cache和Buffer是两个不同 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- 浅谈iOS中的userAgent
浅谈iOS中的userAgent User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
随机推荐
- ubuntu下安装加装DNS
感觉在ubuntu下网速特别的慢,所以网上找了下解决方案,本地缓存域名解析相关信息. 首先,安装dns服务 命令: sudo apt-get install dnsmasq 编辑dnsmasq的配置文 ...
- MIDI信息为什么不能通过FL Studio输出
讲解这个问题之前,小编先给大家科普一下什么是MIDI.所谓的MIDI其实只是数字信号,和我们熟知的乐谱有点像.它的作用就是能很好的传达什么时间演奏什么音,这个音要演奏多久等信息,就如同我们演唱会中指挥 ...
- 360:且用且珍惜!解决虚拟机linux启动缓慢以及ssh端卡顿的问题!
优化软件以及杀毒软件想必大家都是用过的,小编自用的第一台电脑自带安装的是金山毒霸,随着时间的偏移渐渐用过小红伞,卡巴斯基,优化大师,鲁大师到后来的360优化杀毒套装,优化软件给大家带来了方便,尤其是上 ...
- js中的hasOwnProperty和isPrototypeOf方法
hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象.不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeO ...
- [网络安全] [视频分享]KaLi Linux基础培训2016 最新的哦【福吧资源网】
最新的教程同时针对kali linux2016最新版本的多个问题解决办法还有一些实例利用. 下载地址:http://www.fu83.cn/thread-310-1-1.html
- bzoj1800[Ahoi2009]fly 飞行棋 暴力枚举
找了道bzoj的水题,千年难得一遇. 建议初学者做做,然而我个蒟蒻初学时应该A不了..... < http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- xcode升级导致git无法使用
skytraveler:lucas$ git Agreeing to the Xcode/iOS license requires admin privileges, please re-run as ...
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
- C#的前世今生,学会C#还能找到高薪工作吗?
其实C#,.net正在逐步淡出程序员的视野是正在发生的现实,量子及量子的小伙伴们,还在坚持写C#代码的人几乎没有了,回忆起过去那些写C#时候的美好时光,真是不胜唏嘘,最近园子里的一篇<C#程序员 ...
- B - Ignatius and the Princess IV DP
#include<iostream> #include<vector> using namespace std; ]; int main() { int time,n,limi ...