Chinaunix首页 | 论坛 | 博客
  • 博客访问: 632869
  • 博文数量: 151
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1664
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-13 16:37
文章分类

全部博文(151)

文章存档

2010年(16)

2009年(135)

我的朋友

分类: LINUX

2009-11-22 22:56:52

关注也有段时间了,不过蚊子一直没时间亲自操刀过,最近需要解决数据库备份的问题,所以有时间亲自实践了一下。

网上搜了很多资料都说drbd必须在一个干净的block设备上创建,但我的数据库已经在线运行了,所以这种办法可能不太合适,所以自己研究了一下如何在不影响原有数据的情况下配置drbd。今天算是小有成绩了,特来给大家分享一下。

试验目的:在的硬盘上创建drbd
试验环境:vmware模拟环境
192.168.211.128(linux01) CentOS release 5.3 (Final)
192.168.211.129(linux02) CentOS release 5.3 (Final)
drbd-8.3.4版本源码编译安装

试验步骤:

1,添加需要同步的硬盘

首先在虚拟机上为每个系统添加一块新的独立的虚拟硬盘,大小512MB,然后每台机器上执行以下相同的操作

pvcreate /dev/sdb
vgcreate vgtest /dev/sdb
lvcreate -l 127 -n data vgtest

2,格式化分区

然后在linux02并且仅在这台机器上将新建的lv格式化成ext3格式的分区,另外一台机器不用

[root@linux02 ~]# mkfs.ext3 /dev/vgtest/data
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
130048 inodes, 520192 blocks
26009 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
64 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

3,创建文件

将格式化好的分区mount到/data目录下,并在此目录下创建5个有内容的文件,并卸载/data分区,操作如下

[root@linux02 ~]# mount /dev/vgtest/data /data/
[root@linux02 ~]# cd /data/
[root@linux02 data]# for ((i=0;i<=4;i++))
> do
> echo "00$i">$i
> done
[root@linux02 data]# ll
total 17
-rw-r--r-- 1 root root     4 Oct 20 13:45 0
-rw-r--r-- 1 root root     4 Oct 20 13:45 1
-rw-r--r-- 1 root root     4 Oct 20 13:45 2
-rw-r--r-- 1 root root     4 Oct 20 13:45 3
-rw-r--r-- 1 root root     4 Oct 20 13:45 4
[root@linux02 data]# cd
[root@linux02 ~]# umount /data/

4,备份头1024自己的数据

为了实现在已经有数据的硬盘上创建drbd,蚊子现在备份/dev/vgtest/data分区的头1024字节的数据,操作如下

dd if=/dev/vgtest/data of=/root/back bs=1M count=1

5,创建drbd相应的设备

下面就来开始创建相应的drbd相关的设备及相应的配置

配置如下:

global {

usage-count yes;
}

common {
syncer { rate 10M; }
}

resource r0 {

protocol C;

handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";

}

startup {

}

disk {
on-io-error   detach;
}

net {

after-sb-0pri disconnect;

after-sb-1pri disconnect;

after-sb-2pri disconnect;

rr-conflict disconnect;

}

syncer {
rate 10M;

al-extents 257;

}

on linux01 {
device     /dev/drbd0;
disk       /dev/vgtest/data;
address    192.168.211.128:7788;
meta-disk  internal;

}

on linux02 {
device    /dev/drbd0;
disk      /dev/vgtest/data;
address   192.168.211.129:7788;
meta-disk internal;
}
}

两台主机上的drbd.conf配置文件相同。下面就可以启动drbd了

linux01上的操作

[root@linux01 ~]# dd if=/dev/zero of=/dev/vgtest/data bs=1M count=1
[root@linux01 ~]# modprobe drbd

[root@linux01 ~]# drbdadm create-md r0
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

[root@linux01 ~]# drbdadm up r0
可以通过查看/proc/drbd来确认现在drbd的状态,显示如下

[root@linux01 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux01, 2009-10-16 20:22:50
0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown 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:b oos:520140

linux02上的操作

[root@linux02 ~]# modprobe drbd
[root@linux02 ~]# drbdadm create-md r0
[root@linux02 ~]# drbdadm up r0
查看状态如下

[root@linux02 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux02, 2009-10-20 12:08:30
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:b oos:520140

现在可以看到,两台设备都是从设备,现在需要设置一台机器为主设备,因为我们在linux01上创建了文件,所以由linux01担当primary设备,操作如下

[root@linux01 ~]# drbdsetup /dev/drbd0 primary –o
查看状态如下

[root@linux01 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux01, 2009-10-16 20:22:50
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
ns:186368 nr:0 dw:0 dr:186368 al:0 bm:11 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:333772
[======>.............] sync'ed: 36.3% (333772/520140)K
finish: 0:00:32 speed: 10,236 (9,808) K/sec

由此看到当前设备已经变成primary了

再来看看linux02上的变化

[root@linux02 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux02, 2009-10-20 12:08:30
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
ns:0 nr:520140 dw:520140 dr:0 al:0 bm:32 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

这样在linux01上/dev/drbd0就已经是可写的设备了,如果是一块新的硬盘,就可以对drbd0设备进行格式化的操作了,但由于我们已经在linux01上创建了数据,为了保留数据,我们不能进行格式化,现在就需要用到刚才备份出来的头1024字节的数据了,操作如下

[root@linux01 ~]# dd if=/root/back of=/dev/drbd0
2048+0 records in
2048+0 records out
1048576 bytes (1.0 MB) copied, 0.203191 seconds, 5.2 MB/s

然后mount到/data目录看下

[root@linux01 ~]# mount /dev/drbd0 /data/
执行之后并没有报错,使用df看下状态

[root@linux01 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
7744976   3900480   3444728  54% /
/dev/sda1               101086     12075     83792  13% /boot
tmpfs                    62800         0     62800   0% /dev/shm
/dev/drbd0              503780     10550    467221   3% /data

可以看到,已经可以成功mount使用了。

6,检查原有数据是否存在

现在就来验证一下原有创建的数据是否存在吧,操作如下

[root@linux01 ~]# ll /data/
total 22
-rw-r--r-- 1 root root     4 Oct 16 20:25 0
-rw-r--r-- 1 root root     4 Oct 16 20:25 1
-rw-r--r-- 1 root root     4 Oct 16 20:25 2
-rw-r--r-- 1 root root     4 Oct 16 20:25 3
-rw-r--r-- 1 root root     4 Oct 16 20:25 4
drwx------ 2 root root 12288 Oct 16 20:25 lost+found

由此看到,原来/data目录下的数据还是存在的,看下文件的内容

[root@linux01 ~]# cat /data/3
003

内容也是存在的

到此,在原有数据的硬盘上创建drbd就已经成功了,接下来测试同步数据是否成功

7,测试同步数据

由上可知,原数据保留下来了,那么新的数据和原有数据是否可以同步到linux02上呢,下面就来验证一下,操作如下

先在linux01上创建数据文件5

[root@linux01 ~]# echo "005">/data/5
[root@linux01 ~]# cat /data/5
005

卸载/data目录
[root@linux01 ~]# umount /data/

将linux01上的drbd0设置为secondary
[root@linux01 ~]# drbdsetup /dev/drbd0 secondary
[root@linux01 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux01, 2009-10-16 20:22:50
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----
ns:521197 nr:0 dw:1057 dr:521249 al:3 bm:34 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

将linux02上的drbd0设置为primary
[root@linux02 ~]# drbdsetup /dev/drbd0 primary -o
[root@linux02 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux02, 2009-10-20 12:08:30
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
ns:0 nr:521197 dw:521197 dr:0 al:0 bm:32 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

mount到/data目录上
[root@linux02 ~]# mount /dev/drbd0 /data/
[root@linux02 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
7744976   2878792   4466416  40% /
/dev/sda1               101086     12073     83794  13% /boot
tmpfs                    62800         0     62800   0% /dev/shm
/dev/drbd0              503780     10551    467220   3% /data

查看/data目录下数据
[root@linux02 ~]# ll /data/
total 24
-rw-r--r-- 1 root root     4 Oct 16 20:25 0
-rw-r--r-- 1 root root     4 Oct 16 20:25 1
-rw-r--r-- 1 root root     4 Oct 16 20:25 2
-rw-r--r-- 1 root root     4 Oct 16 20:25 3
-rw-r--r-- 1 root root     4 Oct 16 20:25 4
-rw-r--r-- 1 root root     4 Oct 16 20:39 5
drwx------ 2 root root 12288 Oct 16 20:25 lost+found
[root@linux02 ~]# cat /data/5
005
[root@linux02 ~]# cat /data/4
004

到此,蚊子对于在已有数据的硬盘上创建drbd同步的测试就做完了,这样看来就算硬盘上已有数据,也是可行的。有兴趣的朋友可以亲自尝试一下,正式环境操作前请做好备份工作。但在我试验的时候蚊子我还是有个疑问的。

蚊子这个试验是使用的一块独立硬盘做的测试,所以头1024字节就是这块硬盘的第一个扇区,如果要是在原有的一块大硬盘的一个独立分区里做的话,不知道这个头1024字节是那部分数据,这样做会不会有问题。

带着这个问题,蚊子还有有第二版的测试文档的。另外安装官方文档,如果硬盘已有数据,建议使用external meta data。

原文

阅读(1624) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

zsc44693882016-08-18 17:48:58

之前 不是在linux02 上创建的文件  怎么后来 说是linux01创建的文件 然后设置linux01 为主分区  感觉有点乱啊?

zsc44693882016-08-18 17:48:53

之前 不是在linux02 上创建的文件  怎么后来 说是linux01创建的文件 然后设置linux01 为主分区  感觉有点乱啊?