5做的集群心跳线断开,为什么在我断开其中一台主机时,自动迁移

Ricci: ricci是安装在每个后端的每个节点上的,且监听在11111上,luci管理集群上的各个节点就是通过和节点上的ricci进行通信

Luci:luci是用来配置和管理集群,监听在8084上

1.作用:在HA集群坏境中,备用服务器B通过心跳线来发送数据包来看主服务器A是否还活着,主服务器A接收了大量的客户端访问请求,服务器A的CPU负载达到100%响应不过来了,资源已经耗尽,没有办法回复服务器B数据包时,(回复数据包会延迟),服务器B认为服务器A已经挂了,于是备用服务器B把资源夺过来,自己做主服务器,过了一段时间服务器A响应过来了,服务器A觉得自己是老大,服务器B觉得自己也是老大,他们两个就挣着抢夺资源,集群资源被多个节点占有,两个服务器同时向资源写数据,破坏了资源的安全性和一致性,这种情况的发生叫做“脑裂”。服务器A负载过重,响应不过来了,有了Fence机制,Fence会自动的把服务器A给kill掉,以阻止“脑裂”的发生。

2.原理:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。

3.类型:硬件Fence:电源Fence,通过关掉电源来踢掉坏的服务器 软件Fence:Fence卡(智能卡),通过线缆、软件来踢掉坏的服务器 。


  

  

##:操作之前需在几个节点之间配置好解析

登陆到管理服务器的luci界面,登陆密码是安装luci虚拟机的root密码

查看集群的系统中每个节点以及服务的运行状态。

##: 在上面的图中,可以看到每个节点都处于“Online”状态,表明每个节点都运行正常,如果某个节点退出了集群,对应的状态应该是“Offline”,通过“ID Status”一列可以知道集群节点的对应关系,例如,server1在此集群中对应的就是“Node 1”节点,同理,server2对应的是“Node 2”节点。了解集群节点顺序有助于对集群日志的解读。


  
 









 
添加一个服务,这里以httpd为例

启动启动Apache服务检测是否正常显示网页,检测完成后server1和server2均需关闭httpd服务
##: 交给集群的资源一定是屏蔽掉的,因为要交给集群去开启








 



更改访问主节点为server2




  
 


在server1重新启动之后不做操作,直接将server2内核崩溃测试,发现网页自动调转到server1的界面了。 这就是故障切换。

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

  通过修改Heartbeat的软件的配置文件,可以制定那一台Heartbeat服务器作为主服务器,则另一台将自动成为热备服务器。然后在热备服务器上配置Heartbeat

守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定时间内为监听到来自主服务器的心跳,就会启动故障转义程序,并取得主服务器上的相关资源服务的

所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的。

   以上的描述heartbeat的主备模式,heartbeat还支持主主模式,即两台服务器互为主备,这是他们之间还会互相发送报文来告诉对方自己的当前的状态,如果在

指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失效或者是已经宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方

主机上的资源或者是服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务能够不间断的持续的提供服务。注意:所谓的业务不间断,

在故障转移期间也是需要切换时间的,heartbeat的切换时间是5-20秒。

  3)中间的连接线路故障

应用服务故障则不会产生切换,可以通过服务宕机把heartbeat服务停掉。

  讲过上面的描述,要部署heartbeat服务,至少需要两台主机才能完成。那么,要实现高可用服务,这两台主机之间,是如何做到互相通信互相监控的呢/

  下面是两台heartbeat主机之间通信的一些常用的可行的方法:

    1)串行电缆,即所谓的串口(首选,缺点是距离不能太远)

    2)一根以太网电缆量网口直连(生产环境中常用的方式)

    3)以太网电缆,通过交换机等网络设备连接(次选,原因是增加了故障点,不好排查故障,同时,线路不是专用的心跳线,容易受其他数据传输的影响,导

      致心跳报文发送问题)

    由于两台高可用服务器之间在指定的时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源以及服务的所有权,而此时的两台高可用服务器

对都还活着并作正常运行,这样就会导致同一个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高可用软件在工作的过程中,一般来说,有三种消息的类型,具体为:

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

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

    备服务器释放主服务器失败时取得的资源以及服务后,就会通过ip-request-resp消息通知主服务器它不在拥有该资源以及服务,主服务器收到来自备节点的

    ip-request-resp消息通知后,启动失败时释放的资源以及服务,并开始提供正常的访问服务。

    rexmit-request控制重传心跳请求。此消息不太重要,细节就不多介绍了

  提示:以上的心跳控制消息都使用的是UDP协议发送到/etc/ha.d/ha.cf文件指定到任意的端口,或者指定到多播地址。

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

  ARP广播:在主服务器故障的时候,备用节点接管资源后,会强制更新所有的客户端本地的ARP表(即清除客户端本地缓存的失败服务器的VIP地址和mac地址的

  解析记录)。确保客户端和新的主服务器进行对话。

  (这提到的客户端机器是和Heartbeat高可用服务器对在同一个网络中的客户机,并不是最终的互联网用户,这里的客户端及其是相对Heartbeat高可用服务器对

  说的,这点,请注意下)

  真实IP,又被称为管理IP,一般是配置在物理网卡上的实际IP,这可以看做是你本人的真实姓名,如:张三。在负载均衡以及高可用环境中,管理IP是不会对外提

供用户的访问服务的,而是仅作管理服务器使用,如ssh可以通过这个管理IP连接服务器    

  VIP是虚拟的IP,只是个概念而已,可能会误导,实际上就是Heartbeat临时绑在物理网卡上的别名IP,如eth0:x,x为0-255的任意数字,可以在一块网卡上绑

定多个别名,这样做的好处是当提供服务的服务器宕机之后,在接管的服务器上会直接会自动配置上同样的VIP提供服务。如果使用管理IP的话,来回迁移就难以做

到,而且,管理IP迁移过去了我们就不能够登录到这台机器上,这就需要到机房登陆了。VIP的实质就是确保两台服务器有一个管理IP不懂,就是随时可以连上机器,

然后,增加绑定其他的VIP,这样就算VIP转移走了,也不至于服务器本身连不上,因为还有管理的IP呢

  手工配置VIP的方法:

  注意:使用ip addr能够查看到包括别名和辅助IP,用ifconfig无法查到辅助IP的配置情况

  手工删除VIP的方法:

我要回帖

更多关于 集群心跳线断开 的文章

 

随机推荐