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

wKioL1feBQfDOf7MAAAk4mSL_4s021.png 

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

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

#编译生成drbd rpm

wKiom1feBQjQVwETAAA_4-k7ed8855.png 

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的内核模块

wKioL1feBQjB2LebAAAok8ZF8e0945.png

[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_第1张图片 

[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_第2张图片 

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

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

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

3. 创建

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

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

......

DRBD_第3张图片 

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

4.启动,设置主从

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

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

DRBD_第4张图片# 刚启动的设备都是secondary且没有建立连接inconsistent

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

DRBD_第5张图片 

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

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

# 可查看两边同步的进度

5.挂载测试

wKiom1feBRDDso7aAABB_Ed0cdc462.png 

# 只能格式化/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

wKioL1feBRCRxSntAAAbyy_Pask456.png 

# 两台设备不能同时挂载,并且只能在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  

wKiom1feBRGQCMQkAAATykF1Kf0689.png 

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

6.常见的任务管理语句

wKioL1feBRGBhTqaAAAhpRGhqSA255.png 

drbd-overview  #查看状态

drbdadm down example

drbdadm up example

drbdadm disconnect example

drbdadm connect example

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

wKiom1feBRLQ1Uz2AAAqWTU6d8c947.png 

wKioL1feBRPCo5gCAABNPn18n8M310.png 

 

wKiom1feBRSSjKIoAABbD-RXw6U260.png 

DRBD_第6张图片 

 

DRBD_第7张图片 

 

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

1.编写配置文件

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

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

[root@server1 ha.d]# vim haresources

wKiom1feBRajTbomAABHkiBmJFY464.png 

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

wKioL1feBRaBuDGmAAAWB-t61rI685.png 

wKiom1feBRbhrURBAAAYSn5vKCo251.png 

 

#会自动挂载

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

[root@server1 ~]# df

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

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

[root@server1 ~]# df

#重新挂载到server1