主機環境 redhat6.5 64位html
實驗環境 服務端1 ip 172.25.25.111 主機名:server1.example.com drbdlinux
服務端2 ip172.25.25.112 主機名:server2.example.com drbd算法
安裝包 drbd-8.4.3.tar.gzvim
防火牆狀態:關閉api
1.Drbd的簡介bash
1.基本信息服務器
Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。網絡
DRBD的位置處於文件系統如下,比文件系統更加靠近操做系統內核及IO棧。數據結構
2.工具分佈式
drbdadm:高級管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta發送指令,
drbdsetup:配置裝載進kernel的DRBD模塊,平時不多直接用
drbdmeta:管理META數據結構,平時不多直接用。
在DRBD中,資源是特指某複製的存儲設備的全部方面。包括資源名稱、DRBD設備(/dev/drbdm,這裏m是設備最小號,最大號可到147)、磁盤配置(使本地數據能夠爲DRBD所用)、網絡配置(與對方通訊)
每一個資源有個角色,是Primary或Secondary,下面簡稱"主"和"備"
主角色的DRBD設備能夠不受限制的讀和寫,好比建立和映射文件系統、對於塊設備的raw或直接IO訪問。
備角色的DRBD設備接受來自對方的全部修改,可是不能被應用程序讀寫,甚至只讀也不行。
角色能夠改變。
3.DRBD工做原理圖
DRBD是linux的內核的存儲層中的一個分佈式存儲系統,可用使用DRBD在兩臺Linux服務器之間共享塊設備,共享文件系統和數據。相似於一個網絡RAID-1的功能,如圖所示:
2. 編譯、安裝drbd內核模塊計及測試
1.編譯、安裝drbd內核模塊,報錯解決及debd的配置(服務端1)
[root@server1 mnt]# ls
drbd-8.4.3.tar.gz
[root@server1 mnt]# tar zxf drbd-8.4.3.tar.gz #解壓
[root@server1 mnt]# ls
drbd-8.4.3 drbd-8.4.3.tar.gz
[root@server1 mnt]# cd drbd-8.4.3
[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km
若報錯以下:
則安裝:
[root@server1 drbd-8.4.3]# yum install flex -y
[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km
WARNING系統能夠跳過,以下:
[root@server1 drbd-8.4.3]# yum install rpm-build -y
[root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec #
error: File /root/rpmbuild/SOURCES/drbd-8.4.3.tar.gz: No suchfile or directory
[root@server1 drbd-8.4.3]# cp /mnt/drbd-8.4.3.tar.gz/root/rpmbuild/SOURCES/
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec
error: Failed build dependencies:
kernel-devel is neededby drbd-km-8.4.3-2.el6.x86_64 #報錯,缺乏包[root@server1drbd-8.4.3]# yum install kernel-devel -y
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec
[root@server1 drbd-8.4.3]# cd /root/rpmbuild/RPMS/x86_64/ #切換目錄
[root@server1 x86_64]# ls #生成10個安裝包
drbd-8.4.3-2.el6.x86_64.rpm
drbd-bash-completion-8.4.3-2.el6.x86_64.rpm
drbd-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-heartbeat-8.4.3-2.el6.x86_64.rpm
drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm
drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-pacemaker-8.4.3-2.el6.x86_64.rpm
drbd-udev-8.4.3-2.el6.x86_64.rpm
drbd-utils-8.4.3-2.el6.x86_64.rpm
drbd-xen-8.4.3-2.el6.x86_64.rpm
[root@server1 x86_64]# yum install * -y #安裝全部的包
[root@server1 x86_64]# scp * root@172.25.25.112:/mnt #將包傳給服務端2
[root@server2 mnt]# ls
drbd-8.4.3-2.el6.x86_64.rpm
drbd-bash-completion-8.4.3-2.el6.x86_64.rpm
drbd-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-heartbeat-8.4.3-2.el6.x86_64.rpm
drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm
drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-pacemaker-8.4.3-2.el6.x86_64.rpm
drbd-udev-8.4.3-2.el6.x86_64.rpm
drbd-utils-8.4.3-2.el6.x86_64.rpm
drbd-xen-8.4.3-2.el6.x86_64.rpm
[root@server2 mnt]# rpm -vih * #安裝
Preparing... ########################################### [100%]
1:drbd-utils ########################################### [ 10%]
2:drbd-bash-completion ########################################### [ 20%]
3:drbd-heartbeat ########################################### [ 30%]
4:drbd-pacemaker ########################################### [ 40%]
5:drbd-udev ########################################### [ 50%]
6:drbd-xen ########################################### [ 60%]
7:drbd ###########################################[ 70%]
8:drbd-km-2.6.32_431.el6.########################################### [80%]
9:drbd-km-debuginfo ########################################### [ 90%]
10:drbd-debuginfo ###########################################[100%]
在服務端1和服務端2虛擬機中各添加一塊虛擬磁盤或劃分一個新的分區,而後進行下面的步驟:
[root@server1 x86_64]# cd /etc/drbd.d/ #切換到drbd的主配置文件目錄
[root@server1 drbd.d]# vim dbdata.res #建立一個文件,後綴必須是.res
1 resource dbdata{
2 meta-disk internal;
3 device /dev/drbd1;
4 syncer {
5 verify-alg sha1; #設置主備機之間通訊使用的信息算法
6 }
#每一個主機的說明以"on"開頭,後面是主機名.在後面的{}中爲這個主機的配置
7 on server1.example.com{ #主機名
8 disk /dev/vdb; #磁盤名稱
9 address172.25.29.1:7789; #ip加端口,端口是指定的
10 }
11 onserver2.example.com{
12 disk /dev/vdb;
13 address172.25.29.2:7789;
14 }
15 }
[root@server1 drbd.d]# scp dbdata.resroot@172.25.29.2:/etc/drbd.d/
root@172.25.29.2's password:
#服務端1和服務端2同時初始化 ,同時開啓drbd
[root@server1 drbd.d]# drbdadm create-md dbdata #初始化
--== Thank you for participating in the globalusage survey ==--
The server's response is:
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
[root@server2 drbd.d]# drbdadm create-md dbdata
--== Thank you for participating in the globalusage survey ==--
The server's response is:
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
2.drbd的開啓初始化、強制主備同步及格式化(主備模型)
[root@server1 drbd.d]# /etc/init.d/drbd start #開啓drbd
[root@server2 drbd.d]# /etc/init.d/drbd start
[root@server1 drbd.d]# cat /proc/drbd #查看
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052
[root@server2 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052
#從上面能夠看出兩個都是secondary
[root@server1 drbd.d]# drbdadm primary dbdata --force #強制使服務端1變成primary
[root@server1 drbd.d]# cat /proc/drbd #查看,服務端1和服務端2正在同步
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:SyncSource ro:Primary/Secondaryds:UpToDate/Inconsistent C r-----
ns:496640 nr:0 dw:0dr:497304 al:0 bm:30 lo:0 pe:4 ua:0 ap:0 ep:1 wo:f oos:1604508
[===>................]sync'ed: 23.7% (1604508/2097052)K
finish: 0:00:16 speed:98,508 (98,508) K/sec
[root@server1 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:SyncSourcero:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
ns:1566436 nr:0 dw:0dr:1569432 al:0 bm:94 lo:0 pe:16 ua:3 ap:0 ep:1 wo:f oos:546716
[=============>......]sync'ed: 74.1% (546716/2097052)K
finish: 0:00:08 speed:64,596 (64,596) K/sec
[root@server1 drbd.d]# cat /proc/drbd #同步完成,服務端1爲primary
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:2097052 nr:0 dw:0dr:2097716 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server2 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:2097052dw:2097052 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server1 drbd.d]# mkfs.ext4 /dev/drbd1 #格式化
3.切換主備測試是否同步成功
[root@server1 drbd.d]# mount /dev/drbd1 /mnt/ #將格式化好的磁盤掛載到/mnt上
[root@server1 drbd.d]# cd /mnt/ #切換到/mnt
[root@server1 mnt]# ls
lost+found
[root@server1 mnt]# touch file{1..4} #建立幾個文件
[root@server1 mnt]# ls
file1 file2 file3 file4 lost+found
[root@server1 mnt]# cd
[root@server1 ~]# umount /mnt/ #卸載
[root@server1 ~]# drbdadm secondary dbdata #將服務端1變成secondary
[root@server1 ~]# cat /proc/drbd #查看
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:2163404 nr:0dw:66352 dr:2098429 al:13 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server2 drbd.d]# drbdadm primary dbdata #將服務端2變成primary
[root@server2 drbd.d]# cat /proc/drbd #查看
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:2163404dw:2163404 dr:664 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server2 drbd.d]# mount /dev/drbd1 /mnt/ #掛載
[root@server2 drbd.d]# cd /mnt/
[root@server2 mnt]# ls #查看,同步成功
file1 file2 file3 file4 lost+found