【背景】
drbd是内核级别 文件--drbd--磁盘。
优点:速度快,基于block快进行同步
缺点:闲置一块从节点的磁盘。
【实践环境】
准备环境
操作系统和内核:
[root@master ~]# cat /etc/issue |head -1
entOS release 6.4 (Final)
[root@master ~]# uname -r
2.6.32-358.el6.x86_64
master网卡配置:
[root@master ~]# ifconfig |grep -A1 "eth"
eth0 Link encap:Ethernet HWaddr 00:0C:29:65:14:0F
inet addr:192.168.100.10 Bcast:192.168.100.255 Mask:255.255.255.0
--
eth1 Link encap:Ethernet HWaddr 00:0C:29:65:14:19
inet addr:10.0.0.7 Bcast:10.0.0.255 Mask:255.255.255.0
slave网卡配置
[root@slave ~]# ifconfig |grep -A1 "eth"
eth0 Link encap:Ethernet HWaddr 00:0C:29:B7:34:9B
inet addr:192.168.100.13 Bcast:192.168.100.255 Mask:255.255.255.0
--
eth1 Link encap:Ethernet HWaddr 00:0C:29:B7:34:A5
inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0
解析配置:/etc/hosts
10.0.0.7 master
10.0.0.8 slave
hostname配置:
[root@master etc]# hostname
master
[root@slave etc]# hostname
slave
防火墙配置:
[root@slave etc]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@slave etc]# getenforce
Disabled
master磁盘配置(虚拟机添加一块磁盘并一个分区):
[root@master ~]# cat fdisk.txt
n
p
1
1
+500M
w
[root@master ~]# fdisk /dev/sdb < fdisk.txt
[root@master ~]# partprobe
[root@master ~]# fdisk -l |grep "/sdb1"
/dev/sdb1 1 65 522081 83 Linux
注意: (物理磁盘一定不能进行格式化挂载 因为需要存的是drbd meta文件格式)
slave磁盘配置同上:
......
【drbd的准备环境】
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz
【drbd的安装过程】
master 和slave同步操作
tar xvf drbd-8.4.3.tar.gz cd drbd-8.4.3 ./configure --prefix=/usr/local/drbd --with-km make KDIR=/usr/src/kernels/`uname -r`/ make install
注意:drbd是基于内核的,所以要编译进内核。内核的路径 /usr/src/kernels/`uname -r`/。
如果出问题,是否你的内核有过升级。
【加载drbd内核模块】
master和slave同步进行
[root@master ~]# modprobe drbd
[root@master ~]# lsmod |grep drbd
drbd 325754 0
libcrc32c 1246 1 drbd
【配置drbd-配置文件】
cd /usr/local/drbd/etc/
> drbd.conf
master和slave配置一样如下:
global {
usage-count no;
# minor-count dialog-refreshdisable-ip-verification
}
common {
protocol C;
syncer {
rate 100M;
verify-alg sha1;
}
}
resource data {
disk {
on-io-error detach;
}
#节点1
on master {
device /dev/drbd0; #drbd的裸设备
disk /dev/sdb1; #数据在此分区
address 10.0.0.7:7788;
meta-disk internal ;
}
#节点2
on slave {
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.0.8:7788;
meta-disk internal ;
}
}
【启动drbd-】
master和slave上创建drbd meta元数据
[root@master etc]# drbdadm create-md data
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
解释:对data这个资源初始化drbd
master和slave上启动data资源
drbdadm up data
[root@master etc]# drbdadm up data
Device '0' is configured!
Command 'drbdmeta 0 v08 /dev/sdb1 internal apply-al' terminated with exit code 20
注意:以上信息是正常的。
[root@master etc]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master, 2016-08-28 11:49:02
0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----s
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:522028
过一会后master和slave都需要出现以下信息:
[root@master etc]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master, 2016-08-28 11:49:02
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:522028
【设置主节点】
[root@master etc]# drbdadm primary --force data
[root@master etc]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master, 2016-08-28 11:49:02
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
ns:43140 nr:0 dw:0 dr:50848 al:0 bm:2 lo:1 pe:2 ua:8 ap:0 ep:1 wo:f oos:480044
[>...................] sync'ed: 8.6% (480044/522028)K
finish: 0:00:57 speed: 8,396 (8,396) K/sec
注意:看到此时数据正在同步。
最后
maste端的状态
cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
slave端的状态
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
【格式化磁盘存取数据】
mkfs.ext4 /dev/drbd0
注意:
1 是对裸设备进行格式化,而不是物理磁盘。
2 只需要对maser端的裸设备进行格式化,因为格式化信息也会被同步到slave端的。
完成后master端和slave的ns:数据 值是一一样的
挂载
mount /dev/drbd0 /mnt/
【数据测试】
cd /mnt
[root@master mnt]# touch {a..f}
其实看到
cat /proc/drbd的状态正常就可以了
【非必要的测试手段1 ---验证slave端有数据了】
drbdadm down data
mount /dev/sdb1 /mnt/
[root@slave drbd-8.4.3]# cd /mnt/
[root@slave mnt]# ll
total 12
-rw-r--r-- 1 root root 0 Aug 28 13:34 a
-rw-r--r-- 1 root root 0 Aug 28 13:34 b
-rw-r--r-- 1 root root 0 Aug 28 13:34 c
-rw-r--r-- 1 root root 0 Aug 28 13:34 d
-rw-r--r-- 1 root root 0 Aug 28 13:34 e
-rw-r--r-- 1 root root 0 Aug 28 13:34 f
drwx------ 2 root root 12288 Aug 28 13:29 lost+found
此时表示:数据完全同步过来了。
恢复slave作为secondary 角色
[root@slave /]# umount /mnt/
[root@slave /]# drbdadm up data
[root@slave /]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@slave, 2016-08-28 11:53:45
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:24 dw:24 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
【测试手段2--主备切换】
暂时省略....
【drbd的常用命令】
查看drbd的状态
cat /proc/drbd
命令查看drbd的配置文件
drbdadm dump all
查看角色
drbdadm role all
注意:
1 即使在secondary被down的情况下,primary端有有新的数据。在seconary恢复后,新的数据还会继续同步到secondary的
1 (如果之前做个磁盘实验)
需要清掉drbd meta数据
dd if=/dev/zero of=/dev/sdb1 count=1 bs=100M
注意:
2 启动报错
[root@master etc]# drbdadm up data
/usr/local/drbd/var/run/drbd: No such file or directory
/usr/local/drbd/var/run/drbd: No such file or directory
解决
mkdir -p /usr/local/drbd/var/run/drbd
4 创建磁盘
fdisk 分隔一块/dev/sdb1
(一定不能进行格式化挂载 因为存的是drbd meta文件格式)
5 创建drbd meta
drbdadm create-md data
起资源
启动服务
启动所有资源
drbdadm up all
或者
drbdadm up data
6 如何使用
#把master节点作为主节点
Drbdadm primary --force data
#只能在一个节点上进行
mkfs.ext4 /dev/drbd0
#挂载drbd的裸设备进行使用
mount /dev/drbd0 /mnt/
7 常用查看
modprobe drbd
lsmod |grep drbd
drbdadm dump all
cat /proc/drbd
drbdadm role data
#变成secondary
drbdadm secondary data