zoukankan      html  css  js  c++  java
  • lvs负载均衡

    1.lvs介绍

    LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

    2.lvs与nginx与haproxy比较

    1)lvs:

    1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低

    2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。

    2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)

    3、应用范围比较广,可以对所有应用做负载均衡;

    4、不支持正则处理,不能做动静分离。

    5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)

    6、配置 复杂,对网络依赖比较大,稳定性很高。

    2)ngnix:

    1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;

    2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;

    3、Nginx安装和配置比较简单,测试起来比较方便;

    4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;

    5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。

    6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;

    7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。

    8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好,

    9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)

    10、Nginx还能做Web服务器即Cache功能。

    3)haproxy的特点是:

    1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;

    2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

    3、支持url检测后端的服务器出问题的检测会有很好的帮助。

    4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现

    5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。

    6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。

    9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)

    10、不能做Web服务器即Cache。

    3.lvs组成

    1)ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

    2)ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    4.三种模式:

    1)dr路由模式

    vip和ds ip,rs ip必须同一网段

    2)nat模式

    RS服务器网管必须指向调度器

    调度器会成为性能上的瓶颈

    可以不同网段

    3)tun隧道模式

    5.nat模式配置

    1)环境准备

    DS:nat网卡:        
      192.168.52.233
    
      255.255.255.0
    
      172.16.100.1
    
    vmnet1网卡(仅主机):        
    
      172.16.100.1
    
      255.255.255.0
    
    RS1:(仅主机)
    
      172.16.100.10
    
      255.255.255.0
    
      172.16.100.1
    
    RS2:(仅主机)
    
      172.16.100.20
    
      255.255.255.0
    
      172.16.100.1

    2)安装lvs

    yum install ipsadm -y

    3)配置ipvsadm

    ipvsadm -A -t 192.168.52.233:80 -s rr
    
    ipvsadm -a -t 192.168.52.233:80 -r 172.16.100.10 -m
    
    ipvsadm -a -t 192.168.52.233:80 -r 172.16.100.20 -m

    6.DR路由模式

    1)环境准备

    direct_server:192.168.52.233

       

    real_server:192.168.52.234

    real_server:192.168.52.235

       

    #vip为虚拟服务ip

    vip:192.168.52.250   

       

    2)安装ipvsadm  

    direct_server:

        yum install ipvsadm

    3)调度器配置

    ipvsadm -C    #清除配置信息

    #添加对外提供的服务ip

    ipvsadm -A -t 192.168.52.250:80 -s rr    #-A为ADD   -t为tcp   -s rr为设置算法为轮叫算法

     

    #添加2台real_server主机

    ipvsadm -a -t 192.168.52.250:80 -r 192.168.52.234:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式
    
    ipvsadm -a -t 192.168.52.250:80 -r 192.168.52.235:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式

       

    #配置网卡的子网口为vip,ip地址为192.168.254.250

    ifconfig ens33:0 192.168.52.250 broadcast 192.168.52.250 netmask 255.255.255.255 up

       

    #添加路由(访问192.168.254.250都走ens33:0这个网卡)

    route add -host 192.168.52.250 dev ens33:0
    

    4)后端节点配置

    #在回环地址的子网口上配置服务ip(vip)

    ifconfig lo:0 192.168.52.250 broadcast 192.168.52.250 netmask 255.255.255.255 u

    #添加路由

    route add -host 192.168.52.250 dev lo:0
    
    echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
    
    echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
    
    echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
    
    echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
    
     
    
    echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
    
    echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
    
    echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
    
    echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

       

    arp_ignore:定义接收到ARP请求时的响应级别     

    0:默认,只用本地配置的有响应地址都给予响应      

    1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应

                (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)

    arp_announce:定义将自己的地址向外通告时的级别      

    0:默认,表示使用配置在任何接口的任何地址向外通告      

    1:尽量仅向目标网络通告与其网络匹配的地址      

    2:仅向与本地接口上地址匹配的网络进行通告

  • 相关阅读:
    appium-flutter-driver 测试flutter_boost项目_Java语言
    appium-flutter-driver 测试flutter项目
    Android Studio 制作出来的9图无法进行拖拉,导致无法制作出正确的9图
    Flutter 正确删除emoji表情/正确分割字符串
    如何清除git仓库的所有提交记录,成为一个新的干净仓库
    js中this的总结
    python判断时间是否在某个时间段里面的三种方式
    centos7使用rpm包安装mysql5.74
    django学习之 从服务端上传文档与下载文档接口
    python 之阿里云短信服务接入流程短信接口
  • 原文地址:https://www.cnblogs.com/Agnostida-Trilobita/p/11110676.html
Copyright © 2011-2022 走看看