Linux高可用之heartbeat

  • heartbeat的概念
  • HA集群中的相关术语
    • Heartbeat的组成与原理
  • HeartBeat组件
  • heatbeat基本使用
  • 安装heartbeat前的准备
  • LVS+heartbeat实战
    • server1
  • nginx+heartbeat实战
    • server1
    • server2从调度器
    • server3&server4
    • 测试
  • 小结

heartbeat的概念

Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。其中Heartbeat就是Linux-HA项目中的一个组件,也是目前开源HA项目中最成功的一个例子,它提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等,自1999年开始到现在,Heartbeat在行业内得到了广泛的应用,也发行了很多的版本,可以从Linux-HA的官方网站www.linux-ha.org下载到Heartbeat的最新版本。

HA集群中的相关术语

节点(node)

   运行heartbeat进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和heartbeat软件服务,在heartbeat集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。

资源(resource)

  资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat中,可以当做资源的实体有:
磁盘分区、文件系统
IP地址
应用程序服务NFS文件系统

事件(event)

也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。

动作(action)

 事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。

Heartbeat的组成与原理

Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等

Heartbeat内部组成,主要分为以下几大部分:

heartbeat: 节点间通信检测模块
ha-logd: 集群事件日志服务
CCM(Consensus Cluster Membership):集群成员一致性管理模块
LRM (Local Resource Manager):本地资源管理模块
Stonith Daemon: 使出现问题的节点从集群环境中脱离
CRM(Cluster Resource Management):集群资源管理模块
Cluster Policy Engine: 集群策略引擎
Cluster Transition Engine:集群转移引擎

集群成员一致性管理模块(CCM)用于管理集群节点成员,
同时管理成员之间的关系和节点间资源的分配,heartbeat模块负责检测主次节点的运行状态,以判断节点是否失效。
ha-logd模块用于记录集群中所有模块和服务的运行信息。本地资源管理器(LRM)负责本地资源的启动,停止和监控,一般由LRM守护进程lrmd和节点监控进程(Stonith Daemon)组成,
lrmd守护进程负责节点间的通信,Stonith Daemon通常是一个Fence设备,主要用于监控节点状态,
当一个节点出现问题时处于正常状态的节点会通过Fence设备将其重启或关机以释放IP、
磁盘等资源,始终保持资源被一个节点拥有,防止资源争用的发生。集群资源管理模块(CRM)用于处理节点和资源之间的依赖关系,同时,管理节点对资源的使用,
一般由CRM守护进程crmd、集群策略引擎和集群转移引擎三个部分组成,
集群策略引擎(Cluster policy engine)具体实施这些管理和依赖,
集群转移引擎(Cluster transition engine)监控CRM模块的状态,
当一个节点出现故障时,负责协调另一个节点上的进程进行合理的资源接管。在Heartbeat集群中,最核心的是heartbeat模块的心跳监测部分和集群资源管理模块的资源接管部分,
心跳监测一般由串行接口通过串口线来实现,两个节点之间通过串口线相互发送报文来告诉对方自己当前的状态,
如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时资源接管模块将启动,用来接管运行在对方主机上的资源或者服务。Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序,
要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如ipfail、Mon、Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和Ldirectord,介绍如下:ipfail的功能直接包含在Heartbeat里面,主要用于检测网络故障,并作出合理的反应,为了实现这个功能,ipfail使用ping节点或者ping节点组来检测网络连接是否出现故障,从而及时的做出转移措施。
Stonith插件可以在一个没有响应的节点恢复后,合理接管集群服务资源,防止数据冲突,当一个节点失效后,
会从集群中删除,如果不使用Stonith插件,那么失效的节点可能会导致集群服务在多于一个节点运行,
从而造成数据冲突甚至是系统崩溃。因此,使用Stonith插件可以保证共享存储环境中的数据完整性。
Ldirector是一个监控集群服务节点运行状态的插件。Ldirector如果监控到集群节点中某个服务出现故障,
就屏蔽此节点的对外连接功能,同时将后续请求转移到正常的节点提供服务,这个插件经常用在LVS负载均衡集群中。

HeartBeat组件

Heartbeat 是一个基于Linux开源的高可用集群系统。主要包括心跳服务和资源接管两个高可用集群组件,其重大的版本变更主要分为三个阶段。

Heartbeat 1.x组件

Heartbeat1.x允许集群节点和资源通过/etc/ha.d目录下面的两个文件来配置
ha.cf:定义集群节点,失效检测和切换时间间隔,集群时间日志机制和节点Fence方法
haresources:
定义集群资源组,每一行定义可以一起进行失效切换的一个默认的节点和一组资源,资源包括IP地址,文件系统,服务或者应用

Heartbeat 2.x组件

Heartbeat 2.0 在基于Heartbeat1.x 基础上配置引入了模块结构的配置方法,集群资源管理器(Cluster Rescource Manager-CRM).
CRM模型可以支持最多16个节点,这个模型使用基于XML的集群信息(Cluster Information Base-CIB)配置。
Heartbeat 2.x官方最后一个STABLE release 2.x 版本是2.1.4。
CIB文件(/var/lib/heartbeat/crm/cib.xml)会在各个节点间自动复制,它定义了下面的对象和动作:
*集群节点
*集群资源,包括属性,优先级,组和依赖性
*日志,监控,仲裁和fence标准
*当服务失败或者其中设定的标准满足时,需要执行的动作

消息传递和基础设施层(Messaging and Infrastructure Layer)
初级或第一层是消息传递/基础设施层,也被称为心跳层。#Author:Leshami
此层包含了发送含有“我还活着”信号的心跳信息,以及其他信息的组件。
Heartbeat程序驻留在消息/基础设施层。#Blog:http://blog.csdn.net/leshami成员层(Membership Layer)
成员层从底层即心跳层获取信息,负责计算集群节点的最大完全连接设置并同步到节点上的所有成员。
该层负责集群成员间的一致性,提供集群拓扑结构给上一层组件。资源分配层(Resource Allocation Layer)
第三层是资源分配层。这一层是最复杂的,且由以下部分组成:
集群资源管理器(Cluster Resource Manager)在资源分配层的每一个动作由集群资源管理器管理。资源分配层的任意组件,或其他更高层的任何组件需要通信,则由本地集群资源管理器管理。在每一个节点上,集群资源管理器维护集群信息库,或CIB(见下文集群信息库)。集群中的一个节点会被选为指定协调器(DC),这意味着它具有主CIB。集群中的所有其他CIB是主CIB的副本。对CIB正常的读写操作都通过主CIB序列化。在集群中,DC可以决定一个群集范围的变化需要执行的相关变更,如隔离一个节点或移动资源等。集群信息库(Cluster Information Base)         集群信息库或CIB是整个集群配置和状态,包括节点成员,资源约束等,是一个驻留内存的XML文件。在集群中,有一个由DC维护的主CIB,所有其他节点包含一个CIB副本。如果管理员想管理集群,则可以使用cibadmin命令行工具或heartbeat GUI工具。heartbeat GUI工具可以用于从任何机器到集群的连接。cibadmin命令必须在集群节点上使用,并且不限制于只能在DC节点。策略引擎和转换引擎(Policy Engine (PE) and Transition Engine (TE))每当指定协调器需要进行集群范围的变化(重构新的CIB),策略引擎用于计算集群的下一个状态和(资源)来实现它需要操作的列表。由策略引擎计算出的命令然后由转换引擎执行。DC将向集群资源管理器发送相关信息,然后用自己的本地资源管理器(LRM),进行必要的资源操作。PE和TE必须成对运行在DC节点上。本地资源管理器LRM(Local Resource Manager)本地资源管理器调用本地资源代理代表CRM。因此它可以执行启动/停止/监视操作并将结果报告给CRM。LRM保留的是本地节点上所有资源相关的信息。资源层(Resource Layer)
第四和最高层是资源层。资源层包括一个或多​​个资源代理(RA)。
资源代理是一个程序,通常是一个shell脚本,包含启动,停止和监视某种服务(资源)。
最常见的资源代理是LSB初始化脚本。然而,HeartBeat也支持更加灵活和强大的开放式集群架构资源代理API。
提供心跳的代理被写入OCF规范。资源代理只由本地资源管理器调用。
第三方可以在文件系统中定义自己的代理,整合自己的软件到集群中。

Heartbeat 3.x组件

在v3版本后,整个heartbeat项目进行了功能拆分,分为不同的子项目来分别进行开发。但是HA实现原理与Heartbeat2.x基本相同,配置也基本一致。在v3版本后,被拆分为heartbeat、pacemaker(心脏起博器)、cluster-glue(集群的贴合器),架构分离开来了,可以结合其它的组件工作。
Heartbeat 3官方正式发布的首个版本是3.0.2。原来之前的CRM管理由pacemaker来替代,底层message layer依旧可以使用heartbeat v3也可以使用corosync等。 其具体细节本文不做介绍,可单独参考clusterlabs.org。

heatbeat基本使用

防止裂脑

1)同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个线路还是好的,依然能传送消息(推荐的)2)检测到裂脑的时候强行的关闭一个心跳节点(需要特殊的节点支持,如stonith,fence),相当于程序上备节点发现心跳线故障,发送关机命令到主节点。3)做好对裂脑的监控报警(如邮件以及手机短信等),在问题发生的时候能够人为的介入到仲裁,降低损失。当然,在实施高可用方案的时候,要根据业务的实际需求确定是否能够容忍这样的损失。对于一般的网站业务,这个损失是可控的(公司使用)4)启用磁盘锁。正在服务一方锁住共享磁盘,脑裂发生的时候,让对方完全抢不走共享的磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的乙方不主动解锁,另一方就永远得不到共享磁盘。现实中介入服务节点突然死机或者崩溃,另一方就永远不可能执行解锁命令。后备节点也就截关不了共享的资源和应用服务。于是有人在HA中涉及了“智能”锁,正在服务的一方只在发现心跳线全部断开时才启用磁盘锁,平时就不上锁了5)报警报在服务器接管之前,给人员处理留足够的时间就是1分钟内报警了,但是服务器不接管,而是5分钟之后接管,接管的时间较长。数据不会丢失,但就是会导致用户无法写数据。6)报警后,不直接自动服务器接管,而是由人员接管。7)增加仲裁的机制,确定谁该获得资源,

参考的思路:

1)增加一个仲裁机制。例如设置参考的IP,当心跳完全断开的时候,2个节点各自都ping一下参考的IP,不同则表明断点就出现在本段,这样就主动放弃竞争,让能够ping通参考IP的一端去接管服务。2)通过第三方软件仲裁谁该获得资源,这个在阿里有类似的软件应用

HeartBeat的消息类型:

heartBeat高可用软件在工作的过程中,一般来说,有三种消息的类型,具体为:
1)心跳消息
心跳消息为约150字节的数据包,可能为单播,广播或者多播的方式,控制心跳频率以及出现故障要等待多久进行故障转换
2)集群转换消息
当主服务器恢复在线状态时,通过ip-request消息是要求备机释放主服务器失败时被服务器取得的的资源,然后被服务器关闭是仿主服务器失败时取得的资源以及服务。备服务器释放主服务器失败时取得的资源以及服务后,就会通过ip-request-resp消息通知主服务器它不在拥有该资源以及服务,主服务器收到来自备节点的ip-request-resp消息通知后,启动失败时释放的资源以及服务,并开始提供正常的访问服务。
3)重传消息请求
rexmit-request控制重传心跳请求。此消息不太重要,细节就不多介绍了
提示:以上的心跳控制消息都使用的是UDP协议发送到/etc/ha.d/ha.cf文件指定到任意的端口,或者指定到多播地址。

Heartbeat ip地址接管和故障转移

Heartbeat是通过IP地址接管和ARP广播进行故障转移的。

ARP广播:在主服务器故障的时候,备用节点接管资源后,会强制更新所有的客户端本地的ARP表(即清除客户端本地缓存的失败服务器的VIP地址和mac地址的解析记录)。确保客户端和新的主服务器进行对话。(这提到的客户端机器是和Heartbeat高可用服务器对在同一个网络中的客户机,并不是最终的互联网用户,这里的客户端及其是相对Heartbeat高可用服务器对说的,这点,请注意下)

安装heartbeat前的准备

构建一个Heartbeat集群系统必须的硬件设备有:

(1)节点服务器

 安装Heartbeat至少需要两台主机,并且对主机的要求不高,普通的PC 服务器即可满足要求,当然,也可以在虚拟机上安装Heartbeat,现在Heartbeat可以很好的运行在Linux系统下,很多linux发行版本都自带了Heartbeat套件,同时,还可以运行在FreeBSD 和 Solaris操作系统上。

(2)网卡和网络

 Heartbeat集群中的每个主机必须有一块网卡和一个空闲串口,网卡用于连接公用网络,串口可以通过串口线,例如modem电线来实现连接,用于心跳监控节点间的状态,如果没有空闲串口的话,每个主机也可以通过两块网卡来实现HA,其中一块网卡用于连接公用网络,另一块网卡通过以太网交叉线与两个节点相连接。需要说明的是:以太网交叉线和串口电线都能用于心跳监控,串口电线传输Heartbeat信号相对较好,如有条件,尽量使用串口线代替以太网交叉线作为节点间的心跳检测设备。
Heartbeat支持三种类型的网络,公用网络(public network)、私用网络(private network)和串行网络(serial network)。公用网络连接多个节点,并且允许客户端访问集群中的服务节点,私用网络提供两个节点之间点到点的访问,但是不允许客户端访问,可以通过以太网交叉线构建一个私用网络,以供节点间相互通信,串行网络也是一个点到点的连接,一般使用串行网络来传输控制信息和心跳监控。串行网络可以是一条RS232串口线。

(3)共享磁盘

   共享磁盘是一个数据存储设备,HA集群中的所有节点都需要连接到这个存储设备上,在这个共享的存储设备上一般放置的是公用的、关键的数据和程序,一方面可以共享数据给所有节点使用,另一方面也保证了数据的安全性。Heartbeat支持两种对共享磁盘的访问方式:独占访问和共享访问,在独占访问方式下,保持活动的节点独立使用磁盘设备,只有当活动节点释放了磁盘设备,其它节点才能接管磁盘进行使用,在共享访问方式下,集群所有节点都可以同时使用磁盘设备,当某个节点出现故障时,其它节点无需接管磁盘。共享访问方式需要集群文件系统的支持,这一点将在下个章节讲述。
2.操作系统规划这里统一采用Red Hat Enterprise Linux Server release 5.1操作系统,每个节点服务器都有两块网卡,一块用作连接公用网络,另一块通过以太网交叉线连接两个节点,作为心跳监控。共享磁盘由一个磁盘阵列设备提供,两个节点共享一个磁盘分区。磁盘分区对应的硬件标识为/dev/sdb5,挂载点为/webdata,文件系统类型为ext3。

LVS+heartbeat实战

前期准备

server1-172.25.70.11&172.25.1.1 master
server2-172.25.70.12&172.25.1.2 slave
server3-172.25.70.13 后台服务器1
server4-172.25.70.14 后台服务器2

VIP-172.25.70.111
eth0网卡用于管理及对外提供服务,
eth1网卡用于节点直接的心跳。
需要做好host解析

server1

安装heartbeat

yum install -y epel-release
rpm -ivh epel-release-latest-6.noarch.rpm --force 需要下载
yum install -y heartbeat* libnet
yum install -y ldirectord-3.9.5-3.1.x86_64.rpm      #因为依赖比较多, 所以直接采用yum方式安装
echo 1 > /proc/sys/net/ipv4/ip_forward   设置ip路由转发功能 

拷贝配置文件,需要对原文件备份

cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /usr/share/doc/ldirectord-3.9.5
cp ldirectord.cf /etc/ha.d/cd /etc/ha.d/
cp authkeys authkeys.bak
cp ha.cf ha.cf.bak
cp haresources haresources.bak
cp ldirectord.cf ldirectord.cf.bak

ha.cf文件

 vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log         #日志存放位置
#crm yes                            #是否开启集群资源管理功能
logfacility        local0         #记录日志等级
keepalive 2                         #心跳的时间间隔,默认时间单位为秒
deadtime 5                         #超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 3                         #超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中,但此时不会切换
initdead 10          #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport  694        #设置广播通信使用的端口,694为默认使用的端口号。
bcast        eth0               # Linux指定心跳使用以太网广播方式,并在eth0上进行广播。"#"后的要完全删除,要不然要出错。
ucast eth0 172.16.60.207       #采用网卡eth0的UDP多播来组织心跳,后面跟的IP地址应该为双机中对方的IP地址!!!!!
auto_failback on            #在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备用节点。off主节点恢复后变为备用节点,备用为主节点!!!!!
#stonith_host *     baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3  rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#watchdog /dev/watchdog
node   ha-master           #主机节点名,可通过"uname -n"查看,默认为主节点!!!!!
node   ha-slave              #备用机节点名,默认为次节点,要注意顺序!!!!
#ping 172.16.60.207         # 选择ping节点,选择固定路由作为节点。ping节点仅用来测试网络连接。一般选择这行ping测试就行, 下面一行注释掉.
ping_group group1 172.16.60.204 172.16.60.205     #这个地址并不是双机中的两个节点地址,而是仅仅用来测试网络的连通性. 当这两个IP 都不能ping通时,对方即开始接管资源。
respawn root /usr/lib64/heartbeat/ipfail                    #选配项。其中rootr表示启动ipfail进程的身份。要确保/usr/lib64/heartbeat/ipfail这个路径正确(可以用find命令搜索出来), 否则heartbeat启动失败
apiauth ipfail gid=root uid=root

authkeys文件

vim authkeys
auth 3                                                      #auth后面指定的数字,下一行必须作为关键字再次出现! 一共有"1", "2","3" 三行, 这里选择"3"关键字, 选择"1"和"2"关键字也行, HA主备节点必须一致!
#1 crc
#2 sha1 HI!
3 md5 Hello!chmod 600 authkeys   必须将该文件授权为600

haresources文件

vim haresources          # 在文件结尾添加下面一行内容. 由于该文件默认全是注释,可以先清空该文件, 然后添加下面这一行内容
ha-master IPaddr::172.16.60.111 ipvsadm ldirectord     配置说明:
上面设置ha-maser为主节点, 集群VIP为172.16.60.111, ipvsadm ldirectord为所指定需要监视的应用服务.
这样启动heartbeat服务的时候, 会自动启动ipvsadm和ldirectord服务.
ipvsadm服务的配置文件为/etc/sysconfig/ipvsadm, 后面会配置这个.
ldirectord 服务的配置文件为/etc/ha.d/ldirectord.cf, 后面会配置这个

ldirectord.cf文件

ldirectord,用于监控在lvs集群的真实服务。ldirectord是和heartbeat相结合的一个服务,可以作为heartbeat的一个启动服务。
Ldirectord 的作用是监测 Real Server,当 Real Server失效时,把它从 Load Balancer列表中删除,恢复时重新添加。
将ldrectord的配置文件复制到/etc/ha.d下,因为默认没有放到这个路径下, 并且在ldirectord.cf文件中要配置"quiescent=no" 。vim ldirectord.cfchecktimeout=3      #判定realserver出错时间
checkinterval=1      #指定ldirectord在两次检查之间的间隔时间,即主从切换的时间间隔
autoreload=yes       #是否自动重载配置文件
logfile="/var/log/ldirectord.log"     #指定ldirectord的日志文件路径
#logfile="local0"
#emailalert="root@30920.cn"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no        #如果一个realserver节点在checktimeout设置的时间周期内没响应,将会被踢除,中断现有客户端的连接。 设置为yes, 则出问题的realserver节点不会被踢出, 只是新的连接不能到达。virtual=172.16.60.111:80     #指定虚拟IP,注意在virtual这行后面的行必须缩进一个tab字符进行标记!! 否则极有可能因为格式配置不正确而导致ldirectord启动失败real=172.16.60.204:80 gate   #gate为lvs的DR模式,ipip表示TUNL模式,masq表示NAT模式real=172.16.60.205:80 gate   #当所有RS机器不能访问的时候WEB重写向地址; 即表示realserver全部失败,vip指向本机80端口fallback=127.0.0.1:80 gate     #指定服务类型,这里对HTTP进行负载均衡service=http         #指定服务类型,这里对HTTP进行负载均衡scheduler=wlc      #指定调度算法,这里的算法一定要和lvs脚本(/etc/sysconfig/ipvsadm)的算法一样persistent=600     #持久链接:表示600s之内同一个客户端ip将访问同一台realserver. 除非这个realserver出现故障,才会将请求转发到另一个realserver#netmask=255.255.255.255protocol=tcp          # 指定协议checktype=negotiate   #指定检查类型为协商 (或者执行检查类型为negotiate, 表示通过交互来判断服务是否正常)checkport=80        # 监控的端口request="lvs_testpage.html"   #请求监控地址, 这个文件一定要放到后端realserver监控端口的根目录下, 即放到两台realserver的nginx根目录下 receive="Test HA Page"      #指定请求和应答字符串,也就是上面lvs_testpage.html的内容#virtualhost=www.x.y.z       #虚拟服务器的名称可任意指定

安装LVS

yum install -y libnl* popt*
modprobe -l |grep ipvs 查看是否加载lvs模块
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar -zvxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install

ipvsadm文件

vim /etc/sysconfig/ipvsadm
#!/bin/bash
# description: start LVS of DirectorServer
#Written by :NetSeek http://www.linuxtone.org
GW=172.16.60.1                                   #这个是VIP所在网段的网段地址# website director vip.
WEB_VIP=172.16.60.111
WEB_RIP1=172.16.60.204
WEB_RIP2=172.16.60.205. /etc/rc.d/init.d/functionslogger $0 called with $1case "$1" instart)# Clear all iptables rules./sbin/iptables -F# Reset iptables counters./sbin/iptables -Z# Clear all ipvsadm rules/services./sbin/ipvsadm -C#set lvs vip for dr/sbin/ipvsadm --set 30 5 60/sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up/sbin/route add -host $WEB_VIP dev eth0:0/sbin/ipvsadm -A -t $WEB_VIP:80 -s wlc -p 600/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -gtouch /var/lock/subsys/ipvsadm >/dev/null 2>&1# set Arp/sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1  ;;
stop)/sbin/ipvsadm -C/sbin/ipvsadm -Zifconfig eth0:0 downroute del $WEB_VIP  >/dev/null 2>&1rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1/sbin/arping -I eth0 -c 5 -s $WEB_VIP $GWecho "ipvsadm stoped";;status)if [ ! -e /var/lock/subsys/ipvsadm ];thenecho "ipvsadm is stoped"exit 1elseipvsadm -lnecho "..........ipvsadm is OK."fi;;*)echo "Usage: $0 {start|stop|status}"exit 1
esacexit 0上面配置中的"-p 600"的意思是会话保持时间为600秒,这个应该和ldirectord.cf文件配置一致 (还有lvs策略也要一致, 如这里的lwc)chmod 755 /etc/sysconfig/ipvsadm

nginx+heartbeat实战

前期准备

server1-172.25.70.11&172.25.1.1 master
server2-172.25.70.12&172.25.1.2 slave
server3-172.25.70.13 后台服务器1
server4-172.25.70.14 后台服务器2

VIP-172.25.70.111
eth0网卡用于管理及对外提供服务,
eth1网卡用于节点直接的心跳。
需要做好host解析

server1

安装heartbeat

yum install -y epel-release  安装epel扩展源
yum install -y heartbeat* libnet nginx

拷贝配置文件

ha.cf         heartbeat参数配置文件 在这里配置一些基本的参数
authkey       heartbeat认证文件 高可用服务器对之间根据对端的authkey,对对端的进行认证
haresource    heartbeat的资源文件 如配置资源以及一些脚本程序
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d

修改authkeys(26行代码),修改其权限

vim authkeys
更改或增加如下内容:
auth 3
3 md5 Hello!
chmod 600 authkeys

编辑haresources文件(149行代码)

vim haresources
加入下面一行:
master 172.25.70.111/24/eth0:10 nginx说明:master为主节点hostname,172.25.70.111为vip,/24为掩码为24的网段,eth0:10为vip的设备名,nginx为heartbeat监控的服务,也是两台机器对外提供的核心服务。

编辑ha.cf(340行代码)

# vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 172.25.1.12
auto_failback on
node master
node slave
ping 172.25.70.111
respawn root /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=root  uid=root
如果ping不通,vip是不会启用的。
复制代码其中
debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息。
logfile /var/log/ha-log:heartbeat的日志文件。
keepalive 2:心跳的时间间隔,默认时间单位为秒s。
deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
ucast eth1 172.25.70.1:设置对方机器心跳检测的网卡和IP。
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
logfile /var/log/ha-log #指名heartbeat的日志存放位置。
#crm yes #是否开启Cluster Resource Manager(集群资源管理)功能。
bcast eth1 #指明心跳使用以太网广播方式,并且是在eth1接口上进行广播。
keepalive 2 #指定心跳间隔时间为2秒(即每2秒钟在eth1上发送一次广播)。
deadtime 30 #指定若备用节点在30秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源。
warntime 10 #指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到主节点的 心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。
initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才 能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694 #设置广播通信使用的端口,694为默认使用的端口号。
baud 19200 #设置串行通信的波特率。
#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。 如果双机使用以太网连接,则应该关闭该选项。
#ucast eth0 192.168.1.2 #采用网卡eth0的udp单播来组织心跳,后面跟的 IP地址应为双机对方的IP地址。
#mcast eth0 225.0.0.1 694 1 0 #采用网卡eth0的Udp多播来组织心跳, 一般在备用节点不止一台时使用。Bcast、ucast和mcast分别代表广播、单播 和多播,是组织心跳的三种方式,任选其一即可。
auto_failback on #用来定义当主节点恢复后,是否将服务自动切回。 heartbeat的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源 并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该 选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点; 如果该选项设置为off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。
#stonith baytech /etc/ha.d/conf/stonith.baytech # stonith的主 要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争 用一个资源的情形发生。保证共享数据的安全性和完整性。
#watchdog /dev/watchdog #该选项是可选配置,是通过Heartbeat来监控系统的运 行状态。使用该特性,需要在内核中载入"softdog"内核模块,用来生成实际的设备文件, 如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入 “insmod softdog"加载该模块。然后输入"grep misc /proc/devices”(应为10),
node node1 #主节点主机名,可以通过命令"uanme -n"查看。
node node2 #备用节点主机名。
ping 192.168.60.1 #选择ping的节点,ping节点选择的越好,HA集群就越强壮, 可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点, ping节点仅仅用来测试网络连接。
respawn hacluster /usr/lib/heartbeat/ipfail #该选项是可选配置,列出与 heartbeat一起启动和关闭的进程,该进程一般是和heartbeat集成的插件,这些进程 遇到故障可以自动重新启动。最常用的进程是ipfail,此进程用于检测和处理网络故障, 需要配合ping语句指定的ping node来检测网络的连通性。其中hacluster表示启动ipfail进程的身份。

server2从调度器

把主节点上的三个配置文件拷贝到从节点,并修改

cd /etc/ha.d
scp authkeys ha.cf haresources slave:/etc/ha.d
从节点slave编辑ha.cf
vim /etc/ha.d/ha.cf
只需要更改一个地方如下:
ucast eth1 172.25.1.12改为ucast eth1 172.25.1.11从节点slave修改authkey权限
chmod 600 authkeys
启动heartbeat服务
配置完毕后,先master启动,后slave启动。
service heartbeat start

server3&server4

测试

13、检查测试# ifconfig
看是否有接口 eth0:10# ps aux | grep nginx
看是否有nginx进程
14、测试方式1主节点上故意禁ping# iptables -I INPUT -p icmp -j DROP
15、测试方式2主节点停止heartbeat服务# service heartbeat stop
16、测试脑裂主节点master和从节点slave都down掉eth1网卡# ifdown eth1

小结

Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群 http://www.linuxidc.com/Linux/2013-08/89036.htm
Linux 高可用(HA)集群之DRBD详解 http://www.linuxidc.com/Linux/2013-08/89035.htm
Linux 高可用(HA)集群之Pacemaker详解 http://www.linuxidc.com/Linux/2013-08/89037.htm
Linux 高可用(HA)集群之Corosync详解 http://www.linuxidc.com/Linux/2013-08/88733.htm
Heartbeat+MySQL+NFS 实现高可用(HA)的MySQL集群 http://www.linuxidc.com/Linux/2013-08/88663.htm
Linux 高可用(HA)集群之heartbeat基于crm进行资源管理详解 http://www.linuxidc.com/Linux/2013-08/89167.htm
Heartbeat+httpd+NFS 实现高可用的Web服务器 http://www.linuxidc.com/Linux/2013-08/88520.htm
Linux 高可用(HA)集群之Heartbeat详解 http://www.linuxidc.com/Linux/2013-08/88521.htm
Linux 高可用(HA)集群基本概念详解 http://www.linuxidc.com/Linux/2013-08/88522.htm

参考链接
heartbeat高可用详解
LVS+Heartbeat 高可用集群方案

未完

Linux高可用之heartbeat相关推荐

  1. Heartbeat+ipvsadm+ldirectord组建linux高可用集群

    Heartbeat+ipvsadm+ldirectord组建linux高可用集群 1. 系统环境: RHEL6,组建选择base--默认,developmenttools-选择所有可选包. 对外虚拟I ...

  2. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

  3. Linux 高可用(HA)集群之keepalived详解

    大纲 一.前言 二.Keepalived 详解 三.环境准备 四.LVS+Keepalived 实现高可用的前端负载均衡器 一.前言 这篇文章是前几篇文章的总结,我们先简单的总结一下我们前面讲解的内容 ...

  4. linux高可用小知识点汇总-行云管家

    不少运维小伙伴对于linux高可用相关知识不是很了解,今天我们小编就给大家汇总了一些,希望可以加深大家的了解.仅供参考哦! linux高可用小知识点汇总-行云管家 一.Linux是什么系统? [回答] ...

  5. 服务器 ha linux,Linux 高可用(HA)集群之Heartbeat详解

    大纲 一.Heartbeat 的定义 二.Heartbeat 的版本与组件 三.Heartbeat 的各版本之间的区别 四.Heartbeat 集群的一般拓扑图 推荐阅读: 一.Heartbeat的定 ...

  6. Linux 高可用开源方案 Keepalived VS Heartbeat对比

    1)Keepalived使用更简单:从安装.配置.使用.维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat2.1.4后拆分成3个子项目,安装.配置.使用都 ...

  7. linux高可用集群(HA)原理详解

    高可用集群 一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服 ...

  8. 高可用-软件heartbeat的入门介绍

    注:参考互联网整理. 一.简介 Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性( ...

  9. Linux高可用负载均衡 集群理解

    高可用集群HA的实现方式Heartbeat 当然还有其它如Keeplive 负载均衡群集LB的实现方式. (1).硬件LB(比较出名的)F5;BIG-IP系列.Citri;公司的 NetScaler系 ...

最新文章

  1. 利用超链接<a>标签的【href】与【onclick】的优先级做提示窗判断,降低删除误操作次数
  2. stm32单片机屏幕一直闪_STM32使用HAL库函数点亮OLED
  3. 数据结构(六)查找---多路查找树(2-3-4树)
  4. qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...
  5. Mysql中的转义字符
  6. 2018-2019-2 20165235《网络对抗技术》Exp7 网络欺诈防范
  7. Java实现简单的计算器(原创)
  8. java socket程序应用_socket应用小程序
  9. codeforces A. Statues
  10. Candence学习篇(5)使用Padstack Editor制作贴片焊盘和通孔焊盘
  11. 卡西欧5800程序集 第15篇 任意斜交角度坐标反算通用程序
  12. 以核心素养为导向的计算机教学方式,“雨花学术论坛”再开讲:让核心素养在课堂“落地生根”...
  13. python :jieba库的使用大全
  14. freeRTOS中断优先级
  15. 提升工作效率的常用mac命令行
  16. cocos2dx lua 热更新
  17. CISSP考点拾遗——软件保障SwA
  18. 计算机应用技术 笔记,自考工学类计算机应用技术串讲笔记.doc
  19. 视频工具箱和硬件加速
  20. Centos8 nginx1.18.0编译安装

热门文章

  1. 用于RF收发器的简单基带处理器详细教程
  2. java8的sorted,Java8排序stream.sorted()
  3. 10余智慧项目建设初见成效 南岸用智慧城市开启智慧生活
  4. 左神算法:如何较为直观地打印二叉树(Java版)
  5. C++ STL 之堆栈(后进先出) stack 详解
  6. php 常用组件,PHP 程序员应该使用的10个组件
  7. IDEA导入scala详解
  8. 2022最全的BAT大厂面试题整理及分析
  9. 信息系统综合知识八 专业英语
  10. Kotlin高仿微信-第20篇-个人信息