OCFS2是基於共享磁盤的集群文件系統,它在一塊共享磁盤上創建OCFS2文件系統,讓集群中的其它節點可以對磁盤進行讀寫操作。OCFS2由兩部分內容構成,一部分實現文件系統功能,位於VFS之下和Ext4同級別;另一部分實現集群節點的管理。
如上圖所示,測試環境中OCFS2集群由三台服務器組成。我們將cvm服務器中的/dev/sda8分區作為共享磁盤,共享磁盤通過iSCSI共享給client01和client02服務器。
共享磁盤
如果cvm節點中沒有單獨的磁盤分區,可以參考Linux命令總結:fdisk從現有的磁盤分區中划分出一個新分區。測試環境中,我們將cvm節點的/dev/sd8分區作為共享磁盤。磁盤分區通過iSCSI掛給集群中的其它節點,關於iSCSI的用法可以參考iSCSI:環境搭建一文。
另外,值得注意的是cvm節點自己也要通過iSCSI連接共享磁盤,並且mount時掛載iscsi共享磁盤sdb而不是sda8。否則,在cvm節點寫入的數據不能同步到其它節點,並可能導致節點重啟。
配置集群
OCFS2集群中每個節點的配置都相同,因此只要在其中一個節點中准備好配置,然后scp到其余節點即可。
root@cvm:~# cat /etc/ocfs2/cluster.conf
cluster:
node_count = 3 <== 集群節點數目
name = ocfs2 <== 集群名字
node:
ip_port = 777
ip_address = 192.168.7.10
number = 0 <== 節點編號
name = client01 <== 節點名字
cluster = ocfs2
node:
ip_port = 777
ip_address = 192.168.7.11
number = 1
name = client02
cluster = ocfs2
node:
ip_port = 777
ip_address = 192.168.7.8
number = 2
name = cvm
cluster = ocfs2
注意:如果粗心大意地將任意兩個節點的編號寫成一樣,那么執行/etc/init.d/o2cb online ocfs2命令時會出現o2cb_ctl: Internal logic failure while adding node cvm的錯誤信息。
啟動OCFS2服務
加載OCFS2服務
root@cvm:~# /etc/init.d/o2cb load
Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading stack plugin "o2cb": OK
Loading filesystem "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
啟動集群,只有啟動集群后才可以格式化共享磁盤。
root@cvm:~# /etc/init.d/o2cb online
Setting cluster stack "o2cb": OK
Starting O2CB cluster ocfs2: OK
root@cvm:~# /etc/init.d/o2cb start
查看集群狀態
root@client02:~# /etc/init.d/o2cb status
Driver for "configfs": Loaded
Filesystem "configfs": Mounted
Stack glue driver: Loaded
Stack plugin "o2cb": Loaded
Driver for "ocfs2_dlmfs": Loaded
Filesystem "ocfs2_dlmfs": Mounted
Checking O2CB cluster ocfs2: Online
Heartbeat dead threshold = 31
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Checking O2CB heartbeat: Active
如果狀態中提示Checking O2CB heartbeat: Not active信息,那么說明還沒掛載共享磁盤。
掛載磁盤
在其中一個節點上,將共享磁盤格式化成ocfs2格式。 格式化命令中,-N代表集群允許的最大節點數目。
root@cvm:~# mkfs -t ocfs2 -N 4 /dev/sda8
在每個節點中將共享磁盤掛載到一個掛載點上,這跟掛載Ext4文件系統一致。測試中,我們將磁盤都掛載到test_ocfs2目錄。
root@cvm:~# mount -t ocfs2 /dev/sdb test_ocfs2/
root@client01:~# mount -t ocfs2 /dev/sdb test_ocfs2/
root@client02:~# mount -t ocfs2 /dev/sdb test_ocfs2/
查看掛載情況
root@client01:~# mounted.ocfs2 -f
Device FS Nodes
/dev/sdb ocfs2 client01, client02, cvm
最后,在每個節點中創建一個和自己主機名相同的目錄,任意一個節點都可以看到其它節點創建的目錄。
root@cvm:# ls test_ocfs2
client01 client02 cvm
目錄client01在主機client01中創建,目錄client02在主機client02中創建,目錄cvm在主機cvm中創建。但在每個節點中都能夠看到其它節點創建的目錄。
其它
日志路徑: /var/log/syslog
實際應用中,單獨使用一台服務器的磁盤總是捉襟見肘,並且存在單點故障的問題。這時,可以通過Ceph提供虛擬共享磁盤(即rbd塊)給ocfs2集群使用。
參考文獻
1、OCFS2在Linux下的配置文檔
2、