一:概述:
DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络 RAID 。 Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。
××× http://oss.linbit.com/drbd/0.7/drbd-0.7.25.tar.gz
核心参考文档: http://www.drbd.org/drbd-howto.html
二:主要实现
假设有两台机器 node2 : 192.168.0.158 需要镜像的硬盘: /dev/sdb1
zhouhw : 192.168.0.159 需要镜像的硬盘: /dev/sdb1
主服务器为 192.168.0.158
备份服务器为 192.168.0.159
平常对数据读写都在 192.168.0.158 上实现,当 192.168.0.158 down 掉后可以启动 192.168.0.159 ,实现数据的热备份。
真正的热切换需要才用 HA 来实现。
DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络 RAID 。 Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。
××× http://oss.linbit.com/drbd/0.7/drbd-0.7.25.tar.gz
核心参考文档: http://www.drbd.org/drbd-howto.html
二:主要实现
假设有两台机器 node2 : 192.168.0.158 需要镜像的硬盘: /dev/sdb1
zhouhw : 192.168.0.159 需要镜像的硬盘: /dev/sdb1
主服务器为 192.168.0.158
备份服务器为 192.168.0.159
平常对数据读写都在 192.168.0.158 上实现,当 192.168.0.158 down 掉后可以启动 192.168.0.159 ,实现数据的热备份。
真正的热切换需要才用 HA 来实现。
安装前需要提前安装的rpm
包:
1、
gcc
2、
kernel
3、
bison
4、
flex
5、
gmp-4.1.4-6.i386.rpm
三:下载安装
安装环境:
Red Hat Enterprise Linux AS release 5
内核版本:
2.6.18-8.el5
确认内核源码存在 , 可到 http://oss.linbit.com/drbd/ 去载 .
下载源码注意:当前最新的 drbd-0.7.25 ,配置文件无法正常配置,出现一大堆错误,所以下载以前的稳定版本。 tar 源码解包后
运行 :
A 、make KDIR=/usr/src/linux /* 内核所在的位置*/
/* 如果你没有更改内核可以直接运行 make ,软件会直接到 /lib/module 里边去寻找系统环境,如果是新的内核需要对内核进行编译安装,
确认内核源码存在 , 可到 http://oss.linbit.com/drbd/ 去载 .
下载源码注意:当前最新的 drbd-0.7.25 ,配置文件无法正常配置,出现一大堆错误,所以下载以前的稳定版本。 tar 源码解包后
运行 :
A 、make KDIR=/usr/src/linux /* 内核所在的位置*/
/* 如果你没有更改内核可以直接运行 make ,软件会直接到 /lib/module 里边去寻找系统环境,如果是新的内核需要对内核进行编译安装,
这里由于没有更改内核,所以直接执行
make
及
make install
即即可,否则
make
时候会错误中断掉
B 、make install
B 、make install
安装完主要生成命令: drbdsetup ,drbdadmin
和配置文件: /etc/drbd.conf , 启动文件, /etc/init.d/drbd
模块文件: drbd.ko( 在编译好的安装包目录下的 drbd 下可以找到)
所有命令和配置文件都可以在源码包编译成功的目录下面找到。
./scripts/drbd.conf 是最原始的配置文件,当 /etc/drbd.conf 被破坏,可以直接拷贝覆盖掉。
C 、创建硬件设备drbd
mknod /dev/drbd0 b 147 0
mknod /dev/drbd1 b 147 1
mknod /dev/drbd2 b 147 2
或者用 shell 来建立多个:
#for i in $(seq 0 15) ; do mknod /dev/drbd$i b 147 $i ; done
D 、DRBD 协议说明
A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
B 收到接收确认就认为完成了写入操作。
C 收到写入确认就认为完成了写入操作。
您还可以选择其它参数来将数据传输给磁盘和网络选项。更多详情,请参见 drbdsetup 手册页
四:配置drbd
编辑文件
vi /etc/drbd.conf
修改内容如下:
global {
usage-count yes; (是否参加使用者统计,yes为参加)
}
common {
syncer { rate 100M; } #如果是1000M网络,就写成1000M
}
resource r0 {
protocol C; (数据同步协议,C为收到数据并写入后返回,确认成功)
disk {
on-io-error detach;
}
net {
}
syncer {
rate 100M; (设置网络同步速率)
al-extents 257;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.158:7788;
meta-disk internal;
}
on zhouhw {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.159:7788;
meta-disk internal;
}
}
usage-count yes; (是否参加使用者统计,yes为参加)
}
common {
syncer { rate 100M; } #如果是1000M网络,就写成1000M
}
resource r0 {
protocol C; (数据同步协议,C为收到数据并写入后返回,确认成功)
disk {
on-io-error detach;
}
net {
}
syncer {
rate 100M; (设置网络同步速率)
al-extents 257;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.158:7788;
meta-disk internal;
}
on zhouhw {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.159:7788;
meta-disk internal;
}
}
五:启动drbd
先确认两台要镜像的机器是否正常,之间的网络是否通畅,需要加载的硬盘是否处于 umount状态。
A 、 drbd采用的是模块控制的方式
所以先要加载 drbd.ko 模块
在 192.168..0.158服务器执行 :
#insmod drbd.ko 或者 modprobe drbd
drbd.ko可以在编译好的源码包里找到。
判断是否加载成功可以使用 lsmod来查看:(如图所示)
有的话表示加载模块成功
#drbdadm up all
启动 drbd服务,使他挂在后台状态下运行 .
可以使用命令 netstat -an查看
有启动端口 7788,同时也监听对方的 7788端口,来实现数据交换。 (如图所示)
先确认两台要镜像的机器是否正常,之间的网络是否通畅,需要加载的硬盘是否处于 umount状态。
A 、 drbd采用的是模块控制的方式
所以先要加载 drbd.ko 模块
在 192.168..0.158服务器执行 :
#insmod drbd.ko 或者 modprobe drbd
drbd.ko可以在编译好的源码包里找到。
判断是否加载成功可以使用 lsmod来查看:(如图所示)
有的话表示加载模块成功
#drbdadm up all
启动 drbd服务,使他挂在后台状态下运行 .
可以使用命令 netstat -an查看
有启动端口 7788,同时也监听对方的 7788端口,来实现数据交换。 (如图所示)
B: 在192.168.0.159服务器执行
#modprobe drbd
#/etc/rc.d/init.d/drbd start
netstat -atn的输出结果,说明两台虚拟机的 drbd服务已经连接上了:(如图所示)
六:设置权限
drbd 的基本服务都起来了,现在需要对主的服务器也就使 192.168.0.158 这台服务器进行配置,让他能够对 drbd0 设备进行读写。
在 192.168.0.158 机器上运行
#drbdadm -- --do-what-I-say primary all # 设置 192.168.0.158 服务器为同步主目录 , 也就是同步以 192.168.0.158 的这个分区为准 .
注意命令格式需要一样 , 没有任何提示的话表示基本上成功了
#sfdisk -s
可以看见有一个硬件设备: /dev/drbd0
此时,两台设备之间就建立起一个镜像,您可以查看 /proc/drbd 进行核实。
# cat /proc/drbd
如果原来硬盘没有文件系统的话,现在您可以在设备 /dev/drbd0 上创建一个文件系统,然后把它加载到 192.168.0.158 上。
#mkfs.ext3 /dev/drbd0
drbd 的基本服务都起来了,现在需要对主的服务器也就使 192.168.0.158 这台服务器进行配置,让他能够对 drbd0 设备进行读写。
在 192.168.0.158 机器上运行
#drbdadm -- --do-what-I-say primary all # 设置 192.168.0.158 服务器为同步主目录 , 也就是同步以 192.168.0.158 的这个分区为准 .
注意命令格式需要一样 , 没有任何提示的话表示基本上成功了
#sfdisk -s
可以看见有一个硬件设备: /dev/drbd0
此时,两台设备之间就建立起一个镜像,您可以查看 /proc/drbd 进行核实。
# cat /proc/drbd
如果原来硬盘没有文件系统的话,现在您可以在设备 /dev/drbd0 上创建一个文件系统,然后把它加载到 192.168.0.158 上。
#mkfs.ext3 /dev/drbd0
# mount /dev/drbd /turbomail
现在 /dev/drbd0 就等于你服务器上面的一个硬件设备,你可以对他进行任何的读写操作。
七:drbd 测试:
1: 在 192.168.0.158 主服务器上 :
#drbdadm primary all
#touch /turbomail/aaa
完后 , 在执行
#umount /turbomail
#drbdadm secondary all
2: 接着到 192.168.0.159 备用服务器上执行
#drbdadm primary all
#mount /dev/drbd0 /turbomail
#ls -l /turbomail
aaa
Ok, 没问题 , 可以看到数据在 192.168.0.158 服务器写入 , 在 192.168.0.159 马上可以看到 .
几点注意的地方:
1. mount drbd 设备以前必须把设备切换到 primary 状态。
2. 两个节点中,同一时刻只能有一台处于 primary 状态,另一台处于 secondary 状态。
3. 处于 secondary 状态的服务器上不能加载 drbd 设备。
4. 主备服务器同步的两个分区大小最好相同 , 这样不至于浪费磁盘空间 , 因为 drbd 磁盘镜像相当于网络 raid 1.
现在 /dev/drbd0 就等于你服务器上面的一个硬件设备,你可以对他进行任何的读写操作。
七:drbd 测试:
1: 在 192.168.0.158 主服务器上 :
#drbdadm primary all
#touch /turbomail/aaa
完后 , 在执行
#umount /turbomail
#drbdadm secondary all
2: 接着到 192.168.0.159 备用服务器上执行
#drbdadm primary all
#mount /dev/drbd0 /turbomail
#ls -l /turbomail
aaa
Ok, 没问题 , 可以看到数据在 192.168.0.158 服务器写入 , 在 192.168.0.159 马上可以看到 .
几点注意的地方:
1. mount drbd 设备以前必须把设备切换到 primary 状态。
2. 两个节点中,同一时刻只能有一台处于 primary 状态,另一台处于 secondary 状态。
3. 处于 secondary 状态的服务器上不能加载 drbd 设备。
4. 主备服务器同步的两个分区大小最好相同 , 这样不至于浪费磁盘空间 , 因为 drbd 磁盘镜像相当于网络 raid 1.
转载于:https://blog.51cto.com/turbomailtt/229077