本節說明已知的高可用性資料庫 (HADB) 問題以及相關的解決方案。
在兩個子網路上配置為具有雙網路的 HADB,在 Solaris SPARC 上工作正常。然而,我們發現由於作業系統的問題或同一硬體平台上的網路驅動程式,Solaris x86 與 Linux 平台並不總能正確處理雙網路。這將引起 HADB 的以下問題:
在 Linux 上,在傳送訊息時會封鎖某些 HADB 程序。這將引起 HADB 節點重新啟動和網路分割。
在 Solaris x86 上,網路故障後會出現一些問題,這會阻止切換至其他網路介面。這種情況不會經常發生,因此最好還是具有兩個網路。這些問題中的一部分在 Solaris 10 中得到解決。
不支援幹線。
HADB 在 Windows 2003 上不支援雙網路 (ID 5103186)。
建立新資料庫可能失敗並顯示以下錯誤,表示可用的共用記憶體區段不足:
HADB-E-21054:System resource is unavailable:HADB-S-05512:Attaching shared memory segment with key "xxxxx" failed, OS status=24 OS error message:Too many open files.
驗證是否已配置共用記憶體,以及配置是否能夠正常工作。尤其,在 Solaris 8 上,檢視檔案 /etc/system,並檢查變數 shmsys:shminfo_shmseg 的值是否至少為每個主機上節點數目的六倍。
當 Intimate Shared Memory 建立及附加至共用記憶體區段時,HADB 4.3-0.16 及更新版本會配置為使用 Intimate Shared Memory (使用 SHM_SHARE_MMU 旗標)。使用此旗標基本上會在實體記憶體中鎖定共用記憶體區段,以避免共用記憶體區段遭到分頁。這在安裝低階機器時很容易造成問題。
因此,若開發者在使用 Application Server 7.0 EE 的機器上有 512 MB 的記憶體和許多可用的交換空間,之後再安裝 7.1 EE 或更新版本,則開發者將會在配置預設 clsetup 叢集 (建立兩個 HADB 節點,每個節點的 devicesize 為 512) 時發生問題,而導致沒有足夠的實體 RAM 可支援這兩個節點皆所需的共用記憶體。
請務必在並置應用程式伺服器和 HADB 時,具備建議的記憶體容量。請參閱HADB 需求和支援的平台以取得更多資訊。
當使用 hadbm set 增加裝置或緩衝區大小時,管理系統會在建立資料庫或增加節點時檢查資源可用性,但不會在裝置或主記憶體緩衝區大小變更時檢查是否有足夠的可用資源。
增加任何 devicesize 或 buffersize 配置屬性之前,驗證所有的主機上是否有足夠的可用磁碟/記憶體空間。
不可能在不同主機的不同位置使用相同名稱註冊同一套裝軟體,例如:
hadbm registerpackage test --packagepath=/var/install1 --hosts europa11 Package successfully registered. hadbm registerpackage test --packagepath=/var/install2 --hosts europa12 hadbm:Error 22171: A software package has already been registered with the package name test. |
HADB 不支援資料庫叢集中跨節點的不同路徑。請確定 HADB 伺服器安裝目錄 (--packagepath) 在所有參與的主機上均相同。
當在具有多個網路介面的主機上執行管理代理程式時,如果部分網路介面不在同一個子網路中,則 create domain 指令可能失敗:
hadbm:Error 22020: The management agents could not establish a domain, please check that the hosts can communicate with UDP multicast. |
管理代理程式將 (如果未另行配置) 使用「第一個」介面進行 UDP 多重播送 (java.net.NetworkInterface.getNetworkInterfaces() 結果所定義的「第一個」)。
最佳解決方案是告訴管理代理程式要使用的子網路 (在配置檔案中設定 ma.server.mainternal.interfaces,例如 ma.server.mainternal.interfaces=10.11.100.0)。另一種方法是,將子網路間的路由器配置為路由多重播送資料封包 (管理代理程式使用多重播送位址 228.8.8.8)。
嘗試管理代理程式的新配置之前,您必須清除管理代理程式儲存庫。停止網域中的所有代理程式,並刪除儲存庫目錄 (由管理代理程式配置檔案中的 repository.dr.path 識別) 中的所有檔案和目錄。必須先在所有主機上完成此作業,方可使用新配置檔案重新啟動代理程式。
刪除 HADB 實例之後,嘗試使用 configure-ha-cluster 指令建立新實例失敗。問題在於,原始 HADB 實例在 ha_install_dir/rep/* 和 ha_install_dir/config/hadb/instance_name 中留下了舊目錄。
請務必於刪除 HADB 實例之後,手動刪除這些目錄。
在 Solaris 10 作業系統上,使用 hadbm 指令啟動、停止或重新配置 HADB 可能會失敗或當機,並顯示下列錯誤之一:
hadbm:Error 22009: The command issued had no progress in the last 300 seconds. HADB-E-21070: The operation did not complete within the time limit, but has not been cancelled and may complete at a later time. |
當讀取/寫入 clu_noman_srv 程序使用的檔案 (nomandevice) 不一致時,可能發生此情況。可透過在 HADB 歷史檔案中尋找以下訊息來偵測此問題:
n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Child process noman3 733 does not respond. n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Have not heard from it in 104.537454 sec. n:3 NSUP INF 2005-02-11 18:00:33.844 p:731 Child process noman3 733 did not start. |
由於無法手動再現此問題,因此下列的解決方法尚未經過驗證。但是,對受影響的節點執行此指令應該可以解決此問題。
hadbm restartnode --level=clear nodeno dbname |
請注意,該節點的所有裝置均會被重新初始化。重新初始化之前,您可能必須停止節點。
在安裝了數個 NIC 卡並執行 Solaris 8 的主機上啟動時,如果同時包含已啟用 IPv6 和 IPv4 的卡,則會終止管理代理程式,並顯示異常 "IPV6_MULTICAST_IF failed."。
將環境變數 JAVA_OPTIONS 設定為 -Djava.net.preferIPv4Stack=true,例如:
export JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true" |
或者,使用 Solaris 9 或更高版本,其不會出現該問題。
在 64 位元版本的 Red Hat Enterprise Linux 3.0 中存在一個錯誤,可在執行非同步化 I/O 時導致 clu_trans_srv 程序在不可中斷模式中結束。這意味著強制結束 -9 不能解決問題,必須重新啟動作業系統。
使用 32 位元版本的 Red Hat Enterprise Linux 3.0。
將密碼儲存在 hadb 中時,密碼中的大寫字母會被轉換為小寫字母。
不使用含有大寫字母的密碼。
當降級至舊的 HADB 版本時,管理代理程式可能會失敗,並顯示不同錯誤代碼。
雖然可以降級 HADB 資料庫,但是如果已變更了儲存庫物件,則管理代理程式可能無法降級。降級後,必須使用最新版的 HADB 中的管理代理程式。
關於安裝/移除 HADB c 套裝軟體 (Solaris:SUNWhadbc,Linux:sun-hadb-c) 版本 <m.n.u-p>,symlink /opt/SUNWhadb/<m> 自建立後將永遠不會變更。因此,可能存在孤立的 symlink。
如果不使用,請在安裝之前或解除安裝之後刪除 symlink。
在 Solaris 10 上,透過使用全域區域中的 ma-initd 程序檔停止管理代理程式時,也會停止本機區域中的管理代理程式。
不同時在全域區域和本機區域中安裝管理代理程式。
有時,伺服器上的資源競爭問題可能導致管理用戶端的連線中斷。重新連線時,顯示誤導使用者的錯誤訊息 "hadbm:Error 22184:A password is required to connect to the management agent"。
檢查該伺服器上是否存在資源問題,並採取適當措施 (例如,增加更多資源),然後重試該作業。
使用 Java Enterprise System (以超級使用者的身份) 安裝 HADB 後不允許非超級使用者管理 。
始終以超級使用者身份登入以管理 HADB。
不應將包含 0.0.0.0 之類 IP 位址的具有特殊用途的介面註冊為管理代理程式中的 HADB 節點所使用的有效介面。如果透過使用者使用主機名稱而非 IP 位址發出 hadbm create 指令,在此類介面上設定 HADB 節點,則註冊此類介面可能會導致問題發生。之後節點將無法通訊,並導致 create 指令掛機。
當在包含多重介面的主機上使用 hadbm create 時,請始終使用 DDN 表示法明確指定 IP 位址。
在 Windows 平台上,由於某些配置和負載,作業系統中可能會出現大量的重新組合故障。在具有多於二十個節點的配置平行執行數個表掃描 (select *) 時,曾發生此問題。此問題表現為作業事件頻繁中斷、修復或回復需較長時間才能完成,以及多種系統零件可能會頻繁逾時。
若要修正此問題,可將 Windows 登錄變數 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 設定為大於預設值 100 的值。建議您將此值提高到 0x1000 (4096)。如需更多資訊,請參閱 Microsoft 支援頁面中的文章 811003。
有可能是機器負載了會讓遮罩機制失敗的工作,而導致輸入的密碼有部分字元顯露。如此會造成輕微的安全性風險,因此密碼應一律遮罩。
將密碼置於其所擁有的密碼檔案中 (Application Server 8.1 之後的版本一般會建議使用此方法),並使用 --adminpassword 或 --dbpasswordfile 選項參照密碼。
當 Application Server 安裝在 Solaris 全域區域中的 /usr/SUNWappserver 時,稀疏本機區域無法使用以此 Application Server 實例安裝的 HADB 元件。
發生此問題是由於 HADB 已安裝在全域區域的 /opt/SUNWhadb 中,但是該目錄無法從稀疏本機區域讀取。不幸的是,無法在 JES5 中重新放置 HADB 束。
由於無法重新放置 Application Server HADB 元件,所以 HADB 元件必須分別安裝在每個要能存取 HADB 的稀疏本機區域中。