HeartBeat的一些介绍和功能上的一些总结
HeartBeat的作用:
通过HeartBeat,可以将资源(IP以及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用的服务。在实际的生产应用场景中,heartbeat的功能和另一个高可用的开源软件keepalived有很多的相同之处,在我们实际的生产业务中也是有区别的。
HeartBeat的工作原理:
通过修改Heartbeat的软件的配置文件,可以制定那一台Heartbeat服务器作为主服务器,则另一台将自动成为热备服务器。然后在热备服务器上配置Heartbeat
守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定时间内为监听到来自主服务器的心跳,就会启动故障转义程序,并取得主服务器上的相关资源服务的
所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的。
以上的描述heartbeat的主备模式,heartbeat还支持主主模式,即两台服务器互为主备,这是他们之间还会互相发送报文来告诉对方自己的当前的状态,如果在
指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失效或者是已经宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方
主机上的资源或者是服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务能够不间断的持续的提供服务。注意:所谓的业务不间断,
在故障转移期间也是需要切换时间的,heartbeat的切换时间是5-20秒。
切换的常见条件:
1)服务器宕机
2)Heartbeat服务本故障
3)中间的连接线路故障
应用服务故障则不会产生切换,可以通过服务宕机把heartbeat服务停掉。
heartbeat的心跳连接:
讲过上面的描述,要部署heartbeat服务,至少需要两台主机才能完成。那么,要实现高可用服务,这两台主机之间,是如何做到互相通信互相监控的呢/
下面是两台heartbeat主机之间通信的一些常用的可行的方法:
1)串行电缆,即所谓的串口(首选,缺点是距离不能太远)
2)一根以太网电缆量网口直连(生产环境中常用的方式)
3)以太网电缆,通过交换机等网络设备连接(次选,原因是增加了故障点,不好排查故障,同时,线路不是专用的心跳线,容易受其他数据传输的影响,导
致心跳报文发送问题)
Heartbeat裂脑:
什么是裂脑?
由于两台高可用服务器之间在指定的时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源以及服务的所有权,而此时的两台高可用服务器
对都还活着并作正常运行,这样就会导致同一个IP湖综合服务在两端同时启动而发生冲突的严重问题,最严重的就是两台主机同时占用一个VIP的地址,当用户写入数
据的时候可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据的丢失,这种情况就本成为裂脑,也有的人称之为分区集群或者大脑垂直分隔
导致裂脑发生的原因:
一般来说,裂脑的发生,主要是由以下的几个原因导致的:
1)高可用服务器对之间心跳线路故障,导致无法正常的通信。原因比如:
(1).心跳线本身就坏了(包括断了,老化)
(2).网卡以及相关驱动坏了,IP配置及冲突问题
(3).心跳线间连接的设备故障(交换机的故障或者是网卡的故障)
(4).仲裁的服务器出现问题
2)高可用服务器对上开启了防火墙阻挡了心跳消息的传输
3)高可用服务器对上的心跳网卡地址等信息配置的不正确,导致发送心跳失败。
4)其他服务配置不当等原因,如心跳的方式不同,心跳广播冲突,软件出现了BUG等
防止脑裂发生的方法总结:
发生脑裂的时候,对业务的影响是及其严重的,有的时候甚至是致命的。如:两台高可用的服务器对之间发生脑裂,导致互相竞争同一个IP资源,就如同我们局域
网内常见的IP地址冲突一样,两个机器就会有一个或者两个不正常,影响用户正常访问服务器。如果是应用在数据库或者是存储服务这种极重要的高可用上,那就导致
用户发布的数据间断的写在两台服务器上的恶果,最终数据恢复及困难或者是难已恢复
实际的生产环境中,我们可以从以下几个方面来防止裂脑的发生:
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高可用服务器对
说的,这点,请注意下)
VIP/IP 别名/辅助IP:
真实IP,又被称为管理IP,一般是配置在物理网卡上的实际IP,这可以看做是你本人的真实姓名,如:张三。在负载均衡以及高可用环境中,管理IP是不会对外提
供用户的访问服务的,而是仅作管理服务器使用,如ssh可以通过这个管理IP连接服务器
VIP是虚拟的IP,只是个概念而已,可能会误导,实际上就是Heartbeat临时绑在物理网卡上的别名IP,如eth0:x,x为0-255的任意数字,可以在一块网卡上绑
定多个别名,这样做的好处是当提供服务的服务器宕机之后,在接管的服务器上会直接会自动配置上同样的VIP提供服务。如果使用管理IP的话,来回迁移就难以做
到,而且,管理IP迁移过去了我们就不能够登录到这台机器上,这就需要到机房登陆了。VIP的实质就是确保两台服务器有一个管理IP不懂,就是随时可以连上机器,
然后,增加绑定其他的VIP,这样就算VIP转移走了,也不至于服务器本身连不上,因为还有管理的IP呢
手工配置VIP的方法:
ifconfig eth0:1 124.42.61.109 netmask 255.255.255.224 up(ip alias) --》heartbeat2软件默认是使用这个命令来添加VIP的
ip addr add 10.0.15.1/24 broadcast 10.0.15.255 dev eth1(辅助Ip)--》keepalived以及heartbeat3采用的方案添加VIP的
注意:使用ip addr能够查看到包括别名和辅助IP,用ifconfig无法查到辅助IP的配置情况
手工删除VIP的方法:
ip addr del 10.0.15.1/24 broadcast 10.0.15.255 dev eth1(辅助IP)
ifconfig eth0:1 124.42.61.109 netmask 255.255.255.244 down(ip alias)
HeartBeat配置文件:
heartbeat的默认配置文件的目录为/etc/ha.d heartbeat的常用配置文件有三个,分别为ha.cf,authkey,haresource.
ha.cf heartbeat参数配置文件 在这里配置一些基本的参数
authkey heartbeat认证文件 高可用服务器对之间根据对端的authkey,对对端的进行认证
haresource heartbeat的资源文件 如配置资源以及一些脚本程序
重要资源目录:/etc/ha.d/resource.d/,如果以后自己开发程序,就放到这个地方即可,然后在haresource文件里直接调用
HeartBeat的一些介绍和功能上的一些总结的更多相关文章
- Ionic 的 ng-class 在聊天功能上面的巧妙运用
很多人在问我是ionic好呢?还是react好呢? 其实我只想告诉你去看文档啊,不用用怎么知道哪个合适呢? 嘿嘿但是真的这么问的时候我也不会这么回答的,那岂不是太张狂了哈哈哈 react我确实没有用过 ...
- 《微信小程序七日谈》- 第五天:你可能要在登录功能上花费大力气
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...
- Odoo9以后的社区版本和企业版功能上的区别
Odoo9以后的社区版本和企业版除了授权模式的区别外,整理功能上的区别 透过功能设置菜单整理的区别如下,主要功能模块. 未包括所有模块,毕竟模块太多了. 以下是企业版有,而社区版没有的功能.
- 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)
就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https:// ...
- 高可用-软件heartbeat的入门介绍
注:参考互联网整理. 一.简介Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(r ...
- APK扩展文件介绍、功能及用法
APK扩展文件介绍 Android Market (Google Play Store)中每一个APK文件的最大限制是50MB.假设您的程序中包括大量的数据文件,曾经您仅仅能把这些数据文件放到自己的s ...
- 我的第一个python web开发框架(15)——公司介绍编辑功能
完成登录以后,就会进入后台管理系统的主界面,因为这个是小项目,所以导航菜单全部固化在HTML中,不能修改.一般后台还会有一个欢迎页或关键数据展示的主页面,小项目也没有多大的必要,所以登录后直接进入公司 ...
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
- 【八】Kubernetes 五种资源控制器详细介绍以及功能演示
一.控制器说明 Pod 的分类: 自主式 Pod:该类型的 Pod 无论是异常退出还是正常退出都不会被创建,也就是说没有对应的管理者. 控制器管理的 Pod:该类型 Pod 在控制器的生命周期里,控制 ...
随机推荐
- phalcon:跟踪sql语句
在phalcon里有一个\Phalcon\Db\Profiler 类,这个类可以用来记录sql语句并计算消耗的时间.那么如何使用它呢? 手册里其实已经提供了方法,总结如下: 1.向$di里注册prof ...
- 设置ASP.NET页面的运行超时时间详细到单个页面及站点
这篇文章主要介绍了如何设置ASP.NET页面的运行超时时间,包括全局超时时间.单个站点超时时间.单个页面请求超时时间,需要的朋友可以参考下 全局超时时间 服务器上如果有多个网站,希望统一设置一 ...
- Activity 属性设置大全
activity属性设置大全 android:allowTaskReparenting=["true"|"false"] 是否允许activity更换从属的任务 ...
- 解决 xx.h has been modified since the precompiled header 系统头文件被修改
fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Dev ...
- kernel/panic.c
/* * linux/kernel/panic.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* * This function is us ...
- 面试题一 链表中倒数第k个结点
void findLastK(LinkedNode head, int k, int n){ if (head == NULL || k == 0) return; LinkedNode t1 = h ...
- Django教程
开发环境:Centos7,Django 1.10,Python 2.7 Django入门 本教程内容大部分来源于Django官网,有翻译不到位的欢迎大家指正,这部分的内容有助于新手快速搭建一个网站,让 ...
- OC基础—多态(超级简单)
前言: oc中的指针类型变量有两个:一个是编译时类型,一个是运行时类型,编译时类型由声明该变量是使用的类型决定,运行时类型由实际赋给该变量的对象决定.如果编译时类型和运行时类型不一致,就有可能出现多态 ...
- bzoj1513: [POI2006]Tet-Tetris 3D
Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...
- 从头来之【图解针对虚拟机iOS开发环境搭建】
1.下载Mac OSX10.9. 点击下载 2.下载VMware Workstation 10,点击下载,网页中包含序列号.安装VM. 3.VM10-MacOS补丁.用于创建苹果虚拟机. 安装VM就不 ...