Sun Java System Application Server 9.1 高可用性管理指南

準備 HADB 設定

本小節論述以下主題︰

執行上述作業後,請參閱第 3 章, 管理高可用性資料庫

如需有關 HADB 的最新資訊,請參閱「Sun Java System Application Server 9.1 版本說明」

先決條件和限制

開始設定及配置 HADB 之前,請確定您的網路和硬體環境都符合「Sun Java System Application Server 9.1 版本說明」中指出的需求。此外特定的檔案系統還有限制,例如對 Veritas 的限制。如需更多資訊,請參閱「版本說明」。

HADB 在建立並連結至其共用記憶體區段時,會使用詳細共用記憶體 (SHM_SHARE_MMU 旗標)。此旗標主要用於將共用記憶體區段鎖定至實體記憶體,並防止對其進行頁面移出。因此 HADB 的共用記憶體會鎖定在實體記憶體內,很容易影響低階機器上的安裝。Application Server 與 HADB 並置時,請確保您擁有建議的記憶體容量。

配置網路備援

配置備援網路後,即使單一網路發生故障,HADB 也仍然可用。您可以使用以下兩種方式配置備援網路︰

設定網路多重路徑

設定網路多重路徑之前,請參閱「IP Network Multipathing Administration Guide」中的「管理網路多重路徑」一節。

Procedure配置已使用 IP 多重路徑的 HADB 主機電腦

  1. 設定網路介面故障偵測時間。

    為使 HADB 能夠正確支援多重路徑容錯移轉,網路介面故障偵測時間不得超過一秒 (1000 毫秒),如 /etc/default/mpathd 中的 FAILURE_DETECTION_TIME 參數所指定。如果此參數的原始值較高,請編輯檔案並將此參數值變更為 1000:


    FAILURE_DETECTION_TIME=1000

    若要使變更生效,請使用以下指令︰


    pkill -HUP in.mpathd
  2. 設定 IP 位址以與 HADB 配合使用。

    如「IP Network Multipathing Administration Guide」中所述,多重路徑必須將實體網路介面分組為多重路徑介面群組。在此群組中的每個實體介面均具有兩個相關的 IP 位址︰

    • 用於傳輸資料的實體介面位址。

    • 僅供 Solaris 內部使用的測試位址。

    使用 hadbm create --hosts 時,請從多重路徑群組中僅指定一個實體介面位址。


範例 2–1 設定多重路徑

假設具有兩個名為 host1 和 host2 的主機電腦。如果它們分別具有兩個實體網路介面,則將這兩個介面設定為多重路徑群組。在每台主機上均執行 ifconfig -a

host1 上的輸出為︰


bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 5 inet 129.159.115.10 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
mtu 1500 index 5 inet 129.159.115.11 netmask ffffff00 broadcast 129.159.115.255

bge1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
mtu 1500 index 6 inet 129.159.115.12 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
mtu 1500 index 6 inet 129.159.115.13 netmask ff000000 broadcast 129.159.115.255

host2 上的輸出為︰


bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
mtu 1500 index 3 inet 129.159.115.20 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
mtu 1500 index 3 inet 129.159.115.21 netmask ff000000 broadcast 129.159.115.255

bge1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
mtu 1500 index 4 inet 129.159.115.22 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
mtu 1500 index 4 inet 129.159.115.23 netmask ff000000 broadcast 129.159.115.255

在此範例中,兩台主機上的實體網路介面都列出在 bge0bge1 之後。在 bge0:1bge1:1 之後列出的介面是多重路徑測試介面 (在 ifconfig 輸出中標示為 DEPRECATED),如「IP Network Multipathing Administration Guide」中所述。

若要在此環境中設定 HADB,請從每個主機中選取一個實體介面。在此範例中,HADB 在 host1 中使用 IP 位址 129.159.115.10,在 host2 中使用 129.159.115.20。若要針對每台主機都使用一個資料庫節點建立一個資料庫,請使用指令 hadbm create --hosts。例如:


hadbm create --hosts 129.159.115.10,129.159.115.20

若要在每個主機上使用兩個資料庫節點建立資料庫,請使用以下指令:


hadbm create --hosts 129.159.115.10,129.159.115.20,
129.159.115.10,129.159.115.20

在這兩種情況下,您必須在 host1 和 host2 上使用獨立參數配置代理程式,以指定代理程式應使用機器上的哪個介面。因此,在 host1 上使用︰


ma.server.mainternal.interfaces=129.159.115.10

在 host2 上使用︰


ma.server.mainternal.interfaces=129.159.115.20

如需有關 ma.server.mainternal.interfaces 變數的資訊,請參閱配置檔案


配置雙網路

若要啟用 HADB 以容許單一網路故障,請使用 IP 多重路徑 (如果受諸如 Solaris 之類的作業系統支援)。請勿在 Windows Server 2003 上配置具有雙網路的 HADB—作業系統在雙網路狀態下無法正常工作。

如果未將作業系統配置為使用 IP 多重路徑,且 HADB 主機配備兩個 NIC,則您可以將 HADB 配置為使用雙網路。對於每台主機,每個網路介面卡 (NIC) 的 IP 位址均必須位於獨立的 IP 子網路上。

在資料庫中,所有節點均必須連線至單一網路,或所有節點均必須連線至兩個網路。


備註 –

必須將子網路之間的路由器配置為可在子網路之間轉寄 UDP 多重播送訊息。


建立 HADB 資料庫時,請使用 –hosts 選項為每個節點指定兩個 IP 位址或主機名稱︰每個 NIC IP 位址對應一個 IP 位址或主機名稱。對於每個節點,第一個 IP 位址位於 net-0 上,第二個 IP 位址位於 net-1 上。語法如下所示,其中同一節點的主機名稱以加號 (+) 分隔︰

--hosts=node0net0name+node0net1name
,node1net0name+node1net1name
,node2net0name+node2net1name
, ...

例如,以下引數可建立兩個節點,每個節點均具有兩個網路介面。以下主機選項用於建立這些節點︰

--hosts 10.10.116.61+10.10.124.61,10.10.116.62+10.10.124.62

因此,node0 的網路位址為

請注意,10.10.116.6110.10.116.62 位於同一子網路上,而 10.10.124.6110.10.124.62 位於同一子網路上。

在此範例中,管理代理程式必須使用同一子網路。因此,舉例來說,必須將配置變數 ma.server.mainternal.interfaces 設定為 10.10.116.0/24。此設定可同時用於此範例中的兩個代理程式。

配置共用記憶體和信號

在安裝 HADB 之前,必須先配置共用記憶體和信號。該程序視您的作業系統而定。

如果您的主機除了執行 HADB 外還執行其他應用程式,請計算這些應用程式使用的共用記憶體和信號量,將結果增加至 HADB 需要的值。本小節建議的值足以在每台主機上執行多達 6 個 HADB 節點。如果您執行的 HADB 節點超過 6 個,或主機上執行的應用程式需要額外的共用記憶體和信號,只要調高這個值即可。

如果信號的數目過低,可能會導致 HADB 故障並顯示以下錯誤訊息:裝置上無可用空間。此情況可能會在啟動資料庫時或執行階段發生。

Procedure在 Solaris 上配置共用記憶體和信號

由於信號是一種全域性的作業系統資源,因此配置需要顧及主機上執行的所有程序,而不只是 HADB 而已。在 Solaris 上,可以編輯 /etc/system 檔案來配置信號設定。

  1. 以超級使用者身份登入。

  2. 配置共用記憶體。

    • 設定 shminfo_shmmax 以指定主機上單一共用記憶體區段的最大大小。將這個值設定為 HADB 主機電腦上安裝的 RAM 總數,值是以十六進位值表示,不得超過 2 GB。

      例如,以 2 GB 的 RAM 來說,請在 /etc/system 檔案中將值設定如下:


      set shmsys:shminfo_shmmax=0x80000000

      備註 –

      若要確定主機電腦上的記憶體量,請使用以下指令︰


      prtconf | grep Memory

    • 在 Solaris 8 或更低的版本中,請設定 shminfo_shmseg,這是每個程序可以附加的最大共用記憶體區段數。請將這個值設為每台主機節點數的 6 倍。若每台主機的節點數不超過 6 個,請在 /etc/system 檔案中增加以下指令:


      set shmsys:shminfo_shmseg=36

      在 Solaris 9 以及更高版本中,shmsys:shminfo_shmseg 已停用。

    • 設定 shminfo_shmmni,這是全系統的最大共用記憶體區段數。由於每個 HADB 節點都會配置 6 個共用記憶體區段,因此 HADB 需要的記憶體值必須至少是每個主機節點數的 6 倍。在 Solaris 9 中,若每台主機的節點數不超過 6 個,就不需要更改預設值。

  3. 配置信號。

    請在 /etc/system 檔案中檢查如下的信號配置項目:


    set semsys:seminfo_semmni=10
    set semsys:seminfo_semmns=60
    set semsys:seminfo_semmnu=30

    如果有上述項目存在,請依以下指示調高其值。

    如果 /etc/system 檔案不包含這些項目,請將它們增加至檔案的結尾處︰

    • 設定 seminfo_semmni,這是信號識別碼的最大數目。每個 HADB 節點都需要有一個信號識別碼。在 Solaris 9 中,若每台主機的節點數不超過 6 個,就不需要更改預設值。例如︰


      set semsys:seminfo_semmni=10
    • 設定 seminfo_semmns,這是全系統的最大信號數目。每個 HADB 節點都必須有 8 個信號。在 Solaris 9 中,若每台主機的節點數不超過 6 個,就不需要更改預設值。例如︰


      set semsys:seminfo_semmns=60
    • 設定 seminfo_semmnu,這是系統內還原結構的最大數目。每個連線都需要一個還原結構 (配置變數 NumberOfSessions,預設值 100)。若每台主機的節點數不超過 6 個,將其設為 600:


      set semsys:seminfo_semmnu=600
  4. 重新開機。

Procedure在 Linux 上配置共用記憶體

您必須在 Linux 上配置共用記憶體設定。預設的信號設定則不需要調整。

  1. 以超級使用者身份登入。

  2. 編輯 /etc/sysctl.conf 檔案。

    若使用的是 Redhat Linux,您也可以修改 sysctl.conf 以設定核心參數。

  3. 如下所示,設定 kernel.shmaxkernel.shmall 的值:


    echo MemSize > /proc/sys/shmmax
    echo MemSize > /proc/sys/shmall

    其中 MemSize 是位元組數。

    kernel.shmax 參數定義共用記憶體區段的最大大小 (以位元組為單位)。kernel.shmall 參數可設定在系統上一次使用的共用記憶體總大小 (以頁為單位)。將這些參數的值設定為機器上實體記憶體的大小。將值指定為十進位位元組數。

    例如,若要將兩個值都設為 2GB,請使用以下指令:


    echo 2147483648 > /proc/sys/kernel/shmmax
    echo 2147483648 > /proc/sys/kernel/shmall
  4. 使用以下指令重新開機:

    sync; sync; reboot

用於 Windows 的程序

Windows 不需要任何特殊的系統設定。但是,如果您要使用現有的 J2SE 安裝,請將 JAVA_HOME 環境變數設定至安裝 J2SE 的位置。

同步化系統時鐘

您必須在 HADB 主機上同步化時鐘,因為 HADB 使用基於系統時鐘的時間戳記。HADB 使用系統時鐘來管理逾時和為記錄至歷史檔案中的事件標註時間戳記。對於疑難排解,由於 HADB 是分散式系統,所以必須同時分析所有歷史檔案。因此,同步化所有主機的時鐘非常重要。

請勿在正在執行的 HADB 系統上調整系統時鐘。否則會導致作業系統或其他軟體元件中出現問題,進而導致諸如 HADB 節點掛機或重新啟動之類的問題。向後調整時鐘會導致某些 HADB 伺服器程序掛機 (由於時鐘已被調整)。

若要同步化時鐘,請執行以下作業︰

如果 HADB 偵測到時鐘調整大於一秒,則會將其記錄至節點歷史檔案,例如︰

NSUP INF 2003-08-26 17:46:47.975 Clock adjusted.
 Leap is +195.075046 seconds.