linux高级技巧:heartbeat+lvs

 

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能……

AD:2014WOT全球软件技术峰会北京站 课程视频发布

1.heartbeat简介:

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

这个集群方案是利用第三方软件搭建的,要比redhat自带的集群软件在功能上简化一些,但是搭建起来非常的方便。而且是一种快速解决方案。

heartbeat的高可用集群采用的通信方式是udp协议和串口通信,而且heartbeat插件技术实现了集群间的串口、多播、广播和组播通信。它实现了HA 功能中的核心功能——心跳,将Heartbeat软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。 Heartbeat采用虚拟IP地址映射技术实现主从服务器的切换对客户端透明的功能。

但是单一的heartbeat是无法提供健壮的服务的,所以我们在后台使用lvs进行负载均衡。

2.LVS简介

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。由章文嵩博士成立。

IPVS

说道lvs我们就得提到ipvs,IPVS 是 LVS 集群系统的核心软件,它的主要作用是:安装在 Load Balancer 上,把发往 Virtual IP 的请求转发到 Real Server 上。IPVS 的负载均衡机制有三种,这里使用 IP Tunneling 机制:

  • ? Virtual Server via NAT
  • ? Virtual Server via IP Tunneling
  • ? Virtual Server via Direct Routing

我们这次的实验采用最后一种直连的方式。

lvs的调度算法非常的重要,大家一定要熟悉他们。在官方网站上有详细的解释:http://zh.linuxvirtualserver.org/

IPVS 的负载调度算法有十种:

  • 轮叫(Round Robin)
  • 加权轮叫(Weighted Round Robin)
  • 最少链接(Least Connections)
  • 加权最少链接(Weighted Least Connections)
  • 基于局部性的最少链接(Locality-Based Least Connections)
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
  • 目标地址散列(Destination Hashing )
  • 源地址散列(Source Hashing)
  • 最短期望延迟(Shortest Expected Delay)
  • 无须队列等待(Never Queue)

注释:我们采用较为简单的轮叫方式。

3.ldirectord简介:

ldirectord是配合lvs作为一种健康检测机制,要不负载均衡器在节点挂掉后依然没有检测的功能。

上面介绍了heardbeat、lvs和ldirectord的基本概念。说再多不如搭建一个服务给大家展示效果。

4.搭建RHEL6.5+LVS+Linux-HA+Ldirectord服务(提供http和ftp服务作为例子)

注意:

1.系统:redhat6.5 ;

2.节点:一共要用到四个虚拟机作为节点,其中两个上面安装heartbeat和lvs,另外两个节点只提供apache和vsftpd服务;

3.这四个节点之间的解析一定要做好;

4.防火墙关闭,时间同步,四个机子的系统版本最好相同。

实验的环境如图下所示,第一个控制台是我真机的,其他四个为实验的四个节点,前两个安装heartbeat和lvs,后两个控制台提供apache和vsftpd服务。接下来我们分块来配置。

1. 安装heartbeat:

这个是第三方软件,不是redhat自带的,所以大家要自己去下载:,分别需要:

  1. heartbeat-3.0.4-2.el6.x86_64.rpm
  2. heartbeat-devel-3.0.4-2.el6.x86_64.rpm
  3. heartbeat-libs-3.0.4-2.el6.x86_64.rpm

我的在本地的vsftpd服务上有,也可以在http://rpm.pbone.net/上查找。

两个节点上都应该有这个三个包。然后在自定义的位置安装他们:

要是没有安装成功那么一定要重新设置你的yum源:

  1. vim /etc/yum.repos.d/yum.repo

这个是heartbeat的三个配置文件:

  1. ha.cf Main configuration file
  2. haresources Resource configuration file
  3. authkeys Authentication information

默认情况下配置文件里没有,我们得从其他地方拷贝一份:

vim ha.cf:

keepalive 2

设定heartbeat之间的时间间隔为2秒。

warntime 10

在日志中发出“late heartbeat“警告之前等待的时间,单位为秒。

deadtime 30

在30秒后宣布节点死亡。

initdead 120

在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。

udpport 694

使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号。

默认在回复后自动回切:

有两个节点安装heartbeat:

用来测试节点的网络是否联通:

上述是ha.cf配置文件的修改,然后我们要来authkeys文件:

修改文件的访问权限:

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

在两边都安装httpd服务作为测试,为了区分,我们在他们的index.html中写入不同的内容(事实上在生产环境中两者的内容当然是相同的,因为我们作的可是负载均衡么)

做完上述内容后开启两边的heartbeat服务:

然后我们来通过firefox检验效果:

然后我们让当前的节点heartbeat关闭,发现另外一个节点自动接管了:

再让刚才那个节点的heartbeat开启,因为它是主节点(server101.example.com),所以又接管回来了:

小结:

这样就起到了负载均衡的效果,但是这只是单纯的heartbeat,我们还没有和lvs进行结合,在功能上不够完善,在接下来的帖子里会逐渐把两者结合起来,下一个帖子首先会让大家感受一下lvs单独使用时的效果,最后会把两者结合起来。

上一个帖子介绍了heartbeat的单独使用,今天我们首先来介绍lvs的单独使用,最后将两者结合起来。提供一个全面的服务。

1.LVS的三种负载均衡技术:

非常幸运的是kernel 2.6x 已经内建了LVS模块,而且在redhat6版本中也有LVS的安装包ipvsadm。

下面我们对LVS的三种负载均衡技术进行比较:

1.通过NAT实现虚拟服务器(VS/NAT):

由于IPv4中IP地址空间的日益紧张和安全方面的原因,很多网络使用保留IP地址。这些地址不在Internet上使用,而是专门为内部网络预留的。当内部网络中的主机要访问Internet或被Internet访问时,就需要采用网络地址转换(Network Address Translation,以下简称NAT),将内部地址转化为Internets上可用的外部地址。这样当外部网络访问服务的时候,其实是访问那个可以和外界通信的IP,但访问的内容却是在内网的节点上负载均衡的。原理如下图所示:

2.通过IP隧道实现虚拟服务器(VS/TUN):

它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

记住它和NAT的不同是,可以直接与客户机建立链接。原理如下图所示:

3.通过直接路由实现虚拟服务器(VS/DR):

调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。

这个模型是我们今天要做的,每个节点都有一个虚拟IP(控制节点和真正提供服务的节点(RS)),其中的调度由控制器完成的(RR轮叫算法),服务不会主动的去提供服务。与TUN相同的是,他们也是可以直接和客户机通信。原理如图所示:

2.LVS的安装和配置:

首先我们还是打开那个熟悉的控制台:

安装ipvsadm:

当前没有任何调度列表:

添加虚拟ip作为公共访问ip:

我们添加虚拟ip的httpd服务的端口,并且采用了轮叫的算法(RR):

允许server106和server107的httpd服务作为轮叫的节点:

在serevr106和server107上分别安装httpd服务:

然后我们要做以下事情:

1.server106和server107要能够识别192.168.2.110这个虚拟IP,所以他们也要添加这个虚拟网卡。

2.为了体现出轮叫的效果,我们在两者的默认发布目录中写入不同的内容以示区别。

现在控制节点和提供真实服务的节点都能够识别VIP(192.168.2.110),接下来我们要在提供服务的节点上添加策略,这个感觉和防火墙很类似,不过要安装一个额外的软件:

此时还没任何策略设置:

添加策略,把直接进来访问192.168.2.110的包全部丢弃,让从192.168.2.110出去的包从192.168.2.106出去(192.168.2.107同理)。

保存策略:

现在我们通过浏览器反复访问192.168.2.110(确保服务节点的httpd服务开启),多刷新几次:

这个是我们在访问之前控制节点记录的信息:

在访问了32次之后,我们发现两个节点各轮叫了16次,但是访问的ip都是虚拟ip(192.168.2.110),这就是直连情况下的LVS方案。

而且网页的内容也在轮循变化:

3.小结:

本帖先是介绍了LVS的三种负载均衡技术,然后我们身体力行的搭建了直连情况下的LVS,那么在下个帖子中我们会把LVS和heartbeat结合起来组成一个健壮的服务。

原文链接:http://blog.csdn.net/linux_player_c/article/details/38277173 、http://blog.csdn.net/linux_player_c/article/details/38294319

【编辑推荐】

linux高级技巧:heartbeat+lvs的更多相关文章

  1. Heartbeat+LVS构建高可用负载均衡集群

    1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...

  2. linux服务器之LVS、Nginx和HAProxy负载均衡器对比

    linux服务器之LVS.Nginx和HAProxy负载均衡器对比. LVS特点:  1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生:  2.稳定性.可靠性好,自身 ...

  3. linux高级技巧:heartbeat+lvs(一)

    1.heartbeat一个简短的引论:        Heartbeat 项目是 Linux-HA project的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组 ...

  4. linux高级技巧:heartbeat+lvs(三)

    之前我们把LVS和heartbeat都单独进行了測试,是时候进行合并了 1.LVS+heartbeat:         首先显示我们的控制台:                        让这两个 ...

  5. Linux中keepalived+LVS负载均衡的搭建测试

    1.1 LVS简介       LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个自由软件项目.使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Lin ...

  6. keepalived heartbeat lvs haproxy

    一, keeplived @ 01,keeplived 是什么? Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三.第四层.第五层交 ...

  7. 两台linux利用heartbeat+drbd 完美实现双机热备

    一直想做基于linux的双机热备,一直没有时间和机会.一直以为只要做双机热备的实验就必须两台机器外接一个存储.甚至一个月以前在学习keepalived的时候还在琢磨keepalvied去掉哪些条件可以 ...

  8. Linux负载均衡--LVS(IPVS)

    一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,现在已经是 Linux标准内核的一部分.LVS是一种叫基于T ...

  9. Linux虚拟服务器--LVS

    LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...

随机推荐

  1. Subarray Product Less Than K

    Your are given an array of positive integers nums. Count and print the number of (contiguous) subarr ...

  2. The import javax.websocket cannot be resolved的解决问题

    在eclipse中导入项目的时候出现了这个问题,废了我半天劲,才搞明白,把问题记录下来,方便大家以后遇到这问题好处理.提供参考. 出现的问题截图: 因为我用的是tomcat8, 大体步骤:项目上点右键 ...

  3. javascript——创建对象的方式

    对象:在JavaScript中,对象是拥有属性和方法的数据. JavaScript自定义对象方式有以下7种:直接创建方式.对象初始化器方式.构造函数方法.prototype原型方式.混合的构造函数/原 ...

  4. HTTP缓存总结

    在具体了解 HTTP 缓存之前先来明确几个术语:1.缓存命中率:从缓存中得到数据的请求数与所有请求数的比率.理想状态是越高越好.2.过期内容:超过设置的有效时间,被标记为“陈旧”的内容.通常过期内容不 ...

  5. JS基础_一元运算符

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Pytorch中nn.Conv2d的用法

    Pytorch中nn.Conv2d的用法 nn.Conv2d是二维卷积方法,相对应的还有一维卷积方法nn.Conv1d,常用于文本数据的处理,而nn.Conv2d一般用于二维图像. 先看一下接口定义: ...

  7. python 使用pymssql连接sql server数据库(转)

    import pymssql class MSSQL:    """    对pymssql的简单封装    pymssql库,该库到这里下载:http://www.lf ...

  8. postman传数组参数,二维数组,多维数组

    一维数组: 传递: 接收: 二维数组: 传递: 接收: 依此类推,

  9. 深度:Hadoop对Spark五大维度正面比拼!

    每年,市场上都会出现种种不同的数据管理规模.类型与速度表现的分布式系统.在这些系统中,Spark和hadoop是获得最大关注的两个.然而该怎么判断哪一款适合你? 如果想批处理流量数据,并将其导入HDF ...

  10. string字符串长度和字节长度问题

    string str = "abcdef 安安安"; int i = str.Length; byte[] bt = System.Text.Encoding.Default.Ge ...