• LVS 以及 lvs_keepalived


    LVS   linux virtual server

    lvs 工作在传输层,针对监听的端口把客户端请求转发给后端的服务器

    实现负载均衡的是ipvs 模块,现已集成在linux 内核中,linux 中实际模块名字为 ip_vs

    ipvs 的管理

    通过 lvsadm 对ipvs 管理
    keepalived 也可以通过配置文件配置进行管理ipvs
    redhat 管理工具也可以

    实现负载均衡的四种模式

    DR   (不能转换端口,用户请求是啥端口后端就是啥端口)

    请求过程:负载更改用户的VIP的mac 地址为后端服务器的,后端服务器在lo 网卡绑定vip ,当arp 请求过来局域网内的后端抑制其lo 上的vip 的arp 解析响应。最后请求直接从后端以VIP:CIP 形式返回给客户
    特点: 1、负载与后端服务必须在同一个局域网内
        2、后端服务器必须有外围IP这样才能直接给客户端回包
        3、单台负载可以对接后端服务器数量:100
        4、DR模式效率很高,配置相对麻烦点。因此访问量特别高的情况可以考虑haproxy/nginx替代,一般在并发1万以内都可以使用ha/ngx 或者lvs的nat 模式。

    NAT

    客户端请求包过来后(cip:vip),lvs 把目标IP变换成RIP ,这样cip:rip 数据包到了后端,后端返回数据给lvs,lvs再把源地址IP变换成vip ,这样数据包vip:cip 返回给了客户端
    条件:由于要进行NAT转发,所以负载服务器必须开启内核转发功能 net.ipv4.ip_forward = 1,还有iptables 里面的forward 功能开启
    单台负载可以对接后端服务器数量:10~20

    TUN  加密隧道模式,不常用

    FULLNAT  专门为淘宝架构定制开发的

    调度算法

    轮询调度(Round-Robin Scheduling)
    加权轮询调度(Weighted Round-Robin Scheduling)
    最小连接调度(Least-Connection Scheduling)
    加权最小连接调度(Weighted Least-Connection Scheduling)
    基于局部性的最少链接(Locality-Based Least Connections  Scheduling)
    复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least  Connections ithReplication Scheduling)
    目标地址散列调度(Destination Hashing Scheduling)
    源地址散列调度(Source Hashing Scheduling)
    最短预期延时调度(Shortest Expected Delay Scheduling)
    不 排 队 调 度 ( Never Queue Scheduling )对应: wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
    View Code

    搭建配置

    1、ipvsadm 命令方式配置

      负载均衡端配置
    yum -y install ipvsadm        安装管理模块
    lsmod | grep ip_vs            查看ipvs模块是否加载
    ipvsadm                    执行命令加载模块
    ln -s /usr/src/kernels/$(uname -r)  /usr/src/linux        (cenos6.x 上需要执行,7.x 不执行)
                     
    ifconfig eth0:0  vip/24    up     手动配置一个vip ,先不用keepalived 生成VIP
    ipvsadm-save    保存当前lvs 规则,方便后期用ipvsadm-restore 恢复。(不可直接先用ipvsadm -C)
    ipvsadm -C        清除所有规则
    ipvsadm --set  30  5  60        #设置tcp tcpfin udp 连接超时的时间
    ipvsadm -A -t 1.1.1.1:80 -s wrr -p 20        #-s 轮询算法 -p 会话保持,不设置默认300s。#此保持时间是指同一客户端访问后端01后过了20s后再访问负载才会轮询到02
    ipvsadm -Ln
    ipvsadm -a -t 1.1.1.1:80 -r 1.1.1.2:80 -g -w 1  #-t  tcp-service -r real-ip    -g 即DR模式     -w weight 权重
    ipvsadm-save -n     #保存
    View Code
      后端配置(配置vip、抑制arp)
    ip addr add vip/32    dev lo lable lo:0     #在lo上配置vip注意子网掩码32位,设置成32位就是为了让此IP不能与其他IP通讯,只是为了有一个VIP地址不是为了通讯的
    ifconfig lo:0  192.168.231.200/32 up        #也可以用此命令替代上面命令
    ip addr del ip/32 dev lo                 #可以删除添加错误的地址
    cat >>/etc/sysctl.conf<<EOF            #抑制arp
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    EOF
    sysctl -p
    View Code

    2、通过keepalived 管理配置搭建lvs,同时实现负载均衡和高可用

      负载均衡端配置

      yum -y install keepalived 

       vi keepalived.conf

      

    global_defs {                       
        #   notification_email {             
        #   }
        #   smtp_connect_timeout 30
        router_id LVS_DEVEL-1                 #全网段唯一
        }
        vrrp_instance VI_1 {            
                state MASTER                 #配置LVS是主机主        
                interface eth0              #配置LVS的vip绑定的网卡     
                virtual_router_id 51        #实例组内各个实例标识
                priority 100                  
                advert_int 1           
                authentication {        
                            auth_type PASS
                            auth_pass 1111
                            }
                virtual_ipaddress {         
                                192.168.20.50        #VIP 地址
                            }
                    }
    #管理配置lvs 的配置
        virtual_server 192.168.20.50 80 {    #监听的IP及端口
                delay_loop 6           
                b_algo wrr            
                lb_kind DR                     #使用LVS DR模式                 
                nat_mask 255.255.255.0   
                persistence_timeout 0    
                protocol TCP                          
                real_server 192.168.20.1 80 {         #后端真实服务的IP 1
                        weight 1                    #配置加权轮询的权重             
                        TCP_CHECK {                     
                                    connect_timeout 10   
                                    nb_get_retry 3
                                    delay_before_retry 3
                                    connect_port 80
                                    }
                            }
                real_server 192.168.20.2 80 {        #后端真实服务的IP 1
                        weight 2
                        TCP_CHECK {
                                    connect_timeout 10
                                    nb_get_retry 3
                                    delay_before_retry 3
                                    connect_port 80
                                    }
                            }
                    }
    View Code

      ipvsadm-save -n > /tmp/ipvs-bak #备份之前的配置,如果有需要可以ipvsadm-restore </tmp/ipvs-bak
      ipvsadm -C #清除已有规则
      service keepalived start
      ipvsadm -ln #会发现已经生成新的规则

      后端配置(配置vip、抑制arp)同上

    应用场景

    高并发的web 服务器负载均衡
    mysql 集群读取的负载均衡

  • 相关阅读:
    a different object with the same identifier value was already associated with the session
    Oracle创建触发器实现主键自增
    org.hibernate.LazyInitializationException
    no appropriate service handler found The Connection descriptor used by the client was: localhost:1521:myorcl
    恶补java基础 位运算符
    Extjs Toolbar 当做弹出菜单
    解决javaWEB 下载文件中文名称乱码问题
    SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
    Jackson2.1.4 序列化对象时,过滤null的属性 empty的属性 default的属性
    Jackson2.1.4 序列化格式化时间
  • 原文地址:https://www.cnblogs.com/fanggege/p/11173244.html
Copyright © 2020-2023  润新知