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:它 ...
随机推荐
- mysql 导入 excel 数据
客户准备了一些数据存放在 excel 中, 让我们导入到 mysql 中.先上来我自己把数据拷贝到了 txt 文件中, 自己解析 txt 文件,用 JDBC 循环插入到数据库中. 后来发现有更简单 ...
- H5页面JS调试
页面调试 常用的调试方法 开发时候的调试基本是在chrome的控制台Emulation完成 现有的一些手机端调试方案: Remote debugging with Opera Dragonfly 需要 ...
- Android新手常见问题(一)
[1]AAPT2 error: check logs for details File->Settings->Build->Gradle一看path里有中文 最根本的原因是因为use ...
- xcode配置文件中,Architectures表示的意义
xcode配置文件中,Architectures表示的意义 ======================== Architecture : 指你想支持的指令集. Valid architectures ...
- jenkins配置ssh
1.不使用密钥,不配置 2.使用用户名密码配置 3.构建完成后,将文件发送到指定服务器 要拷贝的文件是/var/lib/jenkins/web1/src/*.js
- 在web应用中使用文件
使用HTML5 DOM新增的File API,现在可以让网页要求用户选择本地文件,并且读取这些文件的信息了.选择的方式既可以是HTML<input> 元素,也可以是拖拽 . 你可以在chr ...
- FastReport打印table
经过验证是对的. table第一行添加标题,也就是拖过来的文本label,第二行开始绑定数据源的字段. 先设计报表的静态部分,再用代码注册数据源,然后设计,添加注册的数据源,绑定字段. var rep ...
- C++(笔)002
#include <iostream> //预处理器编译指令 int main() //函数头:对函数和程序其它部份之间的接口作出总结 int:函数的返回类型 { using namesp ...
- 使用connect-multiparty限制nodejs图片上传
connect-multiparty中间件,可用于获取文件上传时各种参数,比如文件大小.格式等,具体使用: var multipart = require('connect-multiparty'); ...
- Effective C++ .37 virtual函数中默认参数的表现
#include <iostream> #include <cstdlib> using namespace std; class Pen { public: ) { cout ...