1、模拟场景
Contoso公司已经采购了Azure China服务,计划把现有托管在IDC的企业官网迁移到Azure云平台。该企业官网面向的用户群主要是华东地区的用户。
该企业官网部署需要服务器列表如下:
- 1台AD服务器
- 1台Web服务器
- 1台SQL Server服务器
2、规划
2.1、如何选择Azure数据中心
世纪互联运维的Windows Azure在中国大陆有两个数据中心:
- 中国北部,即位于北京的数据中心
- 中国东部,即位于上海的数据中心
当我们在选择Azure数据中心的时候,需要从以下两方面进行考虑:
- 选择的Azure数据中心离最终用户越近越好
考虑到Contoso的企业官网主要的用户群是华东地区,建议Contoso公司将应用部署到Azure在中国东部的数据中心。
- 如果需要在Azure部署多台应用服务器,则需要将所有的应用服务器放在同一个数据中心
建议用户将Web服务器和SQL Server服务器都部署在Azure中国东部数据中心,不要将Web服务器和SQL服务器部署在不同的数据中心,会产生内部通信的延时。
- 利用CDN
CDN能将静态内容缓存到离用户最近的CDN节点服务器,提高应用程序的用户体验。
2.2、Azure是如何解决大并发
我们建议使用多台Azure虚拟机,利用横向扩展的方式来解决大量的并发。
单个节点向上扩展是有限的,这是因为受限于现有的CPU制造技术,我们无法将大量的计算资源都堆积到1台300 Core甚至400 Core的计算节点上。对于需要大量的计算资源的情况下,我们可以通过横向扩展的方法来解决。
所谓横向扩展,就是由1个计算节点,横向扩展到多个计算节点上并行计算,比如50个、100个计算节点。比如一个互联网业务需要大量的计算资源,那可以将这些计算需求由100台4 Core的计算节点进行并行计算。
架构图如下:
2.3、选择最合适的虚拟机配置
首先请读者注意,传统的虚拟机化技术,CPU是共享的。Azure虚拟机,除了A0的虚拟机类型,它的CPU是和别的用户共享的。其他类型的虚拟机,比如A1-A7,它的CPU是独占的,不是和别的用户共享的。
目前Azure虚拟机分为A系列和D系列,并且拥有不同的CPU和内存配置。
如果客户在传统IDC托管中已经部署了硬件服务器。则在Azure平台选择最接近的Azure虚拟机配置即可。
如果客户需要部署新的应用,则需要根据并发、性能等多个因素,选择最合适的Azure虚拟机配置。
另外说明一下A系列虚拟机和D系列虚拟机的区别:
- 相比A系列单台VM最大8Core/56GB RAM的配置,D系列虚拟机单台最大的配置为16Core/112GB RAM
- D系列的CPU性能比A系列提升约60%
2.4、规划好高可用(非常重要)
在Microsoft Azure虚拟机中,用户也可以选择使用一台Azure Virtual Machine部署AD Server,一台Azure Virtual Machine部署Web Application,使用另一台Virtual Machine部署SQL Server。但是这样的场景是没有SLA保障的。
Microsoft Azure Virtual Machine承诺的99.95%的SLA是需要2台或者2台以上的Azure Virtual Machine同时运行,且所有的Virtual Machine都需要在同一个可用性集中。对于上面实例,用户如果想在Azure中实现99.95%的SLA,需要同时部署:
- 两台AD Server虚拟机,放在同一个可用性集A中。
- 两台Web Server虚拟机,放在另外一个可用性集B中。
- 两台SQL Server 虚拟机,采用SQL Server 2012 Enterprise提供的Always-On功能,实现High Availability。且SQL Server所在的Virtual Machine需要在另外一个可用性集C中。
- 将具有相同功能的多台VM放置在同一个可用性集下。
这边还需要强调一下:
- 可用性集A中的两台AD Server中的内容配置必须完全一致,并且需要进行AD的同步。
- 可用性集B中的两台Web Server中的网站在部署的时候,内容必须完全一致。
- 可用性集C中的两台SQL Server必须配置SQL Server Always-On或者SQL Mirroring,保证数据库之间的日志同步
对于DB Server,比如SQL Server或者MySQL,需要在两台DB Server进行日志同步:
- SQL Server需要在两台VM配置Always-On或者SQL Mirroring,使用日志同步
- My SQL可以配置Master-Slave,使用Replication进行复制。
- 这样的目的是保证在其中一台Server宕机的情况下,另外一台Server可以正常运行,因为配置了日志同步,可以保证日志不会丢。
- 另外还要强调一下,客户端如果调用SQL Server服务的时候,需要正确配置AG Listener,这样保证在一台SQL Server宕机的情况下,AG Listener可以将请求自动发送到另外一台SQL Server上。
2.5、规划好Azure订阅(非常重要)
订阅是进行Azure账单分拆的最小单位。
如果企业内部需要进行内部成本核算,例如IT部门、销售部门、市场部门均需要使用Azure,并且根据不同的部门的Azure实际使用量进行内部成本核算,就需要实现规划好三个不同的Azure订阅。在创建Azure IaaS相关资源的时候,将这些资源创建在不同的订阅下。
2.6、选择订阅(非常重要)
我们就可以筛选一个或者多个订阅。
在一般情况下,笔者建议选择一个订阅,这样就可以把所有的Azure资源创建到这个订阅下。
本文所有的demo内容,就会创建到Marketing_Subscription这个订阅下。
2.7、查看该订阅中可使用的Azure资源
如果您使用的是测试账户,只能有一个订阅,该订阅默认情况下可以使用的Azure资源为
- 计算能力:20 Core
- Host Service: 即DNS地址,4个
- 存储账号:4个
如果测试账户在测试过程中,需要的Azure资源超出测试账号默认提供的资源,请通过微软销售团队,联系Azure PMM Bill Jin。在Bill批准的情况下,再联系世纪互联支持团队,请世纪互联在后台将测试账户的订阅进行扩大。
如果您使用的是正式账户,可以创建无限多个订阅。新创建的Azure订阅默认可以使用的Azure资源为:
- 计算能力:100 Core
- Host Service: 即DNS地址,20个
- 存储账号:20个
如果正式账户在使用过程中,需要的Azure资源超出订阅默认的Azure资源,请不要联系PMM Bill Jin。请直接联系世纪互联支持团队,世纪互联会先审核相关请求,然后会将该订阅的相关资源进行扩大。
举个例子,比如Contoso公司需要在月底进行一次大型的Digital Campaign促销活动,需要使用300个CPU Core,则可以提前联系世纪互联支持团队,让世纪互联运维团队将默认的100 CPU Core提升到300个。
上图中,订阅名称为”Marketing_Subscription”可以使用的Azure资源为
- 100个CPU Core
- 20个Cloud Service
- 20个Storage Account
3、创建Azure虚拟机
3.1、说明
我们在创建Azure服务的时候,可以通过以下两种方式来创建
使用Azure管理界面
优势:
- 可以通过用户界面的方式,创建相应的Azure虚拟机,方便简单。
劣势:
- 某些Azure虚拟机的高级功能,比如固定内网IP,固定公网IP,设置虚拟机时区等,都需要借助于Azure PowerShell。Azure管理界面不具备相应的功能。
- 当用户需要批量创建Azure虚拟机,批量配置虚拟机端口等,通过Azure管理界面就非常麻烦。
我们可以使用Azure PowerShell,创建Azure虚拟机。
Azure PowerShell可以批量创建虚拟机,其他高级功能也需要通过Azure PowerShell来进行配置。
3.2、规划
在我们创建Azure虚拟机之前,首先需要对Azure虚拟机进行规划。规划主要分为:
- 创建虚拟网络,规划虚拟机的内网IP地址和IP Rang
- 创建存储账号
- 选择虚拟机的操作系统及配置
针对这次模拟场景,我们需要规划以下内容:
- 数据中心选择中国东部
- 虚拟网络
- 我们创建Azure虚拟网络,命名为ContosoVNet,同时设置虚拟网络的IP Rang为10.0.0.0 - 10.0.3.255
- 设置3个Sub-net
AD-Subnet,IP Rang为10.0.0.0 – 10.0.0.255
Web-Subnet,IP Rang为10.0.1.0 – 10.0.1.255
DB-Subnet,IP Rang为10.0.2.0 – 10.0.2.255
- 在中国东部创建2个存储账号contosostor1和contosostor2
- 创建6台Azure虚拟机
角色 |
AD Server |
Web Server |
DB Server |
操作系统 |
Server 2012 Eng |
Server 2012 Eng |
Server 2012 Eng with SQL Enterprise |
虚拟机类型 |
D2 |
D2 |
D2 |
虚拟机数量 |
2台 |
2台 |
2台 |
虚拟机名称 |
ContosoAD01 ContosoAD02 |
ContosoWeb01 ContosoWeb02 |
ContosoDB01 ContosoDB02 |
云服务名称 |
ContosoADCS |
ContosoWebCS |
ContosoDBCS |
存储账号 |
contosostor1 |
contosostor1 |
contosostor2 |
虚拟网络子网 |
AD-Subnet |
Web-Subnet |
DB-Subnet |
内网IP |
10.0.0.4 10.0.0.5 |
10.0.1.4 10.0.1.5 |
10.0.2.4 10.0.2.5 |
可用性集 |
ADAvbSet |
WebAvbSet |
DBAvbSet |
用户名 |
AzureAdmin |
AzureAdmin |
AzureAdmin |
密码 |
Contoso!000 |
Contoso!000 |
Contoso!000 |
我们会在接下来几章详细介绍如何创建Azure虚拟机。
3.3、注意事项
- 在一个云服务里,放置多个相同角色的虚拟机
- 比如:多个Web Server虚拟机,放在同一个云服务里
- 多个SQL Server虚拟机,放在另外一个云服务里
- 多个AD Server虚拟机,放在第三个云服务里
- 不要把不同角色的虚拟机,比如Web Server和SQL Server,放在同一个云服务里。
3.4、使用Azure管理界面创建虚拟机
我们登陆Azure管理界面,输入相应的Azure账户名称和密码。
3.4.1、创建虚拟网络(非常重要)
- 在Azure管理界面的左下角,点击”新建”按钮。
- 在弹出的窗口中,点击”网络服务”,”虚拟网络”,”自定义创建”。
- 在弹出的窗口中,将名称命名为ContosoVNet,位置我们选择”中国东部”
- 下一步,设置DNS地址:
注意,因为我们需要使用AD Server,这里的DNS就是AD Server的内网IP地址。
注意: 在Azure云环境,Azure虚拟机的Private IP,DNS Server都必须通过虚拟网络来设置。我们不可以通过远程桌面连接(Remote Desktop),来修改Azure虚拟机的本地TCP/IP地址。如果这样操作的话,Azure虚拟机会运行不正常。
如果用户场景不需要设置AD服务器,则DNS服务器配置页面可以不输入任何信息,直接选择下一步。
- 最后,我们设置虚拟网络的IP Rang和Subnet。如下图:
上图中:
- IP Range为10.0.0.0 – 10.0.3.255
- 子网AD-Subnet的IP Range为10.0.0.0 – 10.0.0.255。注意每个子网的前4个IP是Azure系统保留的,对于AD-Subnet来说,可用的IP Range为10.0.0.4 – 10.0.0.255
- 子网Web-Subnet的IP Range为10.0.1.0 – 10.0.1.255。同上,该子网实际可用的IP Range为10.0.1.4 – 10.0.1.255。
- 子网DB-Subnet的IP Rang为10.0.2.0 – 10.0.3.255。同上,该子网的实际可用IP Rang为10.0.2.0 – 10.0.3.255。
定义了虚拟网络以后,我们创建的Azure虚拟机的内网IP地址,就是在虚拟网络中定义的可用地址范围和子网来定义的。
6.创建完毕后,我们就可以在Azure管理界面上查看到我们创建成功的虚拟网络ContosoVNet。如下图
3.4.2、创建存储账号
我们需要创建2个存储账号:contosostor1和contosostor2。注意存储账号的名称只能是小写英文字符。
1.在Azure管理界面的左下角,点击”新建”按钮。
2.创建存储账号contostor1,位置选择中国东部
复制选项中,我们可以根据自身的需求,选择本地冗余或者地域冗余。
注意: 从成本角度来说,地域冗余的成本会比本地冗余要贵。
3.创建另外一个存储账号contostor2,位置选择中国东部
复制选项中,我们可以根据自身的需求,选择本地冗余或者地域冗余。
4.这样我们在存储栏目里,就可以看到创建成功的两个存储账号,如下图
注意:一个Azure存储账号的IOPS上限为20000,考虑到每块磁盘的最大IOPS为500,笔者建议不要在同一个存储账号保存超过40块磁盘。
3.4.3、创建虚拟机说明
在上面的章节中,我们创建了如下内容:
- 虚拟网络,设置了虚拟内网的IP Rang和DNS地址
- 存储账号,设置了虚拟机所在的VHD文件保存的数据中心的物理位置及文件的冗余性
接下来的内容,就是创建相应的虚拟机了。
我们会依次创建如下虚拟机:
- 2台AD服务器,2台服务器使用同一个云服务,名称为ContosoADCS
- 2台Web服务器,使用同一个云服务,名称为ContosoWebCS
- 2台SQL Server服务器,使用同一个云服务,名称为ContosoDBCS
从Azure虚拟机的角度来说,云服务只是一个DNS,概念上可以理解为一个容器。这个容器可以同时容纳一个或者多个虚拟机。如下图:
当我们新建一个虚拟机的时候,因为不存在容纳这个虚拟机的容器,所以Windows Azure会默认创建一个新的Cloud Service,然后将虚拟机加入到这个容器当中去。
当我们创建第2个虚拟机的时候,可以复用这个Cloud Service,然后将第2个虚拟机加入到这个Cloud Service里。
从负载均衡和高可用两个角度来说,笔者强烈建议,将2台或者2台以上具有同样功能的虚拟机,创建在同一个Cloud Service云服务下。
3.4.4、使用管理界面创建Azure虚拟机
注意事项
我们在开始创建Azure虚拟机之前,已经定义了虚拟机网络。在虚拟机网络配置页面里,我们创建了3个子网(Subnet)。并且定义了每个子网的IP Rang。如下图:
接下来,我们需要创建不同的Azure虚拟机,并且将虚拟机加入上面定义的虚拟网络。
注意:
- 上图中,IP Rang为10.0.0.0 – 10.0.0.255
- 子网AD-Subnet的IP Range为10.0.0.0 – 10.0.0.255。注意每个子网的前4个IP是Azure系统保留的,对于AD-Subnet来说,可用的IP Range为10.0.0.4 – 10.0.0.255
- 子网Web-Subnet的IP Range为10.0.1.0 – 10.0.1.255。同上,该子网实际可用的IP Range为10.0.1.4 – 10.0.1.255。
- 子网DB-Subnet的IP Rang为10.0.2.0 – 10.0.3.255。同上,该子网的实际可用IP Rang为10.0.2.0 – 10.0.3.255。
- 定义了虚拟网络以后,我们创建的Azure虚拟机的内网IP地址,就是在虚拟网络中定义的可用地址范围和子网来定义的。
请注意,使用Azure管理界面创建的虚拟机,是无法固定内网IP地址的。必须通过Azure PowerShell,才能固定虚拟机的内网IP地址。
在Azure云平台是没有DHCP这个概念的。如果我们将第一台虚拟机VM01,通过管理界面进行创建,加入到AD-Subnet的话,这台虚拟机VM01会自动获得第一个可用的内网IP(Private IP),为10.0.0.4。
如果我们在第一台虚拟机VM01不关机的情况下。再次通过管理界面继续创建第2台虚拟机VM02,同样加入到AD-Subnet。因为10.0.0.4这个IP被第一台虚拟机VM01占用。所以第2台虚拟机VM02自动获得下一个可用的内网IP地址,为10.0.0.5。
如果VM01, VM02都不关机的情况下,则第3台新创建的虚拟机VM03加入到AD-Subnet的Azure虚拟机自动获得下一个可用的内网IP地址为10.0.0.6。
还有一个问题需要读者注意。如果我们在上面创建的3台虚拟机,通过管理界面关机了,则这些内网IP地址会被释放。经过一段时间后,第一个通过管理界面开机的虚拟机(无论是VM01,VM02,VM03),会自动获得第一个可用的IP地址。
假设笔者将虚拟机通过管理界面关机。经过一段时间后,将VM03首先通过管理界面开机,则VM03会自动获得第一个可用的内网IP地址,为10.0.0.4。
这个问题非常重要。如果您通过管理界面创建Azure虚拟机,通过管理界面开关虚拟机,内网IP地址会变化。
如果读者需要固定内网IP地址,只有通过PowerShell创建的虚拟机,内网IP地址才是固定的。
另外,使用管理界面创建的Azure虚拟机,默认时区是UTC时区。而我们平时使用的市区是UTC+8(北京时区)。
创建第一台AD Server
我们需要创建2台Azure AD Server,配置如下:
角色 |
AD Server |
操作系统 |
Server 2012 Eng |
虚拟机类型 |
A2 |
虚拟机数量 |
2台 |
虚拟机名称 |
ContosoAD01 ContosoAD02 |
云服务名称 |
ContosoADCS |
存储账号 |
contosostor1 |
虚拟网络子网 |
AD-Subnet |
内网IP |
10.0.0.4 10.0.0.5 |
可用性集 |
ADAvbSet |
用户名 |
AzureAdmin |
密码 |
Contoso!000 |
我们首先创建第一台AD Server。步骤如下:
1.在Azure管理界面。选择新建,计算,虚拟机,从库中。如下图:
2.镜像我们选择Windows Server 2012 R2 Datacenter (en-us)
3.设置虚拟机配置
上图中,我们设置虚拟机名称为ContosoAD01,虚拟机类型为标准。虚拟机配置为D2 (2Core/7GB)。用户名密码按照之前的规划进行设置
4.在接下来配置文件里,我们输入以下信息:
在上面的图片中,我们需要注意以下内容
-
因为我创建的是第一台AD服务器,所有选择创建新的云服务
-
在DNS名称中,输入自定义的DNS名称ContosoADCS
-
在虚拟网络中,选择我们之前创建的虚拟机网络名称ContosoVNet
选择对应的虚拟网络子网AD-Subnet
-
存储账户,我们选择之前创建的存储账号contosostor1
-
可用性集,因为我们创建新云服务,所以我们创建新的可用性集,命名为ADAvbSet
在配置页面的下方,还会指定终节点,我们使用系统默认设置。
5.最后我们点击确认,这样就完成创建第一个AD Server。在虚拟机创建列表中就会显示”正在启动(正在配置)”
注意:在客户点击创建的时间点,Azure就开始计费。而不是等到虚拟机创建完毕才开始计费。
1.我们等待ContosoAD01这台虚拟机创建完毕,状态为”正在运行”。
然后点击虚拟机名称,如下图红色区域:
2.点击后,页面会进行跳转。我们可以查看到ContosoAD01这个虚拟机的配置信息。如下图:
里面的DNS名称,主机名称和虚拟机大小,就是我们在创建虚拟机的配置页面里进行配置的。
注意:内部IP地址是从AD-Subnet子网中获得第一个有效IP,为10.0.0.4
创建第二台AD Server
我们创建完第一台AD Server之后,从高可用的角度来说,我们需要创建第2台AD Server。步骤如下:
1.选择新建,计算,虚拟机,从库中。如下图:
2.镜像我们选择Windows Server 2012 R2 Datacenter (en-us)
3.设置虚拟机配置。注意虚拟机名称命名为ContosoAD02
4.在接下来配置文件里,我们输入以下信息:
注意,我们创建的第2台AD Server中,与第一台配置稍有不同:
- 复用之前我们已经创建的云服务ContosoADCS
- 选择对应的虚拟网络和存储账户
- 选择我们之前已经创建的可用性集ADAvbSet。
观察AD Server
我们等待第2台虚拟机创建完毕,状态变为”正在运行”。然后我们观察一下Azure管理界面。
上图中,我们可以发现:
- 在初始状态,虚拟机和云服务的数量都是0
- 我们创建第1台AD Server的时候,新建了一个云服务,同时新建了一个虚拟机。此时虚拟机和云服务的数量都是1
- 然后我们创建第2台AD Server,复用之前创建的云服务。所以虚拟机数量为2,云服务数量是1。
我们再复习一下:
从Azure虚拟机的角度来说,云服务只是一个DNS,概念上可以理解为一个容器。这个容器可以同时容纳一个或者多个虚拟机。如下图:
从高可用的角度来说明,我们在创建虚拟机的时候,创建并指定了高可用集。如下图的红色部分区域3的内容。
我们必须把在同一个Cloud Service下的多台Azure虚拟机,保存在同一个可用性集下。
这样,多台Azure虚拟机是部署在不同的RACK上的。
我们点击云服务,选择之前创建的云服务ContosoADCS,然后选择实例。如下图:
上图中,ContosoAD01和ContosoAD02 是在不同的容错域上,分别是0和1。则这2台虚拟机是不是在不同的RACK上,保证高可用。
创建Web Server
我们创建的Web Server信息如下:
角色 |
Web Server |
操作系统 |
Server 2012 Eng |
虚拟机类型 |
D2 |
虚拟机数量 |
2台 |
虚拟机名称 |
ContosoWeb01 ContosoWeb02 |
云服务名称 |
ContosoWebCS |
存储账号 |
contosostor1 |
虚拟网络子网 |
Web-Subnet |
内网IP |
10.0.1.4 10.0.1.5 |
可用性集 |
WebAvbSet |
用户名 |
AzureAdmin |
密码 |
Contoso!000 |
注意:
1.我们在创建第一台Web Server的时候,需要创建新的云服务。如下图:
2.我们在创建第2台Web Server的时候,需要注意:
-
复用之前我们已经创建的云服务ContosoWebCS
-
选择对应的虚拟网络和存储账户,注意子网为Web-Subnet
-
选择我们之前已经创建的可用性集WebAvbSet。
如下图:
注意创建Web Server的先后顺序,第1个创建成功的Web Server ContosoWeb01,会从子网Web-Subnet中,自动获得第一个可用的内网IP,为10.0.1.4。第2个创建成功的ContosoWeb02,会自动获得第2个可用的内网IP,地址为10.0.1.5。