西安 王金國 解寶琦
企業核心系統如何能夠持續保持7×24小時的高可靠性運行,是作為企業級應用系統的一項重要技術指標和研究方向,尤其是在實時性要求更高的應用領域內,這樣的系統集成能力直接考驗著系統設計者、建設者的技術能力。
系統集成過程具有更多的工程化特點,系統組件間的搭配和組裝,耦合部分的嵌套與裝配都需要很多打磨和耐心仔細調試,這樣才可能使系統應用于高可靠、高可用、高安全性的重要生產環境。系統集成過程中,可能會面臨很多具體的問題,這需要集成工程師們逐步排錯并消除,否則可能導致本來是用于增加系統容錯或高可靠性的設計反而成為系統中最不穩定的結構和部分。
本文結合構建這樣的并行集群系統可能存在的隱性問題給出一些具體的排錯過程,希望能為企業級用戶構建自己的高可靠并行集群數據庫系統給出一點建議。
集成系統描述:
采用小型機并安裝AIX作為操作系統,并在其上安裝了Oracle 數據庫系統,版本號為12.1.2.0,使用SAN網絡提供的存儲LUN 映射并組建了GPFS 文件系統卷組掛載點。并行集群內部交換機使用兩臺交換機進行堆疊處理后形成一臺高可用邏輯交換機,每臺小機節點使用兩個萬兆網口作為Oracle并行集群RAC 心跳監測網口,使用兩組千兆網口綁定分別作為業務服務網口和GPFS并發文件系統通信網口。拓撲圖如圖1 所示。

圖1 集成系統拓撲圖
AIX 系統初始安裝“AIX7100-05-03-1837”版本,按照Oracle 提供的最低安裝環境要求進行了相關參數配置并安裝了“Oracle12C 12.1.2.0”數據庫RAC環境。
集成完成后,雖然各軟件組件都成功的進行了安裝,但通過操作系統警告日志以及Oracle警告日志發現很多嚴重錯誤,并且呈現出隨機性錯誤,既有Oracle 的ORA-600 內部錯誤,也有系統自身產生的系統性錯誤,系統無法上線運行。
錯誤之多讓系統集成工程師一時沒了頭緒。經過幾天的觀察和項目組的共同協商,項目集成組決定按照“先系統后應用”的原則以模塊化功能為問題域,以問題時域為排序,逐一進行排錯和解決。
1.系統出現的第一個問題是AIX 系統的1GB 和10GB 混裝網卡(型號:ENOS PCIe24-Port(10Gb+1GbE)SR+RJ45 Adapter),通過AIX 的系統警告日志報出如圖2 所示信息。

圖2 AIX 系統警告日志報錯信息

圖3 網卡上啟用端口的另一個臨時性錯誤

圖4 通過“errpt -aj 6B877D80”命令查看報錯信息
并且在這個網卡上的所有啟用的網絡接口都會報該錯誤,通過錯誤我們可以看到,網絡接口會隨機性出現重啟的問題,這給上層GPFS以及Oracle 的心跳監測狀態帶來不確定性。更讓人擔心的是在測試實驗中我們無意中發現,如果手工拔掉某一啟用網絡接口的網線,那么該混裝網卡上的所有接口都會被重置連接。
經過與IBM 原廠工程師的聯系以及現場日志收集等工作,最終確定為AIX 操作系統級BUG,將操作系統升級到“AIX7100-05-04-1914”后,該問題得到徹底解決。
2.操作系統升級完成后,混裝網卡不再出現重置現象,但日志里依然會隨機性報出該混裝網卡上的啟用端口存在的另一個臨時性錯誤,錯誤信息如圖3 所示。
通過命令“errpt-aj 6B877D80”查看詳細信息中的描述部分如圖4 所示。
伴隨該問題出現的同時依然有“F22A8688 0508223219 P H ent3 Hardware error”硬件錯誤,此時系統補丁已經升級到廠商提供補丁集的最新版本。
為了保證該生產系統更好的穩定性,避免系統隱患帶來的重大問題,項目集成組通過配合原廠工程師進行了認真的系統日志追蹤和排查,并通過IBM 原廠工程師最終確認該問題是此款混裝網卡自身微碼BUG,經原廠工程師對該款混裝網卡進行了緊急補丁修補后,故障才得以徹底解決。
該問題屬于此款網卡特定隱性BUG,因為其在國內使用量較少,所以該問題也相當少見,用戶在選型時需要特別注意。
3.經過前兩個故障的問題排查和處理,系統報錯日志明顯減少,基本只有“FE2DEE00 0726213218 P S SYSXAIXIF DUPLICATE IP ADDRESS DETECTED IN THE NET”報錯,通過命令“errpt-aj FE2DEE00”查看詳細信息有如圖5 報錯。
經核對多條該報錯信息中的MAC 地址發現網絡接口均為Oracle 并行集群RAC心跳監測萬兆網口的MAC 地址,聯想到安裝Oracle 并行集群RAC 時使用了兩組心跳監測地址,問題應該于此有關。
于是通過了解和詢問Oracle 以及通過上網查詢類似問題,發現原來在安裝Oracle 并行集群RAC 的過程中,Oracle 通過算法生成一個169.254 網段的IP 地址,然后通過ARP 方式向局域網內發送廣播,判斷當局域網內無此IP 時,就會正式分配此IP 給RAC。此地址是分配之后無法更改的,即使修改了私網IP 地址,此IP 都不會發生變化。

圖5 查看詳細報錯信息
因為使用了兩組Oracle并行集群RAC 心跳監測,這導致了算法生成一個169.254 網段的IP 地址在兩組萬兆網口間出現了IP 地址爭搶和漂移,導致出現該問題,通過在堆疊交換機中使用VLAN 將兩組Oracle 并行集群RAC 心跳監測萬兆網口進行隔離后,該報錯信息消失。
4.經過以上排錯和處理,系統報錯全部的到了解決。剩下就只有Oracle 警告日志中的內部錯誤了,錯誤信息如圖6 所示。

圖6 OracIe 警告日志中的內部錯誤
經項目集成組通過Oracle 技術支持服務確認是“bug 21283337”導致了此ORA-600 錯誤,需要使用“patch 21283337”來修復此問題。下載補丁p21283337_12102180417_AIX64-5L.zip,并參照補丁中提供的README 安裝此補丁后,Oracle 內部錯誤消失。
通過以上的排錯和系統修補及優化,經過一周的測試以及人為制造各種鏈路中斷試驗后,系統正式上線運行。
系統集成碰到的問題可能是多方面的,可能是一個設備的多個問題,可能是一個問題相關了N個設備。系統集成工程師們需要有剝絲抽繭的耐力和善于發現的能力,逐步從繁雜的事物中抽取出真正的問題域和發現。這需要長期的習慣養成和自我能力的提升,同時也需要項目集成團隊里成員間的良好協作和溝通。