在無雙機硬件條件下,利用單台 PC + 虛擬 IP + 共享磁盤模擬構建 Oracle 10g RAC 環境,驗證核心特性:
核心挑戰: 單機缺乏物理共享存儲與私有網絡,需通過 OCFS2 文件系統模擬共享存儲、回環網卡模擬私有互連。
| 維度 | 配置詳情 |
|---|---|
| 硬體 | Celeron 1.8GHz / 1GB DDR333 / 40GB IDE 磁盤 / Realtek 8139C 網卡 |
| 作業系統 | White Box Enterprise Linux 3 (兼容 RHEL 3,免費商用) |
| 集群軟體 | Oracle 10g R1 (10.1.0.2) Clusterware (CRS) + Database |
| 共享文件系統 | OCFS2 1.0.14 (ocfs, ocfs-support, ocfs-tools RPM) |
| ASM 驅動 | ASMLib 1.0.3 (oracleasm, oracleasm-support, oracleasmlib RPM) |
單磁盤模擬共享存儲,通過分區隔離:
| 用途 | 掛載點 | 分區 | 文件系統 | 大小建議 |
|---|---|---|---|---|
| Oracle Base / 軟體 | /home/oracle | /dev/hdaX | ext3 | 10GB+ |
| CRS 儲存 (OCR + Voting Disk) | /u01/orcl/orcfile, /u01/orcl/cssfile | /dev/hda8 | OCFS2 | 2GB+ |
| ASM 磁盤組 (數據/閃回) | ASM 直接管理 | /dev/hda9, /dev/hda10 | ASM (Raw) | 各 4GB+ |
# /etc/sysctl.conf 關鍵項
kernel.shmmax = 2147483648
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
# 用戶組
groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
groupadd -g 504 asmadmin
useradd -u 501 -g oinstall -G dba,oper,asmadmin oracle
passwd oracle
# 1. 安裝 RPM
rpm -ivh ocfs-*.rpm ocfs-support-*.rpm ocfs-tools-*.rpm
# 2. 配置集群 /etc/ocfs2/cluster.conf
cluster:
node_count = 2
name = rac_cluster
node:
ip_port = 7777
ip_address = 192.168.1.101 # Node1 公網/虛擬IP
number = 1
name = node1
cluster = rac_cluster
node:
ip_port = 7777
ip_address = 192.168.1.102 # Node2 虛擬IP (同機器不同IP)
number = 2
name = node2
cluster = rac_cluster
# 3. 格式化 OCR/Voting 分區
mkfs.ocfs2 -L "OCR_VOTE" /dev/hda8
# 4. 掛載 (所有節點)
mount -t ocfs2 /dev/hda8 /u01
# 安裝 ASMLib RPM (同上文)
/etc/init.d/oracleasm configure
# user: oracle, group: asmadmin, boot: y, fix perms: y
# 創建 ASM 磁盤 (標記原始分區)
/etc/init.d/oracleasm createdisk DATA1 /dev/hda9
/etc/init.d/oracleasm createdisk FRA1 /dev/hda10
/etc/init.d/oracleasm scandisks
/etc/init.d/oracleasm listdisks
# 配置回環別名作為私有互連
ifconfig lo:1 192.168.99.1 netmask 255.255.255.0 up # Node1 私有IP
ifconfig lo:2 192.168.99.2 netmask 255.255.255.0 up # Node2 私有IP
# /etc/hosts 解析
192.168.1.101 node1-vip node1
192.168.1.102 node2-vip node2
192.168.99.1 node1-priv
192.168.99.2 node2-priv
# CRS 狀態
$CRS_HOME/bin/crs_stat -t
# 應見:ora.node1.vip, ora.node2.vip, ora.orcl.db, ora.orcl.orcl1.inst, ora.orcl.orcl2.inst 皆為 ONLINE
# SQL*Plus 連接驗證負載均衡
sqlplus scott/tiger@orcl
SELECT instance_name FROM v$instance; -- 執行多次應輪詢 orcl1/orcl2
# 故障轉移測試
# Node1 終端殺死 PMON: kill -9
# 觀察 Node2 實例自動恢復 Node1 的事務,服務漂移至 Node2