一步步構建基於DRBD的資料共用

來源:互聯網
上載者:User

DRBD(Distributed Replocated Blocak Device)分布式的複製塊裝置
在核心為2.6.33之後的版本中,DRBD就被編譯進核心了,所以DRBD是在核心中工作的

下面我們就看看DRBD的工作流程圖:

650) this.width=650;">

    當啟用drbd功能,並將drbd裝置掛載到本地之後,使用者空間需要向磁碟上存資料的時候,當資料通過緩衝時,drbd就將這些資料分成了兩路,一路儲存到本地的磁碟上,另一路通過本地的TCP/IP協議棧和網路將資料轉送到另個開啟drbd服務主機上,這個drbd主機接收資料並將資料存放區到本地的drbd裝置上,從而實現了資料的共用和同步,然而整個資料的同步過程都是在核心空間中進行的,所以對使用者空間沒有任何 影響

    drbd共有兩部分組成:核心模組和使用者空間的管理工具

  使用者空間的管理工具:對核心中資料轉送和共用的具體實施過程進行行為定義
  核心模組:依使用者空間的管理工具的定義的方式來進行資料的傳輸和共用

Drbd的模型兩種:

   單主節點:任何資源只能在主節點上進行讀寫操作,主節點的檔案類型可以是任何的,只要是為高可用叢集中的資源流轉提供一個解決方案。

   雙主節點:在任何時刻任意使用者可以通過任意節點來進行讀寫操作,但是要結合叢集檔案系統來實現,所以要通過GFS或者OCFS2來實現其應用,只有在drbd的8.0版本之後才支援

 

下面我們就通過具體的配置過程來瞭解drbd各個部分的工作原理

配置前提:
1)本配置共有兩個測試節點,分別node1.a.org和node2.a.org,相的IP地址分別為192.168.0.202和192.168.0.204;
2)node1和node2兩個節點上各提供了一個大小相同的分區作為drbd裝置;我們這裡為在兩個節點上均為/dev/sda5,大小為1G;

1、準備工作

保證兩個節點的主機名稱和對應的IP位址解析服務可以正常工作,且每個節點的主機名稱需要跟"uname -n“命令的結果保持一致;因此,需要保證兩個節點上的/etc/hosts檔案均為下面的內容:
192.168.0.202 node1.a.org node1
192.168.0.204 node2.a.org node2

為了使得重新啟動系統後仍能保持如上的主機名稱,還分別需要在各節點執行類似如下的命令:

node1: 

sed -i 's@\(HOSTNAME=\).*@\1node1.a.org@g'  
hostname node1.a.org 

 node2:

sed -i 's@\(HOSTNAME=\).*@\1node2.a.org@g'  
 hostname node2.a.org 

2、安裝軟體包

drbd共有兩部分組成:核心模組和使用者空間的管理工具。其中drbd核心模組代碼已經整合進Linux核心2.6.33以後的版本中,因此,如果您的核心版本高於此版本的話,你只需要安裝管理工具即可;否則,您需要同時安裝核心模組和管理工具兩個軟體包,並且此兩者的版本號碼一定要保持對應。

我們這裡選用最新的8.3的版本

下載完成後直接安裝即可:

yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.CentOS.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

3、配置drbd

1)複製範例設定檔為即將使用的設定檔:

cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc 

2)配置/etc/drbd.d/global_common.conf

 

global { 
        usage-count no; 
        # minor-count dialog-refresh disable-ip-verification 
}

common { 
        protocol C;

        handlers { 
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; 
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; 
                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; 
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; 
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; 
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; 
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; 
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; 
        }

        startup { 
                wfc-timeout 120; 
                degr-wfc-timeout 120; 
        }

        disk { 
                on-io-error detach; 
                                fencing resource-only; 
        }

        net { 
                                cram-hmac-alg "sha1"; 
                                 shared-secret "mydrbdlab"; 
        }

        syncer { 
                rate 100M; 
        } 
}

 

 

3、定義一個資源/etc/drbd.d/web.res,內容如下:

 
  1. resource web {    
  2.     on node1.a.org {    
  3.     device    /dev/drbd0;           ##定義drbd裝置號    
  4.     disk      /dev/sda5;               ## 定義drbd裝置所使用的磁碟    
  5.     address   192.168.0.202:7789;  ##此drbd裝置監聽的網路地址和連接埠    
  6.     meta-disk internal;    
  7.   }    
  8.     on node2.a.org {    
  9.     device    /dev/drbd0;       
  10.     disk      /dev/sda5;    
  11.     address   192.168.0.204:7789;    
  12.     meta-disk internal;    
  13.   }    
  14. }   

將這兩個設定檔拷貝到node2上,以保證設定檔相同 

 

 
  1. cd /etc/drbd.d  
  2. scp web.res global_common.conf node2:/etc/drbd.d 
  3. scp /etc/drbd.conf node2:/etc/  



4、在兩個節點上初始化已定義的資源並啟動服務:

1)初始化資源,在Node1和Node2上分別執行:

 
  1. drbdadm create-md web 

650) this.width=650;">

2)啟動服務,在Node1和Node2上分別執行:

 
  1. /etc/init.d/drbd start 

650) this.width=650;">

3)查看啟動狀態:

 
  1. cat /proc/drbd  
650) this.width=650;">

也可以使用drbd-overview命令來查看:

 
  1. drbd-overview 


650) this.width=650;">

從上面的資訊中可以看出此時兩個節點均處於Secondary狀態。於是,我們接下來需要將node1設定為Primary,在node1上執行如下命令:
drbdsetup /dev/drbd0 primary –o

  註: 也可以在要設定為Primary的節點上使用如下命令來設定主節點:
     drbdadm -- --overwrite-data-of-peer primary web  這種方法更加標準
    (註:這兩個設定primary節點的命令只在第一次使用,以後就可以直接使用drbdadm primary web)

而後再次查看狀態,可以探索資料同步過程已經開始:

 
  1. drbd-overview  


650) this.width=650;">    

此時我們還可以使用如下命令動態查看同步過程
watch -n 1 'drbd-overview'
當資料同步完成以後再次查看狀態

 
  1. drbd-overview 

650) this.width=650;">

可以發現節點已經為即時狀態,且節點已經有了主次:

5、建立檔案系統

因為檔案系統的掛載只能在Primary節點進行,所以只有在設定了主節點後才能對drbd裝置進行格式化:

 
  1. mke2fs -j  /dev/drbd0  
  2. mkdir /drbd   
  3. mount /dev/drbd0 /drbd 

6、切換Primary和Secondary節點

對主Primary/Secondary模型的drbd服務來講,在某個時刻只能有一個節點為Primary,因此,要切換兩個節點的角色,只能在先將原有的Primary節點設定為Secondary後,才能原來的Secondary節點設定為Primary:

我們先在drbd裝置上儲存個網頁檔案,而後在主從節點改變後查看node1的index.html檔案是否複製到node2上

node1:

echo node1 > /drbd/index.html 

    為了進行驗證而設定的檔案
首先卸載drbd裝置

 
  1. umount /drbd 

將其設定為從節點

 
  1. drbdadm secondary web 

查看狀態:
650) this.width=650;">

將node2設為primary

 
  1. drbdadm primary web  

查看狀態: 
drbd-overview

650) this.width=650;">

狀態顯示node2已經成為從節點
掛載drbd裝置

 
  1. mkdir /drbd   
  2. mount /dev/drbd0 /mnt/drbd 

查看檔案是否存在

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.