http://oss.oracle.com/projects/ocfs2/
1:介紹
一個叢集檔案系統能使運作在叢集中所有節點并發的通過标準檔案系統接口來通路儲存設備。這給管理跨越整個叢集的應用系統帶來友善。
OCFS1問世于2002年10月,它是Oracle公司為了讓RAC使用者避免必須要與裸裝置打交道而開發出來的。這個檔案系統用來存放資料庫相關的檔案,比如資料檔案,控制檔案,線上日志檔案,歸檔日志檔案等。
OCFS2是下一代的ORACLE叢集檔案系統,它已經被設計成為一種為通用的檔案系統,它不僅可以存放資料庫相關的檔案,還可以存放oracle二進制檔案(指Oracle_home下的軟體檔案-譯者注)和配置檔案,進而使RAC的管理更加輕松。
2:安裝
OCFS2的發行版包括了2個安裝包,一個稱為核心子產品,另一個叫工具包。
核心子產品可以從以下連結下載下傳:
http://oss.oracle.com/projects/ocfs2/files/
工具包可以從以下連結下載下傳;
http://oss.oracle.com/projects/ocfs2-tools/files/
首先要下載下傳相應的軟體包.對于核心子產品,下載下傳時要考慮它的發行号,适用的平台,作業系統核心版本以及核心的類型(比如SMP,HUGEMEM,PSMP等),對于工具包,隻要符合發行版本和平台就可以了。
工具包又分為兩部分,ocfs2-tools指令行工具,ocfs2console圖形工具,使用者可以選擇不安裝這部分,但它的确可以令操作簡單化。
使用rpm指令來安裝軟體包,使用 rpm -install 進行新的安裝或者使用rpm -upgrade來更新現有的軟體包。
3:配置
OCFS2有一個配置配置檔案,路徑為/etc/ocfs2/cluster.conf.在這個檔案中,你需要指定RAC中所有的節點資訊,并且所有的節點上都應該保留相同的一份。你可以動态的增加新節點到RAC,或者改變一些節點的IP,名字,但這需要重起RAC以便于使更改生效。
我們強烈建議使用者使用OCFS2-CONSOLE工具來對RAC中所有的節點進行配置。
運作OCFS2-CONSOLE,進入cluster菜單,選擇configure nodes.如果cluster已經停止,控制台會啟動它,并且傳回一個成功的資訊。如果cluster.conf檔案不存在,控制台将會創健一個并給一個預設的叢集名字ocfs2.點選add按鈕将節點添加到RAC中,每一個節點需要輸入節點名稱,ip和端口号。控制台從0-254順序的配置設定節點序号。一旦所有的節點都添加到RAC當中,通過點選菜單cluster裡propagate configration項,我們可以在任何一台節點上将配置檔案cluster.conf分發到所有節點相應的位置上去,由于控制台使用的是ssh協定來傳送檔案,是以之前需要在所有節點上建好彼此的信任,以避免在檔案傳遞過程中出現提出輸入密碼的問題。
附錄A是一個cluster.conf的示例。
4:O2CB叢集服務
OCFS2有自己的叢集服務結構,叫做O2CB,它包括:
NM:節點管理器,它對cluster.conf檔案中所有節點進行的監控。
HB:心跳服務(Heart beat service),他在節點離開或加入rac時提示up和down的消息。
TCP:控制節點間的通訊。
DLM:分布式鎖管理器,它持續跟蹤所有的鎖,鎖的所有者及狀态。
CONFIGFS:使用者配置檔案系統驅動空間,挂節點是/config
DLMFS:使用者空間和核心空間DLM的接口。
所有這些cluster服務都已經被打包在o2cb系統服務當中,所有的操作,比如format,mount等,都需要cluster可用。在使用format等指令前,要先啟動這些服務。
可以通過以下方式檢查所有服務的狀态:
# /etc/init.d/o2cb status
Module “configfs”: Not loaded
Filesystem “configfs”: Not mounted
Module “ocfs2_nodemanager”: Not loaded
Module “ocfs2_dlm”: Not loaded
Module “ocfs2_dlmfs”: Not loaded
Filesystem “ocfs2_dlmfs”: Not mounted
通過以下方式啟動所有服務:
# /etc/init.d/o2cb load
Loading module “configfs”: OK
Mounting configfs filesystem at /config: OK
Loading module “ocfs2_nodemanager”: OK
Loading module “ocfs2_dlm”: OK
Loading module “ocfs2_dlmfs”: OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
通過以下方式使cluster ocfs2 啟動:
# /etc/init.d/o2cb online ocfs2
Starting cluster ocfs2: OK
通過以下方式停止cluster ocfs2:
# /etc/init.d/o2cb offline ocfs2
Cleaning heartbeat on ocfs2: OK
Stopping cluster ocfs2: OK
通過以下方式停止所有服務:
# /etc/init.d/o2cb unload
Unmounting ocfs2_dlmfs filesystem:
Unloading module “ocfs2_dlmfs”: OK
Unmounting configfs filesystem: OK
Unloading module “configfs”: OK
通過以下方式使O2CB在系統啟動時自動被加載:
# /etc/init.d/o2cb configure
Configuring the O2CB driver.
This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets (’[]‘). Hitting
without typing an answer will keep that current value. Ctrl-C
will abort.
Load O2CB driver on boot (y/n) [n]: y
Cluster to start on boot (Enter “none” to clear) []: ocfs2
Writing O2CB configuration: oK
#
如果cluster已經被配置為系統啟動時加載,可以通過以下方式啟動和停止它:
# /etc/init.d/o2cb load
Loading module “configfs”: OK
Mounting configfs filesystem at /config: OK
Loading module “ocfs2_nodemanager”: OK
Loading module “ocfs2_dlm”: OK
Loading module “ocfs2_dlmfs”: OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
5:格式化(format)
如果O2CB CLUSTER沒有啟動,首先啟動它。格式化操作依賴于這些服務。同時它需要你確定所有的節點上都沒有挂載需要格式化的裝置。
你可以使用圖形界面或者指令行來格式化分區。
如果你使用圖形界面,選擇task/Format來執行操作,在下拉清單中選擇可用的裝置。同時控制台會盡可能的列出裝置上存在的檔案系統。
為要格式化的裝置輸入一個标簽,為了便于管理,我們建議你輸入一個标簽,你仍然可以在格式化之後修改它。
為裝置選擇一個叢集單元大小(cluster size),它支援從4k到1M。如果這個裝置用來存儲資料檔案或者大的檔案,比較合适的大小是128K。
選擇一個塊單元大小(block size),它支援從512位元組到4k,由于OCFS2在格式化的時候并不配置設定一個靜态的inode 區域,是以4k是我們強烈推薦的大小,它幾乎适合所有的磁盤大小,換句話說,即時這些磁盤支援512位元組,但我們仍然不建議使用小的單元。
一旦格式化完畢,叢集單元和塊單元都不可以再改變。
輸入一個節點槽位(node slots),這個數值決定了允許多少節點同時挂載這個裝置。這個數值随後可以修改,但隻能增加,不能減小。
點選ok按鈕執行格式化操作。
要格式化一個3k塊大小,32k叢集單元大小,包括4個節點的裝置,在指令行下,可以通mkfs.ocfs2工具按如下操作完成:
# mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracle_home /dev/sdf2
mkfs.ocfs2 1.2.0
Overwriting existing ocfs2 partition.
Proceed (y/N): y
Filesystem label=oracle_home
Block size=4096 (bits=12)
Cluster size=32768 (bits=15)
Volume size=21474820096 (655359 clusters) (5242872 blocks)
21 cluster groups (tail covers 10239 clusters, rest cover 32256 clusters)
Journal size=33554432
Initial number of node slots: 4
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing lost+found: done
mkfs.ocfs2 successful
可以通過man 獲得mkfs.ocfs2的幫助資訊。
6:挂載(mount)
啟動o2cb服務,mount操作需要這些服務的支援。
你可以使用圖形界面或者指令行工具:mount來完成操作。
如果使用圖形界面:運作ocfs2console,選中一個裝置,點選mount按鈕,在彈出的對話框中輸入挂接點,在可選項中輸入defaults,點選ok.成功執行者後,你在清單中會看到這個裝置以及它的挂接點。
指令行下的操作:
# mount -t ocfs2 /dev/sdf2 /u01
要取消挂接(umount)一個裝置,可以在控制台上選中該裝置點選umount或者在指令行下輸入:
# umount /u01
Oracle資料庫使用者在将Ocfs2挂接點用來存放voting disk(CRS),cluster registry(OCR),資料檔案,redo file,歸檔日志和控制檔案時,在mount操作時,一定要使用’datavolume,nointr’ 的mount選項。
其中datavolume選項確定Oracle程序在打開檔案時使用o_direct标記。nointr選項確定在這個裝置上的讀寫不會被一些信号中斷。其他的裝置,比如用于存放Oracle_Home檔案的挂節點不需要使用這些選項。
通過以下指令來完成包含資料檔案,voting disk等裝置的挂載:
# mount -t ocfs2 -o datavolume,nointr /dev/sdf2 /u01
# mount
/dev/sdf2 on /u01 type ocfs2 (rw,datavolume,nointr)
如果你想在系統啟動時挂接ocsf2,你需要保證o2bc和ocfs2服務使用chkconfig來配置o2bc在啟動時被加載。并且要在/etc/fstab檔案中加入如下項:
# cat /etc/fstab
…
/dev/sdf2 /u01 ocfs2 _netdev,datavolume,nointr 0 0
/dev/sdg2 /orahome ocfs2 _netdev 0 0
…
_netdev選項對于mount ocfs2裝置是必須的,這個選項說明裝置需要在網絡啟動時候挂載,在網絡關閉之後取消挂載(datavolume 和 nointr選項隻在存儲資料檔案等裝置上需要)。
ocfs2的服務可以用來挂載和取消挂在ocfs2裝置,它通常用來確定ocfs2 裝置必須在網絡服務關閉之後再取消挂載。
# chkconfig –add ocfs2
ocfs2 0
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
ff 1
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
ff 2
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
n 3
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
n 4
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
ff 5
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
n 6
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
ff
# chkconfig –add o2cb
o2cb 0
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
ff 1
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
ff 2
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZrN2boN3LcRHb1FmZlR2LcNXZpxWatN3LcNXZnFWbp9CX0Vmbu4GZzNmLn9GbiVGdpJ3dvw1LcpDc0RHaiojIsJye.gif)
n 3:on 4:off 5:on 6:off
#
#
# /etc/init.d/o2cb configure
…
Load O2CB driver on boot (y/n) [n]: y
Cluster to start on boot (Enter “none” to clear) []: ocfs2
Writing O2CB configuration: OK
可以通過标簽來挂載裝置:
# mount -L datafiles /u01
7:調整(tune)
調整的操作允許你增加節點數(增加并發通路mount裝置的節點數),修改裝置的标簽和修改。
tunefs.ocfs2指令行工具用來完整這個操作,你也可以使用控制台來完成。
確定O2cb服務啟動,tune操作需要這些服務的支援。
如果是用控制台增加節點數,點選:task,選擇Edit Node Slot count,在對話框中輸入你需要的節點數,Ok完成。
通過以下指令從指令行完成上面的操作:
# tunefs.ocfs2 -N 8 /dev/sdf2
tunefs.ocfs2 1.2.0
Changing number of node slots from 4 to 8
Proceed (y/N): y
Added node slots
Wrote Superblock
在控制台下修改一個裝置的标簽,點選:task/Change Label,在對話框中輸入新的标簽。
指令行下的操作:
# tunefs.ocfs2 -L “old datafiles” /dev/sdf2
tunefs.ocfs2 1.2.0
Changing volume label from datafiles to old datafiles
Proceed (y/N): y
Changed volume label
Wrote Superblock
通過man指令來獲得tunefs.ocfs2的完整幫助。
{$PageTitle=CDSL(Context Dependent Symbolic Links)}
9:CDSL(Context Dependent Symbolic Links)
在一個共享存儲的cluster環境,執行個體需要通過cluster來通路一些檔案和路徑,通常它可能隻對這個路徑感興趣,比如在一個共享的ORACLE_HOME中,/admin/listener.ora對所有的節點都是相同的,但listener.ora的内容卻各不相同,同理,對于一個共享的啟動環境,/etc/對所有節點是相同的,但它裡面的内容卻各不相同。
對于所有的這些執行個體,這個檔案或者路徑的内容依賴于各個節點的主機名,而對于另外的一些執行個體,它可能會依賴于各個節點的架構(x86,x86_64或者IA64),也可能會依賴于各個節點的節點号。
為了解決這些問題,OCFS2使用了一種稱為CDSL(Context Dependent Symbolic Links)的技術,簡單的說,就是它使用軟連接配接來實作各個節點自己需要的檔案内容。
可以使用ocfs2cdsl指令行工具來建立這些軟連結:
建立一個節點需要的檔案:
[email protected]:admin/# ocfs2cdsl listener.ora
[email protected]:admin/# ls –l listener.ora
lrwxrwxrwx 1 root root 50 Aug 8 11:41 listener.ora ->
../.cluster/hostname/{hostname}/10g/network/admin/listener.ora
編輯這個檔案,然後儲存,要從其他節點山通路這個檔案,先要在那個節點上建立CDSL,然後再像剛才那樣把正确的内容寫進去。
[email protected]:admin/# ocfs2cdsl listener.ora
把一個已經存在的檔案變成cdsl檔案:
[email protected]:admin/# ocfs2cdsl –c sqlnet.ora
同理,在其他節點上也這樣做。
[email protected]:admin/# ocfs2cdsl sqlnet.ora
這是你也許會發現對于所有的節點這個檔案裡面的内容是一樣的,在任何一個檢點上對該檔案的更新對于其他節點都是不可見的。
删除一個CDSL連結:
[email protected]:admin/# rm listener.ora
可以通過man來獲得ocfs2cdsl的完全幫助。
10:其他的一些工具
mounted.ocfs2
mounted.ocfs2是一個指令行下列出一個節點上所有OCFS2裝置的工具。它掃描/proc/partitions檔案中列出的所有分區。
列出一個節點上ocfs2分區資訊:
# mounted.ocfs2 -d
Device FS UUID Label
/dev/sdb1 ocfs2 e70c75a0-a08c-480a-bf50-ebda4191da30 mm_v2_dbf1
/dev/sdb2 ocfs2 f49163e8-6288-43c4-a792-e9401fde45fa mm_v2_ctrl
/dev/sdb3 ocfs2 2d441be2-adb6-4c52-9e19-9a7c2c485dc4 mm_v2_dbf2
/dev/sdb5 ocfs2 8607eae9-8e4f-4495-84e8-8db0bc9da60c mm_v2_log1
/dev/sdb6 ocfs2 acfb7b7d-a277-4741-9791-620ea9b82670 mm_v2_log2
/dev/sdf1 ocfs2 84749537-df45-4a97-aa28-fad63760b674 9ihome
/dev/sdq1 ocfs2 dca2901b-241f-406e-80e9-85dd6b452d1a oracle_home
/dev/sdcf1 ocfs2 663764bd-1eed-4b3c-aa48-a98f0be0e574 10ghome
/dev/sdcf2 ocfs2 8e2d9c21-ef47-4fea-8ac5-2306cc60455e mm_v2_log3
列出所有節點上ocfs2分區資訊:
# mounted.ocfs2 -f
Device FS Nodes
/dev/sdb1 ocfs2 node31, node32, node33, node34
/dev/sdb2 ocfs2 node31, node32, node33, node34
/dev/sdb3 ocfs2 node31, node32, node33, node34
/dev/sdb5 ocfs2 node31, node32, node33, node34
/dev/sdb6 ocfs2 node91, node90
/dev/sdf1 ocfs2 Not mounted
/dev/sdq1 ocfs2 node34, node35
/dev/sdcf1 ocfs2 Not mounted
/dev/sdcf2 ocfs2 Not mounted
注意:這個指令隻列出起了o2bc服務的節點機的名字,對于那些沒
注意:這個指令隻列出起了o2bc服務的節點機的名字,對于那些沒有起o2bc服務的節點,将以節點号代替。
通過man指令獲得mounted.ocfs2的完全幫助。
附錄A
一個cluster.conf例子:
Sample /etc/ocfs2/cluster.conf
cluster:
node_count = 2
name = racdb
node:
ip_port = 7777
ip_address = 192.168.0.107
number = 7
name = node7
cluster = racdb
node:
ip_port = 7777
ip_address = 192.168.0.106
number = 6
name = node6