了解如何安裝和配置低於 1500 美元的 Oracle 真正應用集群(只用於開發和測試)
概述
熟悉 Oracle 真正應用集群 (RAC) 技術的最高效方法之一是進入實際的 Oracle RAC 集群。在學習這種新技術時,您會很快開始了解到 Oracle RAC 一定能提供的利益,如容錯、新的安全級別、負載均衡以及升級功能的便利性。但是,挑戰在於典型的產品級 RAC 配置所需硬件的價格。例如,小型的兩節點集群可能成本從 $10,000 美元到超過 20,000 美元不等。該成本甚至不包括共享存儲器 — 這是產品級 RAC 環境的核心。
對於那些只是希望熟悉 Oracle RAC 的人來說,本文提供了一種低成本的變通方法,使用商品級的現成組件和可下載的軟件來配置 Oracle9 i RAC 系統。這種配置的估計成本可能是 1000 美元到 1500 美元。系統包含一個雙節點集群,兩個節點利用基於 IEEE1394 ( FireWire ) 驅動器技術的共享磁盤陣列,運行 Linux (在本示例中為 Red Hat Linux Fedora Core 1 )。
請注意,這並不是創建低成本 Oracle9 i RAC 系統的唯一方法。我曾見過其他的解決方案,這些解決方案利用了基於 SCSI 的實施而不是基於共享存儲器的 FireWire 。在大多數情況下, SCSI 比我們的 FireWire 解決方案的成本高,因為典型 SCSI 卡的價格在 70 美元左右,而 80GB 的外部 SCSI 驅動器將需要 700 到 1000 美元。切記有些主板可能已經包含了內建的 SCSI 控制器。
注意,這種配置 決不 能在生產環境中運行,這很重要。在生產環境中,應選擇光纖通道技術,因為它是高速串行傳輸接口,能夠在點到點或交換式拓撲結構中連接系統與存儲設備。 FireWire is able to offer a low-cost alternative to fiber channel for testing and development, but it is not ready for prodUCtion.
注意 :在撰寫本文時,我尚未驗證這些說明是否適用於 Oracle 數據庫 10 g 。在以後的幾個月時間內,我將撰寫另外一篇文章,說明如何使用 10 g 執行類似的安裝。
Oracle9 i 真正應用集群 (RAC) 簡介
Oracle 真正應用集群 (RAC) 是 Oracle 並行服務器 (OPS) 的後繼版本。 RAC 允許多個實例同時訪問同一數據庫(存儲器)。 RAC 通過允許系統進行擴展,提供了容錯、負載均衡和性能效益,同時,由於所有節點訪問同一數據庫,一個實例的故障不會導致無法訪問數據庫。
Oracle RAC 的核心部分是共享磁盤子系統。集群中的所有節點必須能夠訪問集群中所有節點的所有數據、重做日志文件、控制文件和參數文件。數據磁盤必須在全局范圍內可用,以便允許所有節點訪問數據庫。每個節點都有自己的重做日志和控制文件,但其他節點必須能夠訪問這些文件,以便在系統故障時恢復該節點。
並非所有集群解決方案都使用共享存儲。有些廠商使用一種稱為聯合集群的方法,在這種方法中,數據在數台機器中分布,而不是由所有機器共享。但是,在使用 Oracle RAC 時,多個節點使用相同的磁盤集合來存儲數據。使用 Oracle RAC 時,數據、重做日志、控制和歸檔日志文件均存在於原始磁盤設備或集群文件系統上的共享存儲器上。 Oracle 的集群方法利用集群中的所有節點的整體處理能力,同時可提供故障切換安全。
雖然這不是絕對必要的,但 Oracle 建議您安裝 Oracle 集群文件系統 (OCFS) 。 OCFS 通過在所有節點上創建相同的文件系統,使您的磁盤管理工作變得容易得多。 x 這並非是必需的,但是如果沒有 OCFS ,您必須手動完成所有的分區。 ( 注意: 本文沒有詳細介紹安裝和使用 OCFS 的情況,而是使用所有手動方法來創建分區並將 原始設備 綁定到這些分區。)
我不使用針對 Red Hat Linuxe 的 Oracle 集群文件系統的主要原因之一是 OCFS 是 RPM 形式的。所有的 RPM 模塊以及預編譯模塊都綁定到 Red Hat Enterprise Linux AS ( 1200 美元)內核命名標准,並且不會加載到所提供的 2.4.20 鏈接內核中。
Oracle RAC 與 OPS 之間的最大區別在於增加了高速緩存合並。使用 OPS 時,從一個節點到另一個節點的數據請求需要首先將數據寫到磁盤,然後請求節點才能讀取該數據。使用高速緩存合並時,數據與鎖一起被傳遞。
Dell 、 IBM 和 HP 等廠商提供了預先配置的 Oracle9 i RAC 解決方案,用於生產環境。但是,本文集中討論將您自己的 Oracle9 i RAC 環境組合在一起用於開發和測試,其方法是使用 Linux 服務器和一種低成本的共享磁盤解決方案: FireWire 。
RAC 需要什麼軟件?它有沒有需要定購的單獨安裝 CD ?
RAC 包含在 Oracle9 i 數據庫企業版中。( Oracle 最近宣布在 Oracle 數據庫 10 g 標准版中也提供 RAC 。)如果您在一個集群中安裝 Oracle9 i 企業版,並且 Oracle Universal Installer (OUI) 識別該集群,則為您提供安裝 RAC 的選項。大部分 UNIX 平台需要為必要的集群件安裝 OSD 。對於 Intel 平台( Linux 和 Windows ), Oracle 在 Oracle9 i 企業版中提供 OSD 軟件。
共享存儲器概述
現在,光纖通道是最流行的共享存儲器解決方案之一。前面曾提到,光纖通道是一種高速串行傳輸接口,用於在點到點或交換式拓撲結構中連接系統與存儲設備。光纖通道所支持的協議包括 SCSI 和 IP 。光纖通道配置可以支持多達 127 個節點,其每秒的吞吐量可以高達 2.12 千兆位。但是,光纖通道的價格很昂貴。單是光纖通道交換機就可能需要 1000 美元。這還不包括光纖通道存儲陣列和高端驅動器,一個 36GB 驅動器的價格可高達約 300 美元。典型的光纖通道安裝包括用於服務器的光纖通道卡,基本安裝大約要 5000 美元,這並不包括構成集群的服務器的成本。
光纖通道的一種較為便宜的替代方法是 SCSI 。 SCSI 技術為共享存儲器提供了可以接受的性能,但對於那些習慣了基於 GPL 的 Linux 價格的管理員和開發人員來說,即使是 SCSI 也可能超出預算,一個雙節點集群的價格在 1000 美元到 2000 美元左右。
另一種流行的解決方案是 Sun NFS (網絡文件系統)。只有在您使用網絡設備或類似的設備時,它才可以用於共享存儲器。需要特別指出的是,您需要能夠保證通過 NFS 進行直接 I/O 的服務器。
FireWire 技術
FireWire 是由 Apple Computer 和 Texas Instruments 所開發的,它是一種高速串行數據總線的跨平台實施方案。利用其高帶寬、長距離(長度多達 100 米 )和高能量的總線, FireWire 現在用於數字視頻 (DV) 、專業音響、硬盤驅動器、高端數字照相機和家庭娛樂設備等應用中。現在, FireWire 以高達每秒 800 兆位的傳輸速率工作,而下一代的 FireWire 要求理論上的位速率達到 1600 Mbps ,然後達到令人吃驚的 3200 Mbps 。那是每秒 3.2 千兆位。這種速度將使 FireWire 成為傳輸大量數據文件甚至要求最苛刻的視頻應用所必不可少的技術,如處理未壓縮的高清晰 (HD) 視頻或者多個標准清晰度 (SD) 的視頻流。
以下圖表顯示了多種類型磁盤接口的速度對比。對於每種接口,我提供了每秒千位 (kb) 、千字節 (KB) 、兆位 (Mb) 和兆字節 (MB) 的最大傳輸速率。您可以看到, IEEE1394 的功能顯然超過其他可用的磁盤接口技術。
磁盤接口
速度
串行
115 kb/s - (.115 Mb/s)
並行(標准)
115 KB/s - (.115 MB/s)
USB 1.1
12 Mb/s - (1.5 MB/s)
並行 (ECP/EPP)
3.0 MB/s
IDE
3.3 - 16.7 MB/s
ATA
3.3 - 66.6 MB/sec
SCSI-1
5 MB/s
SCSI-2 (快速 SCSI / 快速窄帶 SCSI )
10 MB/s
快速寬帶 SCSI (寬帶 SCSI )
20 MB/s
Ultra SCSI ( SCSI-3 / Fast-20 / Ultra 窄帶)
20 MB/s
Ultra IDE
33 MB/s
寬帶 Ultra SCSI (快速寬帶 20 )
40 MB/s
Ultra2 SCSI
40 MB/s
IEEE1394(b)
100 - 400Mb/s - (12.5 - 50 MB/s)
USB 2.x
480 Mb/s - (60 MB/s)
寬帶 Ultra2 SCSI
80 MB/s
Ultra3 SCSI
80 MB/s
寬帶 Ultra3 SCSI
160 MB/s
FC-AL 光纖通道
100 - 400 MB/s
硬件及成本
用於創建我們的示例 Oracle9 i RAC 環境的硬件包括兩個 Linux 服務器以及在任何本地計算機商店或通過互聯網都可以購買的組件。
服務器 1 (linux1)
Dell Dimension XPS D266 計算機 —266MHz Pentium II —384MB RAM —60GB 內置硬盤 —CDROM 和軟盤驅動器
$400
2— 以太網 LAN 卡 — Linksys 10/100 Mpbs — (連接公共網絡) — Linksys 10/100 Mpbs — (用於與 linux2 互聯)
$20 $20
1—FireWire 卡 — SIIG, Inc. 3 端口 1394 I/O 卡
注意:已知那些具有由 VIA 或 TI 所制造芯片集的接口卡可以有效工作。
$30
服務器 2 (linux2)
Pentium IV 計算機 —1.8GHz Pentium IV —300W 電源 —512MB RAM —40GB 內置硬盤 —32MB AGP 視頻顯示卡 —CDROM 和軟盤驅動器
$600
2— 以太網 LAN 卡 — Linksys 10/100 Mpbs — (連接公共網絡) — Linksys 10/100 Mpbs — (用於與 linux1 互聯)
$20 $20
1—FireWire 卡 — Belkin FireWire 3 端口 1394 PCI 卡
注意:已知那些具有由 VIA 或 TI 所制造芯片集的接口卡可以有效工作。
$40
其他組件
FireWire 硬盤驅動器 — Maxtor One Touch 200GB USB 2.0 / Firewire 外部硬盤驅動器
請確保您購買的 FireWire 驅動器支持多次登錄。如果驅動器的芯片集不允許對超過一個服務器進行並發訪問,則每次只有一台服務器能夠看到該磁盤及其分區。已知具有 Oxford 911 芯片集的磁盤可以有效工作。以下是我為本測試所購買的磁盤的詳細信息: 供應商: Maxtor 型號: OneTouch Mfg. 部件號或 KIT 號: A 01A 200 或 A 01A 250 容量: 200GB 或 250GB 高速緩存緩沖區: 8MB 轉速: 7200 RPM “ 組合 ” 接口:符合 IEEE 1394 和 SPB-2 標准( 100 到 400 Mbits/sec )並兼容 USB 2.0 和 USB 1.1
$270
1 — 額外的 FireWire 電纜 — Belkin 6 針到 6 針的 1394 電纜
$15
1 — 以太網集線器或交換機 — Linksys EtherFast 10/100 5 端口以太網交換機 (用於與 int-linux1 / int-linux2 互聯)
$40
4— 網絡電纜 — 5e 類連接線 — (連接 linux1 與公共網絡) — 5e 類連接線 — (連接 linux2 與公共網絡) — 5e 類連接線 — (連接 linux1 與互聯以太網交換機) — 5e 類連接線 — (連接 linux2 與互聯以太網交換機)
$5 $5 $5 $5
合計
$1,495
簡短的過程說明
在對創建 Oracle9 i RAC 系統進行詳細說明之前,我認為對創建環境所涉及的步驟進行簡短的過程說明會很有益。(參見圖 1 。)
我們的實施方案描述了一個雙節點集群(每個節點具有單處理器),每台服務器都運行 Red Hat Linux Fedora Core 1 。注意,本文檔中的大部分任務都需要在兩台服務器上執行。我將在每個部分的開始處提示是否在兩個節點上都要執行該任務。
1. 安裝 Red Hat Linux / Fedora Core 1 (在兩個節點上執行) 對於本示例配置,您將要在構成 RAC 集群的兩個節點上都安裝 Red Hat Linux (Fedora Core 1) 。
2. 配置網絡設置(在兩個節點上執行) 在兩個節點上安裝 Red Hat Linux 軟件後,您需要在兩個節點上配置網絡。這包括配置公共網絡以及配置集群的互聯。您還應該為互聯調整默認的和最大發送緩沖區大小設置,以便當您在實例間使用高速緩存合並緩沖區傳輸時獲得更好的性能。這些設置將會寫入到您的 /etc/sysctl.conf 文件中。
3. 獲取和安裝適當的 Linux 內核(在兩個節點上執行) 在本部分中,我們將下載和安裝一個新的 Linux 內核 — 它支持對 Fire Wire 存儲設備的多次登錄。該內核可以從 Oracle 的 Linux 項目開發組 — http://oss.oracle.com 處下載。在安裝新內核以後,有幾個配置步驟用於加載 FireWire 堆棧。
4. 創建 UNIX oracle 用戶帳號( dba 組)(在兩個節點上執行) 然後我們將在 RAC 集群的所有節點上創建一個 Oracle UNIX 用戶 id 。本部分還提供一個示例登錄腳本 ( .bash_profile ) ,可用於設置 oracle 用戶需要的所有環境變量。
5. 在共享的 FireWire 存儲設備上創建分區(只需從單個節點運行一次) 在本步驟中,我們使用邏輯卷管理器 (LVM) 創建物理卷和邏輯卷。我將說明如何從 FireWire 驅動器上刪除所有分區並使用 LVM 創建所有邏輯分區。
6. 創建 RAW 綁定(在兩個節點上執行) 在創建邏輯分區後,我們需要配置 FireWire 共享存儲器上的原始設備,以便將其用於所有的物理 Oracle 數據庫文件。
7. 創建來自 RAW 卷的符號鏈接(在兩個節點上執行)將來自 RAW 卷的符號鏈接創建為易讀的名稱是很有益的,以便更易於識別文件。雖然此步驟是可選項,但強烈建議執行該步驟。
8. 配置 Linux 服務器(在兩個節點上執行) 本部分將詳細介紹配置兩台 Linux 機器所涉及的步驟,將它們准備好,以便安裝 Oracle9 i RAC 。
9. 配置 hangcheck-timer 內核模塊(在兩個節點上執行) Oracle9 i RAC 使用一個稱為 hangcheck-timer 的模塊來監視集群的運行情況,並在出現故障時重新啟動 RAC 模式。本部分說明了配置 hangcheck-timer 內核模塊所需的步驟。雖然 hangcheck-timer 模塊不是 Oracle Cluster Manager 操作所必須的模塊,但 Oracle 強烈建議使用此模塊。
10. 為遠程訪問配置 RAC 節點(在兩個節點上執行) 在安裝 Oracle9 i RAC 時, Oracle Installer 將使用 rsh 命令,把 Oracle 軟件復制到 RAC 集群中的所有其他節點。本部分所包括的說明用於配置您的 RAC 集群中的所有節點,以便在一個 RAC 節點上不需要口令而根據其他 RAC 節點來運行 r* 命令,如 rsh 、 rcp 和 rlogin 。
11. 配置機器啟動腳本(在兩個節點上執行) 到此為止,我們已經非常詳細地討論了在我們的 Oracle9 i RAC 配置的兩個節點上需要配置的參數和資源。本部分將暫作休整並扼要重述那些參數和命令(在本文前面的章節中),它們在機器循環運行時需要在每個節點上執行。雖然有好幾種方法可以完成此工作,但我只是提供了一個可以放在啟動腳本(即 /etc/rc.local )中的命令清單,在每次機器啟動時,這些命令建立所有所需的資源(磁盤、內存等)。本部分還包含其他的啟動腳本,以便檢查當集群中每台機器啟動時,您是否已經更新了所有所需的腳本。
12. 更新 Red Hat Linux 系統(在兩個節點上執行) 在准備 Oracle 安裝時,需要將幾個 RPM 應用到 RAC 集群中的所有節點。所有的 RPM 都包含在 Fedora Core 1 的 CD 中,此外我還在本文中提供了與這些文件的鏈接。在應用了所有的 RPM 之後,您還需要應用 Oracle/Linux 補丁 3006854 。在應用了所有所需補丁之後,您應該重新啟動 RAC 集群中的所有節點。
13. 下載 / 解開 Oracle9 i 安裝文件(從單個節點執行) 本部分包括了下載和解開 Oracle9 i 軟件發布版本的步驟。該軟件可以從 http://otn.oracle.com/global/cn/ 下載。
14. 安裝 Oracle9 i Cluster Manager (從單個節點執行) 安裝 Oracle9 i RAC 的過程分為兩步: (1) 安裝 Oracle9 i Cluster Manager 以及 (2) 安裝 Oracle9 i RDBMS 軟件。在本部分中,我們將逐步說明安裝、配置和啟動 Oracle Cluster Manager 軟件的步驟。
切記, Oracle Cluster Manager 的安裝只需在某一個節點上執行(安裝過程將利用 rsh 命令將文件復制到集群中所包含的所有其他節點),但 Cluster Manager 的配置和啟動需要在兩個節點上執行。
15. 安裝 Oracle9 i RAC (只需從單個節點執行) 在安裝 Oracle Cluster Manager 之後,就該安裝 RAC 軟件了。本部分提供了安裝該軟件所涉及的很多任務,並提供了在創建 Oracle 集群數據庫之前應該執行的很多安裝後續任務。
16. 創建 Oracle 數據庫(從單個節點執行) 在安裝了所有軟件後,我們現在將要使用 Oracle 數據庫配置助手 (DBCA) 在共享存儲器 (FireWire) 設備上創建我們的集群數據庫。
17. 創建 TNS 聯網文件(在兩個節點上執行) 本部分僅僅提供了我的 listener.ora 和 tnsnames.ora 文件的示例清單。需要為 RAC 集群中的每個節點配置這些文件。 Oracle Installer 和 Oracle 數據庫配置助手在保持這些文件的更新方面做得很好。但是,我確實喜歡對 tnsnames.ora 文件做一些修改。
18. 驗證 RAC 集群 / 數據庫配置(在兩個節點上執行) 在 Oracle 數據庫配置助手完成了集群數據庫的創建之後,您應該擁有了正在運行的全功能 Oracle9 i RAC 集群。本部分提供了一些命令 SQL 查詢,可用於驗證您的 Oracle9 i RAC 配置。
19. 啟動和停止集群(從單個節點執行) 本部分將提供如何啟動和停止集群的示例。這包括如何完整地啟動或停止整個集群,以及如何啟動和關閉集群中單個實例的示例。
20. 透明應用程序故障切換 (TAF) (在一個或兩個節點上執行) 既然我們已經啟動並運行了集群,本部分提供了一個如何測試 Oracle9 i RAC 的透明應用程序故障切換特性的示例。我將演示會話故障如何發生作用以及如何設置您的 TNS 配置,以便利用 TAF 。
安裝 Red Hat Linux (Fedora Core 1)
在獲得所需的硬件之後,就可以開始配置過程了。過程的第一步是在兩台服務器上都安裝 Red Hat Linux Fedora Core 1 軟件。
注意: 本文沒有提供關於安裝 Red Hat Linux Fedora Core 1 的詳細說明。根據本文的目的,我選擇執行自定義安裝,當提示安裝哪些產品時,選擇 “Install Everything” 。安裝 Red Hat Linux 的文檔可見於 http://www.redhat.com/docs/manuals/ 。
配置網絡設置
配置公共網絡和專用網絡 讓我們通過確認正確的網絡配置,開始配置我們的 Oracle RAC Linux 。在我們的兩節點示例中,我們需要在兩個節點上配置網絡。
在 RedHat Linux 中配置網絡設置的最簡單方法是通過網絡配置程序。此應用程序可以從命令行利用 “root” 用戶 id 啟動,如下所示:
# su - # /usr/bin/redhat-config-network &
注意: 不要使用 DHCP 命名,因為互聯需要固定 IP 地址!
使用網絡配置應用程序,您需要配置兩個 NIC 設備以及 /etc/hosts 文件。可以使用網絡配置 GUI 完成這兩個任務。注意,兩個節點的 /etc/hosts 設置相同。
我們的示例配置將使用以下的設置:
服務器 1 (linux1)
設備
IP 地址
子網
用途
eth0
192.168.1.100
255.255.255.0
連接 linux1 與公共網絡
eth1
192.168.2.100
255.255.255.0
連接 linux1 (互聯)與 linux2 (int-linux2)
/etc/hosts
127.0.0.1 localhost loopback
192.168.1.100 linux1
192.168.2.100 int-linux1
192.168.1.101 linux2
192.168.2.101 int-linux2
服務器 2 (linux2)
設備
IP 地址
子網
用途
eth0
192.168.1.101
255.255.255.0
連接 linux2 與公共網絡
eth1
192.168.2.101
255.255.255.0
連接 linux2 (互聯)與 linux1 (int-linux1)
/etc/hosts
127.0.0.1 localhost loopback
192.168.1.100 linux1
192.168.2.100 int-linux1
192.168.1.101 linux2
192.168.2.101 int-linux2
在以下的屏幕照片中,只顯示了節點 1 (linux1) 。請確保對兩個節點進行了所有適當的網絡設置。
圖 1:網絡配置屏幕,節點 1 (linux1)
圖 2:以太網設備屏幕,eth0 (linux1)
圖 3:以太網設備屏幕,eth1 (linux1)
圖 4:Network Configuration 屏幕,/etc/hosts (linux1)
調整網絡設置 在 Oracle 9.2.0 .1 以及更高的版本中, Oracle 在 Linux 上使用 UDP 作為默認協議進行過程間通信 (IPC) ,如在 RAC 集群中的實例間進行 高速緩存合並 緩沖區傳輸。
Oracle 強烈建議將默認的和最大的發送緩沖區大小( SO_SNDBUF 套接字選項)調整為 256KB ,並將默認的和最大的接收緩沖區大小( SO_RCVBUF 套接字選項)調整為 256KB 。
接收緩沖區由 TCP 和 UDP 用於保留所接收的數據,直到應用程序讀出這些數據為止。接收緩沖區不能溢出,因為不允許對等端發送超過緩沖區大小窗口的數據。這意味著如果數據包不適合於套接字接收緩沖區,它們將會被廢棄。這種情況可能導致發送方發送量遠遠超過接收方的接收能力。
注意: 可以不必重新啟動而在 /proc 文件系統中更改默認的和最大的窗口大小:
su - root
# Default setting in bytes of the socket receive buffer
sysctl -w net.core.rmem_default=262144
# Default setting in bytes of the socket send buffer
sysctl -w net.core.wmem_default=262144
# Maximum socket receive buffer size which may be set by using
# the SO_RCVBUF socket option
sysctl -w net.core.rmem_max=262144
# Maximum socket send buffer size which may be set by using
# the SO_SNDBUF socket option
sysctl -w net.core.wmem_max=262144
您應該通過將以下各行添加到 RAC 集群中每個節點的 /etc/sysctl.conf 文件中,使以上的更改永久有效:
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
在 Linux 和 FireWire 上創建自己的 RAC 集群(續)
獲取並安裝合適的 Linux 內核
概述 接下來的步驟是獲取並安裝新的 Linux 內核,該內核利用多次登錄,支持使用 IEEE1394 設備。在本文先前的版本中,包含有關於下載 Linux 內核的一個補丁版本並對其進行編譯的步驟。由於 Oracle 的 Linux 項目開發組 的工作,已經不再需要這些步驟了。他們提供了一個 Red Hat Enterprise Linux 3.0 的預編譯內核(它也可以與 Fedora 協同工作),只需下載並安裝即可。本部分包含了下載和安裝該內核的說明。不過,在開始詳細說明如何執行這些操作之前,讓我們先用一些時間來討論在新內核中需要進行的更改。
盡管已經有了針對 Linux 的 FireWire 驅動程序,但它們常常不支持 共享 存儲器。通常,當您登錄到操作系統時,操作系統將驅動程序與該機器上具體的一個驅動器相連。這種實施方法根本不能用於我們的 RAC 配置。共享存儲器(我們的 FireWire 硬盤驅動器)需要被多個節點所訪問。我們需要使 FireWire 驅動程序能夠提供對驅動器的非獨占訪問,以便多個服務器 — 即組成集群的節點 — 能夠訪問同一個存儲器。通過在源代碼中刪除位掩碼 ( 該掩碼用於在登錄期間識別機器 ) ,可以完成這項任務。這樣可以對 FireWire 硬盤驅動器進行非獨占的訪問。集群中的所有其他節點在其登錄會話期間,使用相同的經過修改的驅動程序登錄到同一個驅動器,因此它們也具有對於該驅動器的非獨占訪問權。
可能我過早地提到了這個問題,但我希望在深入說明新的 Linux 內核安裝細節之前先討論幾個主題。當我們安裝新的 Linux 內核(支持對 FireWire 驅動器的多次登錄)時,系統將會檢測 FireWire 相連的驅動器並將其識別為 SCSI 設備。您將能夠使用標准的操作系統工具對磁盤進行分區、創建文件系統等。對於 Oracle9 i RAC ,您必須為所有文件建立分區,並將原始設備綁定到這些分區。本文將利用邏輯卷管理器 (LVM) 在 FireWire 共享驅動器上建立所有所需的分區(通常稱為 邏輯分區 )。
我們的實施方法描述了一個雙節點集群(每個節點具有一個單獨的處理器),每個服務器都運行 Red Hat Linux Fedora Core 1 。切記,在 兩個 Linux 節點上都需要安裝打過補丁的 Linux 內核。 Red Hat Linux Fedora Core 1 包含內核 linux- 2.4.22 -1.2115.nptl ;我們需要從以下 URL 處下載 Oracle 提供的 2.4.21-9.0.1 Linux 內核: http://oss.oracle.com/projects/firewire/files 。
在集群的兩個節點上執行以下過程:
• 下載以下的文件之一:
kernel- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用於單處理器 — 或者 —
kernel-smp- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用於多處理器
• 備份您的 GRUB 配置文件:
在大多數情況下,您要將 GRUB 用於引導加載器。在實際安裝新內核之前,請確保備份您的 /etc/grub.conf 文件的一個拷貝:
# cp /etc/grub.conf /etc/grub.conf.original
• 以用戶 root 安裝新內核:
# rpm -ivh --force kernel- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用於單處理器
— 或者 —
# rpm -ivh --force kernel-smp- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用於多處理器
注意: 使用 RPM 來安裝新內核還會利用合適的片段來更新您的 grub 或 lilo 配置。除非您希望保留舊的內核鏡像,否則不需要向您的引導加載器配置中添加任何新的片段。
以下是我的 /etc/grub.conf 文件在內核安裝之前和之後的清單。您可以看到,在我的安裝中,我在 2.4.21 -9.0.1.ELorafw1 內核中加入了另一個片段。如果您願意,可以更改新文件中的( default )項,這樣新內核將成為啟動的默認內核。在默認情況下,安裝程序設置 default=1 ,繼續將舊內核作為默認內核。
Fedora Core 1 的原始 /etc/grub.conf 文件
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core ( 2.4.22 -1.2115.nptl)
root (hd0,0)
kernel /vmlinuz- 2.4.22 -1.2115.nptl ro root=LABEL=/ rhgb
initrd /initrd- 2.4.22 -1.2115.nptl.img
在安裝內核後, Fedora Core 1 的新配置的 /etc/grub.conf 文件
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core ( 2.4.21 -9.0.1.ELorafw1)
root (hd0,0)
kernel /vmlinuz- 2.4.21 -9.0.1.ELorafw1 ro root=LABEL=/ rhgb
initrd /initrd- 2.4.21 -9.0.1.ELorafw1.img
title Fedora Core ( 2.4.22 -1.2115.nptl)
root (hd0,0)
kernel /vmlinuz- 2.4.22 -1.2115.nptl ro root=LABEL=/ rhgb
initrd /initrd- 2.4.22 -1.2115.nptl.img
• 添加模塊選項:
將以下各行添加到 /etc/modules.conf 中:
options sbp2 sbp2_exclusive_login=0
post-install sbp2 insmod sd_mod
post-remove sbp2 rmmod sd_mod
將串行總線協議模塊 ( sbp2 ) 的參數 sbp2_exclusive_login 設置為零是非常重要的,以便允許多個主機並發地登錄和訪問 FireWire 磁盤。第二行確保 SCSI 磁盤驅動程序模塊 ( sd_mod ) 也會被加載,因為 ( sbp2 ) 需要 SCSI 層。如果 ( sd_mod ) 加載,則會自動加載核心的 SCSI 支持模塊 ( scsi_mod ) — 不必為它創建單獨的項。
• 重新啟動機器
重新啟動您的機器,進入新的內核。請確保 firewire (ieee1394) pci 卡已插入到機器中!
• 加載 firewire 堆棧
在大多數情況下,在 /etc/rc.sysinit 文件中已經對 FireWire 堆棧加載進行了配置。該文件中所包含的用於加載 FireWire 堆棧的命令是:
# modprobe ohci1394
# modprobe sbp2
在 Red Hat 的舊版本中,情況有所不同,必須手動運行這些命令或者將其包含在啟動文件中。在 Fedora Core 1 和更高版本中,這些命令已經包含在 /etc/rc.sysinit 文件中,並在每次啟動時運行。
• 重新掃描 SCSI 總線
在內核的舊版本中,我需要運行 rescan-scsi-bus.sh 腳本來檢測 FireWire 驅動器。此腳本的目的是通過使用以下命令為節點創建 SCSI 項:
echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
使用 Fedora Core 1 時,應該可以自動檢測到磁盤。
• 檢查 SCSI 設備
重新啟動機器後,內核應該自動將磁盤檢測為 SCSI 設備 ( /dev/sdXX ) 。本部分提供了幾個命令,這些命令應該在集群的兩個節點上運行,以確保成功地檢測到 FireWire 驅動器。
在這個配置中,我同時在兩個節點上執行以上的過程。在過程完成後,我關閉兩台機器,首先啟動 linux1 ,然後啟動 linux2 。以下的命令和結果來自於我的 linux2 機器。同樣,請確認您在兩個節點上都運行了以下的命令,以確保兩台機器都能登錄到共享驅動器。
首先查看該 FireWire 適配器是否已被成功地檢測到:
# lspci
00:00.0 Host bridge:Intel Corp. 82845 845 (Brookdale) Chipset Host Bridge (rev 11)
00:01.0 PCI bridge:Intel Corp. 82845 845 (Brookdale) Chipset AGP Bridge (rev 11)
00:1d.0 USB Controller:Intel Corp. 82801DB USB (Hub #1) (rev 01)
00:1d.1 USB Controller:Intel Corp. 82801DB USB (Hub #2) (rev 01)
00:1d.2 USB Controller:Intel Corp. 82801DB USB (Hub #3) (rev 01)
00:1d.7 USB Controller:Intel Corp. 82801DB USB2 (rev 01)
00:1e.0 PCI bridge:Intel Corp. 82801BA/CA/DB/EB PCI Bridge (rev 81)
00: 1f .0 ISA bridge:Intel Corp. 82801DB LPC Interface Controller (rev 01)
00: 1f .1 IDE interface:Intel Corp. 82801DB Ultra ATA Storage Controller (rev 01)
00: 1f .3 SMBus:Intel Corp. 82801DB/DBM SMBus Controller (rev 01)
01:00.0 VGA compatible controller:nVidia Corporation NV34 [GeForce FX 5200] (rev a1)
02:00.0 Ethernet controller:Linksys Network Everywhere Fast Ethernet 10/100 model NC100 (rev 11)
02:01.0 FireWire (IEEE 1394): Texas Instruments TSB12LV26 IEEE-1394 Controller (Link)
02:05.0 Ethernet controller:Realtek Semiconductor Co., Ltd. RTL-8139/ 8139C / 8139C + (rev 10)
02:07.0 Multimedia audio controller:C-Media Electronics Inc CM8738 (rev 10)
第二步,查看這些模塊是否已被加載:
# lsmod egrep "ohci1394sbp2ieee1394sd_modscsi_mod"
sd_mod 13808 0
sbp2 20556 0
scsi_mod 109864 3 [sg sd_mod sbp2]
ohci1394 28904 0 (unused)
ieee1394 63652 0 [sbp2 ohci1394]
第三步,確認已檢測到磁盤並由內核創建了一個項目:
# cat /proc/scsi/scsi
Attached devices:
Host:scsi0 Channel:00 Id:00 Lun: 00
Vendor:Maxtor Model:OneTouch Rev: 0200
Type:Direct-Access
現在讓我們確認 FireWire 驅動器可以被多個登錄所訪問,並顯示有效的登錄:
# dmesg grep sbp2
ieee1394:sbp2:Query logins to SBP-2 device successful
ieee1394:sbp2:Maximum concurrent logins supported: 3
ieee1394:sbp2:Number of active logins: 2
ieee1394:sbp2:Logged into SBP-2 device
ieee1394:sbp2:Node[01:1023]:Max speed [S400] - Max payload [2048]
ieee1394:sbp2:Reconnected to SBP-2 device
ieee1394:sbp2:Node[01:1023]:Max speed [S400] - Max payload [2048]
從以上輸出中,您可以看到我們擁有的 FireWire 驅動器能夠支持來自多達 3 個服務器的並發登錄。您的驅動器的芯片組應該支持 RAC 集群中所有節點的並發訪問,這很重要。
• 對 SCSI 設備檢測的故障診斷
如果您在檢測 SCSI 設備的任何步驟(如上所述)中遇到問題,可以嘗試以下操作:
# modprobe -r sbp2
# modprobe -r sd_mod
# modprobe -r ohci1394
# modprobe ohci1394
# modprobe sd_mod
# modprobe sbp2
創建 “oracle” 用戶和目錄(在兩個節點上執行)
讓我們繼續我們的示例,創建 UNIX dba 組和 oracle 用戶 id 以及所有的相關目錄。
# mkdir /u01
# mkdir /u01/app
# groupadd -g 115 dba
# useradd -u 175 -g 115 -d /u01/app/oracle -s /bin/bash -c "Oracle Software Owner" -p oracle oracle
注意: 當您為每個 RAC 節點設置 Oracle 環境變量時,請確保為每個 RAC 節點分配唯一的 Oracle SID !
對於此示例,我使用:
linux1 : ORACLE_SID=orcl1 linux2 : ORACLE_SID=orcl2注意: Oracle Universal Installer (OUI) 在 /tmp 目錄中需要最多 400MB 空閒空間。
您可以通過運行以下命令來查看 /tmp 中的可用空間:
# df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda3 36384656 6224240 28312140 19% /
如果因為某種原因,您在 /tmp 中沒有足夠的空間,則可以臨時在其他文件系統中創建空間,並在安裝期間將您的 TEMP 和 TMPDIR 指向該空間。以下是完成此任務的步驟:
# su -
# mkdir /<AnotherFilesystem>/tmp
# chown root.root /<AnotherFilesystem>/tmp
# chmod 1777 /<AnotherFilesystem>/tmp
# export TEMP=/<AnotherFilesystem>/tmp # used by Oracle
# export TMPDIR=/<AnotherFilesystem>/tmp # used by Linux programs
# like the linker "ld"
當 Oracle 的安裝完成時,您可以使用以下命令刪除該臨時目錄:
# su -
# rmdir /<AnotherFilesystem>/tmp
# unset TEMP
# unset TMPDIR
在兩個節點上都創建了 “ oracle ”UNIX 用戶 id 後,通過使用以下的 .bash_profile ,確保正確地建立了環境:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
alias ls="ls -FA"
# User specific environment and startup programs
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/ 9.2.0
# Each RAC node must have a unique ORACLE_SID.(i.e. orcl1, orcl2,...)
export ORACLE_SID=orcl1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
export LD_ASSUME_KERNEL= 2.4.1
在共享的 FireWire 存儲設備上創建分區(在一個節點上執行)
概述
現在應該創建由邏輯卷管理器 (LVM) 所使用的物理卷和邏輯卷了。(有關管理 LVM 的更詳細觀點,請參見我的文章 管理物理卷和邏輯卷 。) 下表列出了邏輯分區到表空間的映射,我們將在本文的這一部分中完成這些映射:
邏輯卷
RAW 卷
符號鏈接
表空間 / 文件名
表空間 / 文件大小
分區大小
/dev/pv1/lvol1
/dev/raw/raw1
/u01/app/oracle/oradata/orcl/CMQuorumFile
Cluster Manager Quorum File
-
5MB
/dev/pv1/lvol2
/dev/raw/raw2
/u01/app/oracle/oradata/orcl/SharedSrvctlConfigFile
Shared Configuration File
-
100MB
/dev/pv1/lvol3
/dev/raw/raw3
/u01/app/oracle/oradata/orcl/spfileorcl.ora
Server Parameter File
-
10MB
/dev/pv1/lvol4
/dev/raw/raw4
/u01/app/oracle/oradata/orcl/control01.ctl
Control File 1
-
200MB
/dev/pv1/lvol5
/dev/raw/raw5
/u01/app/oracle/oradata/orcl/control02.ctl
Control File 2
-
200MB
/dev/pv1/lvol6
/dev/raw/raw6
/u01/app/oracle/oradata/orcl/control03.ctl
Control File 3
-
200MB
/dev/pv1/lvol7
/dev/raw/raw7
/u01/app/oracle/oradata/orcl/cwmlite01.dbf
CWMLITE
50MB
55MB
/dev/pv1/lvol8
/dev/raw/raw8
/u01/app/oracle/oradata/orcl/drsys01.dbf
DRSYS
20MB
25MB
/dev/pv1/lvol9
/dev/raw/raw9
/u01/app/oracle/oradata/orcl/example01.dbf
EXAMPLE
250MB
255MB
/dev/pv1/lvol10
/dev/raw/raw10
/u01/app/oracle/oradata/orcl/indx01.dbf
INDX
100MB
105MB
/dev/pv1/lvol11
/dev/raw/raw11
/u01/app/oracle/oradata/orcl/odm01.dbf
ODM
50MB
55MB
/dev/pv1/lvol12
/dev/raw/raw12
/u01/app/oracle/oradata/orcl/system01.dbf
SYSTEM
800MB
805MB
/dev/pv1/lvol13
/dev/raw/raw13
/u01/app/oracle/oradata/orcl/temp01.dbf
TEMP
250MB
255MB
/dev/pv1/lvol14
/dev/raw/raw14
/u01/app/oracle/oradata/orcl/tools01.dbf
TOOLS
100MB
105MB
/dev/pv1/lvol15
/dev/raw/raw15
/u01/app/oracle/oradata/orcl/undotbs01.dbf
UNDOTBS1
400MB
405MB
/dev/pv1/lvol16
/dev/raw/raw16
/u01/app/oracle/oradata/orcl/undotbs02.dbf
UNDOTBS2
400MB
405MB
/dev/pv1/lvol17
/dev/raw/raw17
/u01/app/oracle/oradata/orcl/users01.dbf
USERS
100MB
105MB
/dev/pv1/lvol18
/dev/raw/raw18
/u01/app/oracle/oradata/orcl/xdb01.dbf
XDB
150MB
155MB
/dev/pv1/lvol19
/dev/raw/raw19
/u01/app/oracle/oradata/orcl/perfstat01.dbf
PERFSTAT
100MB
105MB
/dev/pv1/lvol20
/dev/raw/raw20
/u01/app/oracle/oradata/orcl/redo01.log
REDO G1 / M1
100MB
105MB
/dev/pv1/lvol21
/dev/raw/raw21
/u01/app/oracle/oradata/orcl/redo02.log
REDO G2 / M1
100MB
105MB
/dev/pv1/lvol22
/dev/raw/raw22
/u01/app/oracle/oradata/orcl/redo03.log
REDO G3 / M1
100MB
105MB
/dev/pv1/lvol23
/dev/raw/raw23
/u01/app/oracle/oradata/orcl/orcl_redo2_2.log
REDO G4 / M1
100MB
105MB
刪除 FireWire 共享存儲器上的所有分區
在本示例中,我將使用整個 FireWire 磁盤(沒有分區)。在這種情況下,我將使用 /dev/sda 來創建邏輯卷 / 物理卷。這並不是完成創建 LVM 環境任務的唯一方法。我們還可以在磁盤上創建 Linux LVM 分區(其類型為 8e )。讓我們假設該 LVM 分區是在磁盤上創建的第一個分區。這樣我們需要利用 /dev/sda1 來工作。同樣,在本示例中,我將使用整個 FireWire 驅動器(沒有分區) , 因此要訪問 /dev/sda 。在創建物理卷和邏輯卷之前,通過使用 fdisk 命令刪除 FireWire 驅動器上的任何現有分區,這是很重要的(因為我們要使用整個磁盤):
# fdisk /dev/sda
Command (m for help):p
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 24791 199133676 c Win95 FAT32 (LBA)
Command (m for help):d
Selected partition 1
Command (m for help):p
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
創建邏輯卷
以下的一組命令執行創建邏輯卷所需的步驟:
• 運行 vgscan 命令( 在集群中所有的 RAC 節點上運行 ),以創建 /etc/lvmtab 文件。
• 使用 pvcreate 創建由邏輯卷管理器 (LVM) 所使用的物理卷。
• 使用 vgcreate ,為驅動器或者為您希望用於 RAW 設備的分區創建一個卷組。在這裡我們為整個驅動器創建卷。在我們的示例中(如下所示),該命令將允許創建 256 個邏輯分區和 256 個物理分區,范圍大小為 128K 。
• 使用 lvcreate 在卷組中創建邏輯卷。
注意: 上文講到,我需要在所有節點上運行 vgscan 命令,以便該命令能夠創建 /etc/lvmtab 文件。應該在運行下列命令之前執行該命令。
將以下命令放在一個 schell 腳本中,更改執行權限,然後以 “root”UNIX 用戶 id 來運行該腳本:
vgscan
pvcreate -d /dev/sda
vgcreate -l 256 -p 256 -s 128k /dev/pv1 /dev/sda
lvcreate -L 5m /dev/pv1
lvcreate -L 100m /dev/pv1
lvcreate -L 10m /dev/pv1
lvcreate -L 200m /dev/pv1
lvcreate -L 200m /dev/pv1
lvcreate -L 200m /dev/pv1
lvcreate -L 55m /dev/pv1
lvcreate -L 25m /dev/pv1
lvcreate -L 255m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 55m /dev/pv1
lvcreate -L 805m /dev/pv1
lvcreate -L 255m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 405m /dev/pv1
lvcreate -L 405m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 155m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 105m /dev/pv1
lvcreate -L 105m /dev/pv1
使用該腳本(如上所示)將會創建 /dev/pv1/lvol1 - /dev/pv1/lvol23 。
我通常使用 lvscan 命令來檢查邏輯卷的狀態:
[root@linux2 root]# lvscan
lvscan -- ACTIVE "/dev/pv1/lvol1" [5 MB]
lvscan -- ACTIVE "/dev/pv1/lvol2" [100 MB]
lvscan -- ACTIVE "/dev/pv1/lvol3" [10 MB]
lvscan -- ACTIVE "/dev/pv1/lvol4" [200 MB]
lvscan -- ACTIVE "/dev/pv1/lvol5" [200 MB]
lvscan -- ACTIVE "/dev/pv1/lvol6" [200 MB]
lvscan -- ACTIVE "/dev/pv1/lvol7" [55 MB]
lvscan -- ACTIVE "/dev/pv1/lvol8" [25 MB]
lvscan -- ACTIVE "/dev/pv1/lvol9" [255 MB]
lvscan -- ACTIVE "/dev/pv1/lvol10" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol11" [55 MB]
lvscan -- ACTIVE "/dev/pv1/lvol12" [805 MB]
lvscan -- ACTIVE "/dev/pv1/lvol13" [255 MB]
lvscan -- ACTIVE "/dev/pv1/lvol14" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol15" [405 MB]
lvscan -- ACTIVE "/dev/pv1/lvol16" [405 MB]
lvscan -- ACTIVE "/dev/pv1/lvol17" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol18" [155 MB]
lvscan -- ACTIVE "/dev/pv1/lvol19" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol20" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol21" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol22" [105 MB]
lvscan -- ACTIVE "/dev/pv1/lvol23" [105 MB]
lvscan -- 23 logical volumes with 3.88 GB total in 1 volume group
lvscan -- 23 active logical volumes
重新啟動 RAC 集群中的所有節點
在完成分區的創建之後,建議您重新啟動所有 RAC 節點上的內核,以確保所有的新分區被所有 RAC 節點上的內核所識別:
# su -
# reboot
重要聲明: 切記,您需要在您的一個啟動腳本中添加語句,先調用 vgscan ,然後調用 vgchange -a y ,以便您的 RAC 集群中的每台機器在啟動時運行它們。這兩個命令在激活所有的卷組之前為您提供一個實際的卷管理器數據庫。本文將提供所有應該加入到您的 /etc/rc.local 腳本中的設置,以便對 Oracle9 i RAC 集群中的每個節點進行設定。
創建 RAW 綁定(在兩個節點上執行)
注意: 在每次啟動機器時 , 需要在集群中的每個節點上執行本部分中的一些命令。這些命令的詳細信息以及關於將其加入啟動腳本的說明都包含在 用於每個 RAC 節點的所有啟動命令 一節中。
在本部分中,我將說明如何在 FireWire 共享存儲器上配置原始設備,這些設備將用於所有的物理 Oracle 數據庫文件,包括 srvctl 的 Cluster Manager Quorum File 和 Shared Configuration File 。
現在,我們已經在 FireWire 共享存儲器上創建了所需的分區。我們現在需要使用 raw 命令將所有卷綁定到原始設備:
usr/bin/raw /dev/raw/raw1 /dev/pv1/lvol1
/usr/bin/raw /dev/raw/raw2 /dev/pv1/lvol2
/usr/bin/raw /dev/raw/raw3 /dev/pv1/lvol3
/usr/bin/raw /dev/raw/raw4 /dev/pv1/lvol4
/usr/bin/raw /dev/raw/raw5 /dev/pv1/lvol5
/usr/bin/raw /dev/raw/raw6 /dev/pv1/lvol6
/usr/bin/raw /dev/raw/raw7 /dev/pv1/lvol7
/usr/bin/raw /dev/raw/raw8 /dev/pv1/lvol8
/usr/bin/raw /dev/raw/raw9 /dev/pv1/lvol9
/usr/bin/raw /dev/raw/raw10 /dev/pv1/lvol10
/usr/bin/raw /dev/raw/raw11 /dev/pv1/lvol11
/usr/bin/raw /dev/raw/raw12 /dev/pv1/lvol12
/usr/bin/raw /dev/raw/raw13 /dev/pv1/lvol13
/usr/bin/raw /dev/raw/raw14 /dev/pv1/lvol14
/usr/bin/raw /dev/raw/raw15 /dev/pv1/lvol15
/usr/bin/raw /dev/raw/raw16 /dev/pv1/lvol16
/usr/bin/raw /dev/raw/raw17 /dev/pv1/lvol17
/usr/bin/raw /dev/raw/raw18 /dev/pv1/lvol18
/usr/bin/raw /dev/raw/raw19 /dev/pv1/lvol19
/usr/bin/raw /dev/raw/raw20 /dev/pv1/lvol20
/usr/bin/raw /dev/raw/raw21 /dev/pv1/lvol21
/usr/bin/raw /dev/raw/raw22 /dev/pv1/lvol22
/usr/bin/raw /dev/raw/raw23 /dev/pv1/lvol23
/bin/chmod 600 /dev/raw/raw1
/bin/chmod 600 /dev/raw/raw2
/bin/chmod 600 /dev/raw/raw3
/bin/chmod 600 /dev/raw/raw4
/bin/chmod 600 /dev/raw/raw5
/bin/chmod 600 /dev/raw/raw6
/bin/chmod 600 /dev/raw/raw7
/bin/chmod 600 /dev/raw/raw8
/bin/chmod 600 /dev/raw/raw9
/bin/chmod 600 /dev/raw/raw10
/bin/chmod 600 /dev/raw/raw11
/bin/chmod 600 /dev/raw/raw12
/bin/chmod 600 /dev/raw/raw13
/bin/chmod 600 /dev/raw/raw14
/bin/chmod 600 /dev/raw/raw15
/bin/chmod 600 /dev/raw/raw16
/bin/chmod 600 /dev/raw/raw17
/bin/chmod 600 /dev/raw/raw18
/bin/chmod 600 /dev/raw/raw19
/bin/chmod 600 /dev/raw/raw20
/bin/chmod 600 /dev/raw/raw21
/bin/chmod 600 /dev/raw/raw22
/bin/chmod 600 /dev/raw/raw23
/bin/chown oracle:dba /dev/raw/raw1
/bin/chown oracle:dba /dev/raw/raw2
/bin/chown oracle:dba /dev/raw/raw3
/bin/chown oracle:dba /dev/raw/raw4
/bin/chown oracle:dba /dev/raw/raw5
/bin/chown oracle:dba /dev/raw/raw6
/bin/chown oracle:dba /dev/raw/raw7
/bin/chown oracle:dba /dev/raw/raw8
/bin/chown oracle:dba /dev/raw/raw9
/bin/chown oracle:dba /dev/raw/raw10
/bin/chown oracle:dba /dev/raw/raw11
/bin/chown oracle:dba /dev/raw/raw12
/bin/chown oracle:dba /dev/raw/raw13
/bin/chown oracle:dba /dev/raw/raw14
/bin/chown oracle:dba /dev/raw/raw15
/bin/chown oracle:dba /dev/raw/raw16
/bin/chown oracle:dba /dev/raw/raw17
/bin/chown oracle:dba /dev/raw/raw18
/bin/chown oracle:dba /dev/raw/raw19
/bin/chown oracle:dba /dev/raw/raw20
/bin/chown oracle:dba /dev/raw/raw21
/bin/chown oracle:dba /dev/raw/raw22
/bin/chown oracle:dba /dev/raw/raw23
注意: 切記,需要在每次啟動時為 RAC 集群中的每個節點執行以上的 綁定 步驟。它應該放在類似 /etc/rc.local 的啟動腳本中。
您可以使用 raw 命令來驗證原始綁定:
# raw -qa
/dev/raw/raw1:bound to major 58, minor 0
/dev/raw/raw2:bound to major 58, minor 1
/dev/raw/raw3:bound to major 58, minor 2
/dev/raw/raw4:bound to major 58, minor 3
/dev/raw/raw5:bound to major 58, minor 4
/dev/raw/raw6:bound to major 58, minor 5
/dev/raw/raw7:bound to major 58, minor 6
/dev/raw/raw8:bound to major 58, minor 7
/dev/raw/raw9:bound to major 58, minor 8
/dev/raw/raw10:bound to major 58, minor 9
/dev/raw/raw11:bound to major 58, minor 10
/dev/raw/raw12:bound to major 58, minor 11
/dev/raw/raw13:bound to major 58, minor 12
/dev/raw/raw14:bound to major 58, minor 13
/dev/raw/raw15:bound to major 58, minor 14
/dev/raw/raw16:bound to major 58, minor 15
/dev/raw/raw17:bound to major 58, minor 16
/dev/raw/raw18:bound to major 58, minor 17
/dev/raw/raw19:bound to major 58, minor 18
/dev/raw/raw20:bound to major 58, minor 19
/dev/raw/raw21:bound to major 58, minor 20
/dev/raw/raw22:bound to major 58, minor 21
/dev/raw/raw23:bound to major 58, minor 22
創建來自 RAW 卷的符號鏈接(在兩個節點上執行)
注意: 在每次啟動機器時 , 需要在集群中的每個節點上執行本部分中的一些命令。這些命令的詳細信息以及關於將其加入啟動腳本的說明都包含在 用於每個 RAC 節點的所有啟動命令 。
我通常將來自 RAW 卷的符號鏈接創建為人們易於理解的名稱,以便更易於識別文件。如果您決定不使用符號鏈接,則在創建 / 維護表空間時,您需要為您所定義的 Oracle 文件使用 /dev/pv1/lvol X 標識。對於某些人來說,處理含義隱晦的標識(如 /dev/pv1/lvol21 )實在過於麻煩了 — ,而 使用人們易於理解的名稱則要簡單得多。這些命令需要在每台 Linux 服務器上執行一次。我通常將它們包含在 /etc/rc.local 啟動腳本中。如果您添加了表空間,則應該將新的邏輯卷、 RAW 綁定及鏈接名稱添加到所有節點的多個文件中。
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/oradata/orcl
ln -s /dev/raw/raw1 /u01/app/oracle/oradata/orcl/CMQuorumFile
ln -s /dev/raw/raw2 /u01/app/oracle/oradata/orcl/SharedSrvctlConfigFile
ln -s /dev/raw/raw3 /u01/app/oracle/oradata/orcl/spfileorcl.ora
ln -s /dev/raw/raw4 /u01/app/oracle/oradata/orcl/control01.ctl
ln -s /dev/raw/raw5 /u01/app/oracle/oradata/orcl/control02.ctl
ln -s /dev/raw/raw6 /u01/app/oracle/oradata/orcl/control03.ctl
ln -s /dev/raw/raw7 /u01/app/oracle/oradata/orcl/cwmlite01.dbf
ln -s /dev/raw/raw8 /u01/app/oracle/oradata/orcl/drsys01.dbf
ln -s /dev/raw/raw9 /u01/app/oracle/oradata/orcl/example01.dbf
ln -s /dev/raw/raw10 /u01/app/oracle/oradata/orcl/indx01.dbf
ln -s /dev/raw/raw11 /u01/app/oracle/oradata/orcl/odm01.dbf
ln -s /dev/raw/raw12 /u01/app/oracle/oradata/orcl/system01.dbf
ln -s /dev/raw/raw13 /u01/app/oracle/oradata/orcl/temp01.dbf
ln -s /dev/raw/raw14 /u01/app/oracle/oradata/orcl/tools01.dbf
ln -s /dev/raw/raw15 /u01/app/oracle/oradata/orcl/undotbs01.dbf
ln -s /dev/raw/raw16 /u01/app/oracle/oradata/orcl/undotbs02.dbf
ln -s /dev/raw/raw17 /u01/app/oracle/oradata/orcl/users01.dbf
ln -s /dev/raw/raw18 /u01/app/oracle/oradata/orcl/xdb01.dbf
ln -s /dev/raw/raw19 /u01/app/oracle/oradata/orcl/perfstat01.dbf
ln -s /dev/raw/raw20 /u01/app/oracle/oradata/orcl/redo01.log
ln -s /dev/raw/raw21 /u01/app/oracle/oradata/orcl/redo02.log
ln -s /dev/raw/raw22 /u01/app/oracle/oradata/orcl/redo03.log
ln -s /dev/raw/raw23 /u01/app/oracle/oradata/orcl/orcl_redo2_2.log
chown -R oracle:dba /u01/app/oracle/oradata
配置 Linux 服務器(在兩個節點上執行)
注意: 在每次啟動機器時 , 需要在集群中的每個節點上執行本部分中的一些命令。這些命令的詳細信息以及關於將其加入啟動腳本的說明都包含在 用於每個 RAC 節點的所有啟動命令 。
本文的這一部分集中討論了對兩台 Linux 服務器的配置 — 使每台服務器都為 Oracle9 i RAC 的安裝作好准備。
對交換空間的考慮因素
安裝 Oracle9 i 需要最少 512MB 內存。 (在安裝期間交換容量不足會導致 Oracle Universal Installer“ 掛起 ” 或 “ 死機 ” ) 要檢查您已經分配的內存 / 交換容量,可以鍵入:# free
— 或 —
# cat /proc/swaps
— 或 —
# cat /proc/meminfo grep MemTotal
如果您的內存少於 512MB (在 RAM 與 SWAP 之間),您可以通過創建臨時交換文件來添加臨時交換空間。這樣,您就不必使用原始設備甚至更徹底地重建系統了。以 root 身份創建一個用作額外交換空間的文件,假設大小為 300MB : # dd if=/dev/zero of=tempswap bs=1k count=300000
現在我們應該更改文件的權限: # chmod 600 tempswap
最後我們將該 “ 分區 ” 格式化為交換分區,並將其添加到交換空間: # mke2fs tempswap # mkswap tempswap # swapon tempswap
設置共享內存
共享內存通過將通用的結構和數據放在共享內存段中,使得進程可以對它們進行訪問。這是現有最快的進程間通信( IPC )方式 — 主要是因為數據在進程之間傳遞時沒有涉及到內核的操作。在進程之間不需要復制數據。
Oracle 將共享內存用於它的系統全局區 (SGA) ,這是一個由所有的 Oracle 備份進程及前台進程所共享的內存區域。為 SGA 分配足夠的容量對於 Oracle 的性能非常重要,因為它負責保存數據庫緩沖區高速緩存、共享 SQL 、訪問路徑以及更多。
要確定所有共享內存的限制,可使用以下命令:
# ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
設置 SHMMAX
SHMMAX 參數定義共享內存段的最大尺寸(以字節為單位)。 Oracle SGA 包含共享內存,而不正確地設置 SHMMAX 可能會限制 SGA 的大小。在設置 SHMMAX 時,切記 SGA 的大小應該適合於一個共享內存段。 SHMMAX 設置不足可能會導致以下問題:
ORA-27123:unable to attach to shared memory segment
您可以通過執行以下命令來確定 SHMMAX 的值:
# cat /proc/sys/kernel/shmmax
33554432
SHMMAX 的默認值是 32MB 。通常,這個值對於配置 Oracle SGA 而言太小了。我一般使用下列方法之一種將 SHMMAX 參數設為 2GB :
通過直接更改 /proc 文件系統,你不需重新啟動機器就可以改變 SHMMAX 的默認設置。我使用的方法是將以下命令放入 /etc/rc.local 啟動文件中:# >echo "2147483648" > /proc/sys/kernel/shmmax
您還可以使用 sysctl 命令來更改 SHMMAX 的值:# sysctl -w kernel.shmmax=2147483648
最後,通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,您可以使這種更改永久有效:# echo "kernel.shmmax=2147483648" >> /etc/sysctl.con
設置 SHMMNI
我們現在來看 SHMMNI 參數。這個內核參數用於設置系統范圍內共享內存段的最大數量。該參數的默認值是 4096 。這一數值已經足夠,通常不需要更改。
您可以通過執行以下命令來確定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmni
4096
設置 SHMALL
最後,我們來看 SHMALL 共享內存內核參數。該參數控制著系統一次可以使用的共享內存總量(以頁為單位)。簡言之,該參數的值始終應該至少為:
ceil(SHMMAX/PAGE_SIZE)
SHMALL 的默認大小為 2097152 ,可以使用以下命令進行查詢:
# cat /proc/sys/kernel/shmall
2097152
SHMALL 的默認設置對於我們的 Oracle9 i RAC 安裝來說應該足夠使用。
注意: 在 i386 平台上 Red Hat Linux 的 頁面大小 為 4096 字節。但是,您可以使用 bigpages ,它支持配置更大的內存頁面尺寸。
設置信號
既然我們已經配置了共享內存設置,現在就該考慮配置我們的 信號 了。對信號的最佳描述是,它是用於在共享資源(如共享內存)的進程(或進程中的線程)之間提供同步的計數器。在系統 V 中支持信號集,其中每一項都是信號計數。當應用程序請求信號時,它使用 “ 集合 ” 來完成此工作。
要確定所有的信號限制,可使用以下命令:
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
您還可以使用以下命令:
# cat /proc/sys/kernel/sem
250 32000 32 128
設置 SEMMSL
SEMMSL 內核參數用於控制每個信號集的最大信號數量。
Oracle 建議將 SEMMSL 設置為 init.ora 文件(用於 Linux 系統中的所有數據庫)中的最大 PROCESS 實例參數的設置值再加上 10 。此外, Oracle 建議將 SEMMSL 的值設置為不少於 100 。
設置 SEMMNI
SEMMNI 內核參數用於控制整個 Linux 系統中信號集的最大數量。
Oracle 建議將 SEMMNI 的值設置為不少於 100 。
設置 SEMMNS
SEMMNS> 內核參數用於控制整個 Linux 系統中信號(而不是信號集)的最大數。
Oracle 建議將 SEMMNS 設置為:系統中每個數據庫的 PROCESSES 實例參數設置值的總和,加上最大 PROCESSES 值的兩倍,最後根據系統中 Oracle 數據庫的數量,每個加 10 。
使用以下計算式來確定在 Linux 系統中可以分配的信號的最大數量。它將是以下兩者中較小的一個值:
SEMMNS — 或 — (SEMMSL * SEMMNI)
設置 SEMOPM
SEMOPM 內核參數用於控制每個 semop 系統調用可以執行的信號操作的數量。
semop 系統調用(函數)提供了利用一個 semop 系統調用完成多項信號操作的功能。一個信號集能夠擁有每個信號集中最大數量的 SEMMSL 信號,因此建議設置 SEMOPM 等於 SEMMSL 。
Oracle 建議將 SEMOPM 的值設置為不少於 100 。
設置信號內核參數
最後,我們來看如何使用一些方法來設置所有的信號參數。在下文中,我想更改(增加)的唯一參數是 SEMOPM 。所有其他的默認設置可以完全滿足我們的示例安裝。
您可以通過直接更改 /proc 文件系統,不必重新啟動機器而更改所有信號設置的默認設置。我使用的方法是將以下命令放入 /etc/rc.local 啟動文件中:# echo "250 32000 100 128" > /proc/sys/kernel/sem
您還可以使用 sysctl 命令來更改所有信號設置的值:# sysctl -w kernel.sem="250 32000 100 128"
最後,您可以通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,使這種更改永久有效:# echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
設置文件句柄
在配置我們的 Red Hat Linux 服務器時,確保文件句柄的最大數量足夠大是非常關鍵的。文件句柄設置表示您在 Linux 系統中可以打開的文件數量。
使用以下命令來確定整個系統中文件句柄的最大數量:
# cat /proc/sys/fs/file-max
32768
Oracle 建議將整個系統的文件句柄值至少設置為 65536 。
通過直接更改 /proc 文件系統,您可以不必重新啟動機器而改變文件句柄最大數量的默認設置。我使用的方法是將以下命令置於 /etc/rc.local 啟動文件中:# echo "65536" > /proc/sys/fs/file-max
您還可以使用 sysctl 命令來更改 SHMMAX 的值:# sysctl -w fs.file-max=65536
最後,您可以通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,使這種更改永久有效:# echo "fs.file-max=65536" >> /etc/sysctl.conf
注意: 您可以使用以下命令來查詢文件句柄的當前使用情況:
# cat /proc/sys/fs/file-nr
613 95 32768
file-nr 文件顯示了三個參數:
分配的文件句柄總數 當前使用的文件句柄數 可以分配的最大文件句柄數注意: 如果您需要增加 /proc/sys/fs/file-max 中的值,則要確保正確地設置 ulimit 。對於 2.4.20 ,通常將其設置為 unlimited 。使用 ulimit 命令來驗證 ulimit 設置:
# ulimit
unlimited
配置 hangcheck-timer 內核模塊
Oracle 9.0.1 和 9.2.0.1 使用一個稱為 watchdogd 的用戶空間監視後台程序來監視集群的狀態情況,並在發生故障時重新啟動 RAC 模式。但是,從 Oracle 9.2.0.2 開始,一個稱為 hangcheck-timer 的 Linux 模塊取代了此後台程序,該模塊更好地解決了可用性和可靠性的問題。 hangcheck-timer 被加載到內核中並檢查系統是否掛起。它將設置一個定時器,並在特定的時間量之後檢查該定時器。有一個用於檢查掛起情況的可配置阈值,如果超過該值機器將重新啟動。雖然 Oracle Cluster Manager 的操作不需要 hangcheck-timer 模塊,但 Oracle 高度建議使用它。
hangcheck-timer.o 模塊
hangcheck-timer 模塊使用了一個基於內核的定時器,該定時器周期性地檢查系統任務調度程序,以捕獲延遲,從而確定系統的健康情況。如果系統掛起或暫停,則定時器重啟該節點。 hangcheck-timer 模塊使用了時間標記計數器 (TSC) CPU 寄存器,這是一個在每次時鐘信號時遞增的計數器。 TCS 提供了更為精確的時間量度,因為該寄存器是由硬件自動更新的。
有關 hangcheck-timer 項目的詳細信息,請單擊 此處 。
安裝 hangcheck-timer.o 模塊
hangcheck-timer 通常與 Oracle 一同提供,但是,現在從內核版本 2.4.9 -e.12 起,該模塊與 Red Hat Linux AS 包含在一起。如果您按照 “ 獲取和安裝合適的 Linux 內核 ” 中的步驟執行,則已經包含了 hangcheck-timer 。使用以下命令來確認您已經包含了該模塊:
# find /lib/modules -name "hangcheck-timer.o"
/lib/modules/ 2.4.21 -9.0.1.ELorafw1/kernel/drivers/char/hangcheck-timer.o
配置和加載 hangcheck-timer 模塊
對於 hangcheck-timer 模塊有兩個關鍵的參數。
hangcheck-tick :此參數定義了檢查系統健康情況的間隔時段。其默認值為 60 秒。 Oracle 建議將其設置為 30 秒。 hangcheck-margin :此參數定義了 hangcheck-timer 在重啟 RAC 節點前所容許的最大掛起延遲。它定義了以秒為單位的錯誤余量。其默認值為 180 秒。 Oracle 建議將其設置為 180 秒。這兩個參數需要與 Cluster Manager 的 $ORACLE_HOME/oracm/admin/cmcfg.ora 文件中的 MissCount 參數協同使用。
注意: 這兩個 hangcheck-timer 模塊參數說明在該模塊重啟系統前 RAC 節點必須掛起多長時間。當以下條件為真時將會重啟節點:
系統掛起時間 > (hangcheck_tick + hangcheck_margin)
現在讓我們來討論如何加載該模塊。您可以通過使用以下命令,利用正確的參數設置來手動地加載該模塊:
# su -
# /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
# grep Hangcheck /var/log/messages*
/var/log/messages.1:Apr 30 20:51:47 linux2 kernel:Hangcheck: starting hangcheck timer 0.8.0 (tick is 30 seconds, margin is 180 seconds).
/var/log/messages.1:Apr 30 20:51:47 linux2 kernel:Hangcheck:Using TSC.
將以上的 “ insmod ” 命令放在您的 /etc/rc.local 文件中!
雖然手動加載模塊的方法(如上所示)可以有效工作,但我們需要一種在每次重新啟動節點時利用正確參數來加載該模塊的方法。我們通過在 /etc/modules.conf 文件中創建項目來完成此任務。將以下的行添加到 /etc/modules.conf 文件中:
# su -
# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modules.conf
現在,為測試模塊,可使用 modprobe 命令。您可以運行 modprobe 命令,利用在 /etc/modules.conf 文件中定義的、經過配置的參數來手動加載 hangcheck-timer 模塊:
# su -
# modprobe hangcheck-timer
# grep Hangcheck /var/log/messages*
/var/log/messages.1:Apr 30 20:51:47 linux2 kernel: Hangcheck:starting hangcheck timer 0.8.0 (tick is 30 seconds, margin is 180 seconds).
/var/log/messages.1:Apr 30 20:51:47 linux2 kernel: Hangcheck:Using TSC.
注意: 您不必在每次重新啟動後都運行 modprobe 。 hangcheck-timer 模塊將會在需要時由內核加載(自動進行)。
為遠程訪問配置 RAC 節點
當在一個 RAC 節點上運行 Oracle Installer 時,它將使用 rsh 命令把 Oracle 軟件復制到 RAC 集群中的所有其他節點。在運行 Oracle Installer 的節點上的 oracle UNIX 帳號 ( runIntaller ) 必須為您 RAC 集群中的所有其他節點所信任。這意味著您應該能夠在此 RAC 節點上不需要口令而根據其他 RAC 節點來運行 r* 命令,如 rsh 、 rcp 和 rlogin 等。 rsh 後台程序使用在用戶 (oracle) 的主目錄中所找到的 /etc/hosts.equiv 文件和 .rhosts 文件來驗證用戶。不幸的是,它不支持 SSH 。
首先,讓我們確認已經在 RAC 集群中的每個節點上安裝了 rsh RPM :
# rpm -q rsh rsh-server
rsh-0.17-19
rsh-server-0.17-19
根據以上情況,我們可以了解到已經安裝了 rsh 和 rsh-server 。
注意: 如果沒有安裝 rsh ,則運行以下命令:
# su -
# rpm -ivh rsh-0.17-5.i386.rpm rsh-server-0.17-5.i386.rpm
要啟動 “rsh” 服務,必須將 /etc/xinetd.d/rsh 文件中的 “disable” 屬性設置為 “ no ” ,並且必須刷新 xinetd 。通過運行以下命令可以完成此工作:
# su -
# chkconfig rsh on
# chkconfig rlogin on
# service xinetd reload
Reloading configuration:[ OK ]
要使得 “oracle”UNIX 用戶帳號在 RAC 節點中獲得信任,需要創建 /etc/hosts.equiv 文件:
# su -
# touch /etc/hosts.equiv
# chmod 600 /etc/hosts.equiv
# chown root.root /etc/hosts.equiv
現在將所有 RAC 節點添加到類似於以下示例的 /etc/hosts.equiv 文件中:
# cat /etc/hosts.equiv
+linux1 oracle
+linux2 oracle
+int-linux1 oracle
+int-linux2 oracle
請確保您的 RAC 集群中的所有節點上都存在 /etc/hosts.equiv 文件!
注意: 在以上示例中,第二個字段只允許 oracle 用戶帳號在所指定的節點上運行 rsh 命令。由於安全原因, /etc/hosts.equiv 文件應該由 root 所擁有,並應該將權限設置為 600 。實際上,某些系統只有在該文件的所有者為 root 並且權限被設置為 600 時才接受此文件的內容。
注意: 在嘗試測試您的 rsh 命令之前,請確保您正在使用正確版本的 rsh 。在默認情況下, Red Hat Linux 將 /usr/kerberos/sbin 放在 $PATH 變量的前面。這會導致執行 rsh 的 Kerberos 版本。
我通常會重命名 rsh 的 Kerberos 版本,以便使用正常的 rsh 命令。使用以下命令:
# su -
# which rsh
/usr/kerberos/bin/rsh
# cd /usr/kerberos/bin
# mv rsh rsh.original
# which rsh
/usr/bin/rsh
您現在應該測試您的連接並根據每個 RAC 來運行 rsh 命令。我使用節點 linux1 來執行安裝。
# su - oracle
$ rsh int-linux1 ls -l /etc/hosts.equiv
-rw------- 1 root root 68 May 2 14:45 /etc/hosts.equiv
$ rsh int-linux2 ls -l /etc/hosts.equiv
-rw------- 1 root root 68 May 2 14:45 /etc/hosts.equiv
用於每個 RAC 節點的所有啟動命令(用於兩個節點)
到現在為止,我們已經詳細討論了在我們的 Oracle9 i RAC 配置中需要在兩個節點上進行配置的參數和資源。在本部分中,我們將稍事調整,簡要復述這些參數、命令和項目(在本文前面的章節中已出現),當啟動機器時需要在每個節點上執行它們。
在本部分中,我提供了到目前為止我們已經討論過的所有命令、參數和項目,它們需要被包括在 RAC 集群中每個 Linux 節點的所有啟動腳本中。以下的每個啟動文件中,對於那些為建立成功運行的 RAC 節點而應當在每個文件中包含的項目,都用粗體顯示。
文件: /etc/modules.conf —
需要配置的所有內核參數和模塊。
alias eth0 tulip
alias usb-controller usb-uhci
alias usb-controller1 ehci-hcd
alias ieee1394-controller ohci1394
alias sound-slot-0 cmpci
options sbp2 sbp2_exclusive_login=0
post-install sbp2 insmod sd_mod
post-remove sbp2 rmmod sd_mod
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 :
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 :
alias eth1 8139too
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
文件: /etc/sysctl.conf
我們希望為互聯而調整默認的和最大的發送緩沖區大小以及默認的和最大的接收緩沖區大小。
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# Default setting in bytes of the socket receive buffer
net.core.rmem_default=262144
# Default setting in bytes of the socket send buffer
net.core.wmem_default=262144
# Maximum socket receive buffer size which may be set by using
# the SO_RCVBUF socket option
net.core.rmem_max=262144
# Maximum socket send buffer size which may be set by using
# the SO_SNDBUF socket option
net.core.wmem_max=262144
文件: /etc/hosts
我們的 RAC 集群中的節點的所有機器 /IP 項。
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.1.100 linux1
192.168.2.100 int-linux1
192.168.1.101 linux2
192.168.2.101 int-linux2
192.168.1.102 alex
192.168.1.105 bartman
文件: /etc/hosts.equiv
允許在不需要口令的情況下以 oracle 用戶帳號登錄到每個節點。
+linux1 oracle
+linux2 oracle
+int-linux1 oracle
+int-linux2 oracle
文件: /etc/grub.conf
確定在啟動節點時使用哪個內核。
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core ( 2.4.21 -9.0.1.ELorafw1)
root (hd0,0)
kernel /vmlinuz- 2.4.21 -9.0.1.ELorafw1 ro root=LABEL=/ rhgb
initrd /initrd- 2.4.21 -9.0.1.ELorafw1.img
title Fedora Core ( 2.4.22 -1.2115.nptl)
root (hd0,0)
kernel /vmlinuz- 2.4.22 -1.2115.nptl ro root=LABEL=/ rhgb
initrd /initrd- 2.4.22 -1.2115.nptl.img
文件: /etc/rc.local
這些命令負責將卷綁定到原始設備、內核設定點、激活卷組、創建符號鏈接 — 所有這些都是為了准備每個節點的共享存儲器。
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
vgscan
vgchange -a y
# +---------------------------------------------------------+
# SHARED MEMORY
# +---------------------------------------------------------+
echo "2147483648" > /proc/sys/kernel/shmmax
echo "4096" > /proc/sys/kernel/shmmni
# +---------------------------------------------------------+
# SEMAPHORES
# ----------
#
# SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value
#
# +---------------------------------------------------------+
echo "256 32000 100 128" > /proc/sys/kernel/sem
# +---------------------------------------------------------+
# FILE HANDLES
# ----------------------------------------------------------+
echo "65536" > /proc/sys/fs/file-max
# +---------------------------------------------------------+
# BIND ALL RAW DEVICES
# +---------------------------------------------------------+
/usr/bin/raw /dev/raw/raw1 /dev/pv1/lvol1
/usr/bin/raw /dev/raw/raw2 /dev/pv1/lvol2
/usr/bin/raw /dev/raw/raw3 /dev/pv1/lvol3
/usr/bin/raw /dev/raw/raw4 /dev/pv1/lvol4
/usr/bin/raw /dev/raw/raw5 /dev/pv1/lvol5
/usr/bin/raw /dev/raw/raw6 /dev/pv1/lvol6
/usr/bin/raw /dev/raw/raw7 /dev/pv1/lvol7
/usr/bin/raw /dev/raw/raw8 /dev/pv1/lvol8
/usr/bin/raw /dev/raw/raw9 /dev/pv1/lvol9
/usr/bin/raw /dev/raw/raw10 /dev/pv1/lvol10
/usr/bin/raw /dev/raw/raw11 /dev/pv1/lvol11
/usr/bin/raw /dev/raw/raw12 /dev/pv1/lvol12
/usr/bin/raw /dev/raw/raw13 /dev/pv1/lvol13
/usr/bin/raw /dev/raw/raw14 /dev/pv1/lvol14
/usr/bin/raw /dev/raw/raw15 /dev/pv1/lvol15
/usr/bin/raw /dev/raw/raw16 /dev/pv1/lvol16
/usr/bin/raw /dev/raw/raw17 /dev/pv1/lvol17
/usr/bin/raw /dev/raw/raw18 /dev/pv1/lvol18
/usr/bin/raw /dev/raw/raw19 /dev/pv1/lvol19
/usr/bin/raw /dev/raw/raw20 /dev/pv1/lvol20
/usr/bin/raw /dev/raw/raw21 /dev/pv1/lvol21
/usr/bin/raw /dev/raw/raw22 /dev/pv1/lvol22
/usr/bin/raw /dev/raw/raw23 /dev/pv1/lvol23
/bin/chmod 600 /dev/raw/raw1
/bin/chmod 600 /dev/raw/raw2
/bin/chmod 600 /dev/raw/raw3
/bin/chmod 600 /dev/raw/raw4
/bin/chmod 600 /dev/raw/raw5
/bin/chmod 600 /dev/raw/raw6
/bin/chmod 600 /dev/raw/raw7
/bin/chmod 600 /dev/raw/raw8
/bin/chmod 600 /dev/raw/raw9
/bin/chmod 600 /dev/raw/raw10
/bin/chmod 600 /dev/raw/raw11
/bin/chmod 600 /dev/raw/raw12
/bin/chmod 600 /dev/raw/raw13
/bin/chmod 600 /dev/raw/raw14
/bin/chmod 600 /dev/raw/raw15
/bin/chmod 600 /dev/raw/raw16
/bin/chmod 600 /dev/raw/raw17
/bin/chmod 600 /dev/raw/raw18
/bin/chmod 600 /dev/raw/raw19
/bin/chmod 600 /dev/raw/raw20
/bin/chmod 600 /dev/raw/raw21
/bin/chmod 600 /dev/raw/raw22
/bin/chmod 600 /dev/raw/raw23
/bin/chown oracle:dba /dev/raw/raw1
/bin/chown oracle:dba /dev/raw/raw2
/bin/chown oracle:dba /dev/raw/raw3
/bin/chown oracle:dba /dev/raw/raw4
/bin/chown oracle:dba /dev/raw/raw5
/bin/chown oracle:dba /dev/raw/raw6
/bin/chown oracle:dba /dev/raw/raw7
/bin/chown oracle:dba /dev/raw/raw8
/bin/chown oracle:dba /dev/raw/raw9
/bin/chown oracle:dba /dev/raw/raw10
/bin/chown oracle:dba /dev/raw/raw11
/bin/chown oracle:dba /dev/raw/raw12
/bin/chown oracle:dba /dev/raw/raw13
/bin/chown oracle:dba /dev/raw/raw14
/bin/chown oracle:dba /dev/raw/raw15
/bin/chown oracle:dba /dev/raw/raw16
/bin/chown oracle:dba /dev/raw/raw17
/bin/chown oracle:dba /dev/raw/raw18
/bin/chown oracle:dba /dev/raw/raw19
/bin/chown oracle:dba /dev/raw/raw20
/bin/chown oracle:dba /dev/raw/raw21
/bin/chown oracle:dba /dev/raw/raw22
/bin/chown oracle:dba /dev/raw/raw23
# +---------------------------------------------------------+
# CREATE SYMBOLIC LINKS
# +---------------------------------------------------------+
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/oradata/orcl
ln -s /dev/raw/raw1 /u01/app/oracle/oradata/orcl/CMQuorumFile
ln -s /dev/raw/raw2 /u01/app/oracle/oradata/orcl/SharedSrvctlConfigFile
ln -s /dev/raw/raw3 /u01/app/oracle/oradata/orcl/spfileorcl.ora
ln -s /dev/raw/raw4 /u01/app/oracle/oradata/orcl/control01.ctl
ln -s /dev/raw/raw5 /u01/app/oracle/oradata/orcl/control02.ctl
ln -s /dev/raw/raw6 /u01/app/oracle/oradata/orcl/control03.ctl
ln -s /dev/raw/raw7 /u01/app/oracle/oradata/orcl/cwmlite01.dbf
ln -s /dev/raw/raw8 /u01/app/oracle/oradata/orcl/drsys01.dbf
ln -s /dev/raw/raw9 /u01/app/oracle/oradata/orcl/example01.dbf
ln -s /dev/raw/raw10 /u01/app/oracle/oradata/orcl/indx01.dbf
ln -s /dev/raw/raw11 /u01/app/oracle/oradata/orcl/odm01.dbf
ln -s /dev/raw/raw12 /u01/app/oracle/oradata/orcl/system01.dbf
ln -s /dev/raw/raw13 /u01/app/oracle/oradata/orcl/temp01.dbf
ln -s /dev/raw/raw14 /u01/app/oracle/oradata/orcl/tools01.dbf
ln -s /dev/raw/raw15 /u01/app/oracle/oradata/orcl/undotbs01.dbf
ln -s /dev/raw/raw16 /u01/app/oracle/oradata/orcl/undotbs02.dbf
ln -s /dev/raw/raw17 /u01/app/oracle/oradata/orcl/users01.dbf
ln -s /dev/raw/raw18 /u01/app/oracle/oradata/orcl/xdb01.dbf
ln -s /dev/raw/raw19 /u01/app/oracle/oradata/orcl/perfstat01.dbf
ln -s /dev/raw/raw20 /u01/app/oracle/oradata/orcl/redo01.log
ln -s /dev/raw/raw21 /u01/app/oracle/oradata/orcl/redo02.log
ln -s /dev/raw/raw22 /u01/app/oracle/oradata/orcl/redo03.log
ln -s /dev/raw/raw23 /u01/app/oracle/oradata/orcl/orcl_redo2_2.log
chown -R oracle:dba /u01/app/oracle/oradata
/sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
更新 Red Hat Linux 系統( Oracle Metalink 注釋 #252217.1 )(在兩個節點上執行)
以下的 RPM 均在 Red Hat Fedora Core 1 CD 中提供,它們需要進行更新,方法使用在 Metalink 注釋 #252217.1“ 在 RHEL3 上安裝 Oracle9 i R2 的需求 ” 中說明的步驟。
所有這些程序包都需要以 root 用戶安裝。
在 Fedora Core 1 / 1 號盤上
# cd /mnt/cdrom/Fedora/RPMS
# rpm -Uvh libpng10- 1.0.13 -9.i386.rpm
在 Fedora Core 1 / 2 號盤上
# cd /mnt/cdrom/Fedora/RPMS
# rpm -Uvh gnome-libs- 1.4.1 .2.90-35.i386.rpm
在 Fedora Core 1 / 3 號盤上
# cd /mnt/cdrom/Fedora/RPMS
# rpm -Uvh compat-libstdc++-7.3-2.96.118.i386.rpm
# rpm -Uvh compat-libstdc++-devel-7.3-2.96.118.i386.rpm
# rpm -Uvh compat-db- 4.0.14 -2.i386.rpm
# rpm -Uvh compat-gcc-7.3-2.96.118.i386.rpm
# rpm -Uvh compat-gcc-c++-7.3-2.96.118.i386.rpm
# rpm -Uvh sysstat- 4.0.7 -5.i386.rpm
# rpm -Uvh openmotif21- 2.1.30 -8.i386.rpm
# rpm -Uvh pdksh- 5.2.14 -23.i386.rpm
在 PATH 中設置 gcc296 和 g++296
首先通過創建以下的符號鏈接,將 gcc296 和 g++296 加入到 $PATH 變量中:
# mv /usr/bin/gcc /usr/bin/gcc323
# mv /usr/bin/g++ /usr/bin/g++323
# ln -s /usr/bin/gcc296 /usr/bin/gcc
# ln -s /usr/bin/g++296 /usr/bin/g++
檢查主機名
如有必要,可對修改 /etc/hosts 文件,以確保 hostname 命令返回完全合格的主機名:
# hostname
安裝 3006854 補丁: Oracle/Linux 補丁 3006854
# unzip p3006854_9204_LINUX.zip
# cd 3006854
# sh rhel3_pre_install.sh
重新啟動系統
此時,在准備安裝 Oracle 軟件之前,重新啟動 RAC 集群中的所有節點。
# init 6