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裝置並開始資料遷移。
等待一段時間後,準備升級完成。
如果時間合適,點選“切換”。
切換完成。
升級成功。