【VMware vCenter】使用Reduced Downtime Update (RDU)升级更新vCenter Server。
Reduced Downtime Upgrade (RDU) 减少停机时间更新是用于vCenter Server更新升级的一种新的方式,顾名思义,主要目的就是为了减少在vCenter Server更新升级过程中的维护时间,经过测试验证,最快能够在几分钟之内完成对vCenter Server的更新升级(取决于环境)。
我之前在另外一篇文章中(更新VCSA补丁到8.0 U2,一直卡在93%,最后提示“Failed to perform cleanup”。)提到过这个功能,尽管VMware 知识库(KB 92659)已经把这个说的很明白了,但我还是决定再写一篇文章来介绍这个功能,也算是对RDU的一些个人理解吧(网上关于这个功能的中文介绍较少)。
RDU使用基于迁移的方法将一个vCenter Server更新升级到一个新的vCenter Server,这与我们使用vCenter ISO安装镜像中的升级(6.7->7.0 或7.0 ->8.0)方案很相似,但不完全一样。
我们在使用vCenter ISO跨版本升级的时候,会部署一个新的vCenter Server,在配置过程中勾选将所有vCenter Server上面的数据、日志及配置文件等复制到新的vCenter中,以此来实现主要版本的升级。在这个升级的过程中,我们的现有vCenter不得不停止服务以完成对其配置文件的复制等操作,这个期间vCenter服务会变成不可用状态,并且可能持续很长一段时间(根据配置数据的大小)。而RDU功能与之有些不同,在使用RDU功能进行数据及配置文件的复制过程中,现有的vCenter Server将保持可用状态,用户及管理员可以正常使用vCenter,在RDU完成复制以后,只需要找一个窗口期点击完成对新vCenter和旧vCenter的切换即可,整个切换期间可能只有很少量的数据进行同步,所以可以控制到很短的时间(最快可能几分钟)。
VMware 根据 vCenter ISO进行跨版本升级的工作原理发布了RDU功能,用于实现对vCenter Server的常规补丁升级。以往,常规补丁升级方式需要将 vCenter ISO 挂载到 vCenter Server 虚拟机的 CD-ROM 设备上,然后再跳转到VAMI管理后台,使用“更新”工作流完成对vCenter的升级,或者使用software-packages命令行方式。这种升级方式同样需要停止现有vCenter服务,并且可能持续很长时间。使用RDU,我们只需要将vCenter ISO挂载后,在vSphere Client界面即可对vCenter完成更新,这个两项工作可以在同一界面完成,不需要再进行跳转了。
参考VMware 知识库文章,RDU支持以下源vCenter更新升级到目标vCenter版本:
源vCenter | 目标vCenter |
8.0 GA | 8.0 U2 或之后版本 |
8.0 U1 | 8.0 U2 或之后版本 |
8.0 P02 | 8.0 U2 或之后版本 |
8.0 U2 | 8.0 U2 或之后版本 |
注意,这里说明一下,根据上表以及知识库中的说明,使用RDU升级分为两类,一类是vCenter 8.0 U2之前的版本升级的8.0 U2,另一类是从vCenter 8.0 U2升级到之后的版本,我详细说一下这两者的区别。
vCenter 8.0 U2这个版本是一个分水岭,使用RDU工作流需要先升级vCenter Life-cycle Manger插件版本(注意,这里说的是插件版本,并不是vCenter的版本。也不是vSphere Lifecycle Manager)。
如果你当前环境是vCenter 8.0 U2之前的版本,如果要使用RDU工作流,只能使用VAMI里面配置的vCenter 更新存储库,就是下面这个地方,并在第三步升级vCenter Life-cycle Manger插件版本后再重新启动工作流使用CD-ROM挂载的镜像进行后续步骤更新。
vCenter 8.0 U2之前版本的更新源只能从更新存储库获取,上面默认的更新存储库是https://vapp-updates.vmware.com/vai-catalog/valm/vmw/8d167796-34d5-4899-be0a-6daade4005a3/8.0.0.10000.latest/(版本不同地址不一样),如果你的vCenter Server能够连接互联网则还好,可以直接使用官方的默认更新存储库,如果不能联网,那就还需要在本地配置离线更新存储库,并在VAMI下图中的地方手动指定,整个过程非常麻烦。
如果你当前环境是vCenter 8.0 U2及之后的版本,那么更新源支持直接从vCenter 虚拟机的CD-ROM光驱设备挂载的vCenter ISO文件上获取(因为vCenter Life-cycle Manger插件已经是vCenter 8.0 U2或之后的版本了)。如下图所示,我们只需要挂载vCenter ISO文件到vCenter Server虚拟机的CD-ROM光驱,然后在RDU升级界面点击检查即可直接进行选择了。
注意,不管是vCenter 8.0 U2之前还是之后的版本,使用RDU更新工作流,挂载到vCenter 虚拟机CD-ROM光驱的vCenter ISO文件不是我们常规补丁升级的ISO包(文件中带patch),而是完整的vCenter ISO安装包。
综上所述,当前环境是vCenter 8.0 U2之前的版本,需要通过官方更新存储库或自定义离线更新存储库,在RDU更新工作流第三步将vCenter Life-cycle Manager 插件更新到vCenter 8.0 U2或之后的版本后,再通过vCenter 虚拟机CD-ROM挂载的vCenter ISO镜像进行后续更新;当前环境是vCenter 8.0 U2及之后的版本,那么可以直接使用vCenter 虚拟机CD-ROM挂载的vCenter ISO镜像进行RDU工作流更新。
所以,如果当前环境是vCenter 8.0 U2之前的版本,建议还是使用以前的常规补丁升级方式升级到vCenter 8.0 U2或之后版本(大多数vCenter环境不能连接互联网,而且配置离线更新存储库非常麻烦,并且有bug,看下面),如果是vCenter 8.0 U2及之后版本那可以选择使用RDU工作流进行更新升级。
下面演示一下上面说的两种场景,vCenter 8.0 U2之前的版本升级到vCenter 8.0 U2或之后版本 和 vCenter 8.0 U2及之后版本升级到更新的版本。
一、vCenter 8.0 升级到 vCenter 8.0 U2a
我这边准备了vCenter 8.0 (内部版本号20519528) 环境,这个版本是vCenter初始发布的8.0 GA正式版本,关于vCenter Server 产品版本和内部版本号的对应关系可以看我的另一篇文章(VMware by Broadcom 产品版本和内部版本号)。
由于大多数vCenter环境都是不能连接互联网的,所以,在使用RDU工作流之前,我们需要参考VMware vSphere 文章“配置基于 URL 的修补”配置离线更新存储库。(注意,这篇文章的中文翻译有误。)
参考文章,这个离线更新存储库仅支持HTTPS或FTPS的URL链接方式,所以,我们需要在本地搭建一个基于https的web文件服务器(例如nginx),再登录 VMware Customer Connect 下载vCenter的ZIP包修补程序并上传到这个web文件服务器。在web文件服务器的根目录创建一个存储库目录(例如vc_update_repo),将vCenter 修补程序解压到这个存储库目录当中,最后将https://web_server_name.your_company.com/vc_update_repo 存储库链接到 VAMI 的更新配置里面手动指定即可(或者登录vcenter appliancesh使用命令update.set --currentURL https://web_server_name.your_company.com/vc_update_repo 进行设置)。
安装nginx并配置https。nginx的安装有很多种方式,可以参考下面使用yum在线安装,环境是centos 7。
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum list nginx --showduplicates
yum install -y nginx-1.24.0
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
setenforce 0
systemctl start nginx
systemctl enable nginx
配置文件服务器,https配置可以参考这篇文章。修改文件后,需重新启动nginx服务。确保能通过https访问文件服务器。
vim /etc/nginx/nginx.conf
systemctl restart nginx
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
listen 443 ssl;
ssl_certificate /usr/local/ssl/server-nopassword.crt;
ssl_certificate_key /usr/local/ssl/server-nopassword.key;
location / {
root /data;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8;
}
}
include /etc/nginx/conf.d/*.conf;
}
创建存储库目录(vc_update_repo),最终的目录结构(包括修补程序解压后的子目录 manifest 和 package-pool)。
/data
└── vc_update_repo
├── manifest
└── package-pool
将vCenter的修补程序文件上传至web服务器并解压,解压出了两个目录 manifest 和 package-pool。
unzip VMware-vCenter-Server-Appliance-8.0.2.00100-22617221-updaterepo.zip
如果一切顺利,你现在应该已经准备好了vCenter 离线更新存储库。
登录VAMI 后台(https://vcsa-ip:5480),展开“更新”- “设置”,在存储库设置中指定URL地址,取消勾选证书检查。
点击保存后,系统会自动检测更新并发现存储库中的修补程序。
现在,登录vSphere Client,展开更新,可以看到更新存储库已经从VMware 默认存储库变成自定义存储库了。
点击选择版本,选择可用的更新并确定。
选择更新后,会检测当前vCenter的环境是否可以升级到目标版本。提示我当前vCenter Server未进行备份。
产品互操作性检测,只有加入CEIP以后该检查才有用。直接忽略点击下一步。
注意,如果是生产环境一定要提前做好vCenter 备份,我这里就忽略了。
更新vCenter Life-Cycle Manager,提示报错“Failed to load repository manifest data for the configured upgrade.”,这个问题在vCenter Sever 8发行说明中一直存在并且没有得到修复,这是使用具有 VMware Certificate Authority (VMCA) 不信任的自签名证书的自定义更新存储库导致的, vCenter Lifecycle Manager 无法从此类存储库下载文件。上面配置的离线更新库的web服务器确实配置的是自签名ssl证书,参考 KB 89493 中的解决方案,并没有得到解决(如果有人成功了,请告诉我)。其实vCenter本身不就是一个CA吗,能不能直接在vCenter上为web服务器颁发一个证书?(没有试过)
配置离线存储库失败。所以重新换回官方的在线更新存储库(需要互联网连接)。在VAMI里面重新修改为默认存储库即可。
修改为默认存储库后,重新选择更新的版本,还是选择vCenter 8.0 U2a(22617221)。
备份vCenter Server。
使用默认更新存储库后没有报错,确定更新的版本是否正确。
点击“更新插件”。
更新完成,页面自动刷新。页面顶部会出现下面的内容显示。
已成功取消部署插件 VMware vCenter Server Lifecycle Manager:8.0.0.10000。请刷新浏览器以将其移除。
已成功部署插件 VMware vCenter Server Lifecycle Manager:8.0.2.100。请刷新浏览器以启用插件。
同时出现下面的错误。提示vCenter 虚拟机的CD-ROM没有检测到ISO文件。
An error occurred while mounting the ISO file. Verify if the device attached to the CDROM is a vCenter Server ISO file.
注意,如果在线更新插件出现“Update 8.0.x.xxxxxx for component vlcm is not found”错误,请参照KB 94779进行处理。
将vCenter ISO镜像文件(完整安装包)挂载到vCenter 虚拟机的CD-ROM设备。
重新到vCenter 更新页面,重新检测ISO 文件,提示如下报错。
Upgrade to target version 8.0.2.00100 using this feature is not supported for vCenter Servers that do not manage their own ESXi host and VM.
由于vCenter是我部署的一个测试环境,运行vCenter虚拟机所在的主机并没有被vCenter所纳管,所以会提示你上面的错误,也就说,使用RDU工作流升级,需要vCenter纳管自身VM虚拟机所在的ESXi主机,否则不受支持。将vCenter 虚拟机所在的主机加入vCenter后,重新连接vCenter ISO镜像文件即可。
重新到vCenter 更新页面,重新检测ISO 文件,检测正常。
备份vCenter Server。
升级vCenter Server Life-Cyle Manager插件。
配置目标vCenter设备。点击“配置目标设备”。
接受协议。
是否加入CEIP。
配置目标vCenter的存放位置。可以选择设置一个新的位置。
目标vCenter 配置设置。可以选择与源vCenter相同的配置,或者选择“详细配置”进行自定义配置。
选择详细配置以自定义设置。配置目标vCenter存储的文件夹。
配置目标vCenter计算资源。
配置目标vCenter的虚拟机名称和临时密码。可以是源vCenter名称或者设置新名称。
配置目标vCenter设备的部署大小。注意,部署大小不能低于源vCenter的部署大小。比如源vCenter是小型,那部署大小不能选择微型。
配置目标vCenter的数据存储位置。
配置目标vCenter的临时网络。用于连接源vCenter进行数据迁移。
配置完成。
点击下一步后,点击“启动升级”。
启动升级后,会创建一个目标vCenter虚拟机。在这个过程中,你也可以点击“取消升级”。
等待一段时间后,升级完成。此升级过程,源vCenter将保持可用状态,直到你在合适的窗口时间点击“切换”按钮以完成vCenter的更新。
切换期间,源vCenter服务将会停止,直到目标vCenter接管服务,此过程的时间多少取决于不同的环境,最块切换时间几分钟内即可完成。
点击“切换”。将在独立的窗口(https://vcenter.mulab.local/lcm-ui/?view=standaloneUi)执行这一过程。
完成切换。
登录vSphere Client,查看vCenter Server已更新至目标版本。
注意,源vCenter已被关机,如果源vCenter重新启动,则目标vCenter会被删掉。建议在源vCenter配置里面将网卡开机自动连接取消掉。
二、vCenter 8.0 U2a 升级到 vCenter 8.0 U2b
第二种类型,使用RDU工作流从vCenter 8.0 U2 及之后的版本升级到更新的版本(例如vCenter 8.0 U2b)同样非常简单,过程跟上面的基本差不多。
将vCenter ISO镜像文件(完整安装包)挂载到vCenter虚拟机的CD-ROM光驱。
转到vCenter更新,可以看到已自动检测到目标vCenter版本。
备份vCenter Server。
升级vCenter Server Lifecycle Manager 插件。
更新完成,提示刷新浏览器。
配置目标vCenter设备。
接受协议。
是否加入CEIP。
目标vCenter的部署位置。
目标vCenter配置。选择源vCenter相同配置。
目标vCenter虚拟机名称和临时root密码。
目标vCenter临时网络设置。
完成配置。
点击升级。同样会创建目标vCenter设备并开始数据迁移。
等待一段时间后,准备升级完成。
如果时间合适,点击“切换”。
切换完成。
升级成功。