DRBD我的理解:
其实就是多台NFS同步,或者理解为网络RAID1。
配置过程中如遇到问题看最后有问题总结。
本实例配置
mysql1 10.1.1.4 (主)
mysql2 10.1.1.5
1.两台机修改hosts文件,这个非常必要,后面要用到。
vim /etc/hosts
10.1.1.4 mysql1
10.1.1.5 mysql2
2.在两台机增加一个硬盘 1G就够了
#fdisk /dev/sdb 分区
#fdisk -l
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux
这时候多了一块sdb1,先不要格式化,不然后面会出错。
3.安装 DRBD-8.3.2.tar.gz 下载:http://oss.linbit.com/drbd/8.3/drbd-8.3.2.tar.gz
#tar xvf DRBD-8.3.2.tar.gz
#cd drbd-8.3.2
#make && make install
#insmod drbd/drbd.ko
#lsmod |grep drbd
drbd 220312 3
#vi /etc/drbd.conf 把原来的备份一下,然后删了。直接改。
global {
usage-count no; 这个问你让不让官网统计,没关系的。
}
common {
syncer { rate 100M; } rate 要100M传输
}
resource r0 {
protocol C;
startup {
}
disk {
on-io-error detach;
}
net { ---net{}发生脑裂时的处理方法..后面有参考
cram-hmac-alg "sha1"; ---两台机通讯使用的算法,其实NET里面可以不填任何东西
shared-secret "FooFunFactory";
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 100M;
al-extents 257;
}
on mysql1 { 这地方要注意,一定要填你hosts定义的 就是uname -n
device /dev/drbd0; 逻辑设备路径
disk /dev/sdb1; 真实设备路径
address 10.1.1.133:7788;
flexible-meta-disk internal;
}
on mysql2 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.1.1.119:7788;
meta-disk internal;
}
}
----------------------------------------------
mysql2机子也要改,直接scp /etc/drbd.conf 10.1.1.5:/etc/
在mysql1机子上:
#drbdadm create-md r0 创建供drbd记录信息的数据块,正常会有下面的显示,
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
在mysql2机子上:
#drbdadm create-md r0
#/etc/init.d/drbd start 启动服务,2台机子都启动,这个启动有时候要你填YES。官方另一种启动方法:drbdadm up r0
#chkconfig --add drbd ---加入chkconfig控制
#chkconfig drbd on ---设置开机启动
# ps -ef |grep drbd 查看进程,你们机子现在可能只有2个进程。
root 3698 1 0 17:27 ? 00:00:00 [drbd0_worker]
root 3706 1 0 17:27 ? 00:00:00 [drbd0_receiver]
root 3744 1 0 17:32 ? 00:00:00 [drbd0_asender]
root 4047 3544 0 20:27 pts/0 00:00:00 grep drbd
在mysql1机子上:
#drbdadm -- --overwrite-data-of-peer primary r0 将mysql1设置为主。
也可以这样:
#drbdsetup /dev/drbd0 primary -o 将mysql1设置为主。
# cat /proc/drbd
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by [email protected], 2010-12-15 00:21:10
0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r----
ns:33316 nr:0 dw:33332 dr:137 al:14 bm:11 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:16
Primary/Secondary 可以看到,定义了主从了。没定义的话是Secondary/Secondary的
# mkfs.ext3 /dev/drbd0 格式化新硬盘
测试:
# mkfs.ext3 /dev/drbd0
# mount /dev/drbd0 /mnt/
# echo "test">/mnt/test 创建一个文件
在mysql2机子上:
# /etc/init.d/drbd stop
mount /dev/sdb1 /mnt/
ls /mnt/
看看有没有刚刚新建的那文件,有就代表同步了。
互换 主从关系
主服务器:
# umount /dev/drbd0
#drbdadm secondary r0 降级
从服务器:
# drbdadm primary r0 升级罗
————————————————————————————————————————————————
net { ---脑裂的处理方法
after-sb-0pri discard-zero-changes; — 两台主机角色均为secondary
after-sb-1pri discard-secondary; — 两台主机角色中,其中一台为primary
after-sb-2pri disconnect; — 两台主机角色均为primary
}
遇到的问题:
启动配置的资源
DRBD有两个启动方式,第一个有时候会出现等待要填YES才能启动,第二个好没出现这问题
#/etc/init.d/drbd start
#drbdadm up r0
出错:Command 'drbdmeta 0 v08 /dev/sda2 internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40
解决:因为我之前分区了就马上格式化 可能是这原因
运行#dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
3.在/etc/drbd.conf配置文件中,on模块后面的必须是对应主机的主机名,否则可能会提示“ ‘r0′ ignored, since this host (mysql-229) is not mentioned with an ‘on’ keyword. ”,其中“ro”为定义的资源名,“mysql1”为主机名。 (就是uname -n)
本文出自 “小才” 博客,谢绝转载!