Windows Azure Pack 与库项目(VM 角色)故障排除(第 2 部分)
大家好
接续上篇博客文章(Windows Azure包和库项故障排除(第 1 部分))继续介绍。现在,我们来谈谈使用 Windows Azure 包 (WAP) 和 Virtual Machine Manager (VMM) 配置和部署库项(VM 角色)时可能会遇到的潜在挑战。
在安装过多次 Windows Azure 包端到端解决方案后,我遇到了各种不同的挑战,我将会在下文进行说明,并针对这些问题提供解决方案。
为简化学习过程,我将会费些笔墨介绍我的环境以相关场景。
图 1 :通过 WAP 租户门户计划提供的 VM 角色
环境:
我的设置非常简单:一个 WAP 服务器(快速安装)、Service Provider Foundation (SPF) 服务器(安装于独立服务器上),最后还有用于管理某个 Hyper-V 服务器的 Virtual Machine Manager (VMM) 服务器。环境外观如下所示:
VMM 服务器 |
VMM01.fabrikam.com |
SPF 服务器 |
SPF01.fabrikam.com |
WAP 服务器 |
WAP01.fabrikam.com |
VMM 库 |
\\MSSCVMMLibrary |
云 |
Contoso |
计划 |
Contoso.com 租户计划 |
用户帐户 |
Admins@contoso.com |
WinOS VHD |
WindowsBase2012R2.vhdx |
数据 VHD |
Data Disk.vhdx |
版本: |
1.0.0.0 |
场景:
已配置以下组件:
- Windows Azure 包 (WAP)
- Service Provider Foundation (SPF)
- Virtual Machine Manager (VMM)
- Windows Server 2012 R2 Sysprep 映像(位于 VMM 库)
- 位于 VMM 库的数据磁盘(127 GB 动态扩展磁盘,无任何操作系统设置,稍后将在“数据磁盘”部分下进行说明)
在此场景中,我将会使用“Windows Server 2012 库资源中的Internet Information Server (IIS) ”,可在 WEB 平台安装程序中查找,也可以从此处直接下载。
我已经将库项下载至 WAP01 和 VMM01 服务器端 "C:\Gallery Resources"(默认情况下,称为 WS2012_IIS_VMRole_Pkg)。
我已经通过执行以下操作将 Resource Definition Package 导入 WAP:
- 在下载库项的服务器(例如 https://wap01.fabrikam.com:30091)上以 WAP 管理员身份启动 WAP 控制台。
- 单击 WAP Clouds,然后选择 Gallery。
- 单击 Import,然后转至 "C:\Gallery Resources\WS2012_IIS_VMRole_Pkg"
- 选择 WS2012WebServer.resdefpkg,然后单击 OK 以导入。
正如先前的博客文章中所述,很多时候都没有阅读手册或者忘记执行操作。这一次没有漏掉凭据,也没有用错帐户,但问题出在设置和配置方面。
使用 WAP 和库项期间可能会遇到以下一些潜在问题:
- 导入时显示库项,但不能添加至计划。
- 填入租户门户 VM 角色输入时出现意外错误(第二个窗口)。
- 填入租户门户 VM 角色输入时显示空白窗口(第二个窗口)。
- 将 VM 角色部署至VMM 时, Windows Azure 包提示出错。
- 错误 (31371) : VMM 作业日志中显示的相同系列名称 (xxx) 和版本 (y.y.y.y) 的所有等效VHD 的VHD 标签不一致。
- 为Hyper-V 群集设置虚拟机失败。
- 租户门户中未显示库项数据磁盘。
导入时显示库项,但不能添加至计划。
错误: 库项显示在 Gallery Items 下,但不能添加至计划。
原因: 库项 (Resource Definition Package) 已经导入至 Windows Azure 门户,但尚未将 Resource Extension Package导入 VMM 或者导入失败。
要验证是否因此带来挑战,请执行以下操作:
- 以管理员身份登录 WAP。
- 单击 VM Clouds and Select Gallery。
- 单击库项列表。
图 2 :这时将显示 WAP 管理门户上导入的完整库列表
- 在主菜单上单击 Plans,然后选择一个计划(例如 Contoso.com 租户计划)。
- 选择 Virtual Machine Cloud,向下滚动至 gallery。
- 选择 Add gallery items 。
- 对照 VM Clouds 中的库项列表,检查列表中是否缺少任何计划。
图 3 :可添加至 Contoso 计划的库项列表
如上所示,对照 VM Clouds 下的库项表发现,显然并非所有库项均已添加至 Contoso 计划。
- 以管理员身份登录 VMM 服务器。
- 从 Start 菜单启动 Virtual Machine Manager PowerShell 提示符。
- 键入 Get-CloudResourceExtension |select name,然后按 Enter。
- 验证列表中是否未显示 IIS 服务器。
解决方案: 将 IIS Webserver 资源扩展软件包导入 VMM。
我们需要将 IIS Webserver 资源扩展软件导入 VMM 资源库。
大家可以在此处了解有关如何采用端到端方式执行此操作的说明。下面我将会基于 Web 服务器库项提供一个具体示例:
- 以管理员身份登录 VMM 服务器。
- 从 Start 菜单将 Virtual Machine Manger Command Shell 启动为 "Run as Administrator"。
- 运行以下命令:
$libraryShare = Get-SCLibraryShare | Where-Object {$_.Name -eq 'MSSCVMMLibrary'}
$resextpkg = $Env:SystemDrive + "\GalleryResources\My-VMRole-Pkg\MyVMRole.resextpkg"
Import-CloudResourceExtension –ResourceExtensionPath $resextpkg -SharePath $libraryShare
使用上方标记为蓝色的环境值示例:
$libraryShare = Get-SCLibraryShare | Where-Object {$_.Name -eq 'MSSCVMMLibrary'}
$resextpkg = $Env:SystemDrive + "\Gallery Resources\WS2012_IIS_VMRole_Pkg\WS2012WebServer.resextpkg"
Import-CloudResourceExtension –ResourceExtensionPath $resextpkg -SharePath $libraryShare
PowerShell 输出将如下所示:
图 4 :显示Fabrikam 环境中执行的上述命令
- 运行以下命令以验证导入是否成功。
Get-CloudResourceExtension |select name
图 5 :显示Fabrikam 环境中执行的上述命令
注意: 验证是否已将 WS2012WebServer 添加至列表。
通常,我们会验证要与 VM 角色一起使用的VHD 是否配置正确,在此情况下,我们将确定如果配置不正确将会发生什么情况。
现在,我们返回至 WAP,确定是否可以将 IIS 服务器添加至计划。为此,请执行以下操作:
- 以管理员身份打开 WAP 管理门户。(例如 https://wap01.fabrikam.com:30091)
- 从主菜单中选择 Plan。
- 选择要添加 IIS 服务器库项的计划(例如 Contoso.com 租户计划)。
- 选择 Virtual Machine Manager 作为计划服务。
- 向下滚动至 gallery,然后单击 "Add gallery items"。
- 验证列表中现是否显示 Web Server (ISS)。
图 6 :显示可添加至计划的库项列表
- 向计划添加新的库项并保存计划。
- 登录 WAP 租户门户,并以订阅用户身份访问刚刚使用 IIS 服务器库项进行更新的计划。(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081)
- 单击
- 选择 Virtual Machine Role。
- 从 Gallery 中选择 Web Server,然后单击 Next。
- 为 IIS 服务器指定名称,然后单击 Next。
- 通知发生意外错误。
有关详细信息,请参阅下一故障排除项目。
填入租户门户 VM 角色输入时出现意外错误(第二个窗口)。
错误: 填入租户门户 VM 角色输入时出现意外错误(第二个窗口)。
原因: 库项不包含与库项所需的属性匹配的 VHD。
要重现错误,请执行以下操作:
- 通过订阅服务(具有访问刚刚通过 IIS 服务器库项更新的计划的权限)登录 WAP 租户门户(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081)
- 单击 New。
- 选择 Virtual Machine Role 。
- 选择 From Gallery 。
- 选择Web Server ,然后单击 Next 。
- 为 Web Server 命名(例如 IIS01)。
- 单击 Next。
现在,您将会看到一条错误消息:Unexpected Error:
图7 : WAP 租户门户中显示意外错误
解决方案: 修改 VMM 库中的一个或多个 VHD,以包含所需的库项属性。
此处的解决方案是验证 VMM 库中是否包含 VHD,并且其中包含自述文件中要求的必要库项属性。在这种情况下,系统将抛出错误,因为它找不到需要使用的版本、操作系统、系列名称和标签匹配的 VHD。
Stephen Baron 已创建过一篇优秀的博客文章,描述如何为 VHD 设置属性。
应用程序管理 – Windows Azure 包库项的虚拟硬盘需求
为简化操作,我将使用上述属性,并遵循 Stephens 博客中所述的方法执行操作。我不打算解释 Stephen 采用这种做法的原因。
先决条件在于,您已经将“Windows Server 2012 库资源中的 Internet Information Server (IIS)”下载至 c:\Gallery Items\,如“场景”部分下所述。
为此,请执行以下操作:
- 以管理员身份登录 VMM 服务器。
- 打开文件资源管理器,然后转至 "C:\Gallery Resources\WS2012_IIS_VMRole_Pkg" 。
- 打开 WS2012WebServer-Readme 文件。
注意操作系统虚拟硬盘表:
我们将对 VHD 使用以下值:
操作系统: Windows Server 2012 R2 Standard
系列名称: Windows Server 2012 R2 Standard
标签 WindowsServer2012, .NET3.5
版本: 1.0.0.0
- 打开 Virtual Machine Manager 控制台。
- 选择 Library > [Library Name] > VHDs 。
- 选择安装 Windows Server 2012 R2 并启用 .Net 3.5 的 VHD(例如 Win2012R2Base.vhdx)。
- 双击 VHD。
- 在 Family 中,指定 Windows Server 2012 R2 Standard(您可以在字段中键入)。
- 在 Release 中,指定 1.0.0.0(您可以在字段中键入)。
- 从 Operating System 下拉列表中选择 Windows Server 2012 R2 Standard。
现在,VHD 将如下所示:
图 8 : GUI 的VHD 属性图片
- 单击 OK 以将设置保存至 VHDX 文件。
我们需要标记 VHDX 文件,此操作无法从 GUI 中完成。为此,请执行以下操作:
应将以下标记添加至 VHDX:
- WindowsServer2012R2
- .NET3.5
- 从 Start 菜单中启动 Virtual Machine Manager Command Prompt。
运行以下命令:
$myVHD = Get-SCVirtualHardDisk | where {$_.Name –eq 'Win2012R2Base.vhdx'}
$tags = $myVHD.Tag
if ( $tags -cnotcontains "WindowsServer2012R2" ) { $tags += @("WindowsServer2012") }
Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags
输出将如下所示:
图 9 :用于将标签添加至 VHD 的PowerShell 命令
由于我们还需要另外一个“标签”,我们将通过执行以下操作再此运行命令:
$tags = $myVHD.Tag
if ( $tags -cnotcontains ".NET3.5" ) { $tags += @(".NET3.5") }
Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags
输出将如下所示:
图 10 :用于将标签添加至 VHD 的PowerShell 命令
- 通过运行以下命令,验证是否已添加这两个标签:
Get-SCVirtualHardDisk |where {$_.Name -eq 'Win2012R2Base.vhdx'} |select Name, FamilyName, OperatingSystem, Version, Tag
这将会向您显示已应用至 VMM 库 VHDX 文件的设置概述。
图 11 :运行 Get-SCVirtualHardDisk 的输出
现在,我们已经为 VHDX 设置了必要的属性,下面检查属性是否奏效。
- 注销 WAP 租户门户。
- 通过订阅服务(具有访问刚刚通过 IIS 服务器库项更新的计划的权限)登录 WAP 租户门户(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081)
- 单击 New。
- 选择 Virtual Machine Role 。
- 选择 From Gallery 。
- 选择Web Server,然后单击 Next。
- 为 Web 服务器(例如 IIS01)命名,然后单击 Next。
- 验证是否显示第二个输入屏幕。
图 12 : WAP 管理门户中的VM 角色( Web 服务器)
填入租户门户 VM 角色输入时显示空白窗口(第二个窗口)
错误: 填入租户门户 VM 角色输入时显示空白窗口(第二个窗口)。
原因: 托管 VHDX 文件的 VMM 库不属于分发 VM 角色的目标 VMM Cloud。
要重现错误,请执行以下操作:
- 通过订阅服务(具有访问刚刚通过 IIS 服务器库项更新的计划的权限)登录 WAP 租户门户。(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081)
- 单击 New。
- 选择 Virtual Machine Role 。
- 选择 From Gallery 。
- 选择Web Server,然后单击 Next。
- 为 Web 服务器(例如 IIS01)命名,然后单击 Next。
- 现在,将会看到一个空白屏幕:
图 13 : WAP 租户门户中的空白WAP 表单
解决方案: 将库添加至 VMM Cloud
- 以管理员身份登录 VMM 服务器。
- 打开 Virtual Machine Manager 控制台。
- 选择 VMs and Services。
- 右键单击计划在 WAP 中使用的云,然后选择 Properties(例如 Contoso)。
- 在左侧菜单中选择 Library,然后单击 Add 。
- 选择托管 VM 角色 VHDX 文件的库(例如 MSSCMVVLibrary),然后单击 OK 。
- 关闭 VMM 控制台。
- 通过订阅服务(具有访问刚刚通过 IIS 服务器库项更新的计划的权限)登录 WAP 租户门户。(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081)。
- 单击 New 。
- 选择 Virtual Machine Role 。
- 选择 From Gallery 。
- 选择Web Server,然后单击 Next。
- 为 Web 服务器(例如 IIS01)命名,然后单击 Next。
- 验证是否显示第二个输入屏幕。
图 14 : WAP 租户门户的VM 角色表单
将 VM 角色部署至 VMM 时, Windows Azure 包提示出错。
错误: 将 VM 角色部署至 VMM 时,Windows Azure 包提示出错。
原因: VMM Cloud 的功能配置文件已被设置为一个或多个配置文件。
解决方案: 取消选中 WAP 正在对 VMM Cloud 使用的所有功能配置文件。
- 以管理员身份登录 VMM 服务器。
- 打开 Virtual Machine Manager 控制台。
- 选择 VMs and Services 。
- 右键单击计划在 WAP 中使用的云,然后选择 Properties(例如 Contoso)。
- 选择 Capability Profiles 。
- 取消选中所有功能配置文件,然后单击 OK。
- 重试 VM 部署操作以验证其是否正常运行。
VMM 作业日志中显示的相同系列名称 (xxx) 和版本 (y.y.y.y) 的所有等效 VHD 的 VHD 标签不一致
错误: VM 角色部署失败后,VMM 中显示作业错误:错误 (31371):VMM 作业日志中显示的相同系列名称 (xxx) 和版本 (y.y.y.y) 的所有等效 VHD 的 VHD 标签不一致。
图 15 : WAP 租户门户中显示的错误
原因: 两个 VHD 的系列和版本完全相同,但 VMM 库中显示的标签不同。
执行以下操作以验证问题。
- 以管理员身份登录 Virtual Machine Manager。
- 启动 Virtual Machine Manager 控制台。
- 选择 Library。
- 选择 Library Servers > [Library Server name] > [Library Share] > VHDs。
- 查找系列、操作系统和版本相同的所有 VHD。
解决方案: 系列、操作系统和版本完全相同的两个 VHD 必须具有相同的标签。共有两种解决方案:第一种解决方案是使用一个 VHD,将操作系统、系列和版本相同的其他 VHD 中的标签添加至 VMM 库中的一个 VHD,然后从库中删除系列、操作系统和版本相同的其他 VHD。第二种方案是更改某个 VHD 的系列和版本,使其与库中的其他 VHD 不匹配。
共有两种途径可以解决这个问题:
将标签合并至某个 VHD 文件,然后从库中删除其他 VHD(首选解决方案)
- 记录从上述步骤中找到的具有类似系列和版本属性的 VHD 名称。
- 以管理员身份打开 Virtual Machine Manager 命令外壳。
- 运行以下命令以查看 VHD 标签。
Get-SCVirtualHardDisk -name '<VHD File>'} |select Name, FamilyName, OperatingSystem, Version, Tag
示例:
Get-SCVirtualHardDisk -name 'Win2012R2Base.vhdx' |select Name, FamilyName, OperatingSystem, Version, Tag
输出将如下所示:
图 16 : VMM 库虚拟硬盘输出
- 从上述命令的 VHD 输出中查找类似的 VHD 并添加这些标签。
$myVHD = Get-SCVirtualHardDisk | where {$_.Name –eq '<VHD File>'}
$tags = $myVHD.Tag
if ( $tags -cnotcontains "<TAG1>" ) { $tags += @("<TAG1>") }
if ( $tags -cnotcontains "<TAG2>" ) { $tags += @("<TAG2>") }
Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags
示例:
$myVHD = Get-SCVirtualHardDisk | where {$_.Name –eq 'Win2012R2Base.vhdx'}
$tags = $myVHD.Tag
if ( $tags -cnotcontains "SQL2012" ) { $tags += @("SQL2012") }
if ( $tags -cnotcontains ".NET4.5" ) { $tags += @(".NET4.5") }
Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags
- 再次运行上方的 Get-SCVirtualHardDisk 命令,检查是否已应用该标签。
图 17 : VMM 库虚拟硬盘输出
- 返回至 VMM 控制台中的 VMM 库。
- 右键单击已将标签移动至其他 VHD 的 VHD,然后单击 Delete。
- 关闭 VMM 控制台。
- 重新部署 VM 角色,以验证解决方案是否正常运行。
更改其中一个 VHD 的系列名称或版本。
- 打开系列和版本类似的其中一个 VHD。
- 将系列名称更改为与 VM 角色自述规范匹配的另外一个值,单击 OK 以修改 VHD。
- 重新部署 VM 角色,以验证解决方案是否正常运行。
为具有 Hyper-V 群集的VMM Cloud 设置虚拟机失败
错误: 在将 VM 角色部署至托管 Hyper-v 群集的 VMM Cloud 时,Windows Azure 包出错。
原因: 未为群集设置CreateHighlyAvailableVmRoles 属性,因此云(包含 Hyper-V 群集)的 VM 角色设置失败。
解决方案: VM 云必须包含名为 CreateHighlyAvailableVmRoles 的自定义属性并将其值设置为 true,以便将虚拟机配置为高度可用。
- 以管理员身份登录 VMM 服务器。
- 打开 Virtual Machine Manager 控制台。
- 选择 VMs and Services 。
- 右键单击计划在 WAP 中使用的云,然后选择 Properties(例如 Contoso)。
- 选择 Custom Properties选项卡。
- 单击 Manage Custom Properties。
- 在 Object Type 中,选择 Cloud。
- 单击 Create 以创建新的属性。
- 将该属性命名为 CreateHighlyAvailableVmRoles ,然后单击 OK 。
- 选择该新属性,然后单击 Add。
- 单击 OK。
- 在属性值中,键入 true。
- 单击 OK。
租户门户中未显示库项数据磁盘。
错误: 部署至云后,未显示 VM 角色的数据磁盘。
图 18 : WAP 租户门户中的 VM 角色表单
原因: 所需的数据 VHD 属性设置不正确。
解决方案: VMM 库中的 VHD 必须将系列名称、版本集和操作系统集设置为 None。为此,请执行以下操作:
- 打开 Virtual Machine Manager 控制台。
- 选择 Library > <Library Name> > VHDs。
- 选择将用作 VM 角色数据磁盘的 VHD(例如 Data Disk.vhdx)。
- 双击该 VHD。
- 将 Family Name 和 Release 字段设置为与 VM 角色的操作系统磁盘相同的值(例如 Windows Server 2012 Standard、Release: 1.0.0.0)。
图 19 : VMM 控制台的VHD 属性
- 验证数据磁盘操作系统是否设置为 None。
- 单击 OK。
- 关闭 VMM 控制台。
- 重新执行步骤以验证修复情况。
图 20 : WAP 租户门户的 VM 角色表单
希望本文列出的这一系列可能挑战可以更有效地帮助您实施 Windows Azure 包和库项。
我要感谢 Stephen Baron 帮助整理这篇博客文章。
如有任何意见,请随时向我提出;或者,也可以向我反映您遇到的其他一些挑战。
下次再见,祝大家在使用 Windows Azure 包和库项的过程中一帆风顺。
Comments
- Anonymous
June 25, 2014
根本没人, 悲剧啊