五、Heartbeat 消息类型

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

  • 心跳消息
  • 集群转换消息
  • 重传请求

心跳消息

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

集群转换消息

ip-request 和 ip-request-resp

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

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

重传请求

rexmit-request 控制重传心跳请求。此消息不太重要,细节就不浪费笔墨了。

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

心跳实现方式及查看心跳消息

heartbeat集群心跳配置及mgmt调用修改方法
     集群心跳可在文件etc/ha.d/ha.cf中进行配置,如下所示:

node server-1 server-2
bcast eth0
ucast eth1 192.168.127.132

心跳有如下四种类型:串口、广播、多播、ucast,以下分别进行介绍:

#serial 串口名称

#serial /dev/ttyS0 # Linux
#serial /dev/cuaa0 # FreeBSD
#serial /dev/cuad0 # FreeBSD 6.x
#serial /dev/cua/a # Solaris

#广播heartbeats的接口

#bcast eth0 # Linux
#bcast eth1 eth2 # Linux
#bcast le0 # Solaris
#bcast le1 le2 # Solaris

#设置一个多播心跳介质

#mcast [dev] [mcast group] [port] [ttl] [loop]
#[dev]发送/接收heartbeats的设备
#[mcast group]加入到的多播组(D类多播地址224.0.0.0 - 239.255.255.255)
#[port]端口用于发送/接收udp(设置这个值跟上面的udpport为相同值)
#[ttl]外流的heartbeats的ttl值。这个影响多播包能传播多远。(0-255)必须要大于0 。
#[loop]为多播heartbeat开关loopback。如果enabled,一个外流的包将被回环到原处并由发送它的接口接收。(0或者1)设置这个值为0。
#mcast eth0 225.0.0.1 694 1 0

#配置一个unicast / udp heartbeat 介质

#ucast [dev] [peer-ip-addr]
#[dev]用于发送/接收heartbeat的设备
#[peer-ip-addr]包被发送到的对等的IP地址
#ucast eth0 192.168.1.2

Heartbeat IP 地址接管和故障转移

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

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

七、VIP/IP 别名/辅助 IP

虚拟 IP

虚拟 IP 即 VIP,在老男孩看来,这只是个概念而已,可能会误导你,实际上就是 heartbeat 临时绑定在物理网卡上的别名 IP(heartbeat3 以上也采用了辅助 IP),如 eth0:x ,x 为 0-255 的任意数字,你可以在一块网卡上绑定多个别名。这个 VIP 可以看作是你上网的 QQ 网名、昵称、外号等,如:一提到老男孩,很多人都知道我,这个老男孩就是我的网名,在实际生产环境中,需要在 DNS 配置中把网站域名地址解析到这个 VIP 地址,由这个 VIP 对用户提供服务。如: 把 www.baidu.com 解析到 VIP 211.100.98.99 上。

这样做的好处就是当提供服务的服务器宕机以后,在接管的服务器上回直接会自动配置上同样的 VIP 提供服务。如果是使用管理 IP 的话,来回迁移就难以做到,而且,管理 IP 迁移走了。我们就只能取机房连接服务器了。 VIP 的实质就是确保两台服务器各有一个管理 IP 不懂,就是随时可以连上机器,然后,增加绑定其他的 VIP,这样就算 VIP 转移走了,也不至于服务器本身连不上,因为还有管理 IP 呢,读者应该明白了吧?

Linux 系统给网卡配置 VIP 的方法常见的有两种,即别名 IP(alias ip)以及辅助 IP(secondary ip address)。

the Linux kernel supports both IP aliases and secondary IP addresses, though IP aliases are deprecated in favor of secondary IP addresses.

ip alias 和 secondary ip address 是两种不同的实现方式,用来在 Linux 系统中给同一个物理网卡增加多个 ip 地址。

别名 IP (alias ip)

ip alias 是由 Linux 系统的 ifconfig 命令来创建和维护的,别名 IP 就是在网卡设备上绑定的第二个及以上的 IP,例如:

1. 手工配置别名 VIP 的方法
          ifconfig eth0:1 10.0.0.7 netmask 255.255.255.0 up # ip alias 这个配置是临时的,重启网卡就丢了。
          或者 ifconfig eth0:1 10.0.0.7/24 up

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

[root@ha1 ~]# cat /etc/redhat-release
CentOS release 5.8 (Final)
[root@ha1 ~]# ip addr help
Usage: ip addr {add|del} IFADDR dev STRING
              ip addr {show|flush} [ dev STRING ] [ scope SCOPE-ID ]
                                                  [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ]
IFADDR := PREFIX | ADDR peer PREFIX
                    [ broadcast ADDR ] [ anycast ADDR ]
                    [ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG := [ permanent | dynamic | secondary | primary | tentative | deprecated ]

查看ip命令是通过哪个rpm包安装的:

[root@ha1 ~]# whereis ip
ip: /sbin/ip /usr/share/man/man8/ip.8.gz /usr/share/man/man7/ip.7.gz
[root@ha1 ~]# which ip
/sbin/ip
[root@ha1 ~]# rpm -qf /sbin/ip
iproute-2.6.18-13.el5

2、手工查看 VIP 别名的方法
          使用别名的方法配置的 VIP,可通过 ifconfig 查看,也可以通过 ip add 查看。
          使用辅助 IP 的方法配置的 VIP,可通过 ip add 查看。

[root@ha1 ~]# ifconfig eth0:0 172.16.1.21 netmask 255.255.255.0 up
[root@ha1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:11:5D:AF  inet addr:172.16.1.20  Bcast:172.16.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fe11:5daf/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:2651 errors:0 dropped:0 overruns:0 frame:0TX packets:172 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:550072 (537.1 KiB)  TX bytes:26707 (26.0 KiB)eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:11:5D:AF  inet addr:172.16.1.21  Bcast:172.16.1.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:336 (336.0 b)  TX bytes:336 (336.0 b)[root@ha1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:11:5d:af brd ff:ff:ff:ff:ff:ffinet 172.16.1.20/24 brd 172.16.1.255 scope global eth0inet 172.16.1.21/24 brd 172.16.1.255 scope global secondary eth0:0inet6 fe80::20c:29ff:fe11:5daf/64 scope link valid_lft forever preferred_lft forever
[root@ha1 ~]# ip addr add 172.16.1.22/24 dev eth0
[root@ha1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:11:5D:AF  inet addr:172.16.1.20  Bcast:172.16.1.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:fe11:5daf/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:2937 errors:0 dropped:0 overruns:0 frame:0TX packets:229 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:593474 (579.5 KiB)  TX bytes:36911 (36.0 KiB)eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:11:5D:AF  inet addr:172.16.1.21  Bcast:172.16.1.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:336 (336.0 b)  TX bytes:336 (336.0 b)[root@ha1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:11:5d:af brd ff:ff:ff:ff:ff:ffinet 172.16.1.20/24 brd 172.16.1.255 scope global eth0inet 172.16.1.21/24 brd 172.16.1.255 scope global secondary eth0:0inet 172.16.1.22/24 scope global secondary eth0inet6 fe80::20c:29ff:fe11:5daf/64 scope link valid_lft forever preferred_lft forever

3、手工删除辅助 IP 的方法
          ip addr del 172.16.1.22/24 broadcast 172.16.1.255 dev eth0     #广播地址可以加也可以不加
          ip addr del 172.16.1.22/24 dev eth0

小结:
     heartbeat 2.1.4 及以前版本使用的是 别名 IP, heartbeat 2.1.4 以后版本 使用的都是 辅助 IP,提供 VIP 服务的。而 Keepalived 一直都是用的辅助 IP 提供服务的。

八、Heartbeat 相关资源默认目录

下面以 yum/rpm 包的方式为例讲解:
     heartbeat 启动脚本: /etc/init.d/

[root@ha1 ~]# ll /etc/init.d/heartbeat
-rwxr-xr-x.  1 root root 10485 Dec  3 00:37 /etc/init.d/heartbeat

heartbeat 资源目录: /etc/ha.d/resource.d/ <===脚本,这些控制资源的脚本,用来被 HA 调用,也可以放在 /etc/init.d / 下。

提示:把脚本放到上面两个路径其中任意一个下面,然后在 heartbeat 的 haresource 配置文件中配置脚本名称就能调用到该脚本,进而控制资源和服务的启动和关闭。

heartbeat 配置文件目录:/etc/ha.d/

九、Heartbeat 配置文件

heartbeat 的默认配置文件目录为 /etc/ha.d。 heartbeat 常见的配置文件有三个,分别为:ha.cf、authkey、haresource,如果你细看,可以发现名字信息就如其实际功能,这里列成表格方便大家学习了解。

配置名称 作用 备注
ha.cf heartbeat参数配置文件 在这里配置 heartbeat 的一些基本参数
authkey heartbeat 认证文件 高可用服务器对之间根据对端的 authkey,对对端进行认证。
haresource heartbeat 资源配置文件 如配置启动 IP 资源及脚本程序、服务等。调用 /etc/ha.d/resource.d/ 下面的配置

重要资源目录:/etc/ha.d/resource.d ,如果以后自己开发程序被 heartbeat 控制,就放在这个地方,然后在 haresource 文件里直接调用。

Heartbeat高可用软件服务--1.Heartbeat介绍(2)相关推荐

  1. 轻松实现基于Heartbeat的高可用web服务集群

    高可用集群就是为了保证某项服务能够时时在线,我们可以通过几个9来衡量一个高可用集群提供服务的稳定性,例如5个9的高可用集群必须保证服务一年在线的时间占99.999%,也就是说一年的时间中仅允许服务电线 ...

  2. 【架构】Heartbeat高可用服务(2)

    Heartbeat高可用服务 [13]Heartbeat发展情况及分支软件介绍 有关Heartbeat分3个分支的说明 自2.1.4版本后,Linux-HA将Heartbeat分包成三个不同的子项目: ...

  3. Haproxy+Heartbeat 高可用集群方案操作记录

    之前详细介绍了haproxy的基础知识点, 下面记录下Haproxy+Heartbeat高可用web集群方案实现过程, 以加深理解. 架构草图如下: 1) 基本环境准备 (centos6.9系统) 1 ...

  4. mysql-mmm 集群高可用软件介绍

    mysql-mmm 集群高可用软件介绍 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)    关于mysql主主复制配置的监 ...

  5. keepalived 多个应用_Keepalived高可用软件概述

    Keepalived高可用软件概述: 1)互联网主要的高可用软件:Keepalived.Hearttbeat.其中Keepalived是轻量级的,Keepalived是一款开源.免费的实现网站.数据库 ...

  6. 高可用 Redis 服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量 ...

  7. 如何搭建高可用Redis服务

    作者:漫步CODE人生 来自:cnblogs.com/scode2/p/8670980.html 题记 基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常 ...

  8. 高可用Redis服务架构分析与搭建

    作者:HorstXu 原文:https://www.cnblogs.com/xuning/p/8464625.html 基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数 ...

  9. php redis 投票_高可用Redis服务架构分析与搭建

    HorstXuhttps://www.cnblogs.com/xuning/p/8464625.html 基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经 ...

  10. 设计高可用Web服务

    转载请注明出处:设计高可用Web服务 高可用的设计可以说是web服务架构的目标,如果服务达不到高可用,万一出现故障将会对产品带来重大的负面影响.高可用的架构就是能够让服务在任何情况下都能正常响应,比如 ...

最新文章

  1. Codewars Vasya - Clerk--6 kyu--Python解法
  2. 【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
  3. 分布式系统的事务处理
  4. ThreadLocal 详解
  5. 【项目实战】vue+springboot项目使用富文本编辑器实现长文章发表和展示
  6. 数据虚拟化工具已进入IT战略领域
  7. 边缘设备上的实时AI人员检测:选择深度学习模型
  8. 串灯控制盒去掉怎么接_暖通小兵设计系列16-集线盒(中央控制器)简介(余小其转载版本)...
  9. 鼠标移动到曲线图上显示值
  10. Interior-point methods(内点法)学习笔记
  11. 如何设置Idea字体颜色
  12. matlab标注图例位置,MATLAB中标注图例
  13. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java15 的新特性
  14. matlab ga函数详解,求对ga函数的详细解释
  15. win10检查更新后,蓝牙没了,卸载usb也没有用,蓝牙 未知usb设备 设备描述符请求失败
  16. 记录几个程序员接单搞副业的网站
  17. 深度学习中的IoU概念理解
  18. redis incr mysql_redis命令_INCR
  19. 如何应用font Awesome矢量字体图标介绍
  20. 优教信使同步辅学总是显示服务器,优教信使同步学习卡在教学中的应用论文

热门文章

  1. 解决笔记本电脑使用网线正常,使用无线网络速度慢的问题
  2. android view viewgroup 区别,Android笔记:View ViewGroup 对比
  3. java 逆矩阵_用Java实现求逆矩阵
  4. 怎么理解本征无序态的蛋白质(Intrinsically disordered proteins)
  5. IDEA社区版配置Tomcat
  6. 传教士与野人问题深度优先搜索算法(DFS)-Python实现
  7. 远程服务器键盘变成快捷键?
  8. Python3判断字符中英文数字符号
  9. 截止失真放大电路_这些基本放大器的知识,你会了吗?
  10. 大数据迁徙图:逃离北上广,他们竟然去了这里!