heartbeat+LVS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了heartbeat+LVS相关的知识,希望对你有一定的参考价值。

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

接下来编写配置文件:
[[email protected] 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

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

技术分享

技术分享

技术分享


[[email protected] ha.d]# vim authkeys
################
 23 auth 1
 24 1 crc
################

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

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

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

技术分享

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

技术分享

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

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

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

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

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

技术分享

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

技术分享

技术分享


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

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

[[email protected] ha.d] yum install perl-IO-Socket-INET -y

编辑ldirectord的配置文件
[[email protected] 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"
################################
技术分享

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

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

技术分享

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

以上是关于heartbeat+LVS的主要内容,如果未能解决你的问题,请参考以下文章

HeartBeat

Linux 高可用(HA)集群之Heartbeat安装

heartbeat与keepalived对比

heartbeat单独提供高可用服务

用Heartbeat实现web服务器高可用

heartbeat+LVS