DRBD工作原理:
DRBD是一種塊設備,可以被用於高可用(HA)之中.它類似於一個網絡(磁盤陣列)RAID-1功能。
當你將數據寫入本地 文件系統時(DRBD Primary),數據還將會被髮送到網絡中另一臺主機上(DRBD Secondary).以相同的形式記錄在一個文件系統中。本地(主節點)與遠程主機(備節點)的數據可以保證實時同步.當本地系統出現故障時,遠程主機上還會保留有一份相同的數據,可以繼續使用.在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣。
因爲數據同時存在於本地主機和遠程主機上,切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了。
三種複製模式:
(1)協議A:異步複製
一旦寫入本地完成,數據包就在buffer隊列中,則備認爲是完成的,在一個節點發生故障時,可能造成數據丟失,因爲被寫入遠程節點上的數據仍可能在發送隊列。一般用在地理位置比較遠的節點。
(2)協議B:半同步複製
本地磁盤寫入並且已經完成複製數據包到達遠端,則認爲工作完成。不確定遠端是否寫入磁盤,這種情況下,當兩個節點同時發生故障就可能造成數據丟失,比如兩端同時掉電。
(3)協議C:同步複製
發送到遠端並確保寫入完成。沒有任何數據丟失,所以這是一個羣集節點的流行模式,但I / O吞吐量依賴於網絡帶寬。
生產環境一般使用協議C,但選擇C協議將影響流量,從而影響網絡時延。爲了數據可靠性,我們在生產環境使用時須慎重選項使用哪一種協議。
工作原理圖:
DRBD是linux的內核的存儲層中的一個分佈式存儲系統,可用使用DRBD在兩臺Linux服務器之間共享塊設備,共享文件系統和數據
實驗環境:
節點1:server1.example.com 172.25.29.1
節點2:server2.example.com 172.25.29.2
Vip:172.25.29.100
Selinux和iptables處於disabled狀態
以上兩臺虛擬主機爲redhat 6.5版本
一.安裝
Server1
得到drbd-8.4.2.tar.gz包
yum install rpm-build -y ###安裝rpm-build
tar zxf drbd-8.4.2.tar.gz ###解壓
cd drbd-8.4.2 ###進入解壓後目錄
./configure --enable-spec --with-km(內核編譯) ###編譯
編譯的過程中根據報錯提示安裝gcc flex
安裝完成後需要重新編譯
編譯完成後生成三個文件 drbd.spec drbd-km.spec drbd-kernel.spec
rpmbuild -bb drbd.spec ###編譯後做成*.rpm包
根據錯誤提示把未解壓的包拷貝到指定目錄下
重新編譯
信息提示生成的rpm包的位置爲/root/rpmbuild/RPMS/x86_64
[root@server1 x86_64]# rpm -ivh * ###安裝
scp * [email protected]:/drbd ###server2只需要rpm -ivh *安裝
二.配置
Server1
[root@server1 x86_64]# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res"; ###配置文件都是以res結尾
兩臺虛擬機都添加4G虛擬硬盤,fdisk -l 查看名稱我這裏是/dev/vda 兩塊硬盤一樣大
cd /etc/drbd.d
vim example.res ###這個文件原本不存在,自己建立
resource example {
meta-disk internal;
device /dev/drbd1; ###設備/dev/drbd1,名稱必須是drbd*
syncer {
verify-alg sha1;
}
on server1.example.com {
disk /dev/vda; ###硬盤名稱
address 172.25.29.1:7789;
}
on server2.example.com {
disk /dev/vda;
address 172.25.29.2:7789;
}
}
[root@server1 drbd.d]# scp example.res [email protected]:/etc/drbd.d
遠程複製到server2 中
工作方式爲主備模式
三.初始化並載入數據
服務啓動失敗,需要加載內核模塊,進入到解壓目錄,rpmbuild命令編譯成rpm包,安裝kernel-devel後需要重新編譯生成rpm包
進入生成rpm包的目錄/root/rpmbuild/RPMS/x86_64,安裝與內核相關的包:
[root@server1 x86_64]# scp drbd-km-2.6.32_431.el6.x86_64-8.4.2-2.el6.x86_64.rpm [email protected]:/root
在server2中也安裝此包
安裝完這個包後,就可以成功開啓服務/etc/init.d/drbd start
注意:兩邊都要開啓服務,否則先開啓服務的那一個主機會等待另一個主機開啓服務,一直等待,直到另外一個主機開啓服務爲止
兩個之間還,沒有建立連接inconsistent
Server1
drbdadm primary example --force ####把server1設置爲primary 進行數據的同步
Primary/Secondary ###Primary在前就表示自己是主設備
上面的圖片表示server2是從設備;update已經建立連接
/dev/vda ---> /dev/drbd1
[root@server1 x86_64]# mkfs.ext4 /dev/drbd1 ###只能對/dev/drbd1 進行操作
四.掛載測試
格式化完成後,在server1中將/dev/drbd1掛載到/mnt目錄下可以掛載
卸載之後,server2還是掛載不上
現象:主設備server1掛載再卸載,但是server2設備還是掛載失敗
因爲server2是從設備,只能在主設備上進行掛載
[root@server1 ~]# drbdadm secondary example ###把server1改成從設備
[root@server2 ~]# drbdadm primary example ###把server2改成主設備
然後就可以在server2上實現掛載
Server1 : 主
Server2:備
Server1:echo c > /proc/sysrq-trigger ###內核崩掉
Drbd-overciew ###查看是否連接還是等待連接
Forceoff 重啓之後正常連接
Server1;stop network 出現如上現象獨立工作
Server2在等待
Server2:drbdadm disconnect example ###斷開連接
Drbdadm connect --discard-my-data example ###重新連接
Server1:drbdadm connect example
五.把drbd掛載到httpd默認發佈目錄上(drbd+heartbeat)
Server1.server2
/etc/init.d/heartbeat stop
Vim /etc/ha.d/haresources
參數說明:
server1.example.com ###主節點,兩邊都是主節點的主機名
IPaddr::172.25.29.100/24/eth0 ###vip
drbddisk::example ###因爲只有primary才能掛載,轉換身份爲primary
Filesystem::/dev/drbd1::/var/www/html
Httpd ###服務
/etc/init.d/heartbeat start ###兩邊都開啓服務
當前server1爲primary,所以先掛載到server1上
Cd /var/www/html cat index.html linux ###創建測試頁
[root@server1 ha.d]# /etc/init.d/heartbeat stop ##server1上停止心跳服務
就會自動掛載到server2上
Server1服務恢復時,又會自動掛載到server1上(主從設備)
當srver1httpd服務停止,掛載位置不變,curl 172.25.29.100 沒有內容