一、基础知识:

1 简介:

    Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。

2 原理:

DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。

3 DRBD的工具:

3.1 drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令;

3.2 drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用;

3.3 drbdmeta:管理META数据结构,平时很少直接用;

4 DRBD的模式:

4.1 单主模式:典型的高可靠性集群方案。

4.2 复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。

5 复制模式:3种模式:

5.1 协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。

5.2 协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。

5.3 协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。

一般用协议C。选择协议将影响流量,从而影响网络时延。

二、案例:

1 拓扑图:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS

2 案例说明:

    通过heartbeat实现HA高可用性群集,通过DRBD实现存储复制来达到存储的高可用性,通过NFS实现网络文件系统共享;

3 配置步骤:

3.1 Heartbeat高可用性群集搭建:

3.1.1(1) 配置director1群集服务器:

配置director1的网卡地址:

外出接口网卡:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_02

心跳网卡:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_03

重启网络服务:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_04

同步时钟:

# hwclock -s

配置director1的主机名:

# vim /etc/sysconfig/network

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_05

# hostname dir1.abc.com //配置后需要注销一次;

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_06

配置director1的本地DNS解析:

# vim /etc/hosts

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_07

将heartbeat的安装包使用ftp导入director1:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_08

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_09

挂载光盘:

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

使用yum安装heartbeat相应的软件包:

# yum localinstall -y heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_10

拷贝heartheat的配置文件到相应的位置:

# cd /usr/share/doc/heartbeat-2.1.4/

# cp ha.cf /etc/ha.d/

# cp haresources /etc/ha.d/

# cp authkeys /etc/ha.d/

编辑心跳探测配置文件ha.cf:

# cd /etc/ha.d/

# vim ha.cf

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_11

//定义心跳网卡;

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_12

//声明群集的节点;

配置验证钥匙(为了实现双方身份验证):

# vim authkeys

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_13

改变authkeys的权限:

# chmod 600 authkeys

3.1.1(2) 配置director2群集服务器:

配置director2的网卡地址:

外出接口网卡:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_14

心跳网卡:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_15

重启网络服务:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_16

同步时钟:

# hwclock -s
配置director2的主机名:

# vim /etc/sysconfig/network

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_17

# hostname dir2.abc.com //配置后需要注销一次;

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_18

配置director2的本地DNS解析:

# vim /etc/hosts

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_19

将heartbeat的安装包使用ftp导入director1:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_20

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_21

挂载光盘:

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

使用yum安装heartbeat相应的软件包:

# yum localinstall -y heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_22

拷贝heartheat的配置文件到相应的位置:

# cd /usr/share/doc/heartbeat-2.1.4/

# cp ha.cf /etc/ha.d/

# cp haresources /etc/ha.d/

# cp authkeys /etc/ha.d/

编辑心跳探测配置文件ha.cf:

# cd /etc/ha.d/

# vim ha.cf

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_23

//定义心跳网卡;

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_24

//声明群集的节点;

配置验证钥匙(为了实现双方身份验证):

# vim authkeys

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_25

改变authkeys的权限:

# chmod 600 authkeys

3.2 DRBD服务搭建:

3.2.1(1) 在dir1.abc.com主机中创建一个NFS共性分区:

从sda硬盘中划分一个分区:

# fdisk /dev/sda

创建一个扩展分区:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_26

创建一个扩展分区:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_27

查看分区表:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_28

保存并退出:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_29

通过内核从新读取分区表:

# partprobe /dev/sda

3.2.1(2) 在dir2.abc.com主机中创建一个NFS共性分区:

从sda硬盘中划分一个分区:

# fdisk /dev/sda

创建一个扩展分区:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_30

创建一个扩展分区:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_31

查看分区表:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_32

保存并退出:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_33

通过内核从新读取分区表:

# partprobe /dev/sda

3.2.2(1) 在dir1.abc.com中安装DRBD相关软件包:
导入DRBD相应的安装包:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_34

安装drbd服务:

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

安装drbd的内核模块:

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

3.2.2(2) 在dir2.abc.com中安装DRBD相关软件包:

导入DRBD相应的安装包:

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_35

安装drbd服务:

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

安装drbd的内核模块:

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

3.2.3(1) 在dir1.abc.com编辑drbd文档:

编辑drbd主配置文件:

# vim /etc/drbd.conf

读取样例文件内容:底行模式

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_36

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_37

编辑通用资源:

# vim /etc/drbd.d/global_common.conf

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_38

编辑详细资源:

# vim /etc/drbd.d/web.res

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_39

初始化drbd:

# drbdadm create-md web

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_40

3.2.3(2) 在dir2.abc.com编辑drbd文档:

编辑drbd主配置文件:

# vim /etc/drbd.conf

读取样例文件内容:底行模式

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_41

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_42

编辑通用资源:

# vim /etc/drbd.d/global_common.conf

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_43

编辑详细资源:

# vim /etc/drbd.d/web.res

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_44

初始化drbd:

# drbdadm create-md web

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_45

3.2.4(1) 启动dir1.abc.com的DRBD服务:

# service drbd start

3.2.4(1) 启动dir2.abc.com的DRBD服务:

# service drbd start

3.2.5(1) 查看dir1.abc.com的设备状态:

# drbd-overview

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_46

3.2.5(2) 查看dir2.abc.com的设备状态:

# drbd-overview

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_47

3.2.6 将dir1.abc.com的设备调整为主设备:

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

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_48

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_49

3.2.7 格式化/dev/drbd0:

# mkfs -t ext3 -L drbdweb /dev/drbd0

3.2.8(1) 在dir1.abc.com上对/dev/drbd0进行挂载:

创建挂载点:

# mkdir /public

挂载:

# mount /dev/drbd0 /public/

3.2.8(2) 在dir1.abc.com上对/dev/drbd0进行挂载:

创建挂载点:

# mkdir /public

3.2.9(1) 查看dir1.abc.com的drbd当前状态:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_50

3.2.9(2) 查看dir2.abc.com的drbd当前状态

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_51

3.3 NFS搭建

3.3.1(1) 配置dir1.abc.com的NFS server:

NFS服务是默认安装的,使用时直接启动即可;

# service nfs start

# service portmap start

编写共享清单:

# vim /etc/exports

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_52

导出共享清单:

# exportfs -rv

exporting 192.168.10.0/24:/public

-r 导出;

-v 详细信息;

修改nfs启动脚本:

# vim /etc/init.d/nfs

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_53

3.3.1(2) 配置dir2.abc.com的NFS server:

NFS服务是默认安装的,使用时直接启动即可;

# service nfs start

# service portmap start

编写共享清单:

# vim /etc/exports

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_54

导出共享清单:

# exportfs -rv

exporting 192.168.10.0/24:/public

-r 导出;

-v 详细信息;

修改nfs启动脚本:

# vim /etc/init.d/nfs

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_55

3.4 编辑heartbeat资源文件:

3.4.1(1) 在dir1.abc.com节点上heartbeat资源配置:

# vim /etc/ha.d/haresources

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_56

创建nfs服务的资源控制文件:

# vim /etc/ha.d/resource.d/killnfsd

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_57

改变nfs服务的资源控制文件的权限:

# chmod 755 /etc/ha.d/resource.d/killnfsd

3.4.1(2) 在dir2.abc.com节点上heartbeat资源配置:

# vim /etc/ha.d/haresources

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_58

创建nfs服务的资源控制文件:

# vim /etc/ha.d/resource.d/killnfsd

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_59

改变nfs服务的资源控制文件的权限:

# chmod 755 /etc/ha.d/resource.d/killnfsd

3.4.2(1) 启动dir1.abc.com节点的heartbeat的服务:

# service heartbeat start

3.4.2(2) 启动dir2.abc.com节点的heartbeat的服务:

# service heartbeat start

3.4.3 查看heartbeat两节点的状态:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_60

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_61

4 测试:

4.1 开启一个客户端:

配置一个临时地址:

# ifconfig eth0 192.168.10.20

创建一个挂载点:

# mkdir /mnt/nfs

# mount 192.168.10.10:/public /mnt/nfs

查看挂载的状态:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_62

4.2 当heartbeat正常运行时:

查看NFS网络文件系统:

HA 高可用性--(Heartbeat+DRBD+NFS)_Heartbeat_63

4.3 在dir1.abc.com中将heartbeat服务关闭:

# service heartbeat stop

HA 高可用性--(Heartbeat+DRBD+NFS)_DRBD_64

此时NFS网络文件系统仍然可以使用:

HA 高可用性--(Heartbeat+DRBD+NFS)_NFS_65