linux高可用集群heartbeat实现http的高可用

标签: linux 集群 heartbeat | 发表时间:2014-05-12 18:42 | 作者:z1547840014
出处:http://blog.csdn.net
    linux高可用集群的种类很多,比如常见的heartbeat,corosync,rhcs,keepalived,这些集群软件的出现为我们的业务生产环境提供了高可用的保证,本文将简单介绍一下用heartbeat的v2版本来处理一个简单的http高可用集群的搭建。
  
    在实现http高可用集群之前,首先至少需要2台主机,并且需要做3点基本的准备工作:
    1.设置节点名称,并且集群中的所有节点都能通过节点名称去解析集群中的所有主机。为了集群服务的高可用性,这里选择使用/etc/hosts,而且要保证uname -n的值必须和hostname中的值一致。
    2.使用ssh让双机互信。
    3.时间同步。

    在安装heartbeat软件之前,首先把上面的基本工作完成。这里采用2台主机(192.168.1.201,192.168.1.202)来做我们的高可用集群服务。
    1.首先登陆192.168.1.201修改hostname=test1.qiguo.com,在/etc/sysconfig/network中修改HOSTNAME=test1.qiguo.com保证服务器下次启动的时候主机名不变。在/etc/hosts中添加192.168.1.201 test1.qiguo.com test1; 192.168.1.20 test2.qiguo.com test2两行,再在192.168.1.202的这台主机上执行同样的操作。  
    2.在192.168.1.201中执行ssh-keygen -t rsa,然后使用ssh-copy-id -i root@test2实现ssh互信。这个步骤在两个机器上都要执行。
    3.在2台服务器上使用时间同步命令ntpdate 133.100.11.8(可用的ntp服务器ip地址)

    上面三步完成以后,就可以开始安装heartbeat了。可以去epel下载heartbeat的安装包,默认需要下heartbeat-2.1.4-11.el5.i386,heartbeat-gui-2.1.4-11.el5.i386,heartbeat-pils-2.1.4-11.el5.i386,heartbeat-stonith-2.1.4-11.el5.i386 这4个软件包。但是这4个软件包依赖于其它两个软件包perl-MailTools-1.77-1.el5.noarch,libnet-1.1.6-7.el5.i386,所以首先得把这2个软件包给装出来。使用rpm -ivh perl-MailTools-1.77-1.el5.noarch的时候会报依赖关系的错误,所以用yum --nogpgcheck localinstall perl-MailTools-1.77-1.el5.noarch来安装。然后用同样的方式来一起安装剩余的几个包。注意:这些软件要在2个服务器上都要安装

    安装完成heartbeat中,heartbeat默认的配置文件在/etc/ha.d中。ha.d中的rc.d都是资源管理相关的脚本,而resource.d中都是资源代理脚本,服务脚本在/etc/ha.d/heartbeat中。默认装起后的heartbeat没有配置文件,不过可以从/usr/share/doc/heartbeat-2.1.4/中把ha.cf,authkeys和haresources三个文件放在/etc/ha.d中。这3个配置文件的作用是:
    authkeys:密钥文件,这个文件的权限必须为600,否则不能启动heartbeat服务
    ha.cf:heartbeat服务自身的配置文件
    haresources:资源代理配置文件
    下面只需要对这3个文件做下配置就可以实现我们的http高可用集群了。先来看authkeys文件:
    #auth 1   提供密钥的认证方式
    #1 crc   循环冗余校验码认证
    #2 sha1 HI!   sha1算法认证
    #3 md5 Hello!   md5认证
    这里最好采用sha或者md5认证,crc的性能偏低。如果使用md5认证的配置文件如下: 
    auth 1 # 1代码使用下面以1开头的行来作为密钥认证的条件    
    1 md5 9adc3f50d9bb9e9c795fce0a839aa766
    生成md5的方式只需要在shell命令行中,输入echo "qiguo" | md5sum即可

    第二个配置文件ha.cf里面的内容很多,简单介绍如下:
    #debugfile   /var/log/ha-debug #是否启用debug的日志
    logfile   /var/log/ha-log  #日志文件的存放位置
    #logfacility   local0  #日志的设施,如果启用了logfile,就不要启动这个选项
    keepalive   2   #每隔多少时间进行心跳检测一次
    #deadtime   30   #服务器经过多少时间后,还没有检测到其存在,就认为其已经掉线
    #warntime   10   #警告时长
    #initdead   120  #一个集群起来多久,第二个集群还没启动,则认为集群不成功
    #udpport    694  #监听的端口
    #baud     19200  #串行线的发送速率
    bcast    eth0   #以广播的方式发送心跳检测(这里我们使用广播的方式,直接启动bcast eth0即可,这种方式在局域网中机子多的情况下,很耗费资源)
    #mcast    eth0 255.0.0.1 694 1 0  #以多播的方式发送心跳检测
    #ucast    eth0 192.168.1.2 #以单播的方式发送心跳检测
    #auto_failback on  #主节点挂了以后,又恢复了,是否从新跳转到主节点上,on表示从新跳转。
    #stonith baytech /etc/ha.d/conf/stonith.baytech  #定义stonith,怎么隔绝不在线的节点
    #node ken3  #集群内的节点名称,每一个节点需要使用一个node,并且值必须与uname -n的值相同
    node test1.qiguo.com
    node test2.qiguo.com
    #ping 10.10.10.254  #指定ping的地址
    ping 192.168.1.1    #网管地址
    
    第三个配置文件haresources文件是集群资源配置文件。上面提供了很多的配置样例,拿其中一个的样例配置文件来说明: #node1  10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
    node1就是主节点的名称,10.0.0.170就是vip,Filesystem是资源代理(资源代理可以从/etc/ha.d/resource.d和/etc/init.d/从查找,"::"代表该资源代理的参数)。这里我们做http高可用,所以配置如下:
    test1.qiguo.com IPaddr::192.168.1.210/24/eth0 httpd即可
    上述三个配置文件成功后,就把他们复制到192.168.1.202这个主机上。复制完成以后,分别在两台主机上装上httpd服务。装上的httpd服务一定不能让他们开机自动启动。如果全部配置成功以后,可以关闭httpd服务开始启动heartbeat服务了。
   
heartbeat[4825]: 2014/05/11_23:54:35 info: Version 2 support: false
heartbeat[4825]: 2014/05/11_23:54:35 WARN: Logging daemon is disabled --enabling logging daemon is recommended
heartbeat[4825]: 2014/05/11_23:54:35 info: **************************
heartbeat[4825]: 2014/05/11_23:54:35 info: Configuration validated. Starting heartbeat 2.1.4
heartbeat[4826]: 2014/05/11_23:54:35 info: heartbeat: version 2.1.4
heartbeat[4826]: 2014/05/11_23:54:35 info: Heartbeat generation: 1399811242
heartbeat[4826]: 2014/05/11_23:54:35 info: glib: UDP Broadcast heartbeat started on port 694 (694) interface eth0
heartbeat[4826]: 2014/05/11_23:54:35 info: glib: UDP Broadcast heartbeat closed on port 694 interface eth0 - Status: 1
heartbeat[4826]: 2014/05/11_23:54:35 info: glib: ping heartbeat started.
heartbeat[4826]: 2014/05/11_23:54:35 info: G_main_add_TriggerHandler: Added signal manual handler
heartbeat[4826]: 2014/05/11_23:54:35 info: G_main_add_TriggerHandler: Added signal manual handler
heartbeat[4826]: 2014/05/11_23:54:35 info: G_main_add_SignalHandler: Added signal handler for signal 17
heartbeat[4826]: 2014/05/11_23:54:35 info: Local status now set to: 'up'
heartbeat[4826]: 2014/05/11_23:54:36 info: Link test1.qiguo.com:eth0 up.
heartbeat[4826]: 2014/05/11_23:54:36 info: Link 192.168.1.1:192.168.1.1 up.
heartbeat[4826]: 2014/05/11_23:54:36 info: Status update for node 192.168.1.1: status ping
heartbeat[4826]: 2014/05/11_23:54:41 info: Link test2.qiguo.com:eth0 up.
heartbeat[4826]: 2014/05/11_23:54:41 info: Status update for node test2.qiguo.com: status up
harc[4835]:     2014/05/11_23:54:41 info: Running /etc/ha.d/rc.d/status status
heartbeat[4826]: 2014/05/11_23:54:42 info: Comm_now_up(): updating status to active
heartbeat[4826]: 2014/05/11_23:54:42 info: Local status now set to: 'active'
heartbeat[4826]: 2014/05/11_23:54:42 info: Status update for node test2.qiguo.com: status active
harc[4853]:     2014/05/11_23:54:42 info: Running /etc/ha.d/rc.d/status status
heartbeat[4826]: 2014/05/11_23:54:53 info: remote resource transition completed.
heartbeat[4826]: 2014/05/11_23:54:53 info: remote resource transition completed.
heartbeat[4826]: 2014/05/11_23:54:53 info: Initial resource acquisition complete (T_RESOURCES(us))
IPaddr[4907]:   2014/05/11_23:54:53 INFO:  Resource is stopped
heartbeat[4871]: 2014/05/11_23:54:53 info: Local Resource acquisition completed.
harc[4957]:     2014/05/11_23:54:53 info: Running /etc/ha.d/rc.d/ip-request-resp ip-request-resp
ip-request-resp[4957]:  2014/05/11_23:54:53 received ip-request-resp IPaddr::192.168.1.210/24/eth0 OK yes
ResourceManager[4976]:  2014/05/11_23:54:53 info: Acquiring resource group: test1.qiguo.com IPaddr::192.168.1.210/24/eth0 httpd
IPaddr[5002]:   2014/05/11_23:54:53 INFO:  Resource is stopped
ResourceManager[4976]:  2014/05/11_23:54:53 info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.210/24/eth0 start
IPaddr[5097]:   2014/05/11_23:54:53 INFO: Using calculated netmask for 192.168.1.210: 255.255.255.0
IPaddr[5097]:   2014/05/11_23:54:53 INFO: eval ifconfig eth0:0 192.168.1.210 netmask 255.255.255.0 broadcast 192.168.1.255
IPaddr[5068]:   2014/05/11_23:54:53 INFO:  Success
ResourceManager[4976]:  2014/05/11_23:54:53 info: Running /etc/init.d/httpd  start
   观察日志,可以发现高可用的http集群已经启动起来了。现在人为的在test1这台机子上执行shutdown -h now后观察日志的变化。(也可以使用heartbeat自带的hb_standby脚本来切换,默认在/usr/lib/heartbeat目录下)    
heartbeat[11796]: 2014/05/11_20:56:46 info: Received shutdown notice from 'test1.qiguo.com'.
heartbeat[11796]: 2014/05/11_20:56:46 info: Resources being acquired from test1.qiguo.com.
heartbeat[11862]: 2014/05/11_20:56:46 info: acquire local HA resources (standby).
heartbeat[11863]: 2014/05/11_20:56:46 info: No local resources [/usr/share/heartbeat/ResourceManager listkeys test2.qiguo.com] to acquire.
heartbeat[11862]: 2014/05/11_20:56:46 info: local HA resource acquisition completed (standby).
heartbeat[11796]: 2014/05/11_20:56:46 info: Standby resource acquisition done [all].
harc[11888]:    2014/05/11_20:56:46 info: Running /etc/ha.d/rc.d/status status
mach_down[11903]:       2014/05/11_20:56:46 info: Taking over resource group IPaddr::192.168.1.210/24/eth0
ResourceManager[11928]: 2014/05/11_20:56:46 info: Acquiring resource group: test1.qiguo.com IPaddr::192.168.1.210/24/eth0 httpd
IPaddr[11954]:  2014/05/11_20:56:46 INFO:  Resource is stopped
ResourceManager[11928]: 2014/05/11_20:56:46 info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.210/24/eth0 start
IPaddr[12049]:  2014/05/11_20:56:46 INFO: Using calculated netmask for 192.168.1.210: 255.255.255.0
IPaddr[12049]:  2014/05/11_20:56:46 INFO: eval ifconfig eth0:0 192.168.1.210 netmask 255.255.255.0 broadcast 192.168.1.255
IPaddr[12020]:  2014/05/11_20:56:46 INFO:  Success
ResourceManager[11928]: 2014/05/11_20:56:46 info: Running /etc/init.d/httpd  start
mach_down[11903]:       2014/05/11_20:56:46 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired
mach_down[11903]:       2014/05/11_20:56:46 info: mach_down takeover complete for node test1.qiguo.com.
heartbeat[11796]: 2014/05/11_20:56:46 info: mach_down takeover complete.

   打开备服务器上的日志,注意观察,在备服务器上,已经将资源全部拿了过去,现在继续访问192.168.1.210可以看到显示的就是test2这台主机上的内容,当test1从新上线以后,由于我们上面设置了auto_failback的值为on,所以会再次把资源拿回来,这里就不再放日志文件了。到这里一个简单的高可用httpd服务就已经建立起来了。 

   由于很多情况下httpd高可用服务还会用到共享文件的服务,所以有时候需要共享文件系统。只需要在haresources中多定义一个文件系统的资源。
test1.qiguo.com IPaddr::192.168.1.210/24/eth0 Filesystem::192.168.1.230:/html::/var/www/html::nfs httpd。这里采用nfs文件系统来挂载。
作者:z1547840014 发表于2014-5-12 10:42:23 原文链接
阅读:106 评论:0 查看评论

相关 [linux 集群 heartbeat] 推荐:

linux高可用集群heartbeat实现http的高可用

- - CSDN博客系统运维推荐文章
    linux高可用集群的种类很多,比如常见的heartbeat,corosync,rhcs,keepalived,这些集群软件的出现为我们的业务生产环境提供了高可用的保证,本文将简单介绍一下用heartbeat的v2版本来处理一个简单的http高可用集群的搭建.     在实现http高可用集群之前,首先至少需要2台主机,并且需要做3点基本的准备工作:.

HeartBeat 集群组件概述

- - CSDN博客推荐文章
Heartbeat 是一个基于Linux开源的高可用集群系统. 主要包括心跳服务和资源接管两个高可用集群组件. 心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务.

Linux-HA实战(1)— Heartbeat安装

- - ZJD'S NOTES
接触Heartbeat主要是因为之前项目中使用了TFS,最近想给nameserver做HA,因为TFS官方用的Heartbeat,所以刚好了解下,参考了网络上很多内容,这里简单记录下. 我的机器是两台64位的CentOS,其它Linux机器应该差不多可以参考 官方的说明. 从Heartbeat 2.1.4之后原先的项目被拆分成了三个子项目: cluster-glue、 resource-agents和 heartbeat,导致了配置更加复杂.

linux集群运维工具:clustershell和pssh

- - Linux - 操作系统 - ITeye博客
由于需要安装hadoop集群,有10台机器需要安装,一开始打算用SCP复制,后来觉得不可接受(实际现场可能数倍的机器集群,就是10台也不想干). 后来在网上找了,发现了clustershell和pssh这两个工具. 这两个工具随便用其中一个就可以了. 环境说明:centos6.5机器10台. 需求:确定一个主机A,通过在A上执行命令即可同步在其他节点上执行.

drbd+xfs+heartbeat+mysql实现高可用

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

Linux下Apache+Tomcat搭建负载均衡服务器集群

- - 极客521 | 极客521
这篇文章主要讲解关于如何在Linux下搭建Apache+tomcat 负载均衡服务器集群的过程. 负载均衡集群配置(1):Tomcat的配置. 修改“ tomcat/conf/server.xml ”文件. 编辑server.xml文件,找到“ ”元素节点,在server.xml文件里面未注释掉的有两个 元素节点.

MySQL 主从延迟监控脚本(pt-heartbeat)

- - CSDN博客数据库推荐文章
    对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现. pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟. 本文主要是通过脚本来定期检查从库与主库复制的延迟度并发送邮件,供大家参考.

为什么心跳包(HeartBeat)是必须的? - CoderZh

- - 博客园_首页
几乎所有的网游服务端都有心跳包(HeartBeat或Ping)的设计,在最近开发手游服务端时,也用到了心跳包. TCP没有提供断线检测的方法吗. TCP提供的KeepAlive机制可以替代HeartBeat吗. 由于连接丢失时,TCP不会立即通知应用程序. 比如说,客户端程序断线了,服务端的TCP连接不会检测到断线,而是一直处于连接状态.

Java HeartBeat 0.4 发布,应用服务器心跳检测

- - 开源中国社区最新新闻
HeartBeat 0.4 发布, 该版本的主要更新如下. 下载链接:  http://git.oschina.net/mkk/HeartBeat/raw/V-0.4/dist/HeartBeat-0.4.zip. 在线测试:  http://andaily.com/hb/. 心跳检测各类应用服务器(如Tomcat,Jetty),WEB服务器(如 Apache,Nginx) 的JAVA WEB应用程序.

Javascript 里跑Linux

- rockmaple - Shellex's Blog
牛逼到暴的大拿 Fabrice Bellard,用Javascript实现了一个x86 PC 模拟器,然后成功在这个模拟器里面跑Linux(请用Firefox 4 / Google Chrome 11打开,Chome 12有BUG). 关于这个东西… 伊说 “I did it for fun“,大大啊大大啊….