DRBD

节点1Server1.example.com  172.25.23.1

节点2Server2.example.com  172.25.23.2

VIP172.25.23.100

Selinuxiptables处于disabled状态  redhat 6.5版本

 

一.安装drbd

将源码做成rpm包 并安装

下载的安装包为drbd-8.4.2.tar.gz

[root@server1 ~]# yum install rpm-build -y  #rpm包的工具

[root@server1 ~]# tar zxf drbd-8.4.2.tar.gz

[root@server1 ~]# cd drbd-8.4.2

[root@server1 drbd-8.4.2]# ./configure --enable-spec --with-km(内核编译)

[root@server1 drbd-8.4.2]# yum install -y gcc flex#解决依赖性

[root@server1 drbd-8.4.2]# ./configure --enable-spec --with-km

DRBD _其他 

#编译成功后生成三个文件  drbd.spec drbd-km.spec drbd-kernel.spec

[root@server1 drbd-8.4.2]# rpmbuild -bb drbd.spec 

#编译生成drbd rpm

DRBD _其他_02 

cp ~/drbd-8.4.2.tar.gz  /root/rpmbuild/SOURCES/

#在家目录生成 rpmbuild 编译所需路径 即将源代码拷到 rpmbuild的路径下

[root@server1 drbd-8.4.2]# rpmbuild -bb drbd.spec

[root@server1 drbd-8.4.2]# rpmbuild -bb drbd-km.spec 

#编译生成drbd的内核模块

DRBD _drbd_03

[root@server1 drbd-8.4.2]# yum install kernel-devel -y

#安装kernel-devel,再重新编译

[root@server1 drbd-8.4.2]# rpmbuild -bb drbd-km.spec

[root@server1 drbd-8.4.2]# cd /root/rpmbuild/RPMS/x86_64/ 

#生成的安装包在这里/root/rpmbuild/RPMS/x86_64/

DRBD _其他_04 

[root@server1 x86_64]# rpm -ivh *

[root@server1 x86_64]# scp * 172.25.23.2:

#将生成的安装包复制到server2,并安装

 

二.配置drbd

1.serveer1 server2 上各新加一个磁盘4G的即可

2.编辑配置文件

[root@server1 x86_64]# cd /etc/drbd.d/

[root@server1 drbd.d]# cat /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";       #配置文件都是以res结尾

[root@server1 drbd.d]# vim example.res

DRBD _其他_05 

# device /dev/drbd1    设备/dev/drbd1,名称必须是drbd*

# disk /dev/vda        为新增的磁盘名称

[root@server1 drbd.d]# scp example.res root@172.25.23.2:/etc/drbd.d/

3. 创建

[root@server1 drbd.d]# drbdadm create-md example 

# example是配置文件中的资源名

......

DRBD _drbd_06 

[root@server2 drbd.d]# drbdadm create-md example

4.启动,设置主从

[root@server1 x86_64]# /etc/init.d/drbd start  

# server2也同时启动,不然server1会一直等待,直到另外一个主机开启服务为止

DRBD _drbd_07# 刚启动的设备都是secondary且没有建立连接inconsistent

[root@server1 x86_64]# drbdadm primary example --force

DRBD _drbd_08 

# 强制将该设备设为primary,两边会开始同步

[root@server1 x86_64]# watch cat /proc/drbd  

# 可查看两边同步的进度

5.挂载测试

DRBD _其他_09 

# 只能格式化/dev/drbd1 并只用在主设备格式化

[root@server1 ~]# mkfs.ext4 /dev/drbd1

[root@server1 ~]# mount /dev/drbd1 /mnt

[root@server1 ~]# cd /mnt

[root@server1 mnt]# cp /etc/passwd /mnt

[root@server1 mnt]# cd

[root@server1 ~]# umount /mnt

[root@server2 ~]# mount /dev/drbd1 /mnt

DRBD _其他_10 

# 两台设备不能同时挂载,并且只能在primary上挂载

[root@server1 ~]# drbdadm secondary example  

# server1设为secondary

[root@server2 ~]# drbdadm primary example  

# server2设为primary ,再次挂载,成功

[root@server2 ~]# mount /dev/drbd1 /mnt

[root@server2 ~]# cd /mnt  

DRBD _其他_11 

# 可以看到在server1挂载时添加的数据,若再将server2 设为secondary , server1设为primary , 再挂载,会看到在server2中修改的数据。确定数据可以同步。

6.常见的任务管理语句

DRBD _drbd_12 

drbd-overview  #查看状态

drbdadm down example

drbdadm up example

drbdadm disconnect example

drbdadm connect example

drbdadm connect --discard-my-data example #放弃数据,连接

DRBD _drbd_13 

DRBD _drbd_14 

 

DRBD _其他_15 

DRBD _drbd_16 

 

DRBD _其他_17 

 

三.drbd挂载到httpd默认发布目录上(drbd+heartbeat

1.编写配置文件

[root@server1 ~]# /etc/init.d/heartbeat stop

[root@server1 ~]# cd /etc/ha.d

[root@server1 ha.d]# vim haresources

DRBD _drbd_18 

server1.example.com    #主节点,两边都是主节点的主机名

IPaddr::172.25.23.100/24/eth0   #vip

drbddisk::example  #因为只有primary才能挂载,转换身份为primary

Filesystem::/dev/drbd1::/var/www/html   #挂载点

httpd   #服务

[root@server1 ha.d]# scp haresources  172.25.23.2:/etc/ha.d

[root@server1 ~]# etc/init.d/heartbeat start

[root@server1 ~]# echo www.example.com > /var/www/html/index.html

2.测试

[root@server1 ~]# curl localhost

DRBD _其他_19 

DRBD _drbd_20 

DRBD _其他_21 

#会自动挂载

[root@server1 ~]# /etc/init.d/heartbeat stop

[root@server1 ~]# df

#发现已经卸载,并在server2上发现挂载

[root@server1 ~]# /etc/init.d/heartbeat start

[root@server1 ~]# df

#重新挂载到server1