hearbeat
heartbeat介绍:
作用:
通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在升级生产应用场景中,heartbeat的功能和另一个高可用keepalived有很多相同之处
heartbeat官方地址:http://linux-ha.org/wiki/Main_Page
工作原理:
通过修改heartbeat软件的配置文件,可以指定哪一台Heartbeat服务器作为主服务器,则另一台将自动成为热备服务器。然后在热备服务器上配置Heartbeat守护进程来监听来自主服务器的心跳消息。如果热备服务器在制定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,阶梯主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的
以上描述的是主备模式,还有主主模式,即两台服务器互为主备,这是它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定时间内未收到对方发送的心跳报文,那么,乙方就会认为对方失效或者宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务
切换条件:
1)服务器宕机
2)Heartbeat服务本身故障
3)心跳连接故障
心跳连接介绍:
要部署heartbeat服务,至少需要两台主机来完成。那么,要实现高可用服务,这两台主机之间是如何做到互相通信和互相检测的呢?
1)串行电缆(首选,缺点是距离不能太远)
2)一根以太网电缆两网卡直连(推荐)
3)以太网电缆,通过交换机等网络设备连接(次选),次选,增加了交换机故障点,同时,线路不是专用心跳线,容易受其他数据传输的影响,导致心跳报文发送问题
裂脑:
由于两台高可用服务器对之间在指定时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务器在两端同时启动而放生冲突的严重问题,最严重的的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑,也有人叫做分区集群或大脑垂直分割
Heartbeat消息类型:
1)心跳消息:约150字节的数据包,可能为单播、广播或多播的方式,控制心跳频率及出现故障要等待多久进行故障转换
2)集群转换消息:ip-request和ip-reques-resp。当主服务器恢复在线状态时通过ip-request消息要求备机释放主服务器失败时备服务器取得的资源,然后备份服务器关闭释放主服务器失败取得的资源及服务。主服务器释放主服务器失败时取得的资源及服务后,就会通过ip-request-resp消息通知主服务器它不在
Heartbeat高可用集群实战
环境准备:
Master:
OS:Centos6.5
IP:
eth0:192.168.1.1 #服务器管理IP
eth1:192.168.220.10
Hostname:heart-master
VIP:192.168.1.249 Backup:
OS:Centos6.5
IP:
eth0:192.168.1.2 #服务器管理IP
eth1:192.168.220.20
Hostname:heart-backup
VIP:192.168.1.250 hosts:
echo "192.168.220.10 heart-master" >> /etc/hosts
echo "192.168.220.20 heart-backup" >> /etc/hosts #这个两个都要配置 #心跳连接 [root@heart-master /]# route add -host 192.168.220.20 dev eth1
[root@heart-backup /]# route add -host 192.168.220.10 dev eth1
#模拟心跳连接,都是从eth1出去,等于两块网卡直连,可以放到rc.local里,用于开机启动
软件安装:
#下载并安装epel包 [root@heart-master ~]# wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@heart-master ~]# rpm -ivh epel-release-6-8.noarch.rpm
[root@heart-master ~]# yum -y install heartbeat* #配置文件讲解 ha.cf heartbeat参数配置文件 在这里配置heartbeat的一些基本参数
authkey heartbeat认证文件 高可用服务器对之间根据对端的authkey,对对端进行认证
haresource heartbeat资源配置文件 如配置IP资源及脚本程序等 #默认配置文件路径
[root@heart-master ~]# ls /etc/ha.d/
harc rc.d README.config resource.d shellfuncs #但现在并没有什么配置文件,所以我们要从安装点拷贝一份模板过来 [root@heart-master ~]# cd /etc/ha.d/
[root@heart-master ha.d]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf .
[root@heart-master ha.d]# cp /usr/share/doc/heartbeat-3.0.4/authkeys .
[root@heart-master ha.d]# cp /usr/share/doc/heartbeat-3.0.4/haresources .
ha.cf配置文件参数说明
#
debugfile /var/log/ha-debug #heartbeat的调试日志存放位置
logfile /var/log/ha-log #heartbeat的日志存放位置
logfacility locall #在syslog服务中配置通过local1设备接收日志
keepalive 2 #指定心跳间隔时间为2秒(及每2秒钟在eth1上发一次广播)
deadtime 30 #指定若备用节点在30秒内没有收到主节点的心跳信号,则立即接管主节点的服务器资源
warntime 10 #指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead 120 #指定在heartbeat首次运行后,需要等待120秒才启动主服务器的任何资源,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍,单机启动时会遇到vip绑定很慢,为正常现象。该值设置的场的原因
bcast eth1 #指明心跳使用以太网广播方式在eth1接口进行广播。如使用两个实际网络来传送心跳则#bcast eth0 eth1
mcast eth2 225.0.0.1 694 10 #设置广播通信使用的端口,694位默认使用的端口号
auth_failback on #用于定义当节点恢复后,是否将服务自动切回
node heart-master #主节点主机名,可以通过命令“uname -n”查看
node heart-backup #备用节点主机名,可以通过命令“uname -n”查看,也可以使用IP
crm no #是否开启Cluster Resource Manager(集群资源管理)功能
#
Authkeys文件配置
#Authentication file. Must be mode 600 #此处提到,authkey权限必须为600
#Available methods:crc sha1,md5.Crc doesn't need/wat a key #可以设置的认证方法,crc是最不安全的
#sha1 is believed to be the “best”、MD5、next best #sha1的方式是最好的,咱么用这个
haresources文件参数解读
heart-master IPaddr::192.168.1.249/24/eth0
heart-backup IPaddr::192.168.1.250/24/eth0 #heart-master为主机名,表示出事状态会在heart-master绑定Ip192.168.1.249
#IPaddr为heartbeat配置IP的默认脚本,其后的IP等都是脚本的参数
#192.168.1.249/24/eth0为集群对外服务的VIP,初始启动在heart-master上,24为子网掩码,eth0位ip绑定的实际物理网卡,为heartbeat提供对外服务的通信接口
#同理192168.1.250/24/eth0位集群对外服务的VIP,初始启动在heart-backup上,24为子网掩码,eth0为ip绑定的实际物理网卡,为heartbeat提供对外服务的通信接口 #配置实例
heart-master IPaddr:192.168.1.249/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext3 rsdata
#heart-master看上面
#192.168.1.249/24/eth0看上面,(加上一句),这里相当于执行/etc/ha.d/resource.d/IPaddr 192.168.1.249/24/eth0 stop/start
#drbddisk::data,启动drdb data资源。这里相当于执行/etc/ha.d/resource.d/drbddisk dataa stop/start
#Filesystem::/dev/drbd0::/data::ext3,drbd分区挂载到/data目录,这里相当于执行/etc/ha.d/resoucre.d/Filesystem /dev/drbd0 /data ext3 stop/start
#rsdata,启动mysl服务脚本。这里相当于执行/etc/init.d/rsdata stop/start
生成环境实例配置
#ha.cf [root@heart-master ha.d]# cat /etc/ha.d/ha.cf
#the start by Daniel
debugfile /var/log/ha-debug
logfile /var/log/ha.log
logfacility local1 keepalive 2
deadtime 30
warntime 10
initdead 60 #bcast eth1
mcast eth1 225.0.0.250 694 1 0 auto_failback on
node heart-master
node heart-backup
crm no
#the end by Daniel #authenkeys
[root@heart-master ha.d]# cat /etc/ha.d/authkeys
auth 1
1 sha1 47c9336850f1db6fa58bc470bc9b7810eb397f04 #haresources
[root@heart-master ha.d]# cat /etc/ha.d/haresources
heart-master IPaddr::192.168.1.249/24/eth0
heart-backup IPaddr::192.168.1.250/24/eth0 #这三个配置文件master和backup一样 #启动
#先启动一台
[root@heart-master ha.d]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
INFO: Resource is stopped
Done. #查看VIP
[root@heart-master ha.d]# ip addr | grep 192.168.1
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.250/24 brd 192.168.1.255 scope global secondary eth0
inet 192.168.1.249/24 brd 192.168.1.255 scope global secondary eth0 #再启动另一台
[root@heart-backup ha.d]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
INFO: Resource is stopped
Done. #查看两边VIP [root@heart-master ha.d]# ip addr | grep 192.168.1.
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.249/24 brd 192.168.1.255 scope global secondary eth0 [root@heart-backup ha.d]# ip addr | grep 192.168.1
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.250/24 brd 192.168.1.255 scope global secondary eth0 #如果出现了两边都有249和250的时候就是发生了裂脑
heartbeat实现web服务高可用实战案例
#安装 [root@heart-master ha.d]# yum -y install httpd
[root@heart-backup ha.d]# yum -y install httpd #启动
[root@heart-master ha.d]# /etc/init.d/httpd start
[root@heart-backup ha.d]# /etc/init.d/httpd start #
[root@heart-master ha.d]# echo 1.1 > /var/www/html/index.html
[root@heart-backup ha.d]# echo 1.2 > /var/www/html/index.html #现在访问http://192.168.1.249/,显示的1.1,250显示的1.2,down调master,再次访问249,显示的1.2 #我们要实现的heartbeat控制httpd的启动,实现ip切换 #修改haresources
[root@heart-master ha.d]# cat haresources
heart-master IPaddr::172.16.50.249/24/eth0 httpd <控制服务的脚本名
heart-backup IPaddr::172.16.50.250/24/eth0
#master和backup一样 #配置http服务启动脚本
heartbeat控制的脚本要求(以httpd举例):
1.脚本路径要放入/etc/init.d/httpd或者/etc/ha.d/resource.d
2.脚本执行需要以/etc/init.d/httpd stop/start方式
3.脚本具备可执行权限
4./etc/init.d/httpd要和haresources的控制脚本名一样 #先关掉两边的httpd服务
#然后重启两边的heartbeat服务,会发现master的httpd已经起来了,backup的并没有,这是为什么呢?主要是因为给的heart-master上配置的httpd脚本,只有当master down机才会启动,我们可以模拟一下
[root@heart-master ha.d]# /etc/init.d/heartbeat stop
#再次查看backup,发现ip已经切换过来,然后网页再次访问249
hearbeat的更多相关文章
- Hearbeat 工作原理
Hearbeat 原理 heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路, ...
- Hearbeat 介绍
Hearbeat 介绍 Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(reli ...
- Hearbeat + Nginx 安装配置
Hearbeat + Nginx 安装配置 实验环境 两台主机:Linux Centos 6.5 32位 主 服务端:Hearbeat + Nginx eth0:192.168.1.160(公网) e ...
- DRBD(数据镜像)+hearbeat(自动切换)
DRBD 数据镜像软件 一.DRBD介绍 1.1.数据镜像软件DRBD介绍 分布式块设备复制(Distributed Relicated Block Deivce,DRBD),是一种基于软件.基于网络 ...
- hearbeat of RAC
Heartbeat is a pooling mechanism in clustered platforms to verify if the other server participating ...
- 基于Cat的分布式调用追踪
Cat是美团点评出的一款APM工具,同类的产品也有不少,知名的开源产品如zipkin和pinpoint:国内收费的产品如oneapm.考虑到Cat在互联网公司的应用比较广,因此被纳入选型队列,我也有幸 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
缓存融合技术和主要后台进程(四) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- Linux-HA实战(1)— Heartbeat安装
接触Heartbeat主要是因为之前项目中使用了TFS,最近想给nameserver做HA,因为TFS官方用的Heartbeat,所以刚好了解下,参考了网络上很多内容,这里简单记录下. 内容 环境和软 ...
- 《In Search of an Understandable Consensus Algorithm》翻译
Abstract Raft是一种用于管理replicated log的consensus algorithm.它能和Paxos产生同样的结果,有着和Paxos同样的性能,但是结构却不同于Paxos:它 ...
随机推荐
- 如何获取select中的value、text、index相关值 && 如何获取单选框中radio值 && 触发事件 && radio 默认选中
如何获取select中的value.text.index相关值 select还是比较常用的一个标签,如何获取其中的内容呢? 如下所示: <select id="select" ...
- Git学习系列之Git是什么?
前言 现在主流IDE里,都集成git了. https://git-scm.com/docs 史上最浅显易懂的Git教程! 为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google ...
- Eclipse取消或者关闭tomcat所有自动发布(部署)方法
1.设置publishing为Never publish automaticallu 2.modules->edit->auto reloading enabled 3.Windows & ...
- MySql的备份还原
备份数据是数据库管理最常用的操作.为了保证数据库中数据的安全,数据管理员需要定期进行数据备份.一旦数据库遭到破坏,便可通过备份的文件来还原数据库.因此,数据备份是一项很重要的工作. 数据备份 使用my ...
- WPF Window对象的生命周期
WPF中所有窗口的基类型都是System.Windows.Window.Window通常用于SDI(SingleDocumentInterface).MDI(MultipleDocumentInter ...
- ASP.NET Core中使用xUnit进行单元测试
单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多 ...
- C#之RabbitMQ系列(一)
RabbitMQ–环境搭建 MQ MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接 ...
- JVM(四) G1 收集器工作原理介绍
此篇文章半原创是对参考资料中的知识点进行总结,欢迎评论指点,谢谢! 部分知识点总结来自R大的帖子,下文有参考资料的链接 概述 G1 收集是相比于其他收集器(可见 上一篇文章),可以独立运 ...
- JavaScript数组循环遍历之forEach
1. js 数组循环遍历. 数组循环变量,最先想到的就是 for(var i=0;i<count;i++)这样的方式了. 除此之外,也可以使用较简便的forEach 方式 2. forEac ...
- C#学习笔记14
1.在多个线程的同步数据中,避免使用this.typeof(type).string进行同步锁,使用这3个容易造成死锁. 2.使用Interlocked类:我们一般使用的互斥锁定模式(同步数据)为Lo ...