zoukankan      html  css  js  c++  java
  • Linux学习系列之lvs+keepalived

    LVS简介

    LVS介绍

    LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡

    ipvs和ipvsadm的关系

    我们使用配置LVS的时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm进行管理  

    LVS术语

    LVS转发原理

    LVS负载均衡器接受所有入站请求,并根据调度算法决定哪个realserver处理该请求

    LVS调度算法

    • 轮询(rr):按照请求顺序轮流分发到后端RS
    • 加权轮询(wrr):权值高的获得的任务更多
    • 最小连接数(lc):动态的将请求建立到连接数较少的RS上
    • 加权最小连接数(wlc):调度器自动询问RS的真实负载情况,并动态的调整权

    LVS调度算法生产环境选型

    一般的网络服务,如:http、mail、MySQL等,常用的调度算法为:

    • 基本轮询调度rr算法
    • 加权轮询调度wrr算法
    • 加权最小连接调度wlc算法

    LVS转发模式

    • NAT(Network Address Translation)
    • DR(Direct Routing)
    • TUN

    LVS-DR模式

    转发流程

    将所有入站请求转发给后端realserver,后端realserver处理完直接将结果发给客户端

    原理

    当用户请求到达Direct Server,此时报文的源IP为CIP、MAC为CIP-MAC,目标IP为VIP、MAC为VIP-MAC
    Direct Server根据调度算法确定一台处理请求的realserver,将请求转发给对应的realserver,此时源IP和目标IP均未改变,仅修改了源MAC为DIP-MAC,目标MAC为RIP-MAC
    对应的realserver处理完请求,直接将结果发给客户端,此时源IP为VIP、MAC为VIP-MAC,目标IP为CIP、MAC为CIP-MAC

    特性

    • 通过在调度器上修改数据包的目的MAC地址实现转发
    • Real-Server和Direct-Server必须在同一网段 
    • Real-Server的lo接口必须绑定VIP 

    为什么要抑制ARP请求

    • 由于后端Real-Server要将VIP绑定到lo网卡上,这就出现了一个问题,客户端请求到达LVS前端路由器的时候,前端路由器会发送一个{*目标地址为VIP*}的请求报文,所以需要抑制Real-Server的ARP,保证让Direct-Server收到这个报文,而不是realserver收到这个报文
    • 一句话说明抑制Real-Server原因:保证前端路由将目标地址为VIP的报文发给Direct-Server,而不是Real-Server

    优势

    只有请求报文经过调度器,而Real-Server响应处理后无需经过调度器,因此并发量大的时候效率很高

    LVS-NAT模式

    转发流程

    将所有入站请求转发给后端Real-Server,后端Real-Server处理完再发给Direct-Server,Direct-Server再发给客户端 

    特性

    • 既有RIP也有VIP
    • Real-Server必须得跟Direct-Server在同一网段
    • Real-Server必须将网关指向Direct-Server

    优势

    只需要一个公网IP给Direct-Server,Direct-Server始终跟外接打交道

    劣势

    需要依赖Direct-Server把请求转发给Real-Server,Real-Server处理完把结果发给Direct-Server,Direct-Server再把结果转发出去,并发高的时候会成为瓶颈 

    LVS三种模式对比

    ipvsadm介绍

    ipvsadm参数

    添加虚拟服务器
        语法:ipvsadm -A [-t|u|f]  [vip_addr:port]  [-s:指定算法]
        -A:添加
        -t:TCP协议
        -u:UDP协议
        -f:防火墙标记
        -D:删除虚拟服务器记录
        -E:修改虚拟服务器记录
        -C:清空所有记录
        -L:查看
    添加后端RealServer
        语法:ipvsadm -a [-t|u|f] [vip_addr:port] [-r ip_addr] [-g|i|m] [-w 指定权重]
        -a:添加
        -t:TCP协议
        -u:UDP协议
        -f:防火墙标记
        -r:指定后端realserver的IP
        -g:DR模式
        -i:TUN模式
        -m:NAT模式
        -w:指定权重
        -d:删除realserver记录
        -e:修改realserver记录
        -l:查看
    通用:
        ipvsadm -ln:查看规则
        service ipvsadm save:保存规则

    ipvsadm配置LVS负载均衡

    需求

    用LVS实现后端两台httpd的负载均衡

    环境说明 

    lb01   192.168.0.91 lvs
    realserver-1 192.168.0.92 httpd
    realserver-2 192.168.0.93   httpd
    test 192.168.0.94   用来测试负载均衡

    负载均衡器端

    安装LVS
        [root@lb01 ~]#yum -y install ipvsadm 
        [root@lb01 ~]#ipvsadm  
    添加绑定VIP
        [root@lb01 ~]#ip addr add 192.168.0.89/24 dev eth0 label eth0:1
    配置LVS-DR模式
        [root@lb01 ~]#ipvsadm -A -t 192.168.0.89:80 -s rr
        [root@lb01 ~]#ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93 -g 
        [root@lb01 ~]#ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.94 -g

    Real-Server端

    配置测试后端realserver
        配置httpd省略
        [root@realserver-1 ~]#curl 192.168.0.93 #测试realserver-1网站是否正常    
        192.168.0.93
        [root@realserver-2 ~]#curl 192.168.0.94 #测试realserver-2网站是否正常
        192.168.0.94
    绑定VIP到lo网卡
        [root@realserver-1 ~]#ip addr add 192.168.0.89/32 dev lo label lo:1  #由于DR模式需要realserver也有VIP
    抑制ARP
        [root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
        [root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        [root@realserver-1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        [root@realserver-1 ~]#echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore  

    客户端测试

    [root@test ~]#curl 192.168.0.89
    192.168.0.93
    [root@test ~]#curl 192.168.0.89
    192.168.0.94

    配置LVS+keepalived

    需求

    • LVS给两台httpd做负载均衡
    • keepalived做lvs高可用,同时做Real-Server健康检查,如果发现Real-Server80端口没开,就认为故障,从集群中剔除
    • 在keepalived配置文件内就能配置LVS  

    环境说明

    lb01   192.168.0.91 lvs keepalived-master

    lb02

    192.168.0.92 lvs keepalived-backup
    realserver-1 192.168.0.93 httpd
    realserver-2 192.168.0.94 httpd

    在负载均衡器端配置lvs+keepalived

    lb01节点

    [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    ##################全局配置##########################
    global_defs {
        #如有故障,发邮件地址
        notification_email {      
        9618154@qq.com              #收件人
        }
        notification_email_from Alexandre.Cassen@firewall.loc  #keepalived报警邮件,发件人
         smtp_server 192.168.200.1  #邮件服务器地址
        smtp_connect_timeout 30     #邮件服务器超时时间
        router_id LVS_01             #类似于MySQL的server-id,每个keepalived节点不能相同
    }
    #################keepalived配置#####################
    vrrp_instance VI_1 {
        state MASTER              #keepalived角色,MASTER和BACKUP
        interface eth0            #通信接口,下面的virtual_ipaddress(VIP)绑定到这个网卡
        virtual_router_id 51      #vrrp_instance的唯一标识
        priority 150              #keepalived权重,数值越大权重越大,MASTER应大于BACKUP
        advert_int 1              #发送心跳间隔,如果backup1秒收不到心跳就接管,单位是秒
        authentication {          #每个keepalived节点通过这里设置的验证通信,必须得设置成一样
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.89/24       #VIP
        }
    }
    ##################LVS配置##############            
    #添加虚拟服务器
    #相当于 ipvsadm -A -t 192.168.0.89:80 -s wrr 
    virtual_server 192.168.0.89 80 {
        delay_loop 6             #服务健康检查周期,单位是秒
        lb_algo wrr                 #调度算法
        lb_kind DR                 #模式
        nat_mask 255.255.255.0   
        persistence_timeout 50   #回话保持时间,单位是秒
        protocol TCP             #TCP协议转发
    #添加后端realserver
    #相当于 ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93:80 -w 1
        real_server 192.168.0.93 80  {    #realserver的真实IP
            weight 1                      #权重
            #健康检查
            TCP_CHECK {
                connect_timeout 8         #超时时间
                nb_get_retry 3            #重试次数
                delay_before_retry 3      #重试间隔
                connect_port 80           #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
            }
        }
        real_server 192.168.0.94 80  {
            weight 1
            TCP_CHECK {
               connect_timeout 8
               nb_get_retry 3
               delay_before_retry 3
               connect_port 80
            }
        }
    
    }

    lb02节点

    [root@lb01 ~]# vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    ################全局配置###########################
    global_defs {
        notification_email {      
        }
        notification_email_from Alexandre.Cassen@firewall.loc  
        smtp_server 192.168.200.1
        smtp_connect_timeout 30
            router_id LVS_02        
    }
    ################keepalived配置#####################
    vrrp_instance VI_1 {
        state BACKUP             
        interface eth0         
        virtual_router_id 51      
        priority 100             
        advert_int 1             
        authentication {         
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.89/24
        }
    }
    ################lvs配置##########################
    virtual_server 192.168.0.89 80 {
        delay_loop 6
        lb_algo wrr             
        lb_kind DR                 
        nat_mask 255.255.255.0
        persistence_timeout 50    
        protocol TCP              
        real_server 192.168.0.93 80  {
            weight 1             
            TCP_CHECK {            
                connect_timeout 8   
                nb_get_retry 3        
                delay_before_retry 3  
                 connect_port 80      
            }
        }
        real_server 192.168.0.94 80  {
            weight 1
            TCP_CHECK {
             connect_timeout 8
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
            }
        }
    
                    }

    配置后端Real-Server

    确保网站服务是正常的
        curl 192.168.0.93
        192.168.0.93
        curl 192.168.0.94
        192.168.0.94
    绑定VIP到lo网卡
        ip addr add 192.168.0.89/32 dev lo label lo:0
    抑制ARP
        [root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
        [root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        [root@realserver-1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        [root@realserver-1 ~]#echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore  

    客户端测试

    • 负载均衡是否正常
    • 后端Real-Server出问题是否自动剔除
    • lvs高可用是否正常,提供服务的LVS宕机,vip漂移到另一台LVS继续提供服务
  • 相关阅读:
    Django(四)
    Django(三)
    Django(二)
    Django 基础篇
    jQuery
    JDK,JRE,JVM区别与联系
    webdriver API中文文档
    selenium及webdriver的原理
    JAVA IO流结构图
    抽象工厂与工厂方法的区别
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6019885.html
Copyright © 2011-2022 走看看