公司虛擬化平臺VMware vCenter Server沒法鏈接故障排查解決

1.環境:java

系統:Windows 2008R2web

vCenter版本:VMware vCenter Server 5.1.799731sql

數據庫:Oracle 11.2.0數據庫

2.故障描述:apache

用VMware vSphere Client客戶端沒法登陸,提示「出現未知鏈接錯誤。(因爲鏈接故障,請求失敗。沒法鏈接到遠程服務器)vim

wKioL1RQcpnjwCH2AACmkT3P_HA004.jpg

排錯過程:瀏覽器

1.mstsc遠程桌面到服務器。安全

打開服務器管理器--服務,找到vCenter的服務VMware VirtualCenter Server,發現服務沒有啓動。服務器

wKiom1RQckLCxCldAAHuBogx23M239.jpg

2.確認oracle數據庫的服務OracleServiceBNVCDB狀態,爲已啓動狀態。oracle

wKioL1RQcpnD2hmJAAEBnfNylYY783.jpg

3.手動嘗試啓動vCenter服務,啓動失敗,報錯

wKioL1RQcprg3hj6AAQrQA8KMn4101.jpg

4.此時,懷疑是否是Windows系統自己問題,因而,嘗試重啓系統。看來這招大招也不行,vCenter服務依然沒法啓動。根據報錯提示,查看系統事件日誌,診斷--Windows日誌--系統。果真發現有錯誤信息:「VMware VirtualCenter Server 服務因 系統找不到指定的文件。 服務特定錯誤而中止。(the VMware VirtualCenter Server service terminated with service-specific error The system cannot find the file specified..)」

wKiom1RQckOjIbagAAE_yBMKSj8673.jpg

根據錯誤提示,到vmware 官網查KB庫http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1003926,根據KB的解決方案去排查,問題依舊,看來這個KB不適用當前的問題。

5.繼續查看Windows的系統日誌,診斷--Windows日誌--應用程序。看到一條錯誤信息:「沒法找到來自源 VMware VirtualCenter Server 的事件 ID 1000 的描述。本地計算機上未安裝引起此事件的組件,或者安裝已損壞。能夠安裝或修復本地計算機上的組件。若是該事件產生於另外一臺計算機,則必須在該事件中保存顯示信息。 如下是包含在事件中的信息:  Failed to intialize VMware VirtualCenter. Shutting down... 

消息資源存在,但在字符串/消息表中找不到該消息」

wKioL1RQcpryJE1WAAG6w_oVZps509.jpg

根據錯誤的信息繼續上官網查KB庫,根據查到的幾個KB庫,問題依然沒法解決。

6.沒辦法,只能看vCenter的日誌了。Note: In Windows 2008, the vpxd.log file is located at C:\ProgramData\VMware\VMware VirtualCenter\Logs.

看到日誌最後有個錯誤輸出:

2014-10-28T15:09:31.000+08:00 [04992 error 'vpxdvpxdMain'] [Vpxd::ServerApp::Init] Init failed: Unexpected exception

--> Backtrace:

--> backtrace[00] rip 000000018018977a 

--> backtrace[01] rip 0000000180100c98 

--> backtrace[02] rip 0000000180101fae 

--> backtrace[03] rip 000000018008aeab 

--> backtrace[04] rip 0000000000514971 

--> backtrace[05] rip 00000000004b1298 

--> backtrace[06] rip 00000000004b16c9 

--> backtrace[07] rip 0000000000420fae 

--> backtrace[08] rip 0000000140ddbfb8 

--> backtrace[09] rip 000000013fcd0078 

--> backtrace[10] rip 000000013fcd016a 

--> backtrace[11] rip 000000013fcd0279 

--> backtrace[12] rip 000000013fcd0609 

--> backtrace[13] rip 0000000140012903 

--> backtrace[14] rip 00000001407be4b9 

--> backtrace[15] rip 00000001407b835c 

--> backtrace[16] rip 00000001409d8a3b 

--> backtrace[17] rip 000007feff26a82d 

--> backtrace[18] rip 0000000077a4f56d 

--> backtrace[19] rip 0000000077b83281 

-->

2014-10-28T15:09:31.000+08:00 [04992 warning 'VpxProfiler'] ServerApp::Init [TotalTime] took 11122 ms

2014-10-28T15:09:31.000+08:00 [04992 error 'Default'] Failed to intialize VMware VirtualCenter. Shutting down...

2014-10-28T15:09:31.000+08:00 [04992 info 'vpxdvpxdSupportManager'] Wrote uptime information

2014-10-28T15:09:31.889+08:00 [03356 warning 'VpxProfiler' opID=SWI-ee9b4a9d] VpxUtil_InvokeWithOpId [TotalTime] took 12012 ms

2014-10-28T15:09:43.901+08:00 [03356 warning 'VpxProfiler' opID=SWI-b94098aa] VpxUtil_InvokeWithOpId [TotalTime] took 12012 ms

2014-10-28T15:09:55.913+08:00 [03356 warning 'VpxProfiler' opID=SWI-898eea54] VpxUtil_InvokeWithOpId [TotalTime] took 12012 ms

2014-10-28T15:10:07.925+08:00 [03356 warning 'VpxProfiler' opID=SWI-aaa55fdf] VpxUtil_InvokeWithOpId [TotalTime] took 12012 ms

2014-10-28T15:10:19.937+08:00 [03356 warning 'VpxProfiler' opID=SWI-46814322] VpxUtil_InvokeWithOpId [TotalTime] took 12012 ms

2014-10-28T15:10:20.936+08:00 [04992 info 'Default'] Forcing shutdown of VMware VirtualCenter now

其中有幾個關鍵字:「Init failed: Unexpected exception」,從字面看不出具體是什麼緣由,只能仍是藉助萬能的google。根據關鍵字搜索了一下,果真有相關的文章,但很不幸,這些文章都沒法解決這個問題。

7.時間一分一秒的過去,依然沒什麼頭緒,只能不斷的看網上的文章,看了好幾篇的文章,雖然狀況描述的不同,可是不少都反饋vCenter服務沒法啓動的問題,大多數都是數據庫方面問題。因而,心思重點放在oralce數據庫。

8.手動重啓oracle數據庫服務,確認oracle數據庫服務正常,而後再啓動vcenter服務,仍是失敗。

9.繼續搜索,找到一篇文章:https://communities.vmware.com/message/2151843,描述的問題很相近,因而對着文章去排查

1)在瀏覽器輸入https://192.168.1.244:7444/ims/CommandServer,提示404錯誤。爲了確認是否是都是提示404的,找了公司另外一個正常的vCenter服務器驗證,正常的提示應該是「該網站的安全證書不受信任」。

2)根據以前的經驗,網站提示404,通常是找不到頁面或者數據庫鏈接錯誤致使。難道真的是數據庫問題?繼續查.......

3)netstat -na|findstr 7444,確認了端口正常。

4)根據文章的提示,SSO SERVER數據庫有問題。查看日誌:D:\Program Files\VMware\Infrastructure\SSOServer\logs,目錄下的lookupServer日誌有報錯:

Caused by: java.sql.SQLException: ORA-28001: the password has expired

 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)

 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:388)

 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:381)

 at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:564)

 at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)

 at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)

 at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)

 at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)

 at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)

 at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:359)

 at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)

 at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)

 at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)

 at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)

 at java.sql.DriverManager.getConnection(DriverManager.java:582)

 at java.sql.DriverManager.getConnection(DriverManager.java:154)

 at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:78)

 at com.vmware.vim.lookup.impl.DbStorage$ConnectionFactoryWithSetup.createConnection(DbStorage.java:811)

 at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)

 at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)

 at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)

 at com.vmware.vim.lookup.impl.DbStorage$SqlExecutor.execute(DbStorage.java:698)

 ... 40 more

報錯提示很明顯「ORA-28001: the password has expired」,鏈接數據庫的用戶的密碼過時了。是否是這個問題引發的呢?若是把密碼過時問題解決了,是否是整個問題就解決了呢?不放過任何一個機會。

10.根據上面的錯誤提示google,找到一篇很不錯的文章,順便科普了個人oracle數據庫知識。http://hi.baidu.com/5unge/item/cade17d405b4861b21e25035

Oracle提示錯誤消息ORA-28001: the password has expired,是因爲Oracle11G的新特性所致, Oracle11G建立用戶時缺省密碼過時限制是180天(即6個月), 若是超過180天用戶密碼未作修改則該用戶沒法登陸。 Oracle公司是爲了數據庫的安全性默認在11G中引入了這個默認功能,可是這個默認的功能很容易被DBA或者是開發人員給疏忽,一旦密碼180天未修改過,就會出現這樣的問題。

看到這裏,當前環境的數據庫不就是oracle 11g的麼?看到一絲絲曙光了。根據文章的步驟:

1)SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'

查詢密碼的有效期設置,LIMIT字段是密碼有效天數。查到的結果是180天。

wKiom1RQckOCk44cAADdSwWMqk4083.jpg

2)select username,account_status from dba_users;查看用戶的狀態信息,查到不少用戶幾乎都是EXPIERD狀態。問題又來了(不是挖掘機),哪一個用戶纔是vCenter所使用的呢?

3)找到配置文件:D:\Program Files\VMware\Infrastructure\SSOServer\webapps\lookupservice\WEB-INF\classes\config,很明顯了,用戶名就是RSA_USER

wKioL1RQcprj98xuAADWkxK8cBM372.jpg

4)首先去除180天的密碼生存週期的限制

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

再查看確認,已是unlimited狀態了。

wKiom1RQckPjArYEAAFmiBz0eMc027.jpg

5)這樣修改後,用戶密碼仍是過時的,也就是說,還要修改用戶的密碼才行,爲避免修改其它密碼引發沒必要要的錯誤,仍是用回原來的密碼去修改

alter user RSA_USER identified by "your_password"; 

6)最後確認用戶

wKioL1RQcpuyBA7IAADem83ZMQk958.jpg

11.最後,重啓oracle數據庫,再啓動vcenter服務,結果,居然:還不行!淚奔~~~

12.沒轍了,繼續放大招:重啓系統。

13.奇蹟出現了,vcenter服務自啓動正常了。

14.用客戶端測試鏈接,成功了。看了看時間,時間已通過去了8個小時。

心得:

1.要善於查看日誌,定位問題。

2.善於利用搜索,官方的KB庫,若是有現成的解決方案最好,若是沒有,能夠參考思路。

3.不放過任何的錯誤提示。

相關文章
相關標籤/搜索