heartbeat实现HA

来源:互联网 发布:螺钿鱼骨项链淘宝网 编辑:程序博客网 时间:2024/05/18 01:36

一、heartbeat实现HA原理介绍


heartbeat 简介

Heartbeat 是一款开源提供高可用(Highly-Available)服务的软件,通过 heartbeat 可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在实际生产应用场景中,heartbeat 的功能和另一个高可用软件 keepalived 有很多相同之处,但在生产中,对应实际的业务应用也是有区别的,例如: keepalived 主要是控制IP的漂移,配置、应用简单,而 heartbeat 则不但可以控制IP漂移,更擅长对资源服务的控制,配置、应用比较复杂。



heartbeat的原理

heartbeat有两种模式,一种是主备,另一种是主主。



主备

通过修改 heartbeat 软件的配置文件可以指定哪一台 Heartbeat 服务器作为主服务器,则另一台将自动成为热备服务器。然后在热备服务器上配置 Heartbeat 守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的。

通俗的讲:

主服务器会一直发消息高诉从服务器“我好着呢”,从服务器一在在旁边候着,等什么时候从服务器收不到主服务器的消息了,他会先等待一段时间,如果过了这段时间,还是没有收到主服务器的消息,这个时候,从服务器就可以接管主服务器的资源和服务。

主备这种模式,一个主服务器,另一个热备服务器,热备服务器基本上就等着,时时刻刻准备上前线。比较浪费资源。


主主

两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失效或者宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务仍能够不间断的持续运行。注意:所谓的业务部间断,在故障转移期间也是需要切换时间的(例如:停止数据库及存储服务等),heartbeat 的主备高可用的切换时间一般是在5-20秒左右(服务器宕机的切换比人工切换要快)

通俗的讲:

安装了heartbeat的两个节点互相通信,都给对方说“我在呢”,那如果说一个节点突然不“说话“了,另一个节点会等待一段时间,如果过了这段时间还没有收到对方节点的应答,那它只能采取下一步措施,启动资源接管模块,运行对方节点的资源或服务。

主主这种模式,两个节点上运行不同的业务,如果两个节点运行同一种业务,只能用主备模式。


当master工作正常时


当master发生故障时,心跳断掉,slave开始接管master的资源,服务,vip也迁到了slave上



Heartbeat的组成

Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等。目前的最新版本是Heartbeat 2.x,这里的讲述也是以Heartbeat 2.x为主。下面介绍Heartbeat 2.0的内部组成,主要分为以下几大部分。

heartbeat:节点间通信检测模块。

ha-logd:集群事件日志服务。

CCM(Consensus Cluster Membership):集群成员一致性管理模块。

LRM(Local Resource Manager):本地资源管理模块。

Stonith Daemon:使出现问题的节点从集群环境中脱离。

CRM(Cluster Resource Management):集群资源管理模块。

Cluster policy engine:集群策略引擎。

Cluster transition engine:集群转移引擎。


Heartbeat 2.0内部结构组成


Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序。要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如ipfail、Mon和Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和Ldirectord。




二、实际配置

操作系统版本

[root@slave yum.repos.d]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)

前期准备

两台主机:

我的两台的ip分别是:172.25.90.6,172.25.90.7

虚拟ip为:172.25.90.100

配置虚拟ip(vip):

我的虚拟ip配置在172.25.90.6上,配置在哪台主机,那台主机就是后面的master

# ifconfig eth0:0 172.25.90.100 netmask 255.255.255.0

# ifconfig eth0:0 up

# ping 172.25.90.100                 #若ping通则证明vip配置成功



两台修改/etc/hosts文件:

  172.25.90.6 master  172.25.90.7 slave  172.25.90.100 www.wuhui.com


配置yum源:

/etc/yum.repos/下的文件

[Server]name=Red Hat Enterprise Linux Server  baseurl=http://172.25.7.250/rhel6.5/Server  enabled=1  gpgcheck=1  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release    [HighAvailability]  name=Red Hat Enterprise Linux HighAvailability  baseurl=http://172.25.7.250/rhel6.5/HighAvailability  enabled=1  gpgcheck=1  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release    [ResilientStorage]  name=Red Hat Enterprise Linux ResilientStorage  baseurl=http://172.25.7.250/rhel6.5/ResilientStorage  enabled=1  gpgcheck=1  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release    [ScalableFileSystem]  name=Red Hat Enterprise Linux ScalableFileSystem  baseurl=http://172.25.7.250/rhel6.5/ScalableFileSystem  enabled=1  gpgcheck=1  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release    [LoadBalancer]  name=Red Hat Enterprise Linux LoadBalancer  baseurl=http://172.25.7.250/rhel6.5/LoadBalancer  enabled=1  gpgcheck=1  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


我会用真机来测试:

真机ip:172.25.254.90

真机的hosts文件也配置为上面的




开始配置:


1.安装heartbeat

两台主机都要做

需要的安装包:

下载链接:

heartbeat-3.0.4-2.el6.x86_64.rpm:

http://dl.fedoraproject.org/pub/epel/6/x86_64//heartbeat-3.0.4-2.el6.x86_64.rpm

heartbeat-libs-3.0.4-2.el6.x86_64.rpm:

ftp://mirror.switch.ch/pool/4/mirror/epel/6/x86_64/heartbeat-libs-3.0.4-2.el6.x86_64.rpm

heartbeat-devel-3.0.4.2-2.el6.x86_64.rpm:

ftp://mirror.switch.ch/pool/4/mirror/epel/6/x86_64/heartbeat-devel-3.0.4-2.el6.x86_64.rpm

ldirectord-3.9.5-3.1.x86_64.rpm:

ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network%3A/ha-clustering%3A/Stable/RedHat_RHEL-6/x86_64/ldirectord-3.9.5-3.1.x86_64.rpm


如果说上面的连接失效了,大家可以到这个网站下载:http://rpm.pbone.net/


安装上面的四个包

# yum install *


2.复制配置文件

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

[root@slave ha.d]# ls
harc  rc.d  README.config  resource.d  shellfuncs

我们来看下README会告诉我们什么信息:

要想启动heartbeat就要有下面这三个文件:

ha.cf :主配置文件

haresources :资源配置文件

authkeys :认证信息

如果安装heartbeat用的是rpm包,我们可以用人rpm -q heartbeart -d来找到三个配置文件的位置:



把三个文件复制到主配置目录下面:

# cp /usr/share/doc/heartbeat-3.0.4/{authkeys,ha.cf,haresources} /etc/ha.d/

修改authkeys的权限,为了安全

# chmod 600 /etc/ha.d/authkeys


3.修改主配置文件ha.cf

每2s发一次心跳包

节点死亡时间阀值,就是从节点在过了 30 后还没有收到心跳就认为主节点死亡

发出警告时间

守护进程首次启动后应该等待 60 秒后再启动主服务器上的资源

心跳信息传递的 udp 端口,使用端口 694 进行 bcast 和 ucast 通信(注意,该端口必须没有被其他进程占用,并且局域网内只有两个节点主机使用这个端口)

选择网卡eth0 并且以UDP广播形式工作

node master: 双机热备中的一个节点,写在第一行的默认就是主节点

ping一个局域网内的其他主机,用来确定网络通畅。一般来说最好写成网关

默认 heartbeat 并不检测除本身之外的其他任何服务,也不检测网络状况。所以当网络中断时,并不会进行 Load Balancer 和 Backup 之间的切换。可以通过 ipfail 插件,设置'ping nodes'来解决这一问题,但不能使用一个集群节点作为ping 的节点。(注意:应该是lib64.默认是lib)


4.修改authkeys

修改加密方式


5.修改haresources

以web集群为例子,其中ip地址必须填成一个局域网内没有任何人使用的一个IP,也就是上面的vip


slave主机上的三个配置文件和master一样,可以直接时用scp复制过去


6.安装httpd服务

两台主机上都要做

# yum install httpd -y

写测试页:

master:

# cat  /var/www/html/index.html

master


slave:

# cat /var/www/html/index.html

slave


注意:安装完了之后,不要启动httpd服务


7.启动heartbeat服务

两台主机都要做

# service heartbeat start


8.测试

另找一台机子测试,注意hosts要配置好


如果出现下面这个错,说明heartbeat还没有启动httpd,再等一会就好



(1)现在我们把master关机,会发现,得到的响应是slave,来自slave主机的,这说明,httpd服务成功迁移到了slave上

我们可以查看下slave是否有vip:

(2)现在服务运行在slave,那么我们现在来模拟slave内核崩溃了:

# cd /proc

# echo c > sysrq-trigger



(3)当服务正常关闭,或者重启服务的

一开始运行在master上

把master上的heartbeat停掉

再去访问:


当master的服务起来以后:

我们会发现服务又从slave转回了master



(4)当master的网络断了之后


# servce memcache -y install




(5)当heartbeat服务非正常关闭



至此,我们的web的高可用就配置完成了



原创粉丝点击