服务器的高可用性之HA
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
今天小编要和读者聊聊有关服务器的高可用性的问题,当前读者应该知道,国内一些从事电子商务行业的服务器性能是相当的强大的(淘宝、阿里巴巴等等),这些电子商务的主站每秒钟的访问量可是相当的可观,读者试着想想如果服务器当掉了咋办,回答可能是肯定还有其他服务器替代啦,对,可是如何迅速替代让用户感觉不到已经有服务器当掉了呢,那便引出小编今天要谈的HA。
HA是啥?High-Availability Linux 的开源项目的目标是,通过社区开发努力提供一个提升Linux 可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。Linux-HA 项目得到了广泛的应用,是很多有趣的高可用性解决方案的重要组成部分。
高可用性集群一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。
今天小编的主要任务就是来实现HA群集。
Project 1:了解高可用性群集的架构
如图1-1所示,高可用性群集的几个重要部分
图1-1
1)共享信息层
在基础架构上实现心跳信息探测。双方节点可以随时探测到对方的心跳信息,以实现对对方主机工作状态的探测。三类控制信息:心跳(Heartbeats),集群事务信息(Cluster Transition Messages),重传信息(Retransmission Request)。配置文件:/etc/ha.d/ha.cf。各节点间域共享密钥,实现节点间互相通信的认证。加密方式:MD5、HMAC-SHA1 。常用实现软件:HeartBeat(小
编这里就是使用的这个)、keepalived、ultramonkey、openais/corosync。红帽官方提供的集群套件RHCS底层使用的通信机制就是openais/corosync。
2)资源分配子层
在资源分配上定义资源种类,界定资源归属,每个服务需要哪些资源及这些资源之间的前后次序。
集群资源管理器(CRM,常用软件pacemaker),管理双方向外提供服务所需用到的资源,包括IP地址、Web服务、共享存储等等。而这些资源需要依靠集群信息库CIB(XML文件)来定义,同时还必须保证一旦某个节点上的XML
文件更新,即刻通知其他节点上的XML也要及时更新。
策略引擎(PE Policy Engine):定义法定人数以及根据法定人数所做出的动作等等。
本地资源管理器(LRM Local Resource Manager):监控本地某个资源的工作状况。
3)资源层
本地资源代理(Resource Agent),脚本文件,一旦集群资源管理器发现某个资源工作异常,立即通知本地资源代理重启服务。常用方法:(1)Heartbeat v1(小编这里使用的);
(2)使用脚本LSB scripts (Linux Standards Base );
(3)OCF Open Cluster Format 开放集
Project 2:常用的架构模型
1)主从架构:正常情况下只有主服务器工作,当主服务器当掉从服务器立即启用
2)互为主从架构:两台服务器提供不同的服务,相互为主从架构,两台服务器同时工作
3)多主机架构
N台主机组成一个集群,分别提供不同的服务,一台服务器空闲做备节点。或者全部处于工作状态,一台服务器出故障,立刻将服务转移到其他主机上。各节点之间需要以多播的形式将自己的健康情况发送给其他主机。
Project 3:高可用性集群的实现
1)主从架构
step 1:实验拓扑规划,如图3-1-1所示
图3-1-1
Primary eth0 192.168.1.100
eth1 192.168.2.10 //心跳测试
Standby eth0 192.168.1.200
eth1 192.168.2.20 //心跳测试
向外提供Web服务IP:192.168.1.150
step 2:系统与软件资源需求安装
小编的系统是Red Hat EnterPrise Linux 5.4
小编的系统上已经安装了apache2.2.3和php环境,如果读者不会安装的话可以参见小编的博客/5200614/1177203 小编将这些软件包放在/root/heart目录下了,然后使用不加gpg验证的本地yum安装完成
heartbeat-2.1.4-11.el5.i386.rpm
openhpi-libs-2.14.0-5.el5.i386.rpm
heartbeat-pils-2.1.4-11.el5.i386.rpm perl-MailTools-2.04-1.el5.rf.noarch.rpm
heartbeat-stonith-2.1.4-11.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm
libnet-1.1.5-1.el5.i386.rpm
primary服务器的安装配置
# cd heart/
# yum localinstall ./* --nogpgcheck
这样安装省了很多事,系统会自动解决依赖关系,但是读者还要记着安装完成之后查询一下heartbeat到底产生了哪些文件
# rpm -ql heartbeat
其中/usr/share/doc/heartbeat-2.1.4/目录下就存放了heartbeat的样例配置文件
接下来的工作是修改主机名,Heartbeat依靠服务器的主机名来识别服务器,因此使用hostname命令得到的结果必须与uname -n 结果保持一致。
# vim /etc/sysconfig/network //修改主机名称;
HOSTNAME=
# hostname
# vim /etc/hosts //修改主机地址映射;
192.168.1.100 primary
192.168.1.200 standby
# cd /etc/ha.d/
# cp /usr/share/doc/heartbeat-2.1.4/ha.cf ./
# cp /usr/share/doc/heartbeat-2.1.4/authkeys ./
# cp /usr/share/doc/heartbeat-2.1.4/haresources ./
# vim ha.cf //定义各节点之间Heartbeat进程如何通信;
debugfile /var/log/ha-debug //设置调试日志文件名
logfile /var/log/ha-log //设置其他日志文件名
keepalive 2 //设定heartbeat之间的时间间隔为2秒;
deadtime 30 //在30秒后宣布节点死亡;
warntime 10 //在日志中发出late heartbeat警告之前等待的时间,单位为秒;
udpport 694 // 使用端口694进行bcast和ucast通信,默认参数;
bcast eth1 //在eth1接口上使用广播heartbeat-”心跳”;
node //定义节点;
node //定义节点;
# dd if=/dev/urandom bs=512 count=1 | openssl md5 //生成节点间域共享密钥;
14df2a6b5b26b510e7d5d5b16b7cc10b
# vim authkeys //定义心跳探测包使用哪种加密方式;
auth 1
1 sha1 14df2a6b5b26b510e7d5d5b16b7cc10b
# chmod 600 authkeys //仅允许管理员修改文件;
# cp /etc/init.d/httpd /etc/ha.d/resource.d/