由於最新公司業務使用的NFS系統偶爾發生故障,恢復起來需要很多時間,於是學習了下文件系統,之前一直在做mfs的測試,但是由於mfs有單點故障的存在,也就放下了,希望以後mfs可以解決單點的問題,那就造福於大衆了.
Glusterfs的簡介:
GlusterFS是一個高層次的分佈式文件系統解決方案.通過增加一個邏輯層,對上層使用者掩蓋了下面的實現,使用者不用瞭解也不需知道,文件的存儲形式、分佈.內部實現是整合了許多存儲塊(server)通過Infiniband RDMA 或者Tcp/Ip方式互聯的一個並行的網絡文件系統,這樣的許多存儲塊可以通過許多廉價的x86 主機,通過網絡搭建起來.
採用這種方式的理由:
由於glusterfs文件系統可以採用多種模式,之前做了cluster/Replicate,但是經過讀寫性能測試,發現寫操作不是很理想,雖然可以確保數據的完整性和防止單點故障.於是有了標題這個方式,既可以確保讀寫速度又可以確保數據完整性和防止單點故障.利用heartbeat來檢測2個主機的存活,glusterfs磁盤掛載的切換.
網絡拓撲:
說明:由於drbd同步機制只允許在一個服務器上進行磁盤的掛載,另外一個服務器不允許再進行掛載,否則導致同步失敗.爲了避免master節點down機之後 ,還需要手動去slave節點上進行手動掛載,在此時間內客戶端無法正常的讀寫數據,這裏利用heartbeat來自動進行磁盤掛載切換工作,當master節點down機,它會把磁盤資源釋放到slave文件服務器,切換工作僅僅需要10秒左右的時間,大大的提高了故障恢復相應時間.由於heartbeat不能對服務項進行檢測,於是又寫了moniter腳本來彌補這個缺陷.
測試環境
192.168.0.59 glusterfs-1 drbd-1
192.168.0.60 glusterfs-2 drbd-2
磁盤規劃:
安裝相關的包
//在2個server節點都安裝glusterfs和drbd,由於glusterfs使用到了fuse模塊,所以需要先安裝FUSE.
#tar zxvf fuse-2.8.3.tar.gz
#./configure -enable-dependency-tracking -enable-lib -enable-util
#tar zxvf glusterfs-3.0.3.tar.gz
#tar zxvf drbd-8.3.5.tar.gz
#tar zxvf libnet-1.1.2.1.tar.gz
#tar zxvf heartbeat-2.0.7.tar.gz
# ./ConfigureMe configure --disable-swig --disable-snmp-subagent
相關文件的配置
192.168.0.59 drbd-1
//配置master節點的glusterfs配置文件
#cd /usr/local/etc/glusterfs
#cp glusterfsd.vol.sample glusterfsd.vol
#vi glusterfsd.vol //配置如下
### Export volume "brick" with the contents of "/home/export" directory.
type storage/posix # POSIX FS translator
option directory /home/gluster # Export this directory
type performance/io-threads
option thread-count 50 //開啓50個線程
### Add network serving capability to above brick.
option transport-type tcp/server
option listen-port 6996 # Default is 6996
option auth.addr.bricks.allow *
option auth.addr.locker.allow *
//配置slave節點的glusterfs配置文件
### Export volume "brick" with the contents of "/home/export" directory.
type storage/posix # POSIX FS translator
option directory /home/gluster # Export this directory
type features/posix-locks
type performance/io-threads
option thread-count 50 //開啓50個線程
### Add network serving capability to above brick.
option transport-type tcp/server
option auth.addr.bricks.allow *
option auth.addr.locker.allow *
//在2個節點上執行下面的命令,啓動server端的服務
#gluster –f /usr/loca/etc/gluster/glusterfd.vol
syncer { rate 100M; } //限制流量
on drbd-1 { //drbd-1爲第一臺機器的機器名
device /dev/drbd0; //創建的虛擬資源
disk /dev/sdb1; //實際的物理分區
address 192.168.0.59:7788; //第一臺機器的ip地址,及通訊端口
meta-disk internal; //類型,局域網
address 192.168.1.60:7788;
//在2個節點上執行如下命令, 創建相應的元數據保存的數據塊
#modprobe /lib/modules/2.6.18-53.el5/kernel/drivers/block/drbd.ko
#lsmod |grep drbd //drbd模塊是否加載成功
drbd-1 # dd if=/dev/sdb1 of=/root/backup bs=500M count=1 //這裏要根據自己的數據
#drbdadm create-md db //在2個主機上的 /dev/sdb1 分區上創建相應的元數據保存的數據塊
avahi 2239 0.0 1.1 2552 1384 ? Ss 19:38 0:00 avahi-daemon: running [drbd-1.local]
root 2702 0.0 0.0 0 0 ? S 20:32 0:00 [drbd1_worker]
root 2715 0.0 0.0 0 0 ? S 20:32 0:00 [drbd1_receiver]
root 2726 0.0 0.0 0 0 ? S 20:32 0:00 [drbd1_asender]
//如果看到這4個進程就說明drbd啓動正常. drbd0_worker是drbd0的主要進程drbd0_asender是primary上drbd0的數據發送進程,drbd0_receiver是secondary上drbd0的數據接收進程.