一、环境准备:

1、两个节点:

hostname node1

hostname node2


2、各个节点hosts文件添加:

192.168.23.148 node2

192.168.23.147 node1


[root@node2 drbd.d]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node2

#

[root@node1 drbd.d]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node1

[root@node1 drbd.d]# uname -n

node1

[root@node2 drbd.d]# uname -n

node2


3、配置双机互信

ssh-keygen -t rsa -P ''

ssh-copy-id root@node2


4、配置时间同步并添加到计划任务之中

*/5 * * * * /usr/sbin/ntpdate time.windows.com


5、为各个节点预留一块裸盘

Disk /dev/sdb: 5368 MB, 5368709120 bytes


2、安装软件包


drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。


目前适用CentOS 5的drbd版本主要有8.0、8.2、8.3三个版本,其对应的rpm包的名字分别为drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd, kmod-drbd82和kmod-drbd83。而适用于CentOS 6的版本为8.4,其对应的rpm包为drbd和drbd-kmdl,但在实际选用时,要切记两点:drbd和drbd-kmdl的版本要对应;另一个是drbd-kmdl的版本要与当前系统的内容版本相对应。各版本的功能和配置等略有差异;我们实验所用的平台为x86_64且系统为CentOS 6.5,因此需要同时安装内核模块和管理工具。我们这里选用最新的8.4的版本(drbd-8.4.3-33.el6.x86_64.rpm和drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm),下载地址为ftp://rpmfind.net/linux/atrpms/,请按照需要下载。


实际使用中,您需要根据自己的系统平台等下载符合您需要的软件包版本,这里不提供各版本的下载地址。


下载完成后直接安装即可:

# rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm


3、配置drbd


drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d/目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。


在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。


common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。


resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义。


下面的操作在node1.magedu.com上完成。


1 配置/etc/drbd.d/global-common.conf

global {

        usage-count no;

        # minor-count dialog-refresh disable-ip-verification

}


common {

        protocol C;


        handlers {

                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";

                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";

                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

        }


        startup {

                #wfc-timeout 120;

                #degr-wfc-timeout 120;

        }


        disk {

                on-io-error detach;

                #fencing resource-only;

        }


        net {

                cram-hmac-alg "sha1";

                shared-secret "mydrbdlab";

        }


        syncer {

                rate 1000M;

        }

}



2、定义一个资源/etc/drbd.d/web.res,内容如下:

resource web {

  on node1.magedu.com {

    device    /dev/drbd0;

    disk      /dev/sda5;

    address   172.16.100.7:7789;

    meta-disk internal;

  }

  on node2.magedu.com {

    device    /dev/drbd0;

    disk      /dev/sda5;

    address   172.16.100.8:7789;

    meta-disk internal;

  }

}

or

resource web {

device    /dev/drbd0;

    disk      /dev/sda5;

    meta-disk internal;

  on node1.magedu.com {

    address   172.16.100.7:7789;

  }

  on node2.magedu.com {

    address   172.16.100.8:7789;

  }

}



以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。

# scp  /etc/drbd.d/*  node2:/etc/drbd.d/


3、在两个节点上初始化已定义的资源并启动服务:


1)初始化资源,在Node1和Node2上分别执行:

# drbdadm create-md web


2)启动服务,在Node1和Node2上分别执行:

/etc/init.d/drbd start


3)查看启动状态:

# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16

 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:b oos:505964


也可以使用drbd-overview命令来查看:

# drbd-overview 

  0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r---- 


从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:

# drbdadm primary --force resource


  注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:

     # drbdadm -- --overwrite-data-of-peer primary web


而后再次查看状态,可以发现数据同步过程已经开始:

# drbd-overview 

  0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 

    [============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35

    

等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:

# drbd-overview 

  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 


4、创建文件系统


文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

# mke2fs -j -L DRBD /dev/drbd0

# mkdir /mnt/drbd 

# mount /dev/drbd0 /mnt/drbd


5、切换Primary和Secondary节点


对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:


Node1:

# cp -r /etc/drbd.* /mnt/drbd  

# umount /mnt/drbd

# drbdadm secondary web


查看状态:

# drbd-overview 

  0:web  Connected Secondary/Secondary UpToDate/UpToDate C r---- 


Node2:

# drbdadm primary web

# drbd-overview 

  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

# mkdir /mnt/drbd

# mount /dev/drbd0 /mnt/drbd


使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:

# ls /mnt/drbd




补充:drbd 8.4中第一次设置某节点成为主节点的命令

# drbdadm primary --force resource


配置资源双主模型的示例:

resource mydrbd {


        net {

                protocol C;

                allow-two-primaries yes;

        }


        startup {

                become-primary-on both;

        }


        disk {

                fencing resource-and-stonith;

        }


        handlers {

                # Make sure the other node is confirmed

                # dead after this!

                outdate-peer "/sbin/kill-other-node.sh";

        }


        on node1.magedu.com {

                device  /dev/drbd0;

                disk    /dev/vg0/mydrbd;

                address 172.16.200.11:7789;

                meta-disk       internal;

        }


        on node2.magedu.com {

                device  /dev/drbd0;

                disk    /dev/vg0/mydrbd;

                address 172.16.200.12:7789;

                meta-disk       internal;

        }

}





报错及解决?

[root@node2 drbd.d]# drbdadm create-md file

Writing meta data...

md_offset 1085698048

al_offset 1085665280

bm_offset 1085628416


Found ext3 filesystem

     2104376 kB data area apparently used

     1060184 kB left usable by current configuration


Device size would be truncated, which

would corrupt data and result in

'access beyond end of device' errors.

You need to either

   * use external meta data (recommended)

   * shrink that filesystem first

   * zero out the device (destroy the filesystem)

Operation refused.


Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40

[root@node2 drbd.d]# 

执行如下命令:

[root@node2 drbd.d]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100

100+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 2.16519 s, 48.4 MB/s

You have new mail in /var/spool/mail/root

[root@node2 drbd.d]# 


[root@node2 drbd.d]# drbdadm create-md file

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

[root@node2 drbd.d]# drbdadm create-md data

You want me to create a v08 style flexible-size internal meta data block.

There appears to be a v08 flexible-size internal meta data block

already in place on /dev/sdb2 at byte offset 1085730816

Do you really want to overwrite the existing v08 meta-data?

[need to type 'yes' to confirm] yes


Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

[root@node2 drbd.d]#