天天看點

drbd+keepalived nfs高可用方案實踐

安裝配置drbd:

準備底層儲存設備:

一塊硬碟、軟raid、LVM邏輯卷、甚至另一個drbd裝置(drbd疊加)

準備網絡配置:

推薦(不是必須)在專用的、直連的、千兆的網絡上運作drbd。如果通過交換機運作drbd,建議設定一個熱備的交換機同時the Linux bonding driver (in active-backup mode) is recommended

注意三點:

1) Our two DRBD hosts each have a currently unused network interface, eth1,with IP addresses 10.1.1.31 and 10.1.1.32 assigned to it, respectively. 2) No other services are using TCP ports 7788 through 7799 on eitherhost. 3) The local firewall configuration allows both inbound and outboundTCP connections between the

配置drbd

drbd所有配置均在/etc/drbd.conf,預設的,該配置檔案隻是一個‘架構’,有如下兩行

<code>include"/etc/drbd.d/global_common.conf";</code>

<code>include"/etc/drbd.d/*.res";</code>

/etc/drbd.d/global_common.conf包含drbdglobal和common段的設定,*.res檔案每個包含一個resource段的配置。

注意:確定每個節點上drbd的配置檔案保持一緻

實驗環境配置檔案

初始化resource

建立裝置中繼資料,該步驟隻在裝置初始化時執行一次,在兩台server分别執行

<code>[root@master~]#drbdadm create-md r0</code>(resource名稱)

一台報錯:drbdadm create-md r0: exited with code 40

解決方法:<code>dd if=/dev/zero of=/dev/sdb1 bs=1M count=10</code>(count數量不限,主要是為了清除/dev/sdb1上的分區資訊)。成功截圖如下

啟動drbd

<code>[root@master~]#/etc/init.d/drbd start</code>

剛啟動時,兩台機器上drbd狀态均為secondary

在drbd主上執行<code>drbdsetup/dev/drbd0 primary -o</code>,将drbd狀态改為primary(無此步,會導緻格式化/dev/drbd0時報錯)。執行過此指令以後,可以通過<code>drbdadmprimary/secondary r0</code>來切換主被動狀态

挂載drbd裝置

現在可以把主機上的DRBD裝置挂載到一個目錄上進行使用.備機的DRBD裝置無法被挂載,因為它是用來接收主機資料的,由DRBD負責操作.

在drbd primary節點(否則格式化會報錯Wrong medium type while trying to determine filesystem size)

<code>[root@master ~]#mkfs.ext4/dev/drbd1</code>

<code>[root@master~]#mount /dev/drbd1 /test</code>

狀态檢視

cs: connect state ro:表示角色資訊 ds: 磁盤狀态資訊Inconsistent/UpToDatens/nr:網絡發送/接收的資料包資訊dw/dr:裝置讀寫資訊

“/proc/drbd”中顯示了drbd目前的狀态。第一行的Secondary/Secondary 表示兩台主機的狀态,都是”備機”狀态.ds是磁盤狀态,都是”不一緻”狀态. 這是由于DRBD無法判斷哪一方為主機,以哪一方的磁盤資料作為标準資料.是以,我們需要初始化一個主機。在master server執行:

再看兩台的/proc/drbd

倒數第二行可以看到正在從主向備同步資料

日志變化(/var/logs/message)

主機:

備機:

DRBD的主備機切換

有時,你需要将DRBD的主備機互換一下.可以執行下面的操作:

在主機上,先要解除安裝掉DRBD裝置.

<code>[root@master /]# umount /mnt/drbd1</code>

将主機降級為”備機”

現在,兩台主機都是”備機”

在備機slave上,将它更新為”主機”

現在,slave成為了”主機”.你可以把它的/dev/drbd1進行挂載和使用了.同樣,資料會被同步到master的/dev/drbd0上

###三、配合keepalived實作自動fail-over

Keepalived配置檔案(主機):

備機

自動切換測試:

關閉主上keepalived,會按照預期流程走。關閉主上nfs----解除安裝資源裝置----主drbd降級----備drdb更新----備挂載資源裝置----備啟動nfs服務。但是在用戶端看來,切換時間過長,切換後打開檔案約有1.5分的延時,如圖

連續寫測試:

在nfs客戶段執行<code>for i in {1..500};do dd if=/dev/zero of=/ljk/$i.filebs=1M count=1;done</code>

(/ljk為用戶端挂載點,用dd向挂載點内寫入500個1M的檔案)。執行過程中在主關閉keepalived,驗證寫入過程是否會中斷

經驗證,寫入過程沒有中斷,但中會出現一段時間的延時(同樣比正常慢了1.5分左右)

用戶端從其他目錄向挂載點拷貝檔案,中途開啟原主的keepalived(vip自動切回主,産生一次切換動作)

正常拷貝:time cp -av/data0/songjian/dhmh/* /ljk/用時1m57s

有切換動作拷貝:在下圖所示檔案處産生停頓,最終用時3m43

檢查切換過程産生中斷可能受影響的檔案和原檔案是否一緻,經md5sum驗證,切換過程中受影響複制産生延遲的檔案内容未受影響

經驗證,拷貝過程不中斷,并且檔案狀态亦為受到切換動作的影響

連續讀測試

用戶端挂載點向其他目錄拷貝檔案,如下圖檔案出産生延時

Md5sum驗證檔案一緻性ok,如下圖

疑問:關于切換動作導緻的延遲時間問題,是哪裡導緻了切換過程中出現延時;是否檔案量越大延遲時間越長;在nfs用戶端測試

在不同數量、大小的檔案中打開統一檔案測試延時

關于延時最終結論:nfs服務從主切換到備,從系統日志

看出相當于一次nfs服務重新開機操作,有一個90s的平滑重新開機過程,延時時間與檔案數量及大小無關。

也再一次驗證了drbd提供的資料一緻性功能(包括檔案的打開和修改狀态等),在用戶端看來,真個切換過程就是‘一次nfs重新開機’(主nfs停,備nfs啟)。

<a href="http://note.youdao.com/noteshare?id=0062e87b3353b4f294e384373d941095">附件:keepalived狀态改變時所觸動的腳本</a>

     本文轉自kai404 51CTO部落格,原文連結:http://blog.51cto.com/kaifly/2052244,如需轉載請自行聯系原作者

繼續閱讀