一、基础知识:
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 拓扑图:
2 案例说明:
通过heartbeat实现HA高可用性群集,通过DRBD实现存储复制来达到存储的高可用性,通过NFS实现网络文件系统共享;
3 配置步骤:
3.1 Heartbeat高可用性群集搭建:
3.1.1(1) 配置director1群集服务器:
配置director1的网卡地址:
外出接口网卡:
心跳网卡:
重启网络服务:
同步时钟:
# hwclock -s
配置director1的主机名:
# vim /etc/sysconfig/network
# hostname dir1.abc.com //配置后需要注销一次;
配置director1的本地DNS解析:
# vim /etc/hosts
将heartbeat的安装包使用ftp导入director1:
挂载光盘:
# 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
拷贝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
//定义心跳网卡;
//声明群集的节点;
配置验证钥匙(为了实现双方身份验证):
# vim authkeys
改变authkeys的权限:
# chmod 600 authkeys
3.1.1(2) 配置director2群集服务器:
配置director2的网卡地址:
外出接口网卡:
心跳网卡:
重启网络服务:
同步时钟:
# hwclock -s
配置director2的主机名:
# vim /etc/sysconfig/network
# hostname dir2.abc.com //配置后需要注销一次;
配置director2的本地DNS解析:
# vim /etc/hosts
将heartbeat的安装包使用ftp导入director1:
挂载光盘:
# 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
拷贝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
//定义心跳网卡;
//声明群集的节点;
配置验证钥匙(为了实现双方身份验证):
# vim authkeys
改变authkeys的权限:
# chmod 600 authkeys
3.2 DRBD服务搭建:
3.2.1(1) 在dir1.abc.com主机中创建一个NFS共性分区:
从sda硬盘中划分一个分区:
# fdisk /dev/sda
创建一个扩展分区:
创建一个扩展分区:
查看分区表:
保存并退出:
通过内核从新读取分区表:
# partprobe /dev/sda
3.2.1(2) 在dir2.abc.com主机中创建一个NFS共性分区:
从sda硬盘中划分一个分区:
# fdisk /dev/sda
创建一个扩展分区:
创建一个扩展分区:
查看分区表:
保存并退出:
通过内核从新读取分区表:
# partprobe /dev/sda
3.2.2(1) 在dir1.abc.com中安装DRBD相关软件包:
导入DRBD相应的安装包:
安装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相应的安装包:
安装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
读取样例文件内容:底行模式
编辑通用资源:
# vim /etc/drbd.d/global_common.conf
编辑详细资源:
# vim /etc/drbd.d/web.res
初始化drbd:
# drbdadm create-md web
3.2.3(2) 在dir2.abc.com编辑drbd文档:
编辑drbd主配置文件:
# vim /etc/drbd.conf
读取样例文件内容:底行模式
编辑通用资源:
# vim /etc/drbd.d/global_common.conf
编辑详细资源:
# vim /etc/drbd.d/web.res
初始化drbd:
# drbdadm create-md web
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
3.2.5(2) 查看dir2.abc.com的设备状态:
# drbd-overview
3.2.6 将dir1.abc.com的设备调整为主设备:
# drbdadm -- --overwrite-data-of-peer primary web
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当前状态:
3.2.9(2) 查看dir2.abc.com的drbd当前状态
3.3 NFS搭建
3.3.1(1) 配置dir1.abc.com的NFS server:
NFS服务是默认安装的,使用时直接启动即可;
# service nfs start
# service portmap start
编写共享清单:
# vim /etc/exports
导出共享清单:
# exportfs -rv
exporting 192.168.10.0/24:/public
-r 导出;
-v 详细信息;
修改nfs启动脚本:
# vim /etc/init.d/nfs
3.3.1(2) 配置dir2.abc.com的NFS server:
NFS服务是默认安装的,使用时直接启动即可;
# service nfs start
# service portmap start
编写共享清单:
# vim /etc/exports
导出共享清单:
# exportfs -rv
exporting 192.168.10.0/24:/public
-r 导出;
-v 详细信息;
修改nfs启动脚本:
# vim /etc/init.d/nfs
3.4 编辑heartbeat资源文件:
3.4.1(1) 在dir1.abc.com节点上heartbeat资源配置:
# vim /etc/ha.d/haresources
创建nfs服务的资源控制文件:
# vim /etc/ha.d/resource.d/killnfsd
改变nfs服务的资源控制文件的权限:
# chmod 755 /etc/ha.d/resource.d/killnfsd
3.4.1(2) 在dir2.abc.com节点上heartbeat资源配置:
# vim /etc/ha.d/haresources
创建nfs服务的资源控制文件:
# vim /etc/ha.d/resource.d/killnfsd
改变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两节点的状态:
4 测试:
4.1 开启一个客户端:
配置一个临时地址:
# ifconfig eth0 192.168.10.20
创建一个挂载点:
# mkdir /mnt/nfs
# mount 192.168.10.10:/public /mnt/nfs
查看挂载的状态:
4.2 当heartbeat正常运行时:
查看NFS网络文件系统:
4.3 在dir1.abc.com中将heartbeat服务关闭:
# service heartbeat stop
此时NFS网络文件系统仍然可以使用: