内容简介:用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 # 可重复使用的群集组件
一:实验拓扑
二:实验目标
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
改:
为:
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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 浪潮InCloud OpenStack:度量可用性“三维”,实现高可用云环境
- Nginx&Keepalived 实现高可用
- Memcache 使用 Mcrouter 实现高可用
- MHA实现MySQL的高可用
- SQL Server高可用镜像实现原理
- 使用keepalived实现nginx的高可用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。