1) 安装第三方yum源 包含drbd(下面命令在两个节点之间都执行)

[root@localhost drbd-8.4.1]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm 

[root@localhost yum.repos.d]# yum -y --enablerepo=elrepo(指定yum源) install drbd83-utils kmod-drbd83
[root@localhost yum.repos.d]# modprobe drbd            加载安装drbd模块

2)如果两台服务器上还有未用的磁盘 或未用完的磁盘(下面命令在两个节点之间都执行)

[root@localhost ~]# fdisk /dev/sdb  (我这里有未用的磁盘  分配为两个节点分配一个2G的分区/dev/sdb1)
[root@localhost ~]# partx /dev/sdb  (扫描加载新的分区)
[root@localhost ~]# mkdir /data/wwwroot/web/uploadimg (建立需要同步的共享的文件夹)

3) 修改配置文件 (两个节点的配置是一模一样)

[root@localhost ~]# cp /etc/drbd.conf /etc/drbd.conf.bak (备份drbd配置文件)
[root@localhost ~]# vi /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";  (包含自定义配置文件)
[root@localhost drbd.d]# vi global_common.conf
# 以下是去除注释后的配置
global {
        usage-count yes; # 是否参加DRBD使用者统计.默认是yes
}

common {
        protocol C; # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
}
[root@localhost drbd.d]# vi /etc/drbd.d/r0.res  (配置资源)
resource r0 {
        net {
                cram-hmac-alg sha1; # 设置主备机之间通信使用的信息算法. 
                shared-secret "yumao123456"; # 共享密码
        }
        on node1 {   # 每个主机的说明以“on”开头,后面是主机名.在后面的{}中为这个主机的配置.
                device    /dev/drbd0;  # 一个DRBD设备(即:/dev/drbdX),叫做“资源“.里面包含一个DRBD设备的主备节点的相关信息.
                disk      /dev/sdb1; # /dev/drbd0使用的磁盘分区是/dev/sdb1
                address   192.168.4.1:7789;
                meta-disk internal;
        }
        on node2 {
                device    /dev/drbd0;
                disk      /dev/sdb1;
                address   192.168.4.3:7789;
                meta-disk internal;
        }
}

4)设置hostname (两个节点上都要执行)

[root@localhost drbd.d]# vi /etc/sysconfig/network
修改HOSTNAME 为node1
[root@localhost drbd.d]# hostname node1 (临时生效)
根据上面的resource配置文件,编辑/etc/hosts
[root@localhost drbd.d]# vi /etc/hosts
192.168.4.1 node1
192.168.4.3 node2

5) 设置resource (以下操作需要在node1和node2操作)

[root@localhost drbd.d]# lsmod | grep drbd  # 确认drbd模块是否载入
drbd                  332493  0
如果没有载入则执行 modprobe drbd 载入模块
#dd if=/dev/zero of=/dev/sdb1 bs=1M count=100     //把一些资料塞到sdb1內 (否则 create-md 时有可能会出现错误)(我在create-md没有出现错误具体视情况而定)
[root@localhost drbd.d]# drbdadm create-md r0  (建立drbd resource,这里的r0对应上面配置的r0)
[root@localhost drbd.d]# drbdadm up r0 // 启动resource r0 (如果是要启用所有的资源可以使用 service drbd start)

6) 查看node1 和 node2 的状态信息类似于下面信息则表明现在已经启动服务,但还没有设置同步(即需要设置主节点)

[root@localhost drbd.d]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2104376

7)设置Primary Node 以下操作仅在node1执行。

设置node1为primary node:
[root@localhost drbd.d]# drbdadm -- --overwrite-data-of-peer primary all(这里也可以指定某一资源如r0) (如果是第一次设置主节点则要执行这条命令 以后就没有必要执行了)
[root@localhost drbd.d]# drbdadm primary --force r0 
# 如果是第一次设置主节点 出现0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup 0 primary' terminated with exit code 17 则是要执行:drbdadm -- --overwrite-data-of-peer primary all
[root@localhost drbd.d]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37
 0: cs:SyncSource ro:Primary/Secondary(说明主节点设置成功) ds:UpToDate/Inconsistent C r-----
    ns:40104 nr:0 dw:0 dr:40768 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2064272
    [>....................] sync'ed:  2.2% (2064272/2104376)K
    finish: 2:02:52 speed: 272 (272) K/sec

8) 创建drbd文件系统(下面的操作仅在node1执行)

[root@node1 ~]# mkfs.ext4 /dev/drbd0 #上面已经完成了/dev/drbd0的初始化,现在来把/dev/drbd0格式化成ext4格式的文件系统。
[root@node1 ~]# mount /dev/drbd0 /data/wwwroot/web/uploadimg  (挂载到指定的目录)
(如果出现下面的错误,就是因为没有指定node1为主(从节点在开启drbd的情况下,它的磁盘分区是不可以挂载的)。不能进行挂载也不能进行写入操作。 则要把它置为主:drbdadm primary --force r0)
mount: block device /dev/drbd0 is write-protected, mounting read-only
mount: Wrong medium type

9) drbd 同步测试

在node2(备用机上的drbd处于启动状态时,它是无法挂载/dev/sdb1分区的。因为这时候/dev/sdb1 正处于使用状态)
我们在node1 上创建一些文件
[root@node1 uploadimg]#  touch 1.txt 2.txt
然后等待1到2分钟(主要是为了等待数据从node1服务器上同步到node2服务器上)
[root@node2 ~]# service drbd stop (关闭从服务器上也就是node2上的drbd 如果只是关闭其中一个资源可以使用 drbdadm down r0)
[root@node2 ~]# mount /dev/sdb1 /data/wwwroot/web/uploadimg/  (把从节点上的/dev/sdb1 分区挂载到 /data/wwwroot/web/uploadimg/目录下 )
[root@node2 uploadimg]# ls  可以查看到上面有从node1 上同步过来的数据
## 注意默认在从节点中写入的数据,在从节点上开启drbd后。他会被主节点的数据覆盖

10) drbd 主从切换

[root@node1 ~]# umount /dev/drbd0
[root@node1 ~]# drbdadm secondary r0

[root@node2 ~]# drbdadm primary r0
[root@node2 ~]# drbdadm role r0
Primary/Secondary
[root@node1 ~]# drbdadm role r0
Secondary/Primary
此时主节点和从节点已经交换角色
[root@node2 uploadimg]# mount /dev/drbd0 /data/wwwroot/web/uploadimg/  重新挂载 
此时我们在node2 的/data/wwwroot/web/uploadimg/下创建文件就可以在node1的/dev/sdb1中找到了

11) 出现脑裂问题解决

脑裂问题症状:新的从节点启动不了一直处于To abort waiting enter 'yes' [ -- ]:[  13]:[  15]:
[  16]:[  18]:[  19]:[  20]:[  22] 等待状态

新的主上执行:
drbdadm disconnect r0
drbdadm  primary r0

新的从上执行
drbdadm disconnect r0 
drbdadm secondary r0
drbdadm -- --discard-my-data r0
drbdadm connect r0 

新的主上执行
drbdadm   connect r0

12) drbd 需要注意的问题
   1:尽量不要设置开机启动,因为drbd会因为启动的顺序问题导致启动报错
   2:每次服务重启后要检查一下主从,有可能要手动重新设置