全部博文(151)
分类: 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, 401409Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: doneThis 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:0mount到/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。
原文
zsc44693882016-08-18 17:48:58
之前 不是在linux02 上创建的文件 怎么后来 说是linux01创建的文件 然后设置linux01 为主分区 感觉有点乱啊?
zsc44693882016-08-18 17:48:53
之前 不是在linux02 上创建的文件 怎么后来 说是linux01创建的文件 然后设置linux01 为主分区 感觉有点乱啊?