title: lvs+keep搭建高可用web服务
date: 2015-11-26 22:11:55
tags:
---

第一部分 概念

负载均衡

生产环境下必不可少的基础手段当前大部分互联网都使用了服务器集群系统,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是web应用服务器,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等


在实际应用中,在web服务器之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为web服务器的流量入口,挑最合适的一台web服务器,将客户端的请求转发给它处理,以实现客户端到服务端的透明转发,最近几年很火的云计算以及分布式架构,本质上也是将后端服务器作为计算资源,存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关系真正提供服务的是那台机器,就好像它面对的是一台近乎拥有无限能力的服务器,而本质上,真正提供服务器的是后端集群。

负载均衡类型

  • 硬件设备,如F5 功能强大、有厂家支持,价格昂贵
  • 开源软件,功能同样强大,免费、对运维人员要求较高,最著名的就是LVS (Linux virtual server)

LVS

LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好

LVS的体系结构

一、 使用LVS的服务器集群系统有三个部分组成

  1. 最前端的负载均衡层,用load balancer表示
  2. 中间的服务器集群层,用server array表示
    • 最底端的数据共享存储层,用shared storage表示在用户看来,所有内部应用的是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

      二、 LVS负载均衡机制
  3. LVS是四层负载均衡,也就是说建立在OSI模型中的第四层—传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP负载均衡,因为LVS是四层负载均衡,因此它相对于其它负载均衡的解决办法,比如DNS域名轮流解析、引用负载的调度、客户端的调度等,它的效率是非常高的。
  4. LVS的转发主要是通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR)模式来实现的。
  5. NAT模式:网络地址转换
    • NAT(network address translation)是一种外网和内网地址映射的技术,NAT模式下,网络数据报文都要经过LVS的处理。LVS需要作为RS(real server)的网关。当包达到LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包后,仿佛是客户端直接发给它一样,RS处理完,返回响应时,源IP是RS IP ,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在
  6. DR模式:直接路由
  7. DR模式下需要LVS和RS集群绑定同一个VIP(RS将通过VIP帮点在loopback实现),但与NAT不同点在于:请求由LVS接受,由真是提供服务器的服务器直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC地址是自己的,到上面的网络层,发现IP也是自己的,于是这个包就被合法的接受,RS感知不到前面有LVS的存在,而当RS返回响应时,只需要向源IP(即用户的IP)返回即可,不再经过LVS。
  8. DR负载均衡模式数据分发过程中不需要修改IP地址,只修改MAC地址,由于实际处理请求的真实物理IO地址和数据请求的IP地址一致,所以不需要负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈,因此DR模式具有较好的性能,它是目前大型网站使用最广泛的负载均衡手段。
    ***

    第二部分 实践

    1.总览

    因为条件限制,所有整个架构通过虚拟机搭建
    客户端:虚拟机宿主机:192.168.31.100
    VIP:192.168.31.111
    虚机系统均为:centos6.5
    LVS:-master:192.168.31.121
    LVS-slvae:192.168.31.122
    web-01:192.168.31.131
    web-02:192.168.31.132
    ***
    本次基于Parallels desktop搭建的四台Linux(cents6.5)系统所构成的一个服务器集群,其中两台负载均衡服务器(一台主机,一台为备机),另外两台作为真实的web服务器(向外提供HTTP服务,这里仅仅使用了centos自带的http服务,没有安装其它web服务器,本次实验基于DR负载均衡模式,设置了一个VIP为192.168.31.111,用户只需访问这个IP即可获取网页,其中负载均衡主机为192.168.31.121,备机为192.168.31.122.web服务器A为192.168.31.131,web服务器B为192.168.31.132。

2.准备工作

以下工作针对所有服务器,也就是在四台服务器都要配置:

  • 绑定静态地址:命令模式下可以执行setup命令进行静态IP地址的设置,配置完成后重启即可
  • 设置主机名:修改配置文件中的额主机名,vim /etc/sysconfig/network 永久修改主机名,完成后重启生效
  • IP地址和主机名的绑定:vim /etc/hosts 增加如 192.168.31.121 lvs-master 192.168.31.122 lvs-slave 192.168.31.131 lvs-webserver1 192.168.31.132 lvs-webserver2 保存后退出,验证 ping las-master
  • 关闭防火墙 service iptables stop 关闭开机启动chkconfig iptables off

配置web服务器

以下操作要在两台web服务器中进行,不要再负载均衡服务器中进行

  • 开启httpd服务并设置为开机启动 service http start && chkconfig http on
  • 在httpd默认web目录(/var/www/html)中创建页面index.html 内容分别为>

    hello web-01

    hello web-02

    ,用于区别两台web服务器

  • 显示如下,比较简陋

  • 编辑realserver脚本文件 vim /etc/init.d/realserver:http://7xolbq.com1.z0.glb.clouddn.com/realserver

    • 然后赋权 chmod 755 /etc/init.d/realserver 另外启动的适合提示权限问题,顺便也加下权限 chmod 755 /etc/init.d/functions
  • 开启realserver服务:service realserver start

配置主负载服务器

安装keepalived相关包

  • yum install keepalived -y
  • 进入keepalived配置目录 cd /etc/keepalived/
  • 备份一下配置文件,然后重新配置 cp keepalived.conf keepalived.conf.bak && vim keepaliced.conf keepalived.conf的配置文件:http://7xolbq.com1.z0.glb.clouddn.com/keepalived.conf

  • 开启keepalived服务 并设置开机启动 service keepalived start && chkconfig keepalived on

配置从负载服务器

从负载均和服务器和住负载均衡服务器大致相同,只是在keepalived的配置文件需要修改以下两处:

  • 将state由MASTER改为BACKUP
  • 将priority由100改为99 具体如下

  • 至此所有配置完成

第三部分 测试验证

start

在浏览器输入VIP 反复刷新 两个页面在轮询

测试keepalived高可用

这时候模拟web01故障 关闭web-01的http service httpd stop 这时候应该只能出现web-02的页面

测试符合预料
然后恢复web-01 service http start 这时候应该恢复之前轮询的状态


再次符合我们的猜想


接着测试keepalived主从

这时候模拟LVS-01故障 关闭LVS-01的keepalived service keepaliced stop 这时候应该依然可以提供负载均衡服务

没有问题,负载均衡没有受到影响,然后恢复LVS-01的keepalived service keepalived start


负载均衡依然可用

试验就此结束

最后 总结

LVS是目前广为采用的软件负载均衡解决方案,在一些大型企业级系统及互联网系统中应用。本次,简单地了解了一下LVS,并在Linux下搭建了一个小小的测试环境,借助Keepalived实现了一个最小化的负载均衡测试环境。LVS是一个可以工作在网络第四层的负载均衡软件,因此它相对于Nginx一类工作在第七层的负载均衡软件有着无可比拟的性能优势,而且它还是我国的章文嵩博士(现在阿里的副总裁,淘宝的技术专家)作为创始人发起的,现已经成为Linux内核的组成部分。

参考:非洲蚂蚁的博客 http://ixdba.blog.51cto.com/2895551/552947

lvs+keep搭建高可用web服务的更多相关文章

  1. 通过LVS+Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...

  2. LVS+Keepalived搭建高可用负载均衡

    应用环境: LVS负责多台WEB端的负载均衡(LB):Keepalived负责LVS的高可用(HA),这里介绍主备模型. 测试环境: 配置步骤: 1. 安装软件 在LVS-1和LVS-2两台主机上安装 ...

  3. 高可用Redis服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量 ...

  4. 搭建高可用的Redis服务,需要注意这些方面!

    搭建高可用的Redis服务,需要注意这些方面! HorstXu 占小狼的博客 今天 ◎作者 | HorstXu www.cnblogs.com/xuning/p/8464625.html 基于内存的R ...

  5. 高可用Redis服务架构分析与搭建(单redis实例)

    原文地址:https://www.cnblogs.com/xuning/p/8464625.html 基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在 ...

  6. linux RHCS集群 高可用web服务器

    RHCS集群,高可用服务器 高可用 红帽集群套件,提供高可用性,高可靠性,负载均衡,快速的从一个节点切换到另一个节点(最多16个节点)负载均衡 通过lvs提供负载均衡,lvs将负载通过负载分配策略,将 ...

  7. 搭建高可用服务注册中心-Spring Cloud学习第一天(非原创)

    文章大纲 一.Spring Cloud基础知识介绍二.创建单一的服务注册中心三.创建一个服务提供者四.搭建高可用服务注册中心五.项目源码与参考资料下载六.参考文章   一.Spring Cloud基础 ...

  8. spring cloud 入门系列三:使用Eureka 搭建高可用服务注册中心

    在上一篇中分享了如何使用Eureka 进行服务治理,里面搭建的服务注册中心是单体的, 但是在实际的应用中,分布式系统为了防止单体服务宕机带来严重后果,一般都会采用服务器集群的形式,服务注册中心也是一样 ...

  9. 使用Spring Cloud搭建高可用服务注册中心

    我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客[使用Spring Cloud搭建服务注册中心]中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭 ...

随机推荐

  1. Java反射 - 2(对象复制,父类域,内省)

    为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...

  2. Postman 安装及使用入门教程(转)

    安装 本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧. 1. 官网安装(别看) 打开官网,http ...

  3. Thinkphp 连接数据库、查询、添加

    一.连接数据库配置及Model数据模型层 1. Thinkphp\conf\convertion.php中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容 JiaoWu\Home\ ...

  4. 制作PHP安装程序的原理和步骤56

    制作PHP安装程序的原理和步骤56 1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实P ...

  5. 提高PHP性能的方法技巧

    1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册 ...

  6. 关于 Delphi 中的Sender和易混淆的概念(转)

    /////////////////////////////////////////////////////// Delphi 中Sender对象的定义///////////////////////// ...

  7. linux运维面试题汇总一

    1.如何让history历史命令显示命令使用的具体时间? [root@node0 ~]# export HISTTIMEFORMAT='%F  %T ' [root@node0 ~]# history ...

  8. common常用方法和部分算法

    var commonindex = function() {}; commonindex.prototype = { ajaxRequest: function(request) { $.ajax({ ...

  9. jQuery 中的事件绑定与取消绑定

    1:在jQuery中使用bind方法进行事件的绑定,bind方法有两个参数,第一个参数是事件的类型例如click,change,keyup,keydown,blur,focus等.第二个参数是一个回调 ...

  10. 指定Action、Category调用系统Activity

    1.Intent对象详解 Android的应用程序包含三种重要组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动它们----都是依靠Intent来 ...