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的數據接收進程.

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章