DRBD 是内核模块方式实现的块级别同步复制技术,利用网卡进行块复制、可以有效处理高并发。


Yum方式安装:
yum -y install epel-release
yum -y install drbd83* kmod-drbd83 ; modprobe  drbd
源码安装方式:
http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
./configure --prefix=/usr/local/drbd --with-km 
make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/
make install
cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/
Yum方式和源码方式都需要执行:modprobe drbd 加载DRBD模块。


安装完成并加载drbd模块后,vi修改/etc/drbd.conf配置文件,本文内容如下:
node1为主机 hostname 名
global {
    usage-count yes;
}
common {
syncer { rate 100M; }
}
resource r0 {
 protocol C;
 startup {                                                                          
 }
 disk {
 on-io-error detach;
 #size 1G;
 }
 net {
 }
 


on node1 {
 device /dev/drbd0;
 disk /dev/sdb;
 address 192.168.1.12:7898;
 meta-disk internal;
 }


 on node2 {
 device /dev/drbd0;
 disk /dev/sdb;
 address 192.168.1.13:7898;
 meta-disk internal;
 }
}


配置修改完毕后执行如下命令初始化:
drbdadm create-md  r0  ;
/etc/init.d/drbd restart ;
/etc/init.d/drbd status
如下图:
 以上步骤,需要在两台服务器都执行,两台都配置完毕后,在node2从上面执行如下命令:/etc/init.d/drbd status 看到如下信息,表示目前两台都为从,我们在node1上设置node1为master,命令如下:
drbdadm  --  --overwrite-data-of-peer primary all
mkfs.ext4  /dev/drbd0
mkdir  /app  ;mount /dev/drbd0  /app
(node2无法格式化和挂载的)


停掉node2的drbd服务,挂载 mount -t ext4 /dev/sdb /app 可以看到主上的文件。
自此,DRBD配置完毕,我们可以往/app目录写入任何东西,当master出现宕机或者其他故障,手动切换到backup,数据没有任何丢失,相当于两台服务器做网络RAID1。

很多人谈 DRBD 脑裂而色变、用过就知道了、脑裂不是那么容易就发生的
DRBD 注意不设置自动启动、重启时候手动启动、脑裂的情况发生非常的少
工作中基本不重启 DRBD、更不会重启服务器了、基本上没遇到脑裂的问题


㈠ 优缺点比较

转自 http://www.linuxidc.com/Linux/2013-06/85235.htm


优点


① 没有单点故障的风险暴露

② 没有集群软件通病、如 脑裂



缺点


⑴ 浪费资源


DRBD 的备机目前还不能提供读、所以浪费了资源

大家都知道、生产环境下的 MySQL 服务器都是顶配的、这样在线上浪费一台机器、感觉很可惜的


⑵ DRBD 无法代替备份


DRBD 可能会造成坏数据、不管啥HA、数据备份一定要有、没备份、整个HA瘫痪掉、你也嗝屁了、闪人吧


⑶ 故障转移无法做到秒级以内


⑷ 对于MyISAM 表用处不大


事实上、任何期望高可用的系统、MyISAM 都不会是个选择、因为

MyISAM 的崩溃恢复后需要很多时间修复、并且、会丢失数据


⑸ 增加写操作负担


主要是InnoDB 设置为 innodb_flush_log_at_trx_commit=1

导致许多小的写入和fsync()调用、那么、DRBD同步将会比较缓慢




㈡ 注意事项



① DRBD 和 Linux-HA 版本选择

② DRBD 专门使用一块网卡

③ 心跳网络与vip服务网络分离

④ iptables针对心跳网络放开DRBD、Linux-HA 的端口、VIP可根据自己的应用开启对应端口

⑤ 监控DRBD、Linux-HA 状态、最好做成脚本、自动检测、出问题报警

⑥ 通常都有流量监控系统(mrtg,cacti等)、定期检查机器的负载、流量情况




㈢ 最佳实践


DRBD 只选择复制存放 binlog 的设备、如果、

主动节点失效、可以在被动节点上开启一个日志服务器

然后、对失效主库的所有设备应用这些 binlog 、接下来

可以选择其中一个备库提升为主库、以代替失效的系统