DRBD(Distributed Replicated Block Device),DRBD 号称是 "网络 RAID",开源软件,由 LINBIT 公司开发。DRBD分为两个部分,内核中的驱动程序代码和用户空间的工具。Linux 2.6.33之后的内核版本集成了DRBD。
DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。他是有内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上, 并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证实时 的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
第一步:准备两台服务器,分别安装上MySQL。
第二步:检查你的内核版本,如果是或高于2.6.33的话,就不需要安装了。
[root@MySQL-M ~]# uname -r
2.6.18-164.el5
第三步:准备DRBD使用的硬盘,我为两台服务器各加了一块硬盘。并分区,没有创建文件系统。
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 83 Linux
第四步:IP地址和主机名
主机名 |
IP地址 |
作用 |
MySQL-node1 |
192.168.140.137 |
MySQL主库服务器 |
MySQL-node2 |
192.168.140.139 |
MySQL 备库服务器 |
该小节所有内容需要在两个节点MySQL-node1和MySQL-node2分别执行。
6.4.1 下载软件包
[root@MySQL-node1 ~]# cd /usr/local/src
[root@MySQL-node1 src]# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.7.tar.gz
[root@MySQL-node1 src]# tar zxvf drbd-8.3.7.tar.gz
[root@MySQL-node1 src]# cd drbd-8.3.7
6.4.2 编译为内核模块方式
[root@MySQL-node1 drbd-8.3.7]# ./configure --prefix=/usr/local/drbd \
> --sysconfdir=/etc --with-km
[root@MySQL-node1 drbd-8.3.7]# make
Module build was successful.(显示模块创建成功为正确)
[root@MySQL-node1 drbd-8.3.7]# make install
[root@MySQL-node1 ~]# whereis drbd
drbd: /etc/drbd.d /etc/drbd.conf /usr/local/drbd
6.4.3 载入DBRD模块到内核中
[root@MySQL-node1 ~]# modprobe drbd
[root@MySQL-node1 ~]# lsmod | grep drbd
drbd 272504 0
[root@MySQL-node1 ~]# echo "modprobe drbd" >> /etc/rc.local
6.4.4 DRBD命令
安装成功后,会发现,系统增加了以下三个命令:
[root@MySQL-node1 ~]# ls /sbin/drbd*
/sbin/drbdadm /sbin/drbdmeta /sbin/drbdsetup
6.5.1 /etc/drbd.conf
[root@MySQL-M ~]# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
默认情况下,该文件包含了/etc/drbd.d目录下的配置文件,下面是我修改好的drbd.conf
[root@MySQL-M ~]# cat /etc/drbd.conf
include "drbd.d/global_common.conf";
resource r0 { #定义一个资源名字r0
on MySQL-node1 {
device /dev/drbd1; #设置一个DRBD device,编号是从0开始,主设备号147。
disk /dev/sdb1; #本地使用的device
address 192.168.140.137:7789; #网络设置,IP地址加端口
meta-disk internal;
}
on MySQL-node2 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.140.139:7789;
meta-disk internal;
}
}
6.5.1 创建DRBD元数据
[root@MySQL-node1 ~]# drbdadm create-md r0
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
[root@MySQL-node1 ~]# drbdadm attach r0
[root@MySQL-node1 ~]# drbdadm syncer r0
[root@MySQL-node1 ~]# drbdadm connect r0
设置为主节点:
[root@MySQL-node1 ~]# drbdadm -- --overwrite-data-of-peer primary r0
[root@MySQL-node1 ~]# mkfs.ext3 /dev/drbd1
[root@MySQL-node1 ~]# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@MySQL-M, 2010-11-26 02:36:34
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n
ns:75304 nr:0 dw:66388 dr:8952 al:25 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2024192
[>....................] sync'ed: 3.6% (2024192/2096348)K
finish: 1:52:27 speed: 256 (2,120) K/sec
[root@MySQL-node2 ~]# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@MySQL-node2, 2010-11-27 01:50:08
1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----
ns:0 nr:79880 dw:79880 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2019616
[>....................] sync'ed: 3.8% (2019616/2096348)K
finish: 0:42:04 speed: 512 (1,868) K/sec