####heartbeat简介####
Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。
这个集群方案是利用第三方软件搭建的,要比RedHat自带的集群软件在功能上简化一些,但是搭建起来非常的方便。而且是一种快速解决方案。
heartbeat的高可用集群采用的通信方式是udp协议和串口通信,而且heartbeat插件技术实现了集群间的串口、多播、广播和组播通信。它实现了HA 功能中的核心功能——心跳,将Heartbeat软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。  Heartbeat采用虚拟IP地址映射技术实现主从服务器的切换对客户端透明的功能。
但是单一的heartbeat是无法提供健壮的服务的,所以我们在后台使用lvs进行负载均衡。



####安装heartbeat####
一:设置环境
1.系统:redhat6.5 ;
2.节点:一共要用到四个虚拟机作为节点,其中server10与server11安装heartbeat和lvs,另外两个节点server12与server13只提供apache和vsftpd服务;
3.这四个节点之间的解析一定要做好;
4.防火墙关闭,时间同步,四个机子的系统版本最好相同。

二:安装heartbeat:(这个是第三方软件,不是redhat自带的,所以大家要自己去下载)
heartbeat-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
heartbeat-libs-3.0.4-2.el6.x86_64.rpm

在下载之前还要修改本机的yum源配置
vim /etc/yum.repos.d/rhel-source.repo
######################################
[Server]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.60.250/rhel6.5/Server
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.60.250/rhel6.5/HighAvailability
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.60.250/rhel6.5/LoadBalancer
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.60.250/rhel6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.60.250/rhel6.5/ScalableFileSystem
gpgcheck=0

##############################################
heartbeat+LVS_解决方案

heartbeat的配置文件存放在/etc/ha.d/中
但是在默认情况下,配置文件中并没有,因此我们需要从其他地方拷贝
[root@server10 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server10 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/

接下来编写配置文件:
[root@server10 ha.d]# vim ha.cf
#############################
29   logfile /var/log/ha-log    ##日志存放位置
48   keepalive 2        ##设定heartbeat之间的时间间隔为2秒
56   deadtime 30        ##在30秒后宣布节点死亡。
61   warntime 10        ##在日志中发出“late heartbeat“警告之前等待的时间,单位为秒
71   initdead 120        ##在某些配置下,重启后网络需要一些时间才能正常工作。它的取值至少应该为通常deadtime的两倍
76   udpport 694        ##使用端口694进行bcast和ucast通信。这是默认的
91   bcast   eth0    
211  node    server10        ##有两个节点安装heartbeat
212  node    server11

#################################

heartbeat+LVS_软件_02

heartbeat+LVS_解决方案_03

heartbeat+LVS_软件_04


[root@server10 ha.d]# vim authkeys
################
 23 auth 1
 24 1 crc
################

最后我们修改haresources,我们要在其中添加一个apache服务,但是我们要给它一个虚拟的ip(这个ip一定是没有被别人占用的),让这两个节点作它的论寻

[root@server10 ha.d]# vim haresources
#######################################################
149 server10        IPaddr::172.25.60.100/24/eth0   httpd
########################################################
在两边都安装httpd服务作为测试,为了区分,我们在他们的index.html中写入不同的内容

做完上述内容后开启两边的heartbeat服务及httpd服务:
[root@server10 ha.d]# /etc/init.d/heartbeat start
[root@server10 ha.d]# /etc/init.d/httpd start
然后我们来通过firefox检验效果:

heartbeat+LVS_软件_05

然后我们让当前的节点heartbeat关闭,发现另外一个节点自动接管了:
heartbeat+LVS_第三方_06
再让刚才那个节点的heartbeat开启,因为它是主节点(server10),所以又接管回来了:

heartbeat+LVS_解决方案_07

这样就起到了负载均衡的效果

####LVS简介####
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统
1.LVS的三种负载均衡技术:
(1).通过NAT实现虚拟服务器(VS/NAT)
(2).通过IP隧道实现虚拟服务器(VS/TUN
(3).通过直接路由实现虚拟服务器(VS/DR)

####LVS的安装和配置####
首先下载ipvsadm
[root@server10 ha.d]# yum install ipvsadm -y
[root@server10 ha.d]# ipvsadm -l    ##查看调度,此时应当没有任何调度
接下来添加虚拟ip作为公共访问ip
[root@server10 ha.d]# ifconfig eth0:0 172.25.60.200 netmask 255.255.255.0 up
我们添加虚拟ip的httpd服务的端口,并且采用了轮叫的算法(RR):
[root@server10 ha.d]# ipvsadm -A -t 172.25.60.200:80 -s rr
[root@server10 ha.d]# ipvsadm -l    ##再次查看调度时,会发现有了一条调度
    
允许server12和server13的httpd服务作为轮叫的节点:
[root@server10 ha.d]# ipvsadm -a -t 172.25.60.200:80 -r 172.25.60.12:80 -g
[root@server10 ha.d]# ipvsadm -a -t 172.25.60.200:80 -r 172.25.60.13:80 -g
heartbeat+LVS_解决方案_08

在serevr12和server13上分别安装httpd服务:
server12和server13要能够识别172.25.60.200这个虚拟IP,所以他们也要添加这个虚拟网卡。
[root@server12 ~]# ifconfig eth0:0 172.25.60.200 netmask 255.255.255.0 up

现在控制节点和提供真实服务的节点都能够识别VIP(172.25.60.200),接下来我们要在提供服务的节点上添加策略,这个感觉和防火墙很类似,不过要安装一个额外的软件:
[root@server12 ~]# yum install arptable* -y
添加策略,把直接进来访问172.25.60.200的包全部丢弃,让从172.25.60.200出去的包从172.25.60.12出去(172.25.60.13同理)。
[root@server13 ~]# arptables -A IN -d 172.25.60.200 -j DROP
[root@server13 ~]# arptables -A OUT -s 172.25.60.200 -j mangle --mangle-ip-s 172.25.60.12
[root@server13 ~]# arptables -nL

heartbeat+LVS_第三方_09

[root@server13 ~]# /etc/init.d/arptables_jf save    ##保存策略
现在我们通过浏览器反复访问172.25.60.200(确保服务节点的httpd服务开启),多刷新几次:
用ipvsdm -l查看访问之前控制节点记录的信息

heartbeat+LVS_解决方案_10

heartbeat+LVS_软件_11


在访问了12次之后,我们发现两个节点各轮叫了6次,但是访问的ip都是虚拟ip(172.25.60.200),这就是直连情况下的LVS方案
heartbeat+LVS_第三方_12
####heartbeat+lvs
让这两个软件能够互相协作,并且让该平台具有能够报警和挽救的机制,我们需要安装ldirectord软件。
ldirectord-3.9.2-1.2.x86_64.rpm
在server10和server11上安装ldirectord(因为包和系统的包有依赖性,所有使用yum安装
[root@server10 ha.d]# yum install ldirectord-3.9.2-1.2.x86_64.rpm -y
拷贝配置文件到heartbeat的配置文件目录下
[root@server10 ha.d]# cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
heartbeat+LVS_解决方案_13

两边的节点上都安装perl-IO-Socket-INET6-2.56-4.el6.noarch:,否则后面的ldirectord会因为缺少脚本无法打开:

[root@server10 ha.d] yum install perl-IO-Socket-INET -y

编辑ldirectord的配置文件
[root@server10 ha.d] vim directord.cf
################################
 25 virtual=172.25.60.200:80
 26         real=172.25.60.12:80 gate
 27         real=172.25.60.13:80 gate
 28         fallback=127.0.0.1:80 gate
 29         service=http
 30         scheduler=rr
 31         #persistent=600
 32         #netmask=255.255.255.255
 33         protocol=tcp
 34         checktype=negotiate
 35         checkport=80
 36         request="index.html"
################################
heartbeat+LVS_第三方_14

我们指定两个真实服务的节点172.25.60.12和172.25.60.13,他们的访问顺序采用轮叫的方式,当两个节点都挂掉的话,172.25.60.10这个节点自己提供服务。
把这个配置文件拷贝到另外一个控制节点172.25.60.11的配置文件处:
[root@server10 ha.d]# scp ldirectord.cf 172.25.60.11:/etc/ha.d/
heartbeat+LVS_软件_15

编辑haresources文件,添加ldirectord服务到heartbeat中:
[root@server10 ha.d]# vim haresources
##################################
149 server10        IPaddr::172.25.60.100/24/eth0   httpd ldirectord
##################################

heartbeat+LVS_解决方案_16

在server11下也作同样的修改
这个时候我们直接启动heartbeat服务,他会自动调用ldirectord服务,而我们的ldirectord的配置文件里的内容完成着和LVS一样的调度功能,这样平台搭建基本完成: