主机环境 redhat6.5 64位
实验环境 服务端1 ip 172.25.25.111 主机名:server1.example.com drbd
服务端2 ip172.25.25.112 主机名:server2.example.com drbd
安装包 drbd-8.4.3.tar.gz
防火墙状态:关闭
1.Drbd的简介
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 #报错,缺少包[[email protected]]# 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 * [email protected]:/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 [email protected]:/etc/drbd.d/
[email protected]'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 [email protected], 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 [email protected], 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 [email protected], 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 [email protected], 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 [email protected], 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 [email protected], 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 [email protected], 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 [email protected], 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