还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

廉价共享存储解决方案1-drbd+ha+nfs

来源:个人博客     2016-03-30 10:01:57    人气:     我有话说( 0 人参与)

在没有共享存储的情况下解决非结构化数据高可靠性存储的问题1、问题产生背景三台TOMCAT 服务器通过负载均衡设备对外提供WEB服务。怎么保证...

在没有共享存储的情况下解决非结构化数据高可靠性存储的问题

 

1、问题产生背景

三台TOMCAT 服务器通过负载均衡设备对外提供WEB服务。怎么保证三台服务器中的数据一样呢?

 

 

1.1最开始的解决方案:

 

  在其中一台服务器上开启NFS服务,其他两台服务器挂着NFS目录。所有非结构化和可变数据放在NFS目录里面。这样一来解决了三台服务器内容一致的问题。

   但是新的问题又来了,万一提供NFS服务器挂了怎么办,系统存在单点故障。

 

如果在三台服务器中创建相同的目录。然后使用Rsync做实施同步怎样呢?

这种方式有两个最重要的缺陷。由于Rsync是对文件进行操作,层次比价高,使用Rsync对文件夹进行同步,会占用大量的磁盘I/O和网络带宽。同时如果正在拷贝的文件在大量频繁的更改,Rsync将会变得无所适从而产生冲突。

   另一种情况假如 tomact2,tomcat3同步tomcat1的目录,当tomcat1挂了之后,负载均衡会把访问分配到tomcat2和3,这个时候tomcat2和3彼此独立。客户分别对这两台机器进行读写于是数据又不同步了。

 

1.2 分布式文件系统

对网上很多分布式文件系统进行了简单的了解和阅读。

如Lustre、

HDFS

MogileFS

FastDFS

OpenAFS

MooseFS

pNFS

GoogleFS

TFS(taobao)。

仔细阅读下来,发现上述系统不是不成熟,就是太大了,以至于根本就没有合适的环境去部署。寻寻觅觅中一个叫drbd的软件进入了视线

 

下面是一些简介

Distributed Replicated Block Device(DRBD)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。DRBD工作在内核 当中的,类似于一种驱动模块。DRBD工作的位置在文件系统的buffer cache和磁盘调度器之间,通过tcp/ip发给另外一台主机到对方的tcp/ip最终发送给对方的drbd,再由对方的drbd存储在本地对应磁盘 上,类似于一个网络RAID-1功能。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。本地(主节点)与远程主机(备节点)的数据可以保 证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。DRBD的架构如下图

底层设备支持
DRBD需要构建在底层设备之上,然后构建出一个块设备出来。对于用户来说,一个DRBD设备,就像是一块物理的磁盘,可以在上面内创建文件系统。DRBD所支持的底层设备有以下这些类:
1、一个磁盘,或者是磁盘的某一个分区;
2、一个soft raid 设备;
3、一个LVM的逻辑卷;
4、一个EVMS(Enterprise Volume Management System,企业卷管理系统)的卷;
5、其他任何的块设备。

 

 

 

2、基于DRBD的解决方案

从互联网上也搜索到两个比较成功且适合上面应用场景的案例

 

DRBD+Heartbeat+NFS文件共享存储架构(主从模式)

http://blog.chinaunix.net/uid-25266990-id-3803277.html

 

DRBD使用gfs2,cman实现双主分布式文件存储方案

http://blog.sae.sina.com.cn/archives/3609

 

 

 

2.1搭建实验环境了

 

所需要的软件

REHL 6.4

drbd-8.4.6.tar.gz

drbd-utils-8.9.3.tar.gz (注意:drbd和drbd-utils的版本要对应起来)

 

 

2.2安装操作系统,配置IP地址,关闭防火墙,selinux  关闭NetworkManager,修改/etc/hosts,配置YUM (三台机器都需要操作)

 

2.2.1安装操作系统

   省略

2.2.2配置IP地址  

 省略

由于我是虚拟机环境中测试,share2和share3均是直接克隆而来

克隆之后得到的机器需要修改的地方

计算机名  vi /etc/sysconfig/network

IP地址vi /etc/sysconfig/network-scripts/ifcfg-eth0

Udev 网卡绑定文件 vi /etc/udev/rules.d/70-persistent-net.rules

删除原来的网卡绑定,并修改

如下图:

2.2.3防火墙等配置

#vi /etc/selinux/config

确认里面的SELINUX字段的值是disabled,如果不是则改为disabled。

service iptables stop

service ip6tables stop

service NetworkManager stop

 

chkconfig iptables off

chkconfig ip6tables off

chkconfig NetworkManager off

 

2.2.4 hosts 文件配置

vi  /etc/hosts

 

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.20.42 share1

172.16.20.43 share2

172.16.20.44 share3

10.10.10.42  share1-drbd

10.10.10.43  share2-drbd

10.10.10.44  share3-drbd

 

2.2.5 配置yum

vi /etc/yum.repos.d/rhel-source.repo

 

[rhel-source]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/SRPMS/

enabled=0

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 

[rhel-source-beta]

name=Red Hat Enterprise Linux $releasever Beta - $basearch - Source

baseurl=ftp://ftp.redhat.com/pub/redhat/linux/beta/$releasever/en/os/SRPMS/

enabled=0

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-releae

 

新增加如下内容:

我在内网服务器上新建了一个简单的HTTP服务器作为源地址

  

 

 

 

 

 

 

 

刷新yum缓存,<-没有缓存的情况下可能会报目录不存在的错误,无视

yum clean all

yum makecache

 

 

 

3安装drbd(share1和2上操作)

3.1 准备编译环境

yum -y install gcc make automake autoconf flex rpm-build kernel-devel 

 

3.2 上传解压源文件

利用xftp 把 drbd-8.4.6.tar.gz,drbd-utils-8.9.3.tar.gz 两个压缩包上传到

Share 的/usr/local/src/ 目录下

 

如有没有请新建,命令如下

 

mkdir –p /usr/local/src/

 

解压两个包

 

tar drbd-8.4.6.tar.gz

tar -zxf drbd-8.4.6.tar.gz

3.3 准备编译安装

开始编译安装drbd,和8.4.5之前版本有所不同,这里不用./configure,直接make就可以了

 

./configure --prefix=/usr/local/drbd --with-km --with-heartbeat --sysconfdir=/etc/

 

3.3.1先查看内核版本

 

ll -d /usr/src/kernels/2.6.32-358.el6.x86_64/

 

3.3.2  编译

cd /usr/local/src/ drbd-8.4.6

make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/

 

3.3.3安装

 

make install

 

3.3.4加载模块

 

 modprobe drbd

 

lsmod | grep drbd

 

drbd  376868  0

libcrc32c   1246  1 drbd

 

 

3.3.5编译安装drbd-utils

----------------------------

 

cd /usr/local/src/drbd-utils-8.9.3

 

这里用了--without-83support,因为安装的是8.4以上版本

 

/configure --prefix=/usr/local/drbd-utils-8.9.3 --without-83support

make

make install

 

 

安装成功后drbd相关的工具(drbdadm,drbdsetup)被安装到/usr/local/drbd-utils-8.9.3/etc/sbin目录下

 

#cp /usr/local/drbd/etc/rc.d/init.d/drbd-utils-8.9.3 /etc/rc.d/init.d/

 

#chkconfig --add drbd

 

#chkconfig  --level  2345  drbd  on

 

 

#链接drbd的命令到系统命令路径

ln -s   /usr/local/drbd-utils-8.9.3/sbin/*  /usr/bin/

 

 

3.4.设置drbd.conf配置文件

详细配置说明请参考

http://www.itnose.net/detail/6272989.html

 

 

本次编译安装配置文件位置:/usr/local/drbd-utils-8.9.3/etc/

 

#vi /usr/local/drbd-utils-8.9.3/etc/drbd.conf

 

#include "drbd.d/global_common.conf";

#include "drbd.d/*.res";

 

 

global {

 

 usage-count no;

 

}

 

common {

 

 syncer { rate 1000M; }

}

 

resource r0 {

 

protocol C;

startup {

 

 wfc-timeout 120;

 degr-wfc-timeout 120;

  }

 

disk {

 

 on-io-error detach;

  }

 

 

net{

 

 timeout 60;

 

 connect-int 10;

 

 ping-int 10;

 max-buffers 2048;

 max-epoch-size 2048;

 

  }

 

on share1{

 

device /dev/drbd0;

 

disk /dev/sdb1;

 

address 10.10.10.42:7788;

 

meta-disk internal;

 

}

 

on share2{

 

device /dev/drbd0;

 

disk /dev/sdb1;

 

address 10.10.10.43:7788;

 

meta-disk internal;

 

}

}

 

 

3.5.初始化资源

两台机器上分别初始化r0资源,创建DRBD分区 

准备初始化之前,需要分别在2个主机上的 空白分区上创建相应的元数据保存的数据块: 

常见之前现将两块空白分区彻底清除数据,分别在两个主机上执行 

 

dd  if=/dev/zero  of=/dev/sdb1  bs=1M  count=128   (两台机器上都运行)

 

drbdadm -c /etc/drbd.conf create-md all 

或 

drbdadm -c /etc/drbd.conf create-md r0

 

如有有报错请检查配置文件。

 

 

3.6启动两个节点drbd 

 

mkdir -p /usr/local/drbd/var/run/drbd 

 

#/etc/init.d/drbd start

 

 

 

3.7 查看状态: 

 

#/etc/init.d/drbd status  

 

drbd driver loaded OK; device status: 

version: 8.4.6 (api:1/proto:86-101) 

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@db01.mysql.com, 2015-06-24 13:47:15 

m:res  cs ro   ds p  mounted  fstype 

0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C 

 

 

cs:表示连接状态 

ro: 表示主从关系 上面的表示都为从 

ds:硬盘状态信息 上面表示已经实时同步中,Inconsistent:不一致 

 

# cat /proc/drbd  

version: 8.4.6 (api:1/proto:86-101) 

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@db01.mysql.com, 2015-06-24 13:47:15 

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- 

ns:40088 nr:0 dw:0 dr:40248 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 

 

 

# drbd-overview  

0:r0/0  Connected Secondary/Secondary Inconsistent/Inconsistent 

 

 

3.7.1 查看版本 

#cat /proc/drbd  

 

3.7.2 查看位置 

whereis drbd

 

 

3.8.操作 

 

 

3.8.1 设置节点为主节点 

 

第1步:设置主从第一次执行 

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

 

 

第2步:第一次执行后平常执行下面两个其中一个命令 

#drbdadm primary --force r0

 

#drbdadm primary all 

 

 

 

第3步:设置当前节点为主节点 

 

# cat /proc/drbd  

version: 8.4.6 (api:1/proto:86-101) 

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@db01.mysql.com, 2015-06-24 13:47:15 

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- 

ns:40088 nr:0 dw:0 dr:40248 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 

 

  注意主备节点第一次同步需要一定时间。

#drbdadm primary --force r0  

 

 

# cat /proc/drbd  

version: 8.4.6 (api:1/proto:86-101) 

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@db01.mysql.com, 2015-06-24 13:47:15 

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- 

ns:40088 nr:0 dw:0 dr:40248 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 

 

 

说明:ro状态变为ro:Primary/Secondary;ds状态为:UpToDate/UpToDate(inconsisten) 即"实时/实时(不一致)" 

 

 

 

3.8.2 磁盘格式化(只对primary节点格式化) 

 

#drbd-overview 

 

 0:r0/0  Connected Primary/Secondary UpToDate/UpToDate  

 

同步完毕之后,就可以对空白磁盘格式化了. 

 

 

 

#mkfs.ext4 /dev/drbd0

 

mke2fs 1.41.12 (17-May-2010) 

Filesystem label= 

OS type: Linux 

Block size=1024 (log=0) 

Fragment size=1024 (log=0) 

Stride=0 blocks, Stripe width=0 blocks 

10040 inodes, 40088 blocks 

2004 blocks (5.00%) reserved for the super user 

First data block=1 

Maximum filesystem blocks=41156608 

5 block groups 

8192 blocks per group, 8192 fragments per group 

2008 inodes per group 

Superblock backups stored on blocks:  

8193, 24577 

 

Writing inode tables: done 

Creating journal (4096 blocks): done 

Writing superblocks and filesystem accounting information: done 

 

This filesystem will be automatically checked every 33 mounts or 

180 days, whichever comes first.  Use tune2fs -c or -i to override. 

 

 

 

3.8.3挂载DRBD分区到本地(只能在primary节点上挂载) 

 

# mkdir /drbd_data 

 

# mount /dev/drbd0 /drbd_data/ 

 

# cd /drbd_data/ 

 

 

#ls  

 

 

3.8.4 常见命令 

 

查看资源角色(前面代表当前资源角色) 

 

# drbdadm role r0

Primary/Secondary 

 

 

查看资源连接状态 

#drbdadm cstate r0

Connected 

 

查看硬盘数据状态 

# drbdadm dstate r0

UpToDate/UpToDate 

 

 

注意事项

 

1.主备服务器同步的两个分区大小最好相同(网上没有关于分区大小是否一定要相同的确切说法) 

2.开始同步两个节点的磁盘,需要一定时间,在同步完成前,不要重启,否则会重新同步。 

3.挂载之前一定要先切换当前节点为主节点 

4.两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。 

5.处于从节点(secondary)状态的服务器不能加载drbd块设备 

6.将主节点切换为从节点之前要先卸载 

7.一台主机切换为主节点之前,要确保另一台主机已切换为从节点。 

 

 

3.9.测试DRBD数据镜像 

 

3.9.1格式化挂载磁盘 

 

 

#mkfs.ext4 /dev/drbd0 

 

# mkdir /drbd_data 

 

# mount /dev/drbd0 /drbd_data/ 

 

# cd /drbd_data/ 

 

3.9.2 生成测试数据 

 

#touch /drbd_data/test.txt 

 

 

#dd  if=/dev/zero  of=/drbd_data/test.tmp  bs=1M  count=20 

 

# drbdadm dstate r0

UpToDate/UpToDate 

 

 

3.9.3 将主节点drbd的状态变为从 

 

# drbdadm role r0

Primary/Secondary 

 

 

 

#umount /drbd_data 

 

#drbdadm secondary all 

 

# drbdadm role r0

 

Secondary/Secondary 

 

 

3.9.4 在从节点上进行挂载 

 

#drbdadm role r0  

Secondary/Secondary 

 

#drbdadm primary all 

 

#drbdadm role r0  

Primary/Secondary 

 

 

#mkdir /drbd_data 

 

#mount /dev/drbd0 /drbd_data/ 

 

# ls -ls /drbd_data/ 

total 20493 

   12 drwx------ 2 root root12288 Jun 24 17:02 lost+found 

20481 -rw-r--r-- 1 root root 20971520 Jun 24 17:20 test.tmp 

 

测试成功. 

 

 

3.10手动修复裂脑问题

问题描述:模拟主节点网络断开,辅节点将会转换角色到Primay。之后恢复主节点网 

          络,裂脑问题出现,原因是DRBD检测到两台服务器都为Primary。

          主节点/proc/drbd文件中显示的网络状况为:cs:WFConnection

      辅节点/proc/drbd文件中显示的网络状况为:cs:StandAlone

      或

      主节点/proc/drbd文件中显示的网络状况为:cs:StandAlone

      辅节点/proc/drbd文件中显示的网络状况为:cs:StandAlone

     解决方法:a. 登录辅节点服务器,将其角色改为Secondary

drbdadm secondary all

               b. 在辅助节点上,断开连接

                    drbdadm disconnect all

                         c. 在辅节点上,丢弃本地磁盘上的所有数据,并连接资源

drbdadm -- --discard-my-data connect all

               d. 登录主节点服务器,观察其连接状态,如果其状态仍为

    StandAlone,指行下列命令

     drbdadm connect all

   

3.11更换主节点硬盘操作

     1. 关闭主节点服务器,临时将辅节点提升为Primary

     2. 为主节点替换新硬盘,并开机

     3. 主节点正常启动后,关闭drbd进程

        /etc/init.d/drbd stop

     4. 对硬盘进行格式化,切忌不要为其创建EXT3文件系统

     5. 加载drbd模块,并附加本地磁盘到drbd驱动

        modprobe drbd

     6. 启动drbd进程

        /etc/init.d/drbd start

     7. 将辅节点角色从Primary转为Secondary

        drbdadmin secondary all

     8. 主节点角色设为Primary

         drbdadm primary all

     9. 挂载drbd驱动到挂载目录

        mount /dev/drbd1 /mnt/drbd1

 

 

4、安装配置NFS

4.1 安装NFS(share1和2都需要)

使用"yum groupinstall "NFS file server""命令来安装NFS file server。

它比使用yum install nfs-utils命令多安装了一个nfs4-acl-tools RPM包。

 

chkconfig --list

将rpcbind和nfs都设为自动启动

chkconfig rpcbind on

chkconfig nfs on

 

启动rpcbind

service rpcbind start

之后才能成功启动nfs

service nfs start

一定要先启动rpcbind,然后再启动nfs,不然NFS quotas和NFS daemon都将启动失败

 

 

4.2 配置NFS(share1和2都需要)

vi /etc/exports

/drbd_data/ 10.10.10.42(rw,sync,no_root_squash,all_squash,anonuid=0,anongid=0)

/drbd_data/ 10.10.10.43(rw,sync,no_root_squash,all_squash,anonuid=0,anongid=0)

/drbd_data/ 10.10.10.44(rw,sync,no_root_squash,all_squash,anonuid=0,anongid=0)

 

由于是到时候3台机器都有对NFS目录进行频繁的读写操作,这里的意思是

10.10.10.42-44 的机器不管什么用户登录都将获得drbd_date 目录的root权限

 

showmount -e (两边都配置完后,查看一下共享的文件是否已经可以看到

 

如果提示错误可以重启一下NFS 服务

 service nfs restart

 

vi  /etc/init.d/nfs (把这个文件的值改一下)
约148行添加  shift+n 然后输入148转到148行
killproc nfsd -9#将/etc/init.d/nfs 脚本中的stop 部分中的killproc#nfsd -2 修改为 -9
同时要启动锁机制,因为同时有两个节点要使用同一份数据,所以需要有总裁,这个尤其是在NFS给mysql 用的时候是必须要用的,对于论坛或网站,要看情况,如果存在对同一文件同时修改的时候必须要启动NFS锁机制,如果没有这种情况,那么建议不要启动,启动 了会降低NFS的性能:/sbin/rpc.lockdecho “/sbin/rpc.lockd” >>/etc/rc.local

 

5安装Heartbeat

5.1 下载安装包

由于实验机器没法上网 从网上下载Heartbeat的安装包并使用Xftp工具上传到share1和2

 

下载地址:

http://zhidao.baidu.com/link?url=_aPuZIb4MrknzzrITdXLToXoTORHa6EtT5-PxJsnZ89Heuzdf_DASelG9adyp05a7pzst_oVuJvNKVyTJrZpLq

 

 

 

解压出来的包

 

开始安装,注意一定要安顺序

1、rpm -ivh cluster-glue-debuginfo-1.0.5-6.el6.x86_64.rpm

2、rpm -ivh cluster-glue-libs-1.0.5-6.el6.x86_64.rpm cluster-glue-libs-devel-1.0.5-6.el6.x86_64.rpm cluster-glue-1.0.5-6.el6.x86_64.rpm

(3个包一定要一起安装,不然会报很多错误)

 

缺少 per-TimeDate 包使用yum 安装

yum -y install  perl-TimeDate

rpm -ivh cluster-glue-libs-1.0.5-6.el6.x86_64.rpm cluster-glue-libs-devel-1.0.5-6.el6.x86_64.rpm cluster-glue-1.0.5-6.el6.x86_64.rpm

 

3、rpm -ivh resource-agents-debuginfo-3.9.5-3.1.x86_64.rpm resource-agents-3.9.5-3.1.x86_64.rpm

     报fsck.xfs 是缺少xfsprogs包

下载地址:http://mirror.centos.org/centos/6/os/x86_64/Packages/xfsprogs-3.1.1-16.el6.x86_64.rpm

下载之后上传到 /mnt目录下

rpm -ivh xfsprogs-3.1.1-16.el6.x86_64.rpm

rpm -ivh resource-agents-debuginfo-3.9.5-3.1.x86_64.rpm resource-agents-3.9.5-3.1.x86_64.rpm

 

4、rpm -ivh  heartbeat-debuginfo-3.0.4-1.el6.x86_64.rpm

5、rpm -ivh  heartbeat-3.0.4-1.el6.x86_64.rpm  heartbeat-devel-3.0.4-1.el6.x86_64.rpm  heartbeat-libs-3.0.4-1.el6.x86_64.rpm

缺少PYXML 包

yum -y install PyXML

rpm -ivh  heartbeat-3.0.4-1.el6.x86_64.rpm  heartbeat-devel-3.0.4-1.el6.x86_64.rpm  heartbeat-libs-3.0.4-1.el6.x86_64.rpm

 

安装完后会自动建立用户hacluster和组haclient确保两个节点上hacluster用户的的UID和GID相同在两台节点上分别执行:
cat /etc/passwd | grep hacluster

 

结果相同即可

 

5.2配置heartbeat

在从节点上也作同样的操作
配置主节点的heartbeatHeartbeat的主要配置文件有ha.cf、haresources、authkeys,均在/etc/ha.d目录 下,在通过yum安装Heartbeat后,默认并没有这三个文件,可从解压的源码目录中找到,这里手动创建并编辑。

5.2.1主配置文件:ha.cf

配置heartbeat的检测机制本次实例中,内容设置如下:

 

 

debugfile /var/log/ha-debu

logfile /var/log/ha-log

logfacility local0

keepalive 2

warntime 10

deadtime 30

initdead 120

hopfudge 1

udpport 694

bcast eth1

ucast eth1 10.10.10.43   (从机配置  10.10.10.42)

auto_failback on

node share1

node share2

ping 172.16.20.254

watchdog /dev/watchdog

respawn root /usr/lib64/heartbeat/ipfail

apiauth ipfail gid=root uid=root

 

 

说明:
debugfile /var/log/ha-debug #用于记录heartbeat的调试信息
logfile /var/log/ha-log #用于记录heartbeat的日志信息
logfacility local0 #系统日志级别
keepalive 2 #设定心跳(监测)间隔时间,默认单位为秒
warntime 10 ##警告时间,通常为deadtime时间的一半
deadtime 30 # 超出30秒未收到对方节点的心跳,则认为对方已经死亡
initdead 120 #网络启动时间,至少为deadtime的两倍。
hopfudge 1 #可选项:用于环状拓扑结构,在集群中总共跳跃节点的数量
udpport 694 #使用udp端口694 进行心跳监测
bcast eth1
ucast eth1 10.10.10.43 #采用单播,进行心跳监测,IP为对方主机
IPauto_failback on #on表示当拥有该资源的属主恢复之后,资源迁移到属主上
node share1 #设置集群中的节点,节点名须与uname –n相匹配
node share2 #节点2
ping 172.16.20.254 #ping集群以外的节点,这里是网关,用于检测网络的连接性

watchdog /dev/watchdog #看门狗。如果本节点在超过1分钟后还没有发出心跳,那么本节点自动重启

respawn root /usr/lib64/heartbeat/ipfail

apiauth ipfail gid=root uid=root #设置所指定的启动进程的权限

 

注:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。

 

5.2.2配置haresourcesha.cf

资源文件haresourcesha.cf文件设置了heartbeat的检验机制,没有 执行机制。Haresources用来设置当主服务器出现问题时heartbeat的执行机制。 其内容为:当主服务器宕机后,该怎样进行切换操作。切换内容通常有IP地址的切换、服务的切换、共享存储的切换,从而使从服务器具有和主服务器同样的 IP、SERVICE、SHARESTORAGE,从而使client没有察觉。在两个HA节点上该文件必须完全一致。本次实例中,内容设置如下:

 

vi /etc/ha.d/haresources

share1 IPaddr::10.10.10.40/24/eth1 dbrd_swtich killnfsd


注释:上面那行

share1                                             定义manager为heartbeat的主机

10.10.10.40                                         定义对外服务的IP地址,这个IP自动在主从机之间切换

drbddisk::r0                                         定义使用的drbd资源

Filesystem::/dev/drbd0::/drbd_data::ext4   定义挂载文件系统

portmap nfs                    定义其他需要切换的服务(用空格隔开)

5.2.3认证文件authkeys

认证文件authkeys用于配置心跳的加密方式,该文件主要是用于集群中两个节点的认 证,采用的算法和密钥在集群中节点上必须相同,目前提供了3种算法:md5,sha1和crc。其中crc不能够提供认证,它只能够用于校验数据包是否损 坏,而sha1,md5需要一个密钥来进行认证。本次实例中,内容设置如下:
# dd if=/dev/random bs=512 count=1 |openssl md5 (随机产生一个参数用md5加密)

 

 

 

5.2.4文件系统切换脚本

 

  vi /etc/ha.d/resource.d/dbrd_swtich

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vi /etc/ha.d/resource.d/killnfsd

 

chmod a+x /etc/ha.d/resource.d/killnfsd

chmod a+x /etc/ha.d/resource.d/ dbrd_swtich

 

 

 

5.2.5修改备机相关配置:

Drbd备机和Drbd主机配置基本相同。修改备机上/etc/ha.d/ha.cf 中的ucast eth1为对方的IP

5.2.6 Heartbeat测试

1.查看两边的状态

两边同时启动heartbeat 观察日志

share1上 HA的日志:

[Nov 30 18:25:39 share1 heartbeat: [4459]: info: Pacemaker support: false

Nov 30 18:25:39 share1 heartbeat: [4459]: WARN: Logging daemon is disabled --enabling logging daemon is recommended

Nov 30 18:25:39 share1 heartbeat: [4459]: info: **************************

Nov 30 18:25:39 share1 heartbeat: [4459]: info: Configuration validated. Starting heartbeat 3.0.4

Nov 30 18:25:39 share1 heartbeat: [4460]: info: heartbeat: version 3.0.4

Nov 30 18:25:39 share1 heartbeat: [4460]: info: Heartbeat generation: 1448645678

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: UDP Broadcast heartbeat started on port 694 (694) interface eth1

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: UDP Broadcast heartbeat closed on port 694 interface eth1 - Status: 1

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: ucast: write socket priority set to IPTOS_LOWDELAY on eth1

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: ucast: bound send socket to device: eth1

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: ucast: bound receive socket to device: eth1

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: ucast: started on port 694 interface eth1 to 10.10.10.43

Nov 30 18:25:39 share1 heartbeat: [4460]: info: glib: ping heartbeat started.

Nov 30 18:25:39 share1 heartbeat: [4460]: info: G_main_add_TriggerHandler: Added signal manual handler

Nov 30 18:25:39 share1 heartbeat: [4460]: info: G_main_add_TriggerHandler: Added signal manual handler

Nov 30 18:25:39 share1 heartbeat: [4460]: info: G_main_add_SignalHandler: Added signal handler for signal 17

Nov 30 18:25:39 share1 heartbeat: [4460]: info: Local status now set to: 'up'

Nov 30 18:25:39 share1 heartbeat: [4460]: info: Link share1:eth1 up.

Nov 30 18:25:40 share1 heartbeat: [4460]: info: Link 172.16.20.254:172.16.20.254 up.

Nov 30 18:25:40 share1 heartbeat: [4460]: info: Status update for node 172.16.20.254: status ping

Nov 30 18:25:40 share1 heartbeat: [4460]: info: Link share2:eth1 up.

Nov 30 18:25:40 share1 heartbeat: [4460]: info: Status update for node share2: status active

harc(default)[4472]:    2015/11/30_18:25:40 info: Running /etc/ha.d//rc.d/status status

Nov 30 18:25:41 share1 heartbeat: [4460]: info: Comm_now_up(): updating status to active

Nov 30 18:25:41 share1 heartbeat: [4460]: info: Local status now set to: 'active'

Nov 30 18:25:41 share1 heartbeat: [4460]: info: Starting child client "/usr/lib64/heartbeat/ipfail" (0,0)

Nov 30 18:25:41 share1 heartbeat: [4490]: info: Starting "/usr/lib64/heartbeat/ipfail" as uid 0  gid 0 (pid 4490)

Nov 30 18:25:41 share1 heartbeat: [4460]: info: remote resource transition completed.

Nov 30 18:25:41 share1 heartbeat: [4460]: info: remote resource transition completed.

Nov 30 18:25:41 share1 heartbeat: [4460]: info: Local Resource acquisition completed. (none)

Nov 30 18:25:42 share1 heartbeat: [4460]: info: share2 wants to go standby [foreign]

Nov 30 18:25:43 share1 heartbeat: [4460]: info: standby: acquire [foreign] resources from share2

Nov 30 18:25:43 share1 heartbeat: [4493]: info: acquire local HA resources (standby).

ResourceManager(default)[4506]: 2015/11/30_18:25:43 info: Acquiring resource group: share1 IPaddr::10.10.10.40/24/eth1 drbd_swtich killnfsd

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.10.10.40)[4534]:    2015/11/30_18:25:44 INFO:  Resource is stopped

ResourceManager(default)[4506]: 2015/11/30_18:25:44 info: Running /etc/ha.d/resource.d/IPaddr 10.10.10.40/24/eth1 start

IPaddr(IPaddr_10.10.10.40)[4619]:       2015/11/30_18:25:44 INFO: Using calculated netmask for 10.10.10.40: 255.255.255.0

IPaddr(IPaddr_10.10.10.40)[4619]:       2015/11/30_18:25:44 INFO: eval ifconfig eth1:0 10.10.10.40 netmask 255.255.255.0 broadcast 10.10.10.255

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.10.10.40)[4593]:    2015/11/30_18:25:44 INFO:  Success   (先获得虚拟IP)

ResourceManager(default)[4506]: 2015/11/30_18:25:44 info: Running /etc/ha.d/resource.d/drbd_swtich  start       (然后启动drbd_swich脚本)

这里舍弃掉了系统自带NFS脚本。而是自己写了一个脚本代替,脚本很简单,没有 start 等参数,日志里没有运行显示的记录

Nov 30 18:25:47 share1 ipfail: [4490]: info: Ping node count is balanced.

Nov 30 18:25:49 share1 heartbeat: [4493]: info: local HA resource acquisition completed (standby).

Nov 30 18:25:49 share1 heartbeat: [4460]: info: Standby resource acquisition done [foreign].

Nov 30 18:25:49 share1 heartbeat: [4460]: info: Initial resource acquisition complete (auto_failback)

Nov 30 18:25:49 share1 heartbeat: [4460]: info: remote resource transition completed.

 

share1网络状态

[root@share1 resource.d]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:50:56:BB:A5:6C 

          inet addr:172.16.20.42  Bcast:172.16.20.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:a56c/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:167795 errors:0 dropped:0 overruns:0 frame:0

          TX packets:124079 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:24655414 (23.5 MiB)  TX bytes:17597452 (16.7 MiB)

 

eth1      Link encap:Ethernet  HWaddr 00:50:56:BB:B4:9A 

          inet addr:10.10.10.42  Bcast:10.10.10.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:b49a/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:324495 errors:0 dropped:0 overruns:0 frame:0

          TX packets:324476 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:70976149 (67.6 MiB)  TX bytes:70918820 (67.6 MiB)

 

eth1:0    Link encap:Ethernet  HWaddr 00:50:56:BB:B4:9A 

          inet addr:10.10.10.40  Bcast:10.10.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

虚拟IP在share1节点上

 

share1 drbd状态

[root@share1 ~]# service drbd status

drbd driver loaded OK; device status:

version: 8.4.6 (api:1/proto:86-101)

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@share2, 2015-11-25 19:20:50

m:res  cs         ro                 ds                 p  mounted     fstype

0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /drbd_data  ext4

[root@share1 ~]#     本节点为主节点,对端为冗余节点,数据状态为同步,已挂载

 

share1文件系统状态

[root@share1 ~]# mount

/dev/mapper/vg_share1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

/dev/drbd0 on /drbd_data type ext4 (rw)    drbd挂载在share1节点上

share2上 HA的日志:

[root@share2 ~]# tail -f /var/log/ha-log

Nov 30 18:56:27 share2 heartbeat: [21920]: info: remote resource transition completed.

Nov 30 18:56:27 share2 heartbeat: [21920]: info: No pkts missing from share1!

Nov 30 18:56:27 share2 heartbeat: [21920]: info: Other node completed standby takeover of foreign resources.

Nov 30 18:56:28 share2 ipfail: [21934]: info: No giveup timer to abort.

Nov 30 18:56:32 share2 heartbeat: [21920]: info: share1 wants to go standby [foreign]

Nov 30 18:56:33 share2 heartbeat: [21920]: info: standby: acquire [foreign] resources from share1

Nov 30 18:56:33 share2 heartbeat: [24367]: info: acquire local HA resources (standby).

Nov 30 18:56:33 share2 heartbeat: [24367]: info: local HA resource acquisition completed (standby).

Nov 30 18:56:33 share2 heartbeat: [21920]: info: Standby resource acquisition done [foreign].

Nov 30 18:56:33 share2 heartbeat: [21920]: info: remote resource transition completed.

share2网络状态

[root@share2 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:50:56:BB:F2:C7 

          inet addr:172.16.20.43  Bcast:172.16.20.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:f2c7/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:172458 errors:0 dropped:0 overruns:0 frame:0

          TX packets:127087 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:25335098 (24.1 MiB)  TX bytes:17932028 (17.1 MiB)

 

eth1      Link encap:Ethernet  HWaddr 00:50:56:BB:B6:41 

          inet addr:10.10.10.43  Bcast:10.10.10.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:b641/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:330720 errors:0 dropped:0 overruns:0 frame:0

          TX packets:332131 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:72900847 (69.5 MiB)  TX bytes:73007469 (69.6 MiB)

 

Share2 drbd状态

[root@share2 ~]# service drbd status

drbd driver loaded OK; device status:

version: 8.4.6 (api:1/proto:86-101)

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@share2, 2015-11-25 19:20:50

m:res  cs         ro                 ds                 p  mounted  fstype

0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C

本节点为冗余节点,对端为主节点,数据状态为同步,没有挂载

 

share2文件系统状态

[root@share2 ~]# mount

/dev/mapper/vg_share1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

在share3 上挂载目录

  mount 10.10.10.40:/drbd_data  /mnt/share

创建一个文件 并写入内容

  vi /mnt/share/share3.txt   注意不要直接进入/mnt/share 目录操作,我进去目录之后再进行操作,切换HA的时候还要退出来再进去。

   

Heartbeat+drbd+NFS切换测试

share1上停止HA服务

[root@share1 ~]# service heartbeat stop

share1上 HA的日志:

Nov 30 19:18:10 share1 heartbeat: [5509]: info: Heartbeat shutdown in progress. (5509)

Nov 30 19:18:10 share1 heartbeat: [6126]: info: Giving up all HA resources.

ResourceManager(default)[6139]: 2015/11/30_19:18:10 info: Releasing resource group: share1 IPaddr::10.10.10.40/24/eth1 drbd_swtich killnfsd

ResourceManager(default)[6139]: 2015/11/30_19:18:10 info: Running /etc/ha.d/resource.d/killnfsd  stop    先关闭NFS

ResourceManager(default)[6139]: 2015/11/30_19:18:11 info: Running /etc/ha.d/resource.d/drbd_swtich  stop  咋关闭drbd

ResourceManager(default)[6139]: 2015/11/30_19:18:11 info: Running /etc/ha.d/resource.d/IPaddr 10.10.10.40/24/eth1 stop 最后卸载虚IP

IPaddr(IPaddr_10.10.10.40)[6389]:       2015/11/30_19:18:11 INFO: ifconfig eth1:0 down

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.10.10.40)[6360]:    2015/11/30_19:18:11 INFO:  Success

Nov 30 19:18:11 share1 heartbeat: [6126]: info: All HA resources relinquished.

Nov 30 19:18:12 share1 heartbeat: [5509]: WARN: 1 lost packet(s) for [share2] [3113:3115]

Nov 30 19:18:12 share1 heartbeat: [5509]: info: No pkts missing from share2!

Nov 30 19:18:12 share1 heartbeat: [5509]: info: killing /usr/lib64/heartbeat/ipfail process group 5539 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBWRITE process 5518 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBREAD process 5519 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBFIFO process 5513 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBWRITE process 5514 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBREAD process 5515 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBWRITE process 5516 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: killing HBREAD process 5517 with signal 15

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5519 exited. 7 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5518 exited. 6 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5516 exited. 5 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5513 exited. 4 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5517 exited. 3 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5514 exited. 2 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: Core process 5515 exited. 1 remaining

Nov 30 19:18:14 share1 heartbeat: [5509]: info: share1 Heartbeat shutdown complete.

share1网络状态

[root@share1 resource.d]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:50:56:BB:A5:6C 

          inet addr:172.16.20.42  Bcast:172.16.20.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:a56c/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:167795 errors:0 dropped:0 overruns:0 frame:0

          TX packets:124079 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:24655414 (23.5 MiB)  TX bytes:17597452 (16.7 MiB)

 

eth1      Link encap:Ethernet  HWaddr 00:50:56:BB:B4:9A 

          inet addr:10.10.10.42  Bcast:10.10.10.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:b49a/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:324495 errors:0 dropped:0 overruns:0 frame:0

          TX packets:324476 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:70976149 (67.6 MiB)  TX bytes:70918820 (67.6 MiB)

Eth1:1 消失了

share1文件系统状态

[root@share1 ~]# mount

/dev/mapper/vg_share1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

[root@share1 ~]#   drdb的挂载也消失了

share1 drbd状态

[root@share1 ~]# service drbd status

drbd driver loaded OK; device status:

version: 8.4.6 (api:1/proto:86-101)

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@share2, 2015-11-25 19:20:50

m:res  cs         ro                 ds                 p  mounted  fstype

0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C

[root@share1 ~]#本节点为冗余节点,对端为主节点,数据状态为同步,没有挂载

 

 

 

share2上 HA的日志:

Nov 30 19:18:13 share2 heartbeat: [24517]: info: No local resources [/usr/share/heartbeat/ResourceManager listkeys share2] to acquire.

Nov 30 19:18:13 share2 heartbeat: [24516]: info: local HA resource acquisition completed (standby).

Nov 30 19:18:13 share2 heartbeat: [21920]: info: Standby resource acquisition done [foreign].     获得集群资源

harc(default)[24542]:   2015/11/30_19:18:13 info: Running /etc/ha.d//rc.d/status status    

mach_down(default)[24559]:      2015/11/30_19:18:13 info: Taking over resource group IPaddr::10.10.10.40/24/eth1   检测集群IP

ResourceManager(default)[24586]:        2015/11/30_19:18:13 info: Acquiring resource group: share1 IPaddr::10.10.10.40/24/eth1 drbd_swtich killnfsd

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.10.10.40)[24614]:   2015/11/30_19:18:13 INFO:  Resource is stopped   集群资源停止

ResourceManager(default)[24586]:        2015/11/30_19:18:13 info: Running /etc/ha.d/resource.d/IPaddr 10.10.10.40/24/eth1 start  获得集群VIP

IPaddr(IPaddr_10.10.10.40)[24699]:      2015/11/30_19:18:13 INFO: Using calculated netmask for 10.10.10.40: 255.255.255.0

IPaddr(IPaddr_10.10.10.40)[24699]:      2015/11/30_19:18:13 INFO: eval ifconfig eth1:0 10.10.10.40 netmask 255.255.255.0 broadcast 10.10.10.255

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.10.10.40)[24673]:   2015/11/30_19:18:13 INFO:  Success    获得完毕

ResourceManager(default)[24586]:        2015/11/30_19:18:13 info: Running /etc/ha.d/resource.d/drbd_swtich  start   运行drbd_switch脚本 获得drbd资源

mach_down(default)[24559]:      2015/11/30_19:18:14 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired

mach_down(default)[24559]:      2015/11/30_19:18:14 info: mach_down takeover complete for node share1.

Nov 30 19:18:14 share2 heartbeat: [21920]: info: mach_down takeover complete.

Nov 30 19:18:44 share2 heartbeat: [21920]: WARN: node share1: is dead

Nov 30 19:18:44 share2 heartbeat: [21920]: info: Dead node share1 gave up resources.

Nov 30 19:18:44 share2 ipfail: [21934]: info: Status update: Node share1 now has status dead

Nov 30 19:18:45 share2 heartbeat: [21920]: info: Link share1:eth1 dead.

Nov 30 19:18:46 share2 ipfail: [21934]: info: NS: We are still alive!

Nov 30 19:18:46 share2 ipfail: [21934]: info: Link Status update: Link share1/eth1 now has status dead

Nov 30 19:18:47 share2 ipfail: [21934]: info: Asking other side for ping node count.

Nov 30 19:18:47 share2 ipfail: [21934]: info: Checking remote count of ping nodes.

share2网络状态

[root@share2 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:50:56:BB:F2:C7 

          inet addr:172.16.20.43  Bcast:172.16.20.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:f2c7/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:173430 errors:0 dropped:0 overruns:0 frame:0

          TX packets:127840 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:25471729 (24.2 MiB)  TX bytes:18037435 (17.2 MiB)

 

eth1      Link encap:Ethernet  HWaddr 00:50:56:BB:B6:41 

          inet addr:10.10.10.43  Bcast:10.10.10.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:febb:b641/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:332663 errors:0 dropped:0 overruns:0 frame:0

          TX packets:334334 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:73907295 (70.4 MiB)  TX bytes:73422553 (70.0 MiB)

 

eth1:0    Link encap:Ethernet  HWaddr 00:50:56:BB:B6:41 

          inet addr:10.10.10.40  Bcast:10.10.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

集群IP 转移到share2节点成功

share2 drbd状态

[root@share2 ~]# service drbd status

drbd driver loaded OK; device status:

version: 8.4.6 (api:1/proto:86-101)

GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@share2, 2015-11-25 19:20:50

m:res  cs         ro                 ds                 p  mounted     fstype

0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /drbd_data  ext4

Drbd磁盘主切换成功并挂载

 

share2文件系统状态

[root@share2 ~]# mount

/dev/mapper/vg_share1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

/dev/drbd0 on /drbd_data type ext4 (rw)   挂载drbd磁盘成功

NFS 状态

[root@share2 ~]# showmount -e

Export list for share2:

/drbd_data 10.10.10.44,10.10.10.43,10.10.10.42

NFS 目录共享成功

 

从HA的切换日志来看整个切换过程33秒,实际体验客户端的延时大概为1分钟。

 

服务启动的顺序,drbd让系统自动加载,heartbeat 放在/etc/rc.local里面,不然会出错,因为heartbeat会在drbd前面启动,你可以调整他们两的启动顺序。

6写在最后

这次实验居然用了差不多6天时间,网上找的文章大部分都不是很详细

 

比如关于brdb的安装。 版本分为8.4.5之前和之后安装区别太大了,我一开始找到的都是8.4.5之前的怎么安装怎么不对

 

HEARTBEAT的安装更是一个大坑接着一个大坑

比如几个包一定要同时安装,貌似就没有提醒。根据网上找到的教程,安装了N多额外的包,最后的确把HEARTBEAT安装起来了,我光是找各种安装包就花了一天时间,

后来发现同时安装只需要安装很少几个依赖包就可以了。

注意 严重大坑 红色部分

 

Share1 IPaddr::10.10.10.40/24/eth1 drbddisk::r0 Filesystem::/dev/drbd0::/drbd_data::ext4 killnfsd

此处又是一个大坑,如果不明白Heartbeat目录结构的朋友估计要在这里被卡到死,因为默认yum安装Heartbeat,不会在/etc/ha.d/resource.d/创建drbddisk脚本,而且也无法在安装后从本地其他路径找到该文件。

本人卡在此处3天时间。一直不能切换。后来百度google一起上阵得到下列代码。(该段代码没有测试。用了一段简易的脚本代替)

# vi /etc/ha.d/resource.d/drbddisk



FIO 测试

 

随机读

顺序读

随机写

顺序写

混合随机读写

Drbd 主备模式(已挂载)

iops=42637

iops=53681

iops=231

iops=12889

iops=331

Drbd 主备模式(未挂载)

iops=1247

iops=18981

iops=108

iops=5277

iops=55

本地磁盘

iops=6945

iops=37850

iops=1018

iops=14943

 iops=381

共享存储 解决方案

本文源自互联网,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,
版权归原作者,如有问题请联系service@tsingfun.com (编辑:admin)
分享到: