Glusterfs(distribute) + DRBD + heartbeat + mon 實現分佈式文件系統1

因爲最新公司業務使用的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腳原本彌補這個缺陷.

測試環境

OS平臺:
 
REDHAT  AS  5.1
 
Ip地址規劃: 
 
192.168.0.59    glusterfs-1    drbd-1
192.168.0.60    glusterfs-2    drbd-2  

磁盤規劃:

   Sda:安裝相關的安裝包 
   Sdb:用來作drbd的同步
  
Sofrware: 
 
fuse-2.8.3.tar.gz
glusterfs-3.0.3.tar.gz
drbd-8.3.5.tar.gz
libnet-1.1.2.1.tar.gz
heartbeat-2.0.7.tar.gz

安裝相關的包

//2server節點都安裝glusterfsdrbd,因爲glusterfs使用到了fuse模塊,因此須要先安裝FUSE.
 
#tar zxvf fuse-2.8.3.tar.gz
#cd fuse-2.8.3
#./configure -enable-dependency-tracking -enable-lib -enable-util
#make && make install
 
#tar zxvf glusterfs-3.0.3.tar.gz
#cd glusterfs-3.0.3
#./configure
#make && make install
 
#tar zxvf drbd-8.3.5.tar.gz
#cd drbd-8.3.5
#make && make install
 
#tar zxvf libnet-1.1.2.1.tar.gz
#cd libnet
#./configure
#make && make install
 
#tar zxvf heartbeat-2.0.7.tar.gz
#cd heartbeat-2.0.7
# ./ConfigureMe configure --disable-swig --disable-snmp-subagent
   #make && make install
 

相關文件的配置

 //2個節點上添加以下的hosts.
   # vi hosts
     192.168.0.59            drbd-1
     192.168.0.60            drbd-2
 
//配置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.
volume brick
  type storage/posix                        # POSIX FS translator
  option directory /home/gluster            # Export this directory
end-volume
 
volume locker
  type features/locks
  subvolumes brick
  end-volume
 
volume bricks
  type performance/io-threads
  option thread-count 50                   //開啓50個線程
  subvolumes locker
end-volume
 
### Add network serving capability to above brick.
volume server
  type protocol/server
  option transport-type tcp/server
  option listen-port 6996                    # Default is 6996
  subvolumes locker
  option auth.addr.bricks.allow *
  option auth.addr.locker.allow *
end-volume
 
 
 
//配置slave節點的glusterfs配置文件
 
### Export volume "brick" with the contents of "/home/export" directory.
volume brick
  type storage/posix                    # POSIX FS translator
  option directory /home/gluster        # Export this directory
end-volume
 
volume locker
type features/posix-locks
subvolumes brick
end-volume
 
volume bricks
  type performance/io-threads
  option thread-count 50                //開啓50個線程
  subvolumes locker
end-volume
 
### Add network serving capability to above brick.
volume server
  type   protocol/server
  option transport-type tcp/server
  option listen-port 6996
  subvolumes locker
  option auth.addr.bricks.allow *        
  option auth.addr.locker.allow *
end-volume 
 
//2個節點上執行下面的命令,啓動server端的服務
 
  #gluster –f /usr/loca/etc/gluster/glusterfd.vol
 
 
//配置drbd的配置文件,2個節點的配置相同
 
common {
  syncer { rate 100M; }       //限制流量
}
 
resource db {
 
  protocol C;                 //使用C協議
 
  disk {
  on-io-error detach;
  }
 
  on drbd-1 {                  //drbd-1爲第一臺機器的機器名
  device /dev/drbd0;           //建立的虛擬資源   
  disk /dev/sdb1;              //實際的物理分區
  address 192.168.0.59:7788;   //第一臺機器的ip地址,及通信端口        
  meta-disk internal;          //類型,局域網
  }
      
  on drbd-2 {
  device /dev/drbd0;
  disk /dev/sdb1;
  address 192.168.1.60:7788;
  meta-disk internal;
  }       
}
 
//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 分區上建立相應的元數據保存的數據塊
#/etc/init.d/drbd start
#chkconfig drbd on 
# ps aux | grep drbd
 
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_workerdrbd0的主要進程drbd0_asenderprimarydrbd0的數據發送進程,drbd0_receiversecondarydrbd0的數據接收進程.
相關文章
相關標籤/搜索