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)