drbd构建分布式存储

 

前提:

1)本配置共有两个测试节点,分别node2和node3,相的IP地址分别为

10.160.100.32和10.160.100.33;

2)node2和node3两个节点上各提供了一个大小相同的分区作为drbd设备;我们这里为在两个节点上均为/dev/sda5,大小为2G;

1、准备工作

两个节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:

10.160.100.32 node2 

10.160.100.33 node3

为了使得重新启动系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:

node2:

#vim /etc/sysconfig/network

 HOSTNAME=node2

# hostname node2

node3:

#vim /etc/sysconfig/network

 HOSTNAME=node3

# hostname node3

2、安装软件包

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

目前在用的drbd版本主要有8.0、8.2和8.3三个版本,其对应的rpm包的名字分别为drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd, kmod-drbd82和kmod-drbd83。各版本的功能和配置等略有差异;我们实验所用的平台为x86且系统为rhel5.4,因此需要同时安装内核模块和管理工具。我们这里选用最新的8.3的版本(drbd83-8.3.8-1.el5.centos.i386.rpm和kmod-drbd83-8.3.8-1.el5.centos.i686.rpm),下载地址为:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/。实际使用中,您需要根据自己的系统平台等下载符合您需要的软件包版本,这里不提供各版本的下载地址。

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

[root@node2 drbd]# ls

drbd83-8.3.8-1.el5.centos.i386.rpm

kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

[root@node2 ~]# yum localinstall * --nogpgcheck -y

这个需要在两个节点上都要进行安装。

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的默认中进行继承而无须定义。

1)复制样例配置文件为即将使用的配置文件:

[root@node2 ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc

2)配置/etc/drbd.d/global-common.conf

# vim /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 100M;

 }

}

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

[root@node2 ~]# vim /etc/drbd.d/web.res

resource web {

  on node2 {

    device    /dev/drbd0;

    disk      /dev/sda5;

    address   10.160.100.32:7789;

    meta-disk internal;

  }

  on node3 {

    device    /dev/drbd0;

    disk      /dev/sda5;

    address   10.160.100.33:7789;

    meta-disk internal;

  }

}

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

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

[root@node2 ~]# drbdadm create-md web

2)启动服务,在node2和node3上分别执行:

[root@node2 ~]# /etc/init.d/drbd start

3)查看启动状态:

[root@node2 ~]# 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命令来查看:

[root@node2 ~]# drbd-overview 

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

从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中

一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:

[root@node2 ~]# drbdsetup /dev/drbd0 primary –o

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

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

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

[root@node2 ~]# drbd-overview 

 

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

[root@node2 ~]# drbd-overview 

 

5、创建文件系统

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

行格式化:

[root@node2 ~]# mke2fs -j -L DRBD /dev/drbd0

[root@node2 ~]# mkdir /mnt/drbd 

[root@node2 ~]# mount /dev/drbd0 /mnt/drbd

6、切换Primary和Secondary节点

对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此

,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的

Secondary节点设置为Primary:

node2:

[root@node2 ~]# cp -r /etc/drbd.* /mnt/drbd  

[root@node2 ~]# umount /mnt/drbd

[root@node2 ~]# drbdadm secondary web

查看状态:

[root@node2 ~]# drbd-overview 

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

node3:

[root@node3 ~]# drbdadm primary web

[root@node3 ~]# drbd-overview 

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

[root@node3 ~]# mkdir /mnt/drbd

[root@node3 ~]# mount /dev/drbd0 /mnt/drbd

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

# ls /mnt/drbd