用Heartbeat实现web服务器高可用

栏目: 服务器 · 发布时间: 7年前

内容简介:用Heartbeat实现web服务器高可用

用H eartbeat 实现 web 服务器高可用

heartbeat概述:

 Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和 集群通信 高可用集群 的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能

端口号: 694

1 heartbeat 的工作原理:

heartbeat 最核心的包括两个。部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务

2 高可用集群

高可用集群 是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为心跳 的代码完成。在 Linux-HA 里这个功能由一个叫做 heartbeat 的程序完成

3 Heartbeat-3.X 版本以后被分为了 4 个模块

1 ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz # 集群实验资源代理

2 Heartbeat-3-0-7e3a82377fa8.tar.bz2 # 心跳主程序包

3 pacemaker-1.1.9-1512.el6.src.rpm # 起搏器

4 Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2 # 可重复使用的群集组件

一:实验拓扑

用Heartbeat实现web服务器高可用  

二:实验目标

1: heartbeat实现web服务器高可用

三:实验环境

Note1 WEB xuegod63.cn 192.168.1.63

Note2 WEB xuegod64.cn 192.168.1.64

NFS  xuegod62.cn 192

准备工作: 保持两台节点主机一致    

1. 修改主机名, 永久 生效

# vim /etc/sysconfig/network

HOSTNAME=xuegod63.cn

2. 解析

# vim /etc/hosts

192.168.1.63 xuegod63.cn

192.168.1.64 xuegod64.cn

3 :时间一致

[root@xuegod63 ~]# date

2016 10 30 日 星期日 15:18:47 CST

4 . 关防火墙 , 关掉 selinux

[root@xuegod63 ~]# service iptables stop

四:实验代码

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

1 配置 xuegod62 NFS 服务器,提供存储资源

1 )安装 NFS 服务

[root@xuegod62 ~]# rpm -ivh /mnt/Packages/nfs-utils-1.2.3-39.el6.x86_64.rpm

2 )编写测试网页并共享

[root@xuegod62 ~]# mkdir /wwwdir

[root@xuegod62 ~]# echo "heartbeat http ha" > /wwwdir/index.html

[root@xuegod62 ~]# vim  /etc/exports  # 编写共享文件及网段

/wwwdir 192.168.1.0/24(rw) :

3 )添加共享 目录权限:  

[root@xuegod62 ~]# chmod 777 -R /wwwdir/

4 开启 nfs 服务

[root@xuegod62 ~]# service nfs restart

[root@xuegod62 ~]# chkconfig nfs on

2 xuegod63 测试 nfs 存储挂载并安装 httpd web 服务器:  

1 )安装阿帕奇服务并测试 NFS 文件有没有共享成功

[root@xuegod63 ~]# yum install httpd -y

[root@xuegod63 ~]# showmount -e 192.168.1.62  # 查看 NFS 共享文件

Export list for 192.168.1.62:

/wwwdir 192.168.1.0/24

2 )挂载文件夹到本地网站根目录

[root@xuegod63 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/  

[root@xuegod63 ~]# df -h

[root@xuegod63 ~]# service httpd restart

3 测试:  

[root@xuegod63 ~]# yum install elinks -y

[root@xuegod63 ~]# elinks --dump 192.168.1.63

heartdeat http ha

httpd//:192.168.1.63

4 卸载资源:后期这些资源通过 heartbeat 直接加载

[root@xuegod63 ~]# umount /var/www/html/

[root@xuegod63 ~]# service httpd stop

[root@xuegod63 ~]# chkconfig httpd off # 后期依靠 hartbeat 启动

3 xuegod64 测试 nfs 存储挂载并安装 httpd web 服务器:  

1 )安装阿帕奇服务并测试 NFS 文件有没有共享成功

[root@xuegod64 ~]# yum install httpd -y

[root@xuegod64 ~]# showmount -e 192.168.1.62

Export list for 192.168.1.62:

/wwwdir 192.168.1.0/24

2 )挂载文件夹到本地网站根目录

[root@xuegod64 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/

[root@xuegod64 ~]# service httpd restart

3 测试:

[root@xuegod64 ~]# yum install elinks -y

[root@xuegod64 ~]# elinks --dump 192.168.1.64

heartdeat http ha

4 卸载资源:后期这些资源通过 heartbeat 直接加载

[root@xuegod64 ~]# umount /var/www/html/

[root@xuegod64 ~]# service httpd stop

[root@xuegod64 ~]# chkconfig httpd off

4 xuegod63 安装 heartbeat

1 配置好 yum 源:

[root@xuegod63 ~]# cat /etc/yum.repos.d/rhel-source.repo

[rhel-source]

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

baseurl= file:///mnt/

enabled=1

gpgcheck=0

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

# 增加以下红色内容

[rhel-ha]

name=Red ha

baseurl= file:///mnt/HighAvailability

enabled=1

gpgcheck=0

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

[root@xuegod63 ~]# yum clean all

[root@xuegod63 ~]# yum list

#说明,如果 配置这个 baseurl=file:///mnt/HighAvailabilit ,则无法使用yum安装cluster-glue和resource-agents  

centos 6.2 5的源里 cluster-glue、resource-agents、pacemaker 都有,就是没有heartbeat。 幸好heartbeat的source里提供了.spec 可以用rpmbuild来生成rpm包。

2 安装 heartbeat

[root@xuegod63 ~ ]# tar -jxvf /root/Heartbeat-3-0-958e11be8686.tar.bz2

[root@xuegod63 ~]# cd Heartbeat-3-0-958e11be8686

[root@xuegod63 Heartbeat-3-0-958e11be8686]# rpmbuild -ba heartbeat-fedora.spec

error: File /root/rpmbuild/SOURCES/heartbeat.tar.bz2: #错误提示。 有那个文件或目录 但是会创建好目录

[root@xuegod63 ~ ]# tar -jxvf /root/Heartbeat-3-0-958e11be8686.tar.bz2 -C /root/rpmbuild/SOURCES/

[root@xuegod63 ~ ]# cd /root/rpmbuild/SOURCES/

[root@xuegod63 SOURCES]# mv Heartbeat-3-0-958e11be8686 heartbeat  #修改名称

[root@xuegod63 SOURCES]# tar -jcvf heartbeat.tar.bz2    heartbeat #   打包,生成的 heartbeat.tar.bz2软件包,如果直接使用源码包,生成rpm包时,会报错。

1 开始生成 RPM

参数: rpmbuild参数 (-bb 只编译二进制rpm包 -bs 只编译源码srpm包 -ba 同时编译二进制和源码srpm包)

[root@xuegod64 ~]# yum install ncurses-devel openssl-devel gettext bison flex mailx cluster-glue-libs-devel docbook-dtds docbook-style-xsl libtool-ltdl-devel -y

[root@xuegod63 SOURCES]# cd heartbeat

[root@xuegod63 heartbeat]# rpmbuild -ba heartbeat-fedora.spec  

3):安装软件包

[root@xuegod63 ~]# cd /root/rpmbuild/RPMS/x86_64/

[root@xuegod63 x86_64]# yum install -y cluster-glue resource-agents

[root@xuegod63 x86_64]# rpm -ivh heartbeat-libs-3.0.6-1.el6.x86_64.rpm

[root@xuegod63 x86_64]# rpm -ivh heartbeat-3.0.6-1.el6.x86_64.rpm

5 xuegod6 4 上安装: heartbeat  

1) 把软件包和 yum配置文件拷贝到xuegod64上:

[root@xuegod63 ~]#cd /root/rpmbuild/RPMS/x86_64/

[root@xuegod63 x86_64]#  scp -r ./* 192.168.1.64:/root/

[root@xuegod63 x86_64]# scp /etc/yum.repos.d/rhel-source.repo 192.168.1.64:/etc/yum.repos.d/

[root@xuegod6 4  ~]#cd /root/rpmbuild/RPMS/x86_64/  

[root@xuegod6 4  x86_64]# yum install ncurses-devel openssl-devel gettext bison flex mailx cluster-glue-libs-devel docbook-dtds docbook-style-xsl -y

[root@xuegod6 4  x86_64]#  rpm -ivh heartbeat-libs-3.0.5-1.el6.x86_64.rpm

[root@xuegod6 4  x86_64]#  yum install -y cluster-glue resource-agents

[root@xuegod6 4  x86_64]#  rpm -ivh heartbeat-3.0.6-1.el6.x86_64.rpm

2) 查看生成的用户和组:

[root@xuegod6 4   ~ ]# grep haclient /etc/group

haclient:x:489:

[root@xuegod6 4   ~ ]# id hacluster

uid=495(hacluster) gid=489(haclient) groups=489(haclient)  

6 配置 heartbeat xuegod63 xuegod64

xuegod63 上生成 heartbeat 配置文件 xuegod63 配置好的文件拷贝的 xuegod64

1)拷贝配置文件

[root@xuegod63 ~ ]# cp /usr/share/doc/heartbeat-3.0.6/ha.cf /etc/ha.d/ #主配置文件

[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/authkeys /etc/ha.d/ #主备节点间通信时所使用的验证文件,保证安全性

[root@xuegod63 ~]# cp /usr/share/doc/heartbeat-3.0.6/haresources /etc/ha.d/ #浮 资源的配置文件

2) 设置主备节点间通信时所使用的验证文件,保证安全性。主备节点配置要求一致。

[root@xuegod63 ~]# vim /etc/ha.d/authkeys

改: 用Heartbeat实现web服务器高可用

为:

auth 3

#1 crc

#2 sha1 HI!

3 md5 mkkey

[root@xuegod63 ~]# chmod 600 /etc/ha.d/authkeys #此文件权限必须是600,否则启 动不 成功

:

/etc/ha.d/authkeys 文件决定了认证密钥。共有三种认证方式:crc,md5,和sha1。

三种认证方法的用途

     如果 Heartbeat 运行于安全网络 上,如本例中的交叉线,可以使用 crc ,从资源的角度来看,这是代价最低的方法。如果网络并 安全,但也希望降低 CPU 使用,则使用 md5 。最后,如果想得到最好的认证,而 考虑 CPU 使用情况,则使用 sha1 ,它在三者 中最难破解。

3)修改浮动 资源,注意添加的顺序, ::表示分隔符

[root@xuegod63 ~]#vim /etc/ha.d/haresources

改: 44 #node-name resource1 resource2 ... resourceN

为:

xuegod63.cn IPaddr::192.168.1.200/24/eth0 Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs httpd  

注:

node-name填的是主服务器的主机名。 xuegod64上 需要修改。这样资源默认会加一这个主机上。当 xuegod63坏了,xuegod64会再接管。

IPaddr::192.168.1.200/24/eth0 # VIP及绑定到哪个网卡上

Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs # 定要挂载的存储

httpd # 定要启 的服务。这个服务必须是 /etc/init.d下,可以通过service去启 动或 关闭

4)测试

1) 测试: 加载 VIP 192.168.1.200到eth0上

[root@xuegod63 ~]# ll /etc/ha.d/resource.d/IPaddr

-rwxr-xr-x 1 root root 2273 Jul 29 20:49 /etc/ha.d/resource.d/IPaddr

[root@xuegod63 ~]# /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0 start

IPaddr[7116]: INFO: Success

INFO: Success

查看 VIP:

[root@xuegod63 x86_64]# ip addr   #可以看到 eth0:0 的IP为:192.168.1.200

注:在 Linux rhel6.2版本中可以使用ifconfig查看,但是在rhel6.5上只能用ip addr 命令来查看到

2) 测试: 加载 NFS存储资源到/var/www/html

[root@xuegod63 ~]# /etc/ha.d/resource.d/Filesystem 192.168.1.62:/wwwdir /var/www/html/ nfs start

Filesystem[23575]: INFO: Running start for 192.168.1.62:/wwwdir on /var/www/html

Filesystem[23567]: INFO: Success

INFO: Success

[root@xuegod63 ~]# mount

192.168.1.62:/wwwdir on /var/www/html type nfs (rw,vers=4,addr=192.168.1.62,clientaddr=192.168.1.63)

3) 测试: httpd服务

[root@xuegod63 ~]# /etc/init.d/httpd restart

[root@xuegod63 ~]# grep /etc/ha.d/ha.cf #默认只开启了以下两行内容

logfacility local0

auto_failback on

注释:

#auto_failback on #为on时,主结点恢复正常后,资源自 转给主结点。 建议设为 auto_failback off ,等主节点恢复正常后,在业务 繁忙时,切换回来。防止主节点恢复正常时,回切时,再次影起网络中断。

5)修改配置文件

[root@xuegod63 ~]#  vim /etc/ha.d/ha.cf #将配置文件中,以下内 前面的 #号去掉

24 debugfile /var/log/ha-debug

29 logfile /var/log/ha-log

48 keepalive 2 #设定heartbeat 间的时间间隔为 2秒。

56 deadtime 30 #在30秒后宣布节点死亡。

61 warntime 10 #在日志中发出“late heartbeat“警告 前等待的时间,单位为秒。

71 initdead 120 #在某些系统上,系统启 动或 重启 后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime的两倍。

76 udpport 694 #使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号。

121 ucast eth0 192.168.1.64 #表示从本机的eth0接口发心跳消息给对方节点,写另一端的IP地址 。 这是单播地址。 xuegod64上改为192.168.1.63 。心跳网卡 ,如果你有两个网卡,可以写成eth1

注:配置文件中 91 #bcast eth0 #表示在eth0接口上使用广播heartbeat(将eth1替换为eth0,eth2, 者您使用的��何接口)。

157 auto_failback on #当auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为off,主节点便 能重新获得资源。

211 node xuegod63.cn #该选项是必须配置的。集群中机器的主机名, “uname �Cn”的输出相同。

212 node xuegod64.cn

修改以下内容

改: 223 #ping 10.10.10.254

为: 223 ping 192.168.1.1 # 通过 ping 命令来实现仲裁

改: 256 #respawn hacluster /usr/lib/heartbeat/ipfail

为: 256 respawn hacluster /usr/libexec/heartbeat/ipfail

改: 262 #apiauth ipfail gid=haclient uid=hacluster

为:     apiauth ipfail gid=haclient uid=hacluster

到此修改结束,保存,退出。

7 xuegod64 上配置 heartbeat  

1) 复制配置文件到 xuegod64上:

root@xuegod63 ~]#  cd /etc/ha.d/

[root@xuegod63 ha.d]# scp ha.cf haresources authkeys 192.168.1.64:/etc/ha.d/

[root@xuegod64 ~]# chmod 600 /etc/ha.d/authkeys #此文件必须是600否则heartbeat启 动不 成功

#修改单播地址

[root@xuegod64 ~]# vim /etc/ha.d/ha.cf

改: ucast eth0 192.168.1.64

为: ucast eth0 192.168.1.63

2) 两机器启 heartbeat服务:

[root@xuegod63 ~]# /etc/init.d/heartbeat restart

[root@xuegod64 ~]# /etc/init.d/heartbeat restart

#等待资源接管完成。 takeover接管。 当启 停留在这个界面时, xuegod64会接管所有浮 资源。等下面启 成功时, xuegod64会释放资源,浮云资源,再次加载。

3) xuegod63查看集群资源:

[root@xuegod63 ~]# ifconfig

eth0:0 Link encap:Ethernet HWaddr 00:0C:29:12:EC:1E

inet addr: 192.168.1.200  Bcast:192.168.1.255 Mask:255.255.255.0

[root@xuegod63 ~]# df -h

/dev/sr0 3.4G 3.4G 0 100% /mnt

192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html

[root@xuegod63 ~]# /etc/init.d/httpd status

httpd (pid 23641) is running...

4) xuegod64上查看,没有 任何 浮云资源:  

[root@xuegod64 ~]# ifconfig

[root@xuegod64 ~]# df -h

[root@xuegod63 ~]# /etc/init.d/httpd status

httpd is stopped

8 测试:

两台主机都开启时,所有请求到转到了 xuegod63上。访问:http://192.168.1.200/ 正常 当掉 xuegod63,关闭网卡,等30秒钟,所有请求都转到xuegod64上了

1)主挂掉,验证备

[root@xuegod63 ha.d]# ifdown eth0

[root@xuegod64 ~]# ifconfig

eth0:0 Link encap:Ethernet HWaddr 00:0C:29:48:80:95

inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0

[root@xuegod64 ~]# df -h

192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html

[root@xuegod64 ~]# service httpd status

httpd (pid 6375) is running...

2)主再次复活,验证抢占功能 --- xuegod63 上把 eth0 网卡再次开启:

[root@xuegod63 ~]# ifup eth0

30秒后,查看:

[root@xuegod63 ~]# df -h

192.168.1.62:/wwwdir 9.7G 3.4G 5.8G 37% /var/www/html #已经加载了httpd资源

[root@xuegod63 ~]# service httpd status

httpd (pid 27097) is running...

[root@xuegod63 ~]# ifconfig

eth0:0 Link encap:Ethernet HWaddr 00:0C:29:12:EC:1E

inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0

资源已经回切过来。

3) xuegod64上查看释放资料:

[root@xuegod64 ~]# ifconfig #查看 eth0:0 192.168.1.200 这个IP地址

[root@xuegod64 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 9.7G 3.7G 5.5G 41% /

tmpfs 569M 0 569M 0% /dev/shm

/dev/sda1 194M 28M 157M 15% /boot

/dev/sr0 3.4G 3.4G 0 100% /mnt

[root@xuegod64 ~]# service httpd status

httpd is stopped


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Purely Functional Data Structures

Purely Functional Data Structures

Chris Okasaki / Cambridge University Press / 1999-6-13 / USD 49.99

Most books on data structures assume an imperative language such as C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Ha......一起来看看 《Purely Functional Data Structures》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器