阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux-HA开源软件Heartbeat

269次阅读
没有评论

共计 24305 个字符,预计需要花费 61 分钟才能阅读完成。

一、heartbeat 的概念
Linux-HA 的全称是 High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强 linux 可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。其中 Heartbeat 就是 Linux-HA 项目中 的一个组件,也是目前开源 HA 项目中最成功的一个例子,它提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等,自 1999 年开始到现在,Heartbeat 在行业内得到了广泛的应用,也发行了很多的版本,可以从 Linux-HA 的官方网站 www.linux-ha.org 下载到 Heartbeat 的最新版本。

 
二、HA 集群中的相关术语

1.节点(node)
运行 heartbeat 进程的一个独立主机,称为节点,节点是 HA 的核心组成部分,每个节点上运行着操作系统和 heartbeat 软件服务,在 heartbeat 集群中,节点有主次之分,分别称为主节点和备用 / 备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件 系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
2.资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat 中,可以当做资源的实体有:
  磁盘分区、文件系统
  IP 地址
  应用程序服务
  NFS 文件系统
3.事件(event)
也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA 的测试也是基于这些事件来进行的。
4.动作(action)
 事件发生时 HA 的响应方式,动作是由 shell 脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。

三、Heartbeat 的组成与原理

1.Heartbeat 的组成
Heartbeat 提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等等,目前的最新版本是 Heartbeat2.x,这里的讲述也是以 Heartbeat2.x 为主,下面介绍 Heartbeat2.0 的内部组成,主要分为以下几大部分:
  heartbeat:节点间通信检测模块
  ha-logd:集群事件日志服务
  CCM(ConsensusCluster Membership):集群成员一致性管理模块
  LRM(LocalResource Manager):本地资源管理模块
  Stonith Daemon:使出现问题的节点从集群环境中脱离
  CRM(Clusterresource management):集群资源管理模块
  Cluster policy engine:集群策略引擎
  Cluster transition engine:集群转移引擎
图 1 显示了 Heartbeat2.0 内部结构组成:

Linux-HA 开源软件 Heartbeat

 Heartbeat 仅仅是个 HA 软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序,要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如 ipfail、Mon、Ldirector 等。Heartbeat 自身包含了几个插件,分别是 ipfail、Stonith 和 Ldirectord,介绍如下:
    ipfail 的功能直接包含在 Heartbeat 里面,主要用于检测网络故障,并作出合理的反应,为了实现这个功能,ipfail 使用 ping 节点或者 ping 节点组来检测网络连接是否出现故障,从而及时的做出转移措施。
    Stonith 插件可以在一个没有响应的节点恢复后,合理接管集群服务资源,防止数据冲突,当一个节点失效后,会从集群中删除,如果不使用 Stonith 插件,那么失效的节点可能会导致集群服务在多于一个节点运行,从而造成数据冲突甚至是系统崩溃。因此,使用 Stonith 插件可以保证共享存储环境中的数 据完整性。
    Ldirector 是一个监控集群服务节点运行状态的插件。Ldirector 如果监控到集群节点中某个服务出现故障,就屏蔽此节点的对外连接功能,同时将后续请求转移到正常的节点提供服务,这个插件经常用在 LVS 负载均衡集群中,关于 Ldirector 插件的使用,将在后面详细讲述。
  同样,对于操作系统自身出现的问题,Heartbeat 也无法监控,如果主节点操作系统挂起,一方面可能导致服务中断,另一方面由于主节点资源无法释放,而备份节点却接管了主节点的资源,此时就发生了两个节点同时争用一个资源的状况。
针对这个问题,就需要在 linux 内核中启用一个叫 watchdog 的模块,watchdog 是一个 Linux 内核模块,它通过定时向 /dev /watchdog 设备文件执行写操作,从而确定系统是否正常运行,如果 watchdog 认为内核挂起,就会重新启动系统,进而释放节点资源。
在 linux 中完成 watchdog 功能的软件叫 softdog,softdog 维护一个内部计时器,此计时器在一个进程写入 /dev/watchdog 设备文件时更新,如果 softdog 没有看到进程写入 /dev/watchdog 文件,就认为内核可能出了故障。watchdog 超时周期默认是一分钟,可以通过将 watchdog 集成到 Heartbeat 中,从而通过 Heartbeat 来监控系统是否正常运行。

2.Heartbeat 的工作原理
从图 18.1 可以看出,heartbeat 内部结构有三大部分组成。
集群成员一致性管理模块(CCM)用于管理集群节点成员,同时管理成员之间的关系和节点间资源的分配,heartbeat 模块负责检测主次节点的运行状态,以决定节点是否失效。ha-logd 模块用于记录集群中所有模块和服务的运行信息。
本地资源管理器(LRM)负责本地资源的启动,停止和监控,一般由 LRM 守护进程 lrmd 和节点监控进程(Stonith Daemon)组成,lrmd 守护进程负责节点间的通信,Stonith Daemon 通常是一个 Fence 设备,主要用于监控节点状态,当一个节点出现问题时处于正常状态的节点会通过 Fence 设备将其重启或关机以释放 IP、磁盘等资源,始终保持资源被一个节点拥有,防止资源争用的发生。
集群资源管理模块(CRM)用于处理节点和资源之间的依赖关系,同时,管理节点对资源的使用,一般由 CRM 守护进程 crmd、集群策略引擎和集群转移引擎 三个部分组成,集群策略引擎(Cluster policy engine)具体实施这些管理和依赖,集群转移引擎(Clustertransition engine)监控 CRM 模块的状态,当一个节点出现故障时,负责协调另一个节点上的进程进行合理的资源接管。
在 Heartbeat 集群中,最核心的是 heartbeat 模块的心跳监测部分和集群资源管理模块的资源接管部分,心跳监测一般由串行接口通过串口线来实现,两个节点之间通过串口线相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时资源接管模块将启 动,用来接管运行在对方主机上的资源或者服务。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-11/137436p2.htm

一、安装 heartbeat 前的准备
1.Heartbeat 集群必须的硬件
构建一个 Heartbeat 集群系统必须的硬件设备有:
l 节点服务器
l 网络和网卡
l 共享磁盘
(1)节点服务器
安装 Heartbeat 至少需要两台主机,并且对主机的要求不高,普通的 PC 服务器即可满足要求,当然,也可以在虚拟机上安装 Heartbeat,现在 Heartbeat 可以很好的运行在 Linux 系统下,很多 linux 发行版本 都自带了 Heartbeat 套件,同时,还可以运行在 FreeBSD 和 Solaris 操作系统上。
(2)网卡和网络
 Heartbeat 集群中的每个主机必须有一块网卡和一个空闲串口,网卡用于连接公用网络,串口可以通过串口线,例如 modem 电线来实现连接,用于心 跳监控节点间的状态,如果没有空闲串口的话,每个主机也可以通过两块网卡来实现 HA,其中一块网卡用于连接公用网络,另一块网卡通过以太网交叉线与两个节 点相连接。
需要说明的是:以太网交叉线和串口电线都能用于心跳监控,串口电线传输 Heartbeat 信号相对较好,如有条件,尽量使用串口线代替以太网交叉线作为节点间的心跳检测设备。
Heartbeat 支持三种类型的网络,公用网络(public network)、私用网络(private network)和串行网络(serial network)。
公用网络连接多个节点,并且允许客户端访问集群中的服务节点,私用网络提供两个节点之间点到点的访问,但是不允许客户端访问,可以通过以太网交叉线构建一个私用网络,以供节点间相互通信,串行网络也是一个点到点的连接,一般使用串行网络来传输控制信息和心跳监控。串行网络可以是一条 RS232 串口线。
(3)共享磁盘
 共享磁盘是一个数据存储设备,HA 集群中的所有节点都需要连接到这个存储设备上,在这个共享的存储设备上一般放置的是公用的、关键的数据和程序,一方面可以共享数据给所有节点使用,另一方面也保证了数据的安全性。
 Heartbeat 支持两种对共享磁盘的访问方式:独占访问和共享访问,在独占访问方式下,保持活动的节点独立使用磁盘设备,只有当活动节点释放了磁盘设备,其它节点才能接管磁盘进行使用,在共享访问方式下,集群所有节点都可以同时使用磁盘设备,当某个节点出现故障时,其它节点无需接管磁盘。共享访问方 式需要集群文件系统的支持,这一点将在下个章节讲述。
 

2.操作系统规划
 这里统一采用 Red Hat Enterprise Linux Server release 5.1 操作系统,每个节点服务器都有两块网卡,一块用作连接公用网络,另一块通过以太网交叉线连接两个节点,作为心跳监控。共享磁盘由一个磁盘阵列设备提供,两个节点共享一个磁盘分区。磁盘分区对应的硬件标识为 /dev/sdb5,挂载点为 /webdata,文件系统类型为 ext3。
网络以及 IP 地址规划如表 1 所示:
表 1

Linux-HA 开源软件 Heartbeat

 从上表可知,eth0 网络设备用于连接公用网络,eth1 网络设备用于连接私用网络,而 eth0:0 网络设备是 HA 集群虚拟出来的服务 IP 地址,用于对外提供应用程序服务。基本的拓扑结构如图 2 所示:

Linux-HA 开源软件 Heartbeat

接着配置每个节点的 /etc/hosts 文件,保证两个节点内容一致,/etc/hosts 文件内容如下:
[root@node1 ~]#more /etc/hosts
192.168.60.132  node1
192.168.60.133  node2
10.1.1.1        priv1
10.1.1.2    priv1
 一切准备就绪,接下来开始安装 heartbeat。
 

二、安装 heartbeat

1.获取 heartbeat
Heartbeat 到目前为止发行了两个主版本,Heartbeat1.x 和 Heartbeat2.x,Heartbeat1.x 仅仅允许创建 2 个节点的 集群,提供基本的高可用性 failover 服务。Heartbeat2.x 提供了增强的特性,允许创建多个节点的集群,又支持模块结构的配置方法-集群资 源管理器(Cluster Rescource Manager-CRM),CRM 可以支持最多 16 个节点,这里我们选择 heartbeat2.0.8 版本进行介绍。
        Heartbeat 的下载地址为:http://linux-ha.org/download/index.html,找到 heartbeat2.0.8 版本,下载类似 heartbeat-2.0.8.tar.gz 的源代码包即可。此外在安装 heartbeat 时需要同时安装 libnet 工具包,Libnet 是一个高层次的 API 工具,可以从 http://www.packetfactory.net/libnet/ 下载到,现在的稳定版本是 1.1.2.1,下载后的包名为 libnet.tar.gz。
2.安装 heartbeat
 接下来需要在两个节点安装 heartbeat,安装过程很简单,只需解压编译、安装即可,这里不再详述,在两个节点执行相同的操作,下面是在 node1 上的安装过程:
[root@node1 ~]#tar -zxvf libnet.tar.gz
[root@node1 ~]#cd libnet
[root@node1 ~/libnet]#./configure
[root@node1 ~/libnet]#make
[root@node1 ~/libnet]#make install
[root@node1 ~]#tar zxf heartbeat-2.0.8.tar.gz
[root@node1 ~]#cd heartbeat-2.0.8
[root@node1 ~/heartbeat-2.0.8]#./ConfigureMe configure \
> –disable-swig –disable-snmp-subagent
[root@node1 ~/heartbeat-2.0.8]#make
[root@node1 ~/heartbeat-2.0.8]#make install
[root@node1 ~/heartbeat-2.0.8]#cp doc/ha.cf doc/haresources doc/authkeys/etc/ha.d/
[root@node1 ~/heartbeat-2.0.8]#cp ldirectord/ldirectord.cf /etc/ha.d/
[root@node1 ~/heartbeat-2.0.8]#groupadd -g 694 haclient
[root@node1 ~/heartbeat-2.0.8]#useradd -u 694 -g haclient hacluster

一、heartbeat 的概念
Linux-HA 的全称是 High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强 linux 可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。其中 Heartbeat 就是 Linux-HA 项目中 的一个组件,也是目前开源 HA 项目中最成功的一个例子,它提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等,自 1999 年开始到现在,Heartbeat 在行业内得到了广泛的应用,也发行了很多的版本,可以从 Linux-HA 的官方网站 www.linux-ha.org 下载到 Heartbeat 的最新版本。

 
二、HA 集群中的相关术语

1.节点(node)
运行 heartbeat 进程的一个独立主机,称为节点,节点是 HA 的核心组成部分,每个节点上运行着操作系统和 heartbeat 软件服务,在 heartbeat 集群中,节点有主次之分,分别称为主节点和备用 / 备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件 系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
2.资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat 中,可以当做资源的实体有:
  磁盘分区、文件系统
  IP 地址
  应用程序服务
  NFS 文件系统
3.事件(event)
也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA 的测试也是基于这些事件来进行的。
4.动作(action)
 事件发生时 HA 的响应方式,动作是由 shell 脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。

三、Heartbeat 的组成与原理

1.Heartbeat 的组成
Heartbeat 提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等等,目前的最新版本是 Heartbeat2.x,这里的讲述也是以 Heartbeat2.x 为主,下面介绍 Heartbeat2.0 的内部组成,主要分为以下几大部分:
  heartbeat:节点间通信检测模块
  ha-logd:集群事件日志服务
  CCM(ConsensusCluster Membership):集群成员一致性管理模块
  LRM(LocalResource Manager):本地资源管理模块
  Stonith Daemon:使出现问题的节点从集群环境中脱离
  CRM(Clusterresource management):集群资源管理模块
  Cluster policy engine:集群策略引擎
  Cluster transition engine:集群转移引擎
图 1 显示了 Heartbeat2.0 内部结构组成:

Linux-HA 开源软件 Heartbeat

 Heartbeat 仅仅是个 HA 软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序,要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如 ipfail、Mon、Ldirector 等。Heartbeat 自身包含了几个插件,分别是 ipfail、Stonith 和 Ldirectord,介绍如下:
    ipfail 的功能直接包含在 Heartbeat 里面,主要用于检测网络故障,并作出合理的反应,为了实现这个功能,ipfail 使用 ping 节点或者 ping 节点组来检测网络连接是否出现故障,从而及时的做出转移措施。
    Stonith 插件可以在一个没有响应的节点恢复后,合理接管集群服务资源,防止数据冲突,当一个节点失效后,会从集群中删除,如果不使用 Stonith 插件,那么失效的节点可能会导致集群服务在多于一个节点运行,从而造成数据冲突甚至是系统崩溃。因此,使用 Stonith 插件可以保证共享存储环境中的数 据完整性。
    Ldirector 是一个监控集群服务节点运行状态的插件。Ldirector 如果监控到集群节点中某个服务出现故障,就屏蔽此节点的对外连接功能,同时将后续请求转移到正常的节点提供服务,这个插件经常用在 LVS 负载均衡集群中,关于 Ldirector 插件的使用,将在后面详细讲述。
  同样,对于操作系统自身出现的问题,Heartbeat 也无法监控,如果主节点操作系统挂起,一方面可能导致服务中断,另一方面由于主节点资源无法释放,而备份节点却接管了主节点的资源,此时就发生了两个节点同时争用一个资源的状况。
针对这个问题,就需要在 linux 内核中启用一个叫 watchdog 的模块,watchdog 是一个 Linux 内核模块,它通过定时向 /dev /watchdog 设备文件执行写操作,从而确定系统是否正常运行,如果 watchdog 认为内核挂起,就会重新启动系统,进而释放节点资源。
在 linux 中完成 watchdog 功能的软件叫 softdog,softdog 维护一个内部计时器,此计时器在一个进程写入 /dev/watchdog 设备文件时更新,如果 softdog 没有看到进程写入 /dev/watchdog 文件,就认为内核可能出了故障。watchdog 超时周期默认是一分钟,可以通过将 watchdog 集成到 Heartbeat 中,从而通过 Heartbeat 来监控系统是否正常运行。

2.Heartbeat 的工作原理
从图 18.1 可以看出,heartbeat 内部结构有三大部分组成。
集群成员一致性管理模块(CCM)用于管理集群节点成员,同时管理成员之间的关系和节点间资源的分配,heartbeat 模块负责检测主次节点的运行状态,以决定节点是否失效。ha-logd 模块用于记录集群中所有模块和服务的运行信息。
本地资源管理器(LRM)负责本地资源的启动,停止和监控,一般由 LRM 守护进程 lrmd 和节点监控进程(Stonith Daemon)组成,lrmd 守护进程负责节点间的通信,Stonith Daemon 通常是一个 Fence 设备,主要用于监控节点状态,当一个节点出现问题时处于正常状态的节点会通过 Fence 设备将其重启或关机以释放 IP、磁盘等资源,始终保持资源被一个节点拥有,防止资源争用的发生。
集群资源管理模块(CRM)用于处理节点和资源之间的依赖关系,同时,管理节点对资源的使用,一般由 CRM 守护进程 crmd、集群策略引擎和集群转移引擎 三个部分组成,集群策略引擎(Cluster policy engine)具体实施这些管理和依赖,集群转移引擎(Clustertransition engine)监控 CRM 模块的状态,当一个节点出现故障时,负责协调另一个节点上的进程进行合理的资源接管。
在 Heartbeat 集群中,最核心的是 heartbeat 模块的心跳监测部分和集群资源管理模块的资源接管部分,心跳监测一般由串行接口通过串口线来实现,两个节点之间通过串口线相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时资源接管模块将启 动,用来接管运行在对方主机上的资源或者服务。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-11/137436p2.htm

一、配置主节点的 heartbeat
 Heartbeat 的主要配置文件有 ha.cf、haresources、authkeys,在 Heartbeat 安装后,默认并没有这三个文件,可以 从官方网站下载得到,也可以直接从解压的源码目录中找到,在上面的安装过程中,我们已经将这三个文件放到了 /etc/ha.d 目录下,下面分别详细介绍。

1.主配置文件 (/etc/ha.d/ha.cf)
下面对 ha.cf 文件的每个选项进行详细介绍,其中“#”号后面的内容是对选项的注释说明。
#debugfile /var/log/ha-debug
logfile /var/log/ha-log    #指名 heartbeat 的日志存放位置。
#crm yes      #是否开启 ClusterResource Manager(集群资源管理)功能。
bcast eth1    #指明心跳使用以太网广播方式,并且是在 eth1 接口上进行广播。
keepalive 2    #指定心跳间隔时间为 2 秒(即每两秒钟在 eth1 上发送一次广播)。
deadtime 30 #指定备用节点在 30 秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。
warntime 10 #指定心跳延迟的时间为十秒。当 10 秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。
initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。
udpport 694    #设置广播通信使用的端口,694 为默认使用的端口号。
baud 19200    #设置串行通信的波特率。
#serial /dev/ttyS0  #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。
#ucast eth0 192.168.1.2 #采用网卡 eth0 的 udp 单播来组织心跳,后面跟的 IP 地址应为双机对方的 IP 地址。
#mcast eth0 225.0.0.1 694 1 0 #采用网卡 eth0 的 Udp 多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast 和 mcast 分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
auto_failback on #用来定义当主节点恢复后,是否将服务自动切回,heartbeat 的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为 off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。
#stonith baytech /etc/ha.d/conf/stonith.baytech  # stonith 的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。
#watchdog /dev/watchdog #该选项是可选配置,是通过 Heartbeat 来监控系统的运行状态。使用该特性,需要在内核中载入 ”softdog” 内核 模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入 ”insmod softdog” 加载该模块。然后输入 ”grepmisc /proc/devices”(应为 10),输入 ”cat /proc/misc |grep watchdog”(应为 130)。最后,生成设备文件:”mknod /dev/watchdog c 10 130″。即可使用此功能。
node node1    #主节点主机名,可以通过命令“uanme–n”查看。
node node2    #备用节点主机名。
ping 192.168.60.1 #选择 ping 的节点,ping 节点选择的越好,HA 集群就越强壮,可以选择固定的路由器作为 ping 节点,但是最好不要选择集群中的成员作为 ping 节点,ping 节点仅仅用来测试网络连接。

respawn hacluster /usr/lib/heartbeat/ipfail #该选项是可选配置,列出与 heartbeat 一起启动和关闭的进程,该进程一般是和 heartbeat 集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是 ipfail,此进程用于检测和处理网络故障,需要配合 ping 语句指 定的 ping node 来检测网络的连通性。其中 hacluster 表示启动 ipfail 进程的身份。

2.资源文件 (/etc/ha.d/haresources)
Haresources 文件用于指定双机系统的主节点、集群 IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个 HA 节点上该文件必须完全一致,此文件的一般格式为:
node-name network  <resource-group>
node-name 表示主节点的主机名,必须和 ha.cf 文件中指定的节点名一致,network 用于设定集群的 IP 地址、子网掩码、网络设备标识等,需 要注意的是,这里指定的 IP 地址就是集群对外服务的 IP 地址,resource-group 用来指定需要 heartbeat 托管的服务,也就是这些服务可 以由 heartbeat 来启动和关闭,如果要托管这些服务,必须将服务写成可以通过 start/stop 来启动和关闭的脚步,然后放到 /etc /init.d/ 或者 /etc/ha.d/resource.d/ 目录下,heartbeat 会根据脚本的名称自动去 /etc/init.d 或者 /etc /ha.d/resource.d/ 目录下找到相应脚步进行启动或关闭操作。
下面对配置方法进行具体说明:
node1 IPaddr::192.168.60.200/24/eth0/  Filesystem::/dev/sdb5::/webdata::ext3 httpd tomcat
其中,node1 是 HA 集群的主节点,IPaddr 为 heartbeat 自带的一个执行脚步,heartbeat 首先将执行 /etc/ha.d /resource.d/IPaddr192.168.60.200/24 start 的操作,也就是虚拟出一个子网掩码为 255.255.255.0,IP 为 192.168.60.200 的地址,此 IP 为 heartbeat 对外 提供服务的网络地址,同时指定此 IP 使用的网络接口为 eth0,接着,heartbeat 将执行共享磁盘分区的挂载操作,“Filesystem::/dev/sdb5::/webdata::ext3”相当于在命令行下执行 mount 操作,即“mount –t ext3 /dev/sdb5 /webdata”,最后依次启动 httpd 和 tomcat 服务。
注意:主节点和备份节点中资源文件 haresources 要完全一样。

3.认证文件 (/etc/ha.d/authkeys)
authkeys 文件用于设定 heartbeat 的认证方式,共有三种可用的认证方式:crc、md5 和 sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果 heartbeat 集群运行在安全的网络上,可以使用 crc 方式,如果 HA 每个节点的硬件配置很高,建议使用 sha1,这种 认证方式安全级别最高,如果是处于网络安全和系统资源之间,可以使用 md5 认证方式。这里我们使用 crc 认证方式,设置如下:
auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password
需要说明的一点是:无论 auth 后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了“auth 6”,下面一定要有一行“6 认证类型”。
最后确保这个文件的权限是 600(即 -rw——-)。

二、配置备份节点的 heartbeat
  在备份节点上也需要安装 heartbeat,安装方式与在主节点安装过程一样,这里不再重述,依次安装 libnet 和 heartbeat 源码包,安装完毕,在备份节点上使用 scp 命令把主节点配置文件传输到备份节点。
    [root@node2 ~]#scp –r node1:/etc/ha.d/*  /etc/ha.d/
其中,node1 是主节点的主机名。

三、设置主节点和备份节点时间同步
在双机高可用集群中,主节点和备份节点的系统时间也非常重要,因为节点之间的监控都是通过设定时间来实现的,主备节点之间的系统时间相差在十秒以内是正常的,如果节点之间时间相差太大,就有可能造成 HA 环境的故障。解决时间同步的办法有两个,一个是找一个时间服务器,两个节点通过 ntpdate 命令定时与时间服务器进行时间校准,另一个办法是让集群中的主节点作为 ntp 时间服务器,让备份节点定时去主节点进行时间校验。

四、启动 Heartbeat
1.启动主节点的 Heartbeat
Heartbeat 安装完成后,自动在 /etc/init.d 目录下生成了启动脚步文件 heartbeat,直接输入 /etc/init.d/heartbeat 可以看到 heartbeat 脚本的用法,如下所示:
[root@node1 ~]# /etc/init.d/heartbeat 
Usage: /etc/init.d/heartbeat {start|stop|status|restart|reload|force-reload}
因而启动 heartbeat 可以通过如下命令进行:
[root@node1 ~]#service heartbeat start
或者通过
[root@node1 ~]#/etc/init.d/heartbeat start
这样就启动了主节点的 heartbeat 服务,为了让 heartbeat 能在开机自动运行以及关机自动关闭,可以手动创建以下软连接:
[root@node1 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc0.d/K05heartbeat
[root@node1 ~]#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc3.d/S75heartbeat
[root@node1 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc5.d/S75heartbeat
[root@node1 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc6.d/K05heartbeat
Heartbeat 启动时,通过“tail –f /var/log/ messages”查看主节点系统日志信息,输出如下:
[root@node1 ~]# tail -f /var/log/messages
Nov 26 07:52:21 node1 heartbeat: [3688]: info: Configuration validated.Starting heartbeat 2.0.8
Nov 26 07:52:21 node1 heartbeat: [3689]: info: heartbeat: version 2.0.8
Nov 26 07:52:21 node1 heartbeat: [3689]: info: Heartbeat generation: 3
Nov 26 07:52:21 node1 heartbeat: [3689]: info: G_main_add_TriggerHandler: Addedsignal manual handler
Nov 26 07:52:21 node1 heartbeat: [3689]: info: G_main_add_TriggerHandler: Addedsignal manual handler
Nov 26 07:52:21 node1 heartbeat: [3689]: info: glib: UDP Broadcast heartbeatstarted on port 694 (694) interface eth1
Nov 26 07:52:21 node1 heartbeat: [3689]: info: glib: UDP Broadcast heartbeatclosed on port 694 interface eth1 – Status: 1
Nov 26 07:52:21 node1 heartbeat: [3689]: info: glib: ping heartbeat started.
Nov 26 07:52:21 node1 heartbeat: [3689]: info: G_main_add_SignalHandler: Addedsignal handler for signal 17
Nov 26 07:52:21 node1 heartbeat: [3689]: info: Local status now set to: ‘up’
Nov 26 07:52:22 node1 heartbeat: [3689]: info: Link node1:eth1 up.
Nov 26 07:52:23 node1 heartbeat: [3689]: info: Link 192.168.60.1:192.168.60.1up.
Nov 26 07:52:23 node1 heartbeat: [3689]: info: Status update for node192.168.60.1: status ping
此段日志是 Heartbeat 在进行初始化配置,例如,heartbeat 的心跳时间间隔、UDP 广播端口、ping 节点的运行状态等,日志信息到这里会 暂停,等待 120 秒之后,heartbeat 会继续输出日志,而这个 120 秒刚好是 ha.cf 中“initdead”选项的设定时间。此时 heartbeat 的输出信息如下:
Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: node node2: is dead
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Comm_now_up(): updating statusto active
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Local status now set to:’active’
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Starting child client”/usr/lib/heartbeat/ipfail” (694,694)
Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: No STONITH device configured.
Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: Shared disks are not protected.
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Resources being acquired fromnode2.
Nov 26 07:54:22 node1 heartbeat: [3712]: info: Starting”/usr/lib/heartbeat/ipfail” as uid 694  gid 694 (pid 3712)
在上面这段日志中,由于 node2 还没有启动,所以会给出“node2:is dead”的警告信息,接下来启动了 heartbeat 插件 ipfail,由于我们在 ha.cf 文件中没有配置 STONITH,所以日志里也给出了“No STONITH device configured”的警告提示。
继续看下面的日志:
Nov 26 07:54:23 node1 harc[3713]: info: Running /etc/ha.d/rc.d/status status
Nov 26 07:54:23 node1 mach_down[3735]: info: /usr/lib/heartbeat/mach_down:nice_failback: foreign resources acquired
Nov 26 07:54:23 node1 mach_down[3735]: info: mach_down takeover complete fornode node2.
Nov 26 07:54:23 node1 heartbeat: [3689]: info: mach_down takeover complete.
Nov 26 07:54:23 node1 heartbeat: [3689]: info: Initial resource acquisitioncomplete (mach_down)
Nov 26 07:54:24 node1 IPaddr[3768]: INFO:  Resource is stopped
Nov 26 07:54:24 node1 heartbeat: [3714]: info: Local Resource acquisitioncompleted.
Nov 26 07:54:24 node1 harc[3815]: info: Running /etc/ha.d/rc.d/ip-request-respip-request-resp
Nov 26 07:54:24 node1 ip-request-resp[3815]: received ip-request-resp192.168.60.200/24/eth0 OK yes
Nov 26 07:54:24 node1 ResourceManager[3830]: info: Acquiring resource group:node1 192.168.60.200/24/eth0 Filesystem::/dev/sdb5::/webdata::ext3
Nov 26 07:54:24 node1 IPaddr[3854]: INFO:  Resource is stopped
Nov 26 07:54:25 node1 ResourceManager[3830]: info: Running/etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 start
Nov 26 07:54:25 node1 IPaddr[3932]: INFO: Using calculated netmask for192.168.60.200: 255.255.255.0
Nov 26 07:54:25 node1 IPaddr[3932]: DEBUG: Using calculated broadcast for192.168.60.200: 192.168.60.255
Nov 26 07:54:25 node1 IPaddr[3932]: INFO: eval /sbin/ifconfig eth0:0192.168.60.200 netmask 255.255.255.0 broadcast 192.168.60.255
Nov 26 07:54:25 node1 avahi-daemon[1854]: Registering new address record for192.168.60.200 on eth0.
Nov 26 07:54:25 node1 IPaddr[3932]: DEBUG: Sending Gratuitous Arp for192.168.60.200 on eth0:0 [eth0]
Nov 26 07:54:26 node1 IPaddr[3911]: INFO:  Success
Nov 26 07:54:26 node1 Filesystem[4021]: INFO:  Resource is stopped
Nov 26 07:54:26 node1 ResourceManager[3830]: info: Running/etc/ha.d/resource.d/Filesystem /dev/sdb5 /webdata ext3 start
Nov 26 07:54:26 node1 Filesystem[4062]: INFO: Running start for /dev/sdb5 on/webdata
Nov 26 07:54:26 node1 kernel: kjournald starting.  Commit interval 5seconds
Nov 26 07:54:26 node1 kernel: EXT3 FS on sdb5, internal journal
Nov 26 07:54:26 node1 kernel: EXT3-fs: mounted filesystem with ordered datamode.
Nov 26 07:54:26 node1 Filesystem[4059]: INFO:  Success
Nov 26 07:54:33 node1 heartbeat: [3689]: info: Local Resource acquisitioncompleted. (none)
Nov 26 07:54:33 node1 heartbeat: [3689]: info: local resource transitioncompleted
上面这段日志是进行资源的监控和接管,主要完成 haresources 文件中的设置,在这里是启用集群虚拟 IP 和挂载磁盘分区。
此时,通过 ifconfig 命令查看主节点的网络配置,可以看到,主节点已经自动绑定了集群的 IP 地址,在 HA 集群之外的主机上通过 ping 命令检测集群 IP 地址 192.168.60.200,已经处于可通状态,也就是该地址变的可用。
同时查看磁盘分区的挂载情况,共享磁盘分区 /dev/sdb5 已经被自动挂载。

2.启动备份节点的 Heartbeat
 启动备份节点的 Heartbeat,与主节点方法一样,使用如下命令:
  [root@node2 ~]#/etc/init.d/heartbeat start
  或者执行
  [root@node2 ~]#service heartbeat start
  这样就启动了备用节点的 heartbeat 服务,为了让 heartbeat 能在开机自动运行以及关机自动关闭,创建以下软连接:
[root@node2 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc0.d/K05heartbeat
[root@node2 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc3.d/S75heartbeat
[root@node2 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc5.d/S75heartbeat
[root@node2 ~]#ln -s  /etc/init.d/heartbeat /etc/rc.d/rc6.d/K05heartbeat
备用节点的 heartbeat 日志输出信息与主节点相对应,通过“tail-f /var/log/messages”可以看到如下输出:
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Link node1:eth1 up.
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Status update for node node1:status active
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Link node1:eth0 up.
Nov 26 07:57:15 node2 harc[2123]: info: Running /etc/ha.d/rc.d/status status
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Comm_now_up(): updating statusto active
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Local status now set to:’active’
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Starting child client”/usr/lib/heartbeat/ipfail” (694,694)
Nov 26 07:57:15 node2 heartbeat: [2110]: WARN: G_CH_dispatch_int: Dispatchfunction for read child took too long to execute: 70 ms (> 50 ms) (GSource:0x8f62080)
Nov 26 07:57:15 node2 heartbeat: [2134]: info: Starting”/usr/lib/heartbeat/ipfail” as uid 694  gid 694 (pid2134)   
备份节点检测到 node1 处于活动状态,没有可以接管的资源,因此,仅仅启动了网络监听插件 ipfail,监控主节点的心跳。

如何才能得知 HA 集群是否正常工作,模拟环境测试是个不错的方法,在把 Heartbeat 高可用性集群放到生产环境中之前,需要做如下五个步骤的测试,从而确定 HA 是否正常工作。

一、正常关闭和重启主节点的 heartbeat
 首先在主节点 node1 上执行“service heartbeatstop”正常关闭主节点的 Heartbeat 进程,此时通过 ifconfig 命令查看主节点网卡信息,正常情况下,应该可以看到主节点已经释放了集群的服务 IP 地址,同时也释放了挂载的共享磁盘分区,然后查看备份节点,现在备份节点已经接管了集群的服务 IP,同时也自动挂载上了共享的磁盘分区。
 在这个过程中,使用 ping 命令对集群服务 IP 进行测试,可以看到,集群 IP 一致处于可通状态,并没有任何延时和阻塞现象,也就是说在正常关闭主节点的情况下,主备节点的切换是无缝的,HA 对外提供的服务也可以不间断运行。
 接着,将主节点 heartbeat 正常启动,heartbeat 启动后,备份节点将自动释放集群服务 IP,同时卸载共享磁盘分区,而主节点将再次接管集群服务 IP 和挂载共享磁盘分区,其实备份节点释放资源与主节点绑定资源是同步进行的。因而,这个过程也是一个无缝切换。

二、在主节点上拔去网线
  拔去主节点连接公共网络的网线后,heartbeat 插件 ipfail 通过 ping 测试可以立刻检测到网络连接失败,接着自动释放 资源,而就在此时,备用节点的 ipfail 插件也会检测到主节点出现网络故障,在等待主节点释放资源完毕后,备用节点马上接管了集群资源,从而保证了网络服务不间断持续运行。
 同理,当主节点网络恢复正常时,由于设置了“auto_failback on”选项,集群资源将自动从备用节点切会主节点。
 在主节点拔去网线后日志信息如下,注意日志中的斜体部分:
Nov 26 09:04:09 node1 heartbeat: [3689]: info: Link node2:eth0 dead.
Nov 26 09:04:09 node1 heartbeat: [3689]: info: Link 192.168.60.1:192.168.60.1dead.
Nov 26 09:04:09 node1 ipfail: [3712]: info: Status update: Node 192.168.60.1now has status dead
Nov 26 09:04:09 node1 harc[4279]: info: Running /etc/ha.d/rc.d/status status
Nov 26 09:04:10 node1 ipfail: [3712]: info: NS: We are dead. :<
Nov 26 09:04:10 node1 ipfail: [3712]: info: Link Status update: Link node2/eth0now has status dead
…… 中间部分省略  ……
Nov 26 09:04:20 node1 heartbeat: [3689]: info: node1 wants to go standby [all]
Nov 26 09:04:20 node1 heartbeat: [3689]: info: standby: node2 can take our allresources
Nov 26 09:04:20 node1 heartbeat: [4295]: info: give up all HA resources(standby).
Nov 26 09:04:21 node1 ResourceManager[4305]: info: Releasing resource group:node1 192.168.60.200/24/eth0 Filesystem::/dev/sdb5::/webdata::ext3
Nov 26 09:04:21 node1 ResourceManager[4305]: info: Running/etc/ha.d/resource.d/Filesystem /dev/sdb5 /webdata ext3 stop
Nov 26 09:04:21 node1 Filesystem[4343]: INFO: Running stop for /dev/sdb5 on/webdata
Nov 26 09:04:21 node1 Filesystem[4343]: INFO: Trying to unmount /webdata
Nov 26 09:04:21 node1 Filesystem[4343]: INFO: unmounted /webdata successfully
Nov 26 09:04:21 node1 Filesystem[4340]: INFO:  Success
Nov 26 09:04:22 node1 ResourceManager[4305]: info: Running /etc/ha.d/resource.d/IPaddr192.168.60.200/24/eth0 stop
Nov 26 09:04:22 node1 IPaddr[4428]: INFO: /sbin/ifconfig eth0:0 192.168.60.200down
Nov 26 09:04:22 node1 avahi-daemon[1854]: Withdrawing address record for192.168.60.200 on eth0.
Nov 26 09:04:22 node1 IPaddr[4407]: INFO:  Success
备用节点在接管主节点资源时的日志信息如下:
Nov 26 09:02:58 node2 heartbeat: [2110]: info: Link node1:eth0 dead.
Nov 26 09:02:58 node2 ipfail: [2134]: info: Link Status update: Link node1/eth0now has status dead
Nov 26 09:02:59 node2 ipfail: [2134]: info: Asking other side for ping nodecount.
Nov 26 09:02:59 node2 ipfail: [2134]: info: Checking remote count of pingnodes.
Nov 26 09:03:02 node2 ipfail: [2134]: info: Telling other node that we havemore visible ping nodes.
Nov 26 09:03:09 node2 heartbeat: [2110]: info: node1 wants to go standby [all]
Nov 26 09:03:10 node2 heartbeat: [2110]: info: standby: acquire [all] resourcesfrom node1
Nov 26 09:03:10 node2 heartbeat: [2281]: info: acquire all HA resources(standby).
Nov 26 09:03:10 node2 ResourceManager[2291]: info: Acquiring resource group:node1 192.168.60.200/24/eth0 Filesystem::/dev/sdb5::/webdata::ext3
Nov 26 09:03:10 node2 IPaddr[2315]: INFO:  Resource is stopped
Nov 26 09:03:11 node2 ResourceManager[2291]: info: Running /etc/ha.d/resource.d/IPaddr192.168.60.200/24/eth0 start
Nov 26 09:03:11 node2 IPaddr[2393]: INFO: Using calculated netmask for192.168.60.200: 255.255.255.0
Nov 26 09:03:11 node2 IPaddr[2393]: DEBUG: Using calculated broadcast for192.168.60.200: 192.168.60.255
Nov 26 09:03:11 node2 IPaddr[2393]: INFO: eval /sbin/ifconfig eth0:0192.168.60.200 netmask 255.255.255.0 broadcast 192.168.60.255
Nov 26 09:03:12 node2 avahi-daemon[1844]: Registering new address record for192.168.60.200 on eth0.
Nov 26 09:03:12 node2 IPaddr[2393]: DEBUG: Sending Gratuitous Arp for192.168.60.200 on eth0:0 [eth0]
Nov 26 09:03:12 node2 IPaddr[2372]: INFO:  Success
Nov 26 09:03:12 node2 Filesystem[2482]: INFO:  Resource is stopped
Nov 26 09:03:12 node2 ResourceManager[2291]: info: Running /etc/ha.d/resource.d/Filesystem/dev/sdb5 /webdata ext3 start
Nov 26 09:03:13 node2 Filesystem[2523]: INFO: Running start for /dev/sdb5 on/webdata
Nov 26 09:03:13 node2 kernel: kjournald starting.  Commit interval 5seconds
Nov 26 09:03:13 node2 kernel: EXT3 FS on sdb5, internal journal
Nov 26 09:03:13 node2 kernel: EXT3-fs: mounted filesystem with ordered datamode.
Nov 26 09:03:13 node2 Filesystem[2520]: INFO:  Success

三、在主节点上拔去电源线
 在主节点拔去电源后,备用节点的 heartbeat 进程会立刻收到主节点已经 shutdown 的消息,如果在集群上配置了 Stonith 设备,那么备用节点将会把电源关闭或者复位到主节点,当 Stonith 设备完成所有操作时,备份节点才拿到接管主节点资源的所有权,从而接 管主节点的资源。
在主节点拔去电源后,备份节点有类似如下的日志输出:
Nov 26 09:24:54 node2 heartbeat: [2110]: info: Received shutdown notice from’node1′.
Nov 26 09:24:54 node2 heartbeat: [2110]: info: Resources being acquired fromnode1.
Nov 26 09:24:54 node2 heartbeat: [2712]: info: acquire local HA resources(standby).
Nov 26 09:24:55 node2 ResourceManager[2762]: info: Running/etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 start
Nov 26 09:24:57 node2 ResourceManager[2762]: info: Running /etc/ha.d/resource.d/Filesystem/dev/sdb5 /webdata ext3 start

四、切断主节点的所有网络连接
 在主节点上断开心跳线后,主备节点都会在日志中输出“eth1 dead”的信息,但是不会引起节点间的资源切换,如果再次拔掉主节点连接公共网络的网线,那么就会发生主备节点资源切换,资源从主节点转移到备用节点,此时,连上主节点的心跳线,观察系统日志,可以看到,备用节点的 heartbeat 进程将会重新启动,进而再次控制集群资源,最后,连上主节点的对外网线,集群资源再次从备用节点转移到主节点,这就是整个的切换过程。
 

五、在主节点上非正常关闭 heartbeat 守护进程
  在主节点上通过“killall -9 heartbeat”命令关闭 heartbeat 进程,由于是非法关闭 heartbeat 进程,因此 heartbeat 所控制的资源并没有释放,备份节点在很短一段时间没有收到主节点的响应后,就会认为主节点出现故障,进而接管主节点资源,在这种情况下,就出现了资源争用情况,两个节点都占用一个资源,造 成数据冲突。针对这个情况,可以通过 linux 提供的内核监控模块 watchdog 来解决这个问题,将 watchdog 集成到 heartbeat 中,如果 heartbeat 异常终止,或者系统出现故障,watchdog 都会自动重启系统,从而释放集群资源,避免了数据冲突的发生。
本内容我们没有配置 watchdog 到集群中,如果配置了 watchdog,在执行“killall -9 heartbeat”时,会在 /var/log/messages 中看到如下信息:
 Softdog: WDT device closed unexpectedly. WDT will not stop!
这个错误告诉我们,系统出现问题,将重新启动。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137436.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计24305字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中