heartbeat+drbd+nfs

简介:

Heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd+nfsLinux下创建一个高可用(HA)的集群服务器。


DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数


拓扑图:

194549516.png


一. 安装前准备


实现高可用性群集,两个节点配置文件需要保持一致


1.修改hosts文件


[root@node1 ~]# vim /etc/hosts


添加 192.168.2.10 node1.a.com node1


192.168.2.20 node2.a.com node2


2.修改network文件


[root@node1 ~]# hostname node1.a.com


[root@node1 ~]# vim /etc/sysconfig/network


更改 HOSTNAME=node1.a.com


3.配置yum


[root@node1 ~]# hwclock -s //同步时间


[root@node1 ~]# mkdir /mnt/cdrom


[root@node1 ~]# mount /dev/cdrom /mnt/cdrom


[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo


[rhel-server]


name=Red Hat Enterprise Linux server


baseurl=file:///mnt/cdrom/Server


enabled=1


gpgcheck=0


gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release


[rhel-cluster]


name=Red Hat Enterprise Linux cluster


baseurl=file:///mnt/cdrom/Cluster


enabled=1


gpgcheck=0


gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release


node1node2 的配置同样。


[root@node1 ~]# scp /etc/yum.repos.d/rhel-debuginfo.repo node2.a.com:/etc/yum.repos.d/



.安装drbd主文件


软件:


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


drbd83-8.3.8-1.el5.centos.i386.rp


1.安装DRBD软件


[root@drbd1 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm //主文件安装


[root@drbd1 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //内核文件安装


2.加载内核


[root@drbd1 ~]# modprobe drbd


3.配置主文件


root@drbd1 ~]# vim /etc/drbd.conf 在末行模式下输入如下命令


:r /usr/share/doc/drbd83-8.3.8/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";


# please have a a look at the example configuration file in


# /usr/share/doc/drbd83/drbd.conf


#


4.创建一个共享空间


[root@node1 ha.d]# fdisk /dev/sda


n------->p-------->4--->+1G------>w


[root@node1 ha.d]# partprobe /dev/sda


5.配置全局文件


[root@drbd1 ~]# cd /etc/drbd.d


[root@drbd1 drbd.d]# cp global_common.conf global_common.conf.bak //备份文件


[root@drbd1 drbd.d]# vim global_common.conf 修改如下


global {


usage-count no; //取消DRBD使用者统计


# minor-count dialog-refresh disable-ip-verification


}


common {


protocol C; //使用协议C


startup {


wfc-timeout 120; //启动延迟


degr-wfc-timeout 120;


}


disk { //fence防脑裂


on-io-error detach;


fencing resource-only;


}


net {


cram-hmac-alg "sha1"; //主备节点使用的通信算法


shared-secret "mydrbdlab";


}


syncer {


rate 100M; //主备节点同步速率


}


}



6.定义资源


[root@drbd1 ~]# vim web.res


resource web { (资源名称)


on node1.a.com { (节点名)


device /dev/drbd0; (虚拟设备名称)


disk /dev/sda4; (真实设备名)


address 192.168.2.10:7789; (监听自身的IP的地址端口)


meta-disk internal;


}



on node2.a.com {


device /dev/drbd0;


disk /dev/sda4;


address 192.168.2.20:7789;


meta-disk internal;


}


}



7.node2也需要进行同样的配置,配置与node1配置是一样的


node1 与node2上初始化资源web


[root@drbd1 ~]# drbdadm create-md web


Writing meta data...


initializing activity log


NOT initialized bitmap


New drbd meta data block successfully created.


[root@drbd2 ~]# drbdadm create-md web


Writing meta data...


initializing activity log


NOT initialized bitmap


New drbd meta data block successfully created.


8.启动drbd服务


注意两个节点要一起启动,否则在启动时会处于一直等待状态


[root@drbd1 ~]# service drbd start


[root@drbd2 ~]# service drbd start


9.查看节点状态


在节点一上查看


[root@drbd1 ~]# drbd-overview


0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----


在节点二上查看


[root@drbd2 ~]# drbd-overview


0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----


web:资源名


Secondary/Secondary:自身状态/另外节点状态


由上面的两个节点的状态可看到,两个节点都是备用节点,我们需要手动调整


10.drbd1.a.com调整为主节点


[root@drbd1 ~]# drbdadm -- --overwrite-data-of-peer primary web


11.再次查看状态


节点一


[root@drbd1 ~]# drbd-overview


0:web Connected Primary/Secondary UpToDate/UpToDate C r----


节点二


[root@drbd2 ~]# drbd-overview


0:web Connected Secondary/Primary UpToDate/UpToDate C r----


可以看出drbd1.a.com已经成为主节点了


12.在主节点上创建文件系统


[root@drbd1 ~]# mkfs.ext3 -L drbdweb /dev/drbd0 L:卷名


13.测试


1> 在主节点上创建挂载点,挂载后,写入一个文件


[root@drbd1 ~]# mkdir /mnt/drbd


[root@drbd1 ~]# mount /dev/drbd0 /mnt/drbd


[root@drbd1 ~]# cd /mnt/drbd


[root@drbd1 drbd]# touch index.html


[root@drbd1 drbd]# ll


total 16


-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html


drwx------ 2 root root 16384 Jan 20 18:07 lost+found


[root@drbd1 drbd]#


2> drbd1.a.com配置成从节点,将drbd2.a.com配置成主节点


节点一


[root@drbd1 drbd]# cd


[root@drbd1 ~]#


[root@drbd1 ~]# umount /mnt/drbd


[root@drbd1 ~]# drbdadm secondary web


[root@drbd1 ~]# drbdadm role web


Secondary/Primary 


[root@drbd1 ~]#


节点二


[root@drbd2 ~]# drbdadm primary web


[root@drbd2 ~]# drbd-overview


0:web Connected Primary/Secondary UpToDate/UpToDate C r----


3> 在节点二挂载,查看是否有内容


[root@drbd2 ~]# mkdir /mnt/drbd


[root@drbd2 ~]# mount /dev/drbd0 /mnt/drbd


[root@drbd2 ~]# ll /mnt/drbd/


total 16


-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html //可以看到已经写入成功


drwx------ 2 root root 16384 Jan 20 18:07 lost+found








.安装heartbeat文件



软件环境


heartbeat-2.1.4-9.el5.i386.rpm


heartbeat-devel-2.1.4-9.el5.i386.rpm


heartbeat-gui-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


1.安装heartbeat主文件


[root@node1 ~]# cd heartbeat/


[root@node1 heartbeat]# yum localinstall * --nogpgcheck


[root@node1 ~]# cd /usr/share/doc/heartbeat-2.1.4/


[root@node1 heartbeat-2.1.4]# cp authkeys haresources ha.cf /etc/ha.d/


[root@node1 heartbeat-2.1.4]# vim ha.cf


日志


#logfile /var/log/ha-log


#logfacility local0


心跳监测时间


#keepalive 2


死亡时间


#deadtime 5


服务器正常后由主服务器接管资源,另一台服务器放弃该资源


auto_failback off



94 bcast eth1 //产生广播监听eth1


213 node node1.a.com //定义节点


214 node node2.a.com


2.验证使用md5 认证密文


[root@node1 ~]# echo "123" | openssl md5


ba1f2511fc30423bdbb183fe33f3dd0f


[root@node1 heartbeat-2.1.4]# vim authkeys


auth 3


3 md5 ba1f2511fc30423bdbb183fe33f3dd0f


[root@node1 ha.d]# chmod 600 authkeys //修改权限


修改资源文件/etc/ha.d/haresources,定义HA群集的资源


[root@node1 ha.d]# vim haresources


45 node1.a.com IPaddr::192.168.2.100/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/mnt/drbd::ext3 killnfsd


注:该文件内IPaddr,Filesystem等脚本存放路径在/etc/ha.d/resource.d/,也可在该目录下存放服务启动脚本(例如:mysql,www,将相同脚本名称添加到/etc/ha.d/haresources内容中,从而跟随heartbeat启动而启动该脚本。




IPaddr::192.168.2.100/24/eth0:用IPaddr脚本配置浮动VIP


drbddisk::r0:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载


Filesystem::/dev/drbd0::/mnt/drbd::ext3:用Filesystem脚本实现磁盘挂载和卸载





3.手工创建文件killnfsd


编辑脚本文件killnfsd,用来重启NFS服务:


注:因为NFS服务切换后,必须重新mount NFS共享出来的目录,否则会报错(待验证)


[root@node2 ha.d]# vim resource.d/killnfsd


添加:killall -9 nfsd;


/ etc/init.d/nfs restart;


exit 0


[root@drbd1 ha.d]# chmod 755 resource.d/killnfsd


.配置NFS服务共享


1.编写共享



[root@node1 ~]# vim /etc/exports


/mnt/drbd 192.168.2.0/24(rw,sync)


2. 导出共享清单


[root@drbd1 ha.d]# exportfs -rv


exporting 192.168.2.10/24:/mnt/drbd


3. 修改nfs启动脚本


[root@drbd1 ha.d]# vim /etc/init.d/nfs //修改如下


122 killproc nfsd -9


Node2节点于node1配置基本一样需要做同node1一样的操作


4.启动node1.a.com节点的heartbeat的服务:


# service heartbeat start


启动node2.a.com节点的heartbeat的服务:


# service heartbeat start


5.查看heartbeat两节点的状态:


[root@node1 ~]# drbd-overview


193858443.png

193930514.png



193954989.png


.测试:


1. 开启一个客户端:


配置一个临时地址: # ifconfig eth0 192.168.2.16


创建一个挂载点:


# mkdir /mnt/nfs # mount 192.168.2.100:/mnt/drbd /mnt/nfs


查看状态


mount


heartbeat正常运行时: 查看NFS网络文件系统:


[root@clent ~]# cd /mnt/nfs


[root@clent nfs]# ll


总计 16


-rw-r--r-- 1 root root 0 10-27 16:14 index.html


drwx------ 2 root root 16384 10-27 16:12 lost+found


3.node1.a.com中将heartbeat服务关闭:


[root@node1 ~]# service heartbeat stop


[root@node2 ~]# drbd-overview


0:web Connected Primary/Secondary UpToDate/UpToDate C r---- /mnt/drbd ext3 950M 18M 885M 2%


194030393.png


通过上述案例可以实现高可用性,以及通过heartbeart控制DRDB的自动切换,而且保证文件系统的高可用性。










本文转自 only223wym 51CTO博客,原文链接:http://blog.51cto.com/ymchaofeng/1315979,如需转载请自行联系原作者
目录
相关文章
|
存储
keepalived+DRBD+NFS高可用存储
keepalived+DRBD+NFS高可用存储
183 0
|
6月前
|
Linux
Linux安装NFS挂载NFS卸载客户端服务端都有
Linux安装NFS挂载NFS卸载客户端服务端都有
153 0
|
6月前
|
Ubuntu 网络协议 Unix
【Linux】新唐NUC977挂载NFS实现网络文件传输
【Linux】新唐NUC977挂载NFS实现网络文件传输
|
6月前
|
Linux Shell Windows
通过Linux挂载Windows端NFS服务实现板端Linux传输文件到PC
通过Linux挂载Windows端NFS服务实现板端Linux传输文件到PC
422 0