一直想作基於linux的雙機熱備,一直沒有時間和機會。一直覺得只要作雙機熱備的實驗就必須兩臺機器外接一個存儲。甚至一個月之前在學習keepalived的時候還在琢磨keepalvied去掉哪些條件能夠實現雙機熱備。直到一個月之前設計存儲方案的時候部門老大給了一個國外的連接介紹drbd+nfs實現nfs的熱備方案的時候,個人眼前一亮,這不就是我一直想作的不依靠存儲實現熱備的解決方案嗎?
先來糾正一下本身的錯誤認識吧,沒接觸keepalived和heartbeat的時候,道聽途說的認爲keepalived出現之後就沒有必要再用heartbeat了。在仔細學習了這兩個傳奇人物之後發現:keepavled是專門爲高可用的集羣而誕生的,而heartbeat生是雙機熱備的人死是雙機熱備的死人。
好了,說說本文實現的原理吧。大致來講就是heartbeat+drbd。heartbeat自是不用說,用它來實現資源的統一調度;而drbd就是本文的重頭戲。這一個什麼東東呢?官方的東東咱就不說了。用我們本身的話說,就是實現兩臺機器的兩塊硬盤的實時完整複製(drbd即磁盤鏡像)。它的出現,解決了兩臺機器作雙機時的數據一致性問題。
ok,廢話半天,說一下本文的實現環境:
os:ubuntu9.04
ip1:192.168.1.11 drbd1
ip2:192.168.1.12 drbd2
disk:/dev/sdb1(一個8G的分區)
經過drbd,掛在每臺機器上的sdb1這塊分區將成爲我們「存儲」。let's go !
++++++如今開始兩臺機器配置同樣++++++
1.設定hosts
vi /etc/hosts
192.168.1.11 drbd1
192.168.1.12 drbd2
注意:好比在1.11這臺機器上。drbd1是你執行hostname命令看到的,而不是隨手一寫的喲:)
2.安裝並配置drbd
1).安裝drbd。
你能夠去http://oss.linbit.com/drbd/下載最新的版本。本文爲了方便直接從ubuntu的源進行安裝
apt-get install drbd8-utils
2).建立配置文件
若是用apt-get或者yum的方式安裝的話,會默認建立配置文件,而編譯安裝則不會。無論直接清空或更名,寫入如下內容。
vi /etc/drbd.conf
common {
syncer { rate 10M; } #速率
}
resource r0 {
protocol C;
disk { on-io-error detach; }
on drbd1 { #drbd1爲第一臺機器的機器名
device /dev/drbd0; #建立的虛擬資源
disk /dev/sdb1; #實際的物理分區,必定要注意,是一個單獨的分區,並且是未經格式化的
address 192.168.1.11:7788; #第一臺機器的ip地址,及通信端口
meta-disk internal; #類型,局域網
}
on drbd2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.12:7788;
meta-disk internal;
}
}
3)建立資源
drbdadm create-md r0 #r0爲剛纔配置文件裏的資源名
會提示三個疑問,若是你英文還能夠的話,能夠閱讀一下,否則的話,直接回車。在終點你會看到
success
:)
4)啓動drbd服務
/etc/init.d/drbd start
cat /proc/drbd
你應該能夠看到
注意裏面我標註的"Secondary/Secondary"意思是說如今這塊盤是從盤,主盤不知道。
++++++如今開始只在drbd1上操做++++++
5)初始化網絡硬盤
drbdsetup /dev/drbd0 primary -o
cat /proc/drbd
你會發現如今已是"Primary/Secondary"了,並且已經開始同步硬盤狀態。
爲了實時的查看同步狀況,你能夠在drbd1上執行
watch -n1 cat /proc/drbd
同步還在進行
通過一段時間的等待,你會發現成功完成!
同步完成之後,在drbd2上查看硬盤狀態
注意磁盤狀態是:"Secondary/Primary"
格式化網絡磁盤
6)設置drbd開機啓動
在兩臺機器上都執行
chkconfig drbd on
7)手工測試drbd是否是正常工做
在drbd1上創建3個文件
在drbd2上驗證結果
ok,咱們如今已經肯定drbd是正常工做的了。也相信在這麼細緻的介紹下,你已經熟悉了它是怎麼工做了。咱們如今有了「網絡存儲」了。下一步就是讓一個東東幫咱們調度資源了。簡單的幾步配置有請heartbeat出場
3.配置heartbeat
1)安裝heartbeat
apt-get install heartbeat
2)配置heartbeat
vi /etc/heartbeat/ha.cf
logfacility local0
keepalive 2
deadtime 10
auto_failback off
bcast eth0
node drbd1 drbd2
vi /etc/heartbeat/haresources
drbd1 drbddisk::r0 Filesystem::/dev/drbd0::/mnt::ext3
vi authkeys
auth 3
3 md5 abc
chmod 600 authkeys
3)相同的配置複製到drbd2
scp authkeys haresources ha.cf root@192.168.1.12:/etc/heartbeat/
4)確保服務都是正常運行的
/etc/init.d/drbd start
/etc/init.d/heartbeat start
5)切換測試
經過cat /proc/drbd查看drbd的狀態或者mount查看/mnt是否是已經掛載肯定資源所在的機器。而後在那臺機器的/mnt新創建一些文件並停掉那臺機器上的heartbeat。看另外一臺機器上/mnt是否是被自動掛載了呢?裏面是否是有剛建立的文件?good luck!
總結:基本兩臺linux實現的雙機熱備到此就要結束了。回顧一下環境:兩臺機器;兩塊獨立的分區,最好是同樣大,只分區,而沒有格式化;linux操做系統;drbd網絡磁盤;heartbeat實現資源調度;好像就這麼多東西吧。可能您要說了,看完這篇文章,一點實際意義都沒有,由於只是實現了共享磁盤。哈哈,我要說,要想發揮威力就要仔細的看一下heartbeat的資源調度了,有了這位大管家,還有啥實現不了的服務呢?