一、 故障现象
本例只针对没有ViewDbChk工具的老版本horzion平台环境
近期新接手了一套horzion5.3.4的虚拟化平台,此平台尚不清楚之前做过那些操作,只知道报以下错误:
1. 系统环境
vCenter:5.5
ESXi:5.5
Horzion:5.3.4
操作系统:WindowsServer2008R2
2. 故障描述
1、桌面池删除后,原桌面池始终存在,状态在“正在删除”状态
2、桌面虚拟机状态为“正在删除(缺少)”,无法正常删除
3、虚拟机副本状态为灰色,孤立状态,无法删除
二、 原因分析
由于新接手业务,尚不清楚之前管理员做了那些操作,所以初步判断故障可能是以下原因造成:
1、管理员直接在vCenter平台内删除了链接克隆虚拟机或者挪动了虚拟机文件夹或资源池的层级位置;
2、对CS、composer、数据库或者vcenter进行了某个设备的备份恢复操作,导致LDAP、vCenter 和 View Composer 数据库之间存在不一致情况。
不管是何种原因,个人认为均是数据库不一致造成的问题
三、 故障解决
1. 方法1
对于Horizon View 6.1之上的版本,遇到此类错误,可以在连接服务器上用ViewDbChk工具,
ViewDbChk位于连接服务器以下位置:C:\Program Files\VMware\VMware View\Server\Tools\bin
我的环境是Horizon View 5.3.4,默认是没有此工具,曾经想过装个6.1版本的连接服务器,将命令拷贝回我的服务器,但运行不成功,报错。官方给的下载地址已经无法打开,网上也找不到任何此工具的下载途径,所以经过多次尝试,,此方法放弃。
2. 方法2
通过在连接服务器上部署虚拟机,虚拟机的相关信息会保存在View Composer 数据库和ADAM 数据库中,同时也会在AD域控中产生相应的信息,所以在无法通过工具进行统一操作,换种思路,自己手动操作理论上也是可行,相关步骤如下:
a) 移除 View Composer 数据库中的所有桌面引用。
b) 从连接服务器上的 ADAM 数据库中移除虚拟机。
c) 从 Active Directory 中移除所有受影响的计算机对象。
d) 从 vCenter Server 中移除桌面。
本例的实际情况在vCenter Server中已经没有此类桌面,(建议a和b同步进行)。如果桌面池还在,请在操作前禁止部署。
1) 移除Composer数据库桌面引用
使用 SviConfig RemoveSviClone 命令移除以下项目:
l View Composer 数据库中的链接克隆数据库条目。
l Active Directory 中的链接克隆计算机帐户。
l vCenter Server 中的链接克隆虚拟机。
打开Composer服务器,在cmd窗口下进入C:\Program Files (x86)\VMware\VMware View Composer目录,进行命令执行:
SviConfig -operation=RemoveSviClone -VmName=VMname -AdminUser=TheLocalAdminUser -AdminPassword=TheLocalAdminPassword -ServerUrl=TheViewComposerServerURL
l VMname:是要移除的虚拟机的名称。
l TheLocalAdminUser:是属于本地管理员组的用户的名称。默认值为Administrator。
l TheLocalAdminPassword:是用于连接到 View Composer 服务器的管理员的密码。
l TheViewComposerServerUrl:是 View Composer 服务器 URL。默认值为 https://localhost:18443/SviService/v3_0。(5.1之前版本是2.0,6.0之后的版本是v3_5)。
虚拟机需要一个一个的删除,如果需要移除大量虚拟机,可以创建一个包含每个虚拟机名称的文本文件和一个批处理文件,以对每个虚拟机执行SviConfig命令。具体方法如下
1. 将虚拟机名称复制到文本文件,并另存为 desktops.txt,保存至 SviConfig 所在的相同目录下。
2. 将以下行复制到新文本文档:
FOR /F %%A in (desktops.txt) DO sviconfig -operation=removesviclone -vmname=%%A -adminuser=username -adminpassword=password -ServerUrl=TheViewComposerServerURL
其中 username 是属于本地管理员组的用户的名称,而 password 是管理员的密码。
注意:ServerUrl 参数是可选参数,因为它有默认值。
3. 将文本文件另存为 RemoveDesktops.bat。
4. 执行 RemoveDesktops.bat。
2) ADAM 数据库中移除虚拟机。
需要在连接服务器上的ADAM数据库中删除虚拟机的相关信息,但需注意的
一点是,如果先操作删除ADAM数据库中的虚拟机,则很有可能在view administrator界面就显示虚拟机已经被删除而看不到,导致无法方便的去清除composer数据库中的数据
a) 操作步骤
Ø 在您的 View 连接服务器计算机上启动 ADSI 编辑器 实用程序。
Ø 在控制台树中,选择“连接到”。
Ø 在“选择或键入标识名或命名上下文”文本框中,键入标识名 DC=vdi, DC=vmware, DC=int。
Ø 在“选择或键入域或服务器”文本框中,选择或键入 localhost:389 或 View 连接服务器计算机的完全限定域名 (FQDN),后跟端口 389
Ø 单击新建 > 查询,在“搜索”的根目录下,单击浏览,然后选择服务器组织单位。
Ø 在“查询字符串”中,粘贴此搜索字符串:
(&(objectClass=pae-VM)(pae-displayname=
VirtualMachineName))
其中,VirtualMachineName 是要尝试查找 GUID 的虚拟机名称。您可以使用 *
或 ?
通配符来匹配多个桌面。
Ø 单击“确定”创建查询。单击左侧窗格中的查询。与搜索匹配的虚拟机将显示在右侧窗格中。
Ø 检查查询返回的项目属性,以确认已找到正确的虚拟机,并删除pae-VM
对象,以便将它们从数据库中移除。
注意:
Ø 在 ADAM 数据库中,检查 OU=Server Groups 和 OU=Applications 下是否有条目(一般情况上述操作在删除时候会一并删除)。
Ø 可通过同时从“服务器组”和“应用程序”组织单元中移除相应的池条目来从 View Manager 中移除不包含任何桌面的已损坏池。但是,从 ADAM 数据库中移除一个条目而保留另一个条目会在尝试在 View Manager 中查看池或桌面清单时导致出现 java.lang.nullpointerexception 错误。
b) 操作实例
查询出所需删除的虚拟机,配合在composer主机的操作,删除虚拟机
注意,这里的名称显示是按照GUID名称进行的显示,虚拟机的真实名称可以通过右键“属性”进行查看
两步操作做完后,桌面池和虚拟机均全部删除,故障解除。