heartbeat原理及部署

1. Heartbeat介绍

1.1 Heartbeat作用

通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbeat的功能和另一个高可用开源软件keepalived有很多相同之处

1.2 Heartbeat工作原理

通过修改配置文件,指定哪一台Heartbeat服务器作为主服务器,则另一台将自动成为备份服务器。然后在指定备份服务器上配置Heartbeat守护进程来监听来自主服务器的心跳。如果备份服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务所有权,接替主服务器继续不间断的提供服务,从而达到资源服务高可用性的目的

以上描述的是Heartbeat主备的模式,Heartbeat还支持主主模式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内为收到对方发送的心跳报文,那么久认为对方失效或者宕机了,这时就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续对用户提供服务。正常情况下,可以较好的实现主机故障后,业务仍不间断的持续运行。

1.3 Heartbeat的心跳连接

要部署Heartbeat服务至少需要两台之际来完成。那么这两台主机之间是如何做到互相通信和互相监测的呢?

1)串行电缆(首选,缺点是距离不能太远)

2)一根以太网电缆两网卡(推荐)

3)以太网电缆,通过交换机等网络设备连接(次选)

次选,增加了交换机故障端,同时,线路不是专用心跳线,容易受其他数据传输的   影响。

1.4 Heartbeat裂脑

1)什么是裂脑?

由于两台搞科研服务器对之间在指定时间内,无法互相检查到对法心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务器在两端同时启动而发生冲突的严重问题,最严重的事故两台主机占用一个IP地址,这样会导致两端的数据不一致或造成数据丢失,这种情况被称为裂脑,也有人称其为分区集群或大脑垂直分割,英文为spilt brain

2)导致裂脑发生的多种原因

一般来说,裂脑的发生,有以下几个原因导致

A 高可用服务器对之间心跳链路故障,导致无法正常通信

B 高可用服务器对上开启了防火墙阻挡了心跳消息传输

C 高可用服务器对上心跳网卡抵制等信息配置不正确,导致发送心跳失败

D 其他服务配置不宕机等原因,如心跳方式不同,心跳广播冲突,软件BUG等

3)防止裂脑发生的8种秘籍

A.同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一条还是好的,依然能传送心跳消息

B.检测到裂脑时强行关闭一个心跳节点。相当于程序上备节点发现心跳线故障,发送关机命令到主节点

C.做好裂脑的监控报警(如邮件及手机短信等),在问题发生时人为第一时间介入仲裁,降低损失

D.启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动解锁,另一方就永远得不到共享磁盘。现实中假如服务器节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了‘智能’锁。即,正在服务的一方只在发现心跳线全部断开时才启用磁盘锁。平时就不上锁

E.报警在服务器接管之前,给人员处理留足够的时间

F.不直接自动服务器接管,而是由人为人员控制接管‘

G.增加仲裁机制,确定谁该获得资源

例如:设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不同则表明断点就处在本端,不仅心跳线、还有对外服务的本地网络链路断了,这样就主动放弃竞争,让能够ping通参考IP的一段去接管服务。ping不通参考IP的一方可以自我重启,以彻底释放有可能还占用着的那些共享资源。

1.5 Heartbeat消息类型

Heartbeat软件在工作过程中,一般来说,有三种消息类型,具体为

1)心跳消息

心跳消息为约150字节的数据包,可能为单播、广播或多播的方式,控制心跳频率及出现故障要等待多久进行故障转换

2)集群转换消息

ip-request和ip-request-resp

当主服务器恢复在线状态时,通过ip-request消息要求备机释放主服务器失败时备服务器取得的资源,然后备份服务器关闭释放主服务器失败时取得的资源及服务

备服务器释放主服务器失败时取得的资源及服务后,就会通过ip-request-resp消息通知主服务器它不在拥有该资源及服务,主服务器收到来自备节点的ip-request-resp消息通知后,启动失败时释放的资源及服务,并开始提供正常的访问服务

3)重传请求

1.6 Heartbeat IP地址接管和故障转移

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

ARP广播:在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的ARP表(即清除客户端本地缓存的失败服务器的vip地址和mac地址的解析记录)。确保客户端和新的主服务器对话。

ifconfig eth0:1 192.168.1.181 netmask 255.255.255.224 up  (ip alias)

====>heartbeat软件默认是使用这个命令来添加VIP的

ip addr add 192.168.1.181/24 broadcast 192.168.1.255 dev eth1   (辅助ip)

====>keepalived软件默认使用这个命令来添加VIP

1.7 Heartbeat脚本的默认目录

/etc/init.d/

/etc/ha.d/resource.d/

1.8 Heartbeat配置文件

Heartbeat的默认配置文件目录为/etc/ha.d。Heartbeat常用的配置文件有三个,ha.cf、authkey、haresource


配置名称


作用


备注


ha.cf


heartbeat参数配置文件


在这里配置heartbeat的一些基本参数


authkey


heartbeat认证文件


高可用服务器对之间根据对端的authkey,对对端进行认证


haresource


heartbeat资源配置文件


如配置IP资源及脚本程序等

2. Heartbeat部署

2.1逻辑架构图

2.3 Heartbeat服务主机资源规划


名称


接口


IP


用途


MASTER


eth0


192.168.1.81


外网管理IP,用于WAN数据转发


eth1


192.168.2.81


内网管理IP,用于LAN数据转发


eth2


192.168.3.81


用于服务器间心跳连接(直连)


vip


192.168.1.181


用于提供应用程序A挂载服务


BACKUP


eth0


192.168.1.82


外网管理IP,用于WAN数据转发


eth1


192.168.2.82


内网管理IP,用于LAN数据转发


eth2


192.168.3.82


用于服务器间心跳连接(直连)


vip


192.168.1.182


用于提供应用程序B挂载服务

2.4 分别配置hosts文件

MASTER:

echo ‘192.168.2.82 picdata-1-2’ >> /etc/hosts

BACKUP:

echo ‘192.168.2.81 picdata-1-1‘ >> /etc/hosts

通过ping ip地址的方法检查测试,看起返回的IP和hosts文件对应的是否相同

2.5 配置服务器间心跳链接

eth2 192.168.3.81 和eth2 192.168.3.82两块网卡之间是通过普通网线直连的,即不通过交换机,直接将两块网卡通过网线连接在一起,用于做心跳检测

在两台机器分别增加一条主机路由,来实现两台机器检查对端时通过通过这个心跳线路检查。

picdata-1-1 Server上增加如下路由

route add -host 192.168.3.82 dev eth2

#这个命令的意思是,从picdata-1-1 Server上访问192.168.3.82,走eth2网卡出去,即使用心跳线路。

echo ‘route add -host 192.168.3.82 dev eth2‘ >> /etc/rc.local

picdata-1-2 Server上增加如下路由:

route add -host 192.168.3.81 dev eth2

#这个命令的意思是,从picdata-1-2 Server上访问192.168.3.81,走eth2网卡出去,即使用心跳线路。

echo ‘route add -host 192.168.3.81 dev eth2‘ >> /etc/rc.local

3. 开始实施部署

3.1 安装heartbeat软件(配置163源)

安装epel扩展源:yum -y install epel-release

yum -y install heartbeat

3.2 配置ha.cf文件

cd /usr/share/doc/heartbeat-3.0.4/

cp authkeys ha.cf haresources /etc/ha.d/

cat ha.cf

#the start by oldboy

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility     local1

keepalive 2

deadtime 30

warntime 10

initdead 120

#以上四行为一些基础参数,在你配置是一般不需要改动

#bcast  eth1

mcast eth2 225.0.0.81 694 1 0  #eth2网卡上用这个频率在694端口上广播,频率必须改,否则会出问题,建议用IP地址最后一位

#此行表示使用多播的方式,需要改动的仅有eth2,改成你的心跳线的那块网卡

auto_failback on  #控制失败修复后是否自动回来

node    picdata-1-1  #两台存储server的主机名

node    picdata-1-2  #两台存储server的主机名

crm     no

#the end by oldboy

ha.cf文件详细说明


参数


说明


debugfile /var/log/ha-debug


heartbeat的调试日志存放位置


logfile /var/log/ha-log


heartbeat的日志存放位置


logfacility     local1


在syslog服务中配置通过local1设备接收日志


keepalive 2


指定心跳间隔为2秒


deadtime 30


指定若备用节点在30 秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源


warntime 10


指定心跳延迟的时间为10秒。当秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务


initdead 120


指定在HEARTBEAT首次运行后需要等待120秒才启动主服务器的任何资源。该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。单机启动时会遇到vip绑定很慢,为正常现象


#bcast  eth1


指定心跳使用以太网广播方式在eth1接口上进行广播。如使用两个实际网络来传送心跳则#bcast  eth0 eth1


mcast eth2 225.0.0.181 694 1 0


设置广播通信使用的端口,694为默认使用的端口号


auto_failback on


用来定义当主节点恢复后,是否将服务自动切回


node    picdata-1-1


主节点名,可以通过命令uname -n 查看


node    picdata-1-2


备节点名,可以通过命令uname -n 查看


crm     no


是否开启Cluster Resource Manager(集群资源管理)功能

3.3 配置authkey文件

cat authkey

auth 1

1 sha1 47e9336850f1db6fa58bc470bc9b7810eb397f04

chmod 600 /etc/ha.d/authkey

注:两台机器都需要配置

3.4 配置haresource文件

cat /etc/ha.d/haresource

picdata-1-1 IPaddr::192.168.1.81/24/eth0

配置好从服务器(主从的配置文件除了ha.cf中的mcast eth2 225.0.0.181 694 1 0,其余的都一样)

启动heartbeat服务

/etc/init.d/heartbeat start

此时在MASTER主机上ifconfig命令查看会有eth0:0,当MASTER挂掉后备服务器上会有eth0:0

此时在主heartbeat服务器上执行hb_standby脚本把本地设置成为standy,即模拟heartbeat服务器宕机(和停止heartbeat的效果差不多),然后看备份机器的接管情况

4. heartbeat实现web服务高可用案例

4.1 部署准备

目的:通过一个web服务高可用案例带领大家进一步熟悉heartbeat软件的使用

资源:延用上面的两台机器,机器名分别为picdata-1-1和picdata-1-2

4.2 安装配置http服务

在两台机器上分别安装http服务

yum -y install httpd

4.3 修改heartbeat配置(主备两台都需要修改)

vim /etc/ha.d/haresources

picdata-1-1 IPaddr::192.168.1.81/24/eth0 httpd

/etc/init.d/heartbeat stop

/etc/init.d/heartbeat start

此时会httpd也会随之heartbeat启动而启动(netstat -lnt 检查80端口已经开启)

4.4 有关heartbeat调用httpd脚本的说明

1)httpd命令需要放在/etc/init.d/下或者/etc/ha.d/resource.d下

2)httpd命令需要具备可执行权限(x)

3)httpd必须支持如下启动方式

/etc/init.d/httpd

Usage: httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}

4.5 有关heartbeat调用资源的生产场景应用

在实际工作中有两种常见方法实现高可用问题:

1)heartbeat可以仅控制vip资源的漂移,不负责服务资源的启动及停止

2)heartbeat即控制vip资源的漂移,同时又控制服务器资源启动及停止

VIP正常,httpd服务宕了,这个时候不会做高可用切换,写个简单的脚本定时或守护进程判断httpd服务,如果有问题,则停止heartbeat,主动使其上的业务到另一台

4.6 扩展,配置mysql高可用

Mysql的高可用实现方式和httpd基本是一样的,只是httpd后端用了共享存储,所以,这里不需要做数据同步了。而mysql后端没有用存储,所以,在做高可用之前,要把两台机器做成主从同步或者主主同步。

vim /etc/ha.d/haresources  (数据库是内容,所有绑定到eth1网卡)

picdata-1-1 IPaddr::192.168.2.181/24/eth1 mysqld

4.7 heartbeat和keepalived的应用场景区别

1)对于一般的web,db,负载均衡(nginx,haproxy)等等,heartbeat和keepalived都可以实现。

2)lvs负载均衡最好和keepalived结合(heartbeat调用带有ipvsadm命令的脚本启动停止lvs,并且heartbeat没有对rs的健康检查功能,但是可以通过ldircetord来补足健康检查的功能)

3)需要数据同步的高可用业务最好用heartbeat,例如:mysql双主多从,NFS/MFS存储,他们的特点是选哦数据同步,这样的业务最好用heartbeat。因为heartbeat自带了drdb的脚本。如果解决了数据同步不要drdb,例如:共享存储或者inotify+rsync,就可以考虑keepalived。

4)运维人员对那个更熟悉就用哪个,其实,就是你要能控制维护你搭建的服务

4.8 heartbeat服务生产环境选维护要点

在我们每天的实战运维工作中,当有新项目上线或者VIP更改需求是,可能会进行添加修改服务VIP的操作。

1)在修改配置前执行/etc/init.d/heartbeat stop或/usr/lib64/heartbeat/hb_standby(此命令最好),把本机业务推到备节点工作,当query备节点工作正常后,开始修改本地的配置,修改好后可以执行/etc/init.d/heartbeat start把资源服务接管回来。记得在把业务推到备节点时及修改配置接管回服务是都要立即服务是否正常工作,特别是所有的VIP是否启动OK,URL地址是不是能够打开,这个检查过程可以写成脚本放heartbeat服务启动脚本的参数里等。

2)先修改好一段的配置,然后同步到另一端

/etc/init.d/heartbeat stop

/etc/init.d/heartbeat start

ifconfig | egrep “ip1|ip2”

wget url

准备好后,拷贝粘贴同时执行上面3条命令,执行完毕后看看ip是否OK,如果5秒IP不OK,则需要回滚配置或者再次推到备节点

3)通过heartbeat自带的如下命令临时增加IP,并修改配置但不重启,然后在流量低谷或者夜里重启服务器

/etc/ha.d/resource.d/IPaddr 192.168.1.200/eth0 start

总结:负载均衡和高可用服务器的位置一般来说都非常重要,因此,操作时一定要谨慎小心,一定要记得事先写好操作步骤及回滚步骤,然后再去实施操作,不要逞匹夫之勇,直接动手操作,那样会极容易导致网站宕机影响用户体验,特别是涉及到数据库和存储高可用的heartbeat的维护更加要小心。

要经常查看heartbeat服务日志

cat /var/log/ha.log

时间: 2024-11-04 15:04:01

heartbeat原理及部署的相关文章

(转)heartbeat原理及部署

原文:http://yjy724.blog.51cto.com/10897133/1840794---------------------------------------------------heartbeat原理及部署 1. Heartbeat介绍 1.1 Heartbeat作用 通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbeat的功能和另一个高可用开源软件keepalived有很多相同之处 1.2

Heartbeat高可用部署(二)

三:Heartbeat高可用部署基础准备 3.1 搭建虚拟机模拟真实环境 我们安装前面的主机规划来进行配置主机 首先我们准备两台机器 给虚拟机配置IP和主机名,hosts 按照主机规划给服务器配置IP地址,如果是双网卡的机器,要记得添加网卡设备,尽可能在关机状态下添加网卡设备,然后开机登录后,执行/etc/init.d/kudzu start(centos6已经没有这个命令,可以使用start_udev来管理)检查新硬件 完成之后重启两台主机,然后通过setup配置 注意:这里不用设置网关和DN

Heartbeat工作原理及其部署需求(一)

一:Heartbeat介绍 1.1 Heartbeat简介 Heartbeat是一款开源提供高可用(Highly-Available)服务的软件,通过Heartbeat可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台可以正常运转的机器上继续提供服务,一般称之为高可用服务.在实际生产应用场景中,heartbeat的功能和keepalived有很多相同之处,但在生产中,对实际的业务应用也是有区别的.如:keepalived主要是控制ip的漂移,配置.应用简单,而heartbe

学习heartbeat-04 原理及部署

1. Heartbeat介绍 1.1 Heartbeat作用 通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbeat的功能和另一个高可用开源软件keepalived有很多相同之处 1.2 Heartbeat工作原理 通过修改配置文件,指定哪一台Heartbeat服务器作为主服务器,则另一台将自动成为备份服务器.然后在指定备份服务器上配置Heartbeat守护进程来监听来自主服务器的心跳.如果备份服务器在指定时间

jenkins集群测试环境原理、部署

Jenkins自动化构建成过程,可帮助我们节省大量时间,完成这个过程的自动化后,在以后的开发过程中,我们需要做的,就是只是提交代码到版本库中,构建自动完成,基本不再需要人工干预. 代码仓库作为构建的素材库,构建所需的代码从代码库中获得. 最好有一台服务器单独作为持续集成服务器,一方面保证了环境的纯净,一方面不影响开发,而且持续集成服务器一般是随时准备开始构建的,所以一般也不关机. 1 [首先要有统一的代码库,服务器不断从版本控制服务器上检查代码状态,看代码是否有更新.如果发现有代码更新,那么就从

sersync+rsync原理及部署

一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录 二.rsync+inotify-tools与rsync+sersync架构的区别? 1.rsync+inotify-tools a.inotify只能记录下被监听的目录发生了变化(增,删,改)并没

haproxy原理与部署

1. Haproxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备.虚拟主机.基于TCP和HTTP应用代理等功能.其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动将RS服务器假如. Haproxy特别使用与那些访问量很大.但又需要会话保持或七层应用的业务.Haproxy运行在普通的服务器硬件上

HTTPS证书生成原理和部署细节

今天摸索了下 HTTPS 的证书生成,以及它在 Nginx 上的部署.由于博客托管在 github 上,没办法部署证书,先记录下,后续有需要方便快捷操作.本文的阐述不一定完善,但是可以让一个初学者了解大致的原理,同时跟着操作可以为自己的博客/网站部署一个 HTTPS 证书. 网站部署 HTTPS 的重要性 看看下面,部分电信用户访问京东首页的时候,会看到右下角有一个浮动广告: 小白用户以为是京东有意放置的,细心的用户会发现,这个 iframe 一层嵌一层的恶心广告很明显是电信/中间人通过 DNS

MySQL+Heartbeat+DRBD架构部署

MySQL高可用生成业务需求 在企业实际生产场景中,一主多从的MYSQL数据库架构是最常用的DB架构方案,该架构方案部署简单,维护方便,并且通过配置简单的代理或者通过程序的方式就可以实现应用服务队主从库的读写分离,且多个从库还可以通过LVS或者Haproxy等代理实现多个从库的负载均衡,分担读的压力,同时排除单点问题 但是MYSQL数据库架构中,我们不难发现,虽然从库是多个,但是主库仅有一个,也就是说主库一旦宕机,所以写的业务都会终止,而从库宕机1个就没什么影响,那么如何解决这个主库单点的问题呢