1 LVS全称为Linux Virtual Server,工作在ISO模型中的第四层,修改nat-filter input 链,直接到postrouting

  客户端和服务器直接建立连接,lvs是透明的


2、LVS术语


Director Server:调度服务器,即lvs server

Real Server:真实服务器,真正提供应用服务的服务器

VIP:虚拟IP地址,公布给用户访问的IP地址

RIP:真实IP地址,集群节点上使用的IP地址

DIP:Director连接到RealServer的IP地址


3 模式:

    nat:路由转发模式

        lvs充当Real Serve的网关,lvs对Real Serve 做S-nat

        客户端请求--网关--lvs(虽然目的ip为lvs,LVS在intput链上修改目的ip,经output链)--RS--LVS(需手工做s-nat)--客户端

    dr:直接路由模式

        默认模式,DIP,RIP 在一个网络中,lvs和rs均仅使用1块物理网卡

        lvs把到达的数据帧的目的MAC地址修改为某一台Real Serve的MAC,然后不经过lvs直接返回给客户端。lvs不修改三层包头

        客户端请求--网关--lvs(不修改三层,修改目的mac为rs)--rs(物理接口-路由-lo:0-httpd-修改回城ip头--lo:0--物理接口)--网关--客户端

        不要求vip和rip一个网段,只要dip和rip一个网段即可把数据帧送给rs,rs最终经物理接口出去即可。

    tun:隧道模式

        数据包到达lvs后,通过隧道到达RS后,不经过lvs直接返回给客户端

    fullnat模式

        lvs做D-nat和S-NAT


4 部署:


4.0

    yum install ipvsadm


    安装lvs cli工具, 因lvs已集成到linux内核


4.1 nat 模式,MASQUERADE


    lvs

    VIP: 192.168.90.70  网卡1 面向互联网接口ens33

    DIP: 192.168.100.1  网卡2 和RS在一个网络ens34


    RIP1: 192.168.100.11,网卡2 网关设置为 192.168.100.1

    RIP2: 192.168.100.12,网卡2 网关设置为 192.168.100.1


    vm测试部署方式:

    lvs 网卡1 桥接,网卡2 Local

    RS1,RS2 网卡2LocalAddress

    RS1,RS2,lvs 网卡使用vm net10 组成二层网络


    4.1.1 RS 部署httpd, 测试访问正常


    4.1.2 lvs 配置:


// add virtual service
    ipvsadm -A -t 192.168.90.70:80 -s rr

    //add real server ,测试使用rr轮询算法,-m 使用nat 模式
    ipvsadm -a -t 192.168.90.70:80 -r 192.168.100.1:80 -m -S rr

    //保存配置
    ipvsadm -s > /etc/sysconfig/ipvsadm

    //重启lvs服务
    servicectl restart ipvsadm

    --------------------
    ipvsadm -Ln  查看lvs服务
    ipvsadm -E -t  修改lvs tcp 服务
    ipvsadm -C    清空lvs服务
    ipvsadm -S > /tmp/ip_vs.bak 备份配置

    //测试结果:通过访问vip 实现轮询负载
    # ipvsadm
        IP Virtual Server version 1.2.1 (size=4096)
        Prot LocalAddress:Port Scheduler Flags
        -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
        TCP  controller:http rr
        TCP  lvs:http wrr
        -> 192.168.100.11:http          Masq    1      0          0
        -> 192.168.100.12:http          Masq    1      0          0


4.2 dr模式:

     

lvs tunel vrrp包过滤 lvs filter device_lvs tunel vrrp包过滤

 

 

    lvs:
    DIP 192.168.100.1 网卡2, VIP 192.168.100.100 网卡2别名ens33:0
    (lvs一块网卡,怎么配置不重要,因为数据包到达RS后,解封装后,露出三层包头,转发依据源ip(客户端ip))
        
    RIP1: 192.168.100.11 网卡2, VIP 192.168.100.1 lo:0
    RIP2: 192.168.100.12 网卡2, VIP 192.168.100.1 lo:0

    lvs和RS网关均设置为192.168.100.254

    //客户端请求到达网关后,只能送给lvs,网关的arp广播RS不能响应
    方式1: 网关静态mac表,不广播,不推荐
    方式2: RS iptables做arp过滤,不让arp进来或者出去
    方式3: RS 把vip配置在lo:0接口,过滤arp


    vm测试部署方式:
    RS1,RS2,lvs 网卡使用vm net10 组成二层网络,

    4.2.1 配置dip,rip
    4.2.2 配置
        lvs配置vip:ifconfig ens33:0 192.168.100.100/32 up
                 

//先用用再配置ip,防止交换机收到
        rs禁用arp: echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
                            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        rs配置ip:  ifconfig lo:0 192.168.100.100/32

        //host主机测试连通性,确认vip mac为lvs ens33mac
        C:\Users\wu>ping 192.168.100.100

        正在 Ping 192.168.100.100 具有 32 字节的数据:
        来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64

        C:\Users\wu>arp -a
            192.168.100.100       00-0c-29-d4-ca-d6     动态

        # ifconfig ens33
        ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
            inet6 fe80::c2f7:1b74:8e1e:7f7c  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:d4:ca:d6  txqueuelen 1000  (Ethernet)

        //rs修改路由
        route add -host 192.168.100.100 dev lo:0
        route -n
            Kernel IP routing table
            Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
            0.0.0.0         192.168.100.254   0.0.0.0         UG    0      0        0 ens33
            192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
            192.168.100.100 0.0.0.0         255.255.255.255 UH    0      0        0 lo

        //配置lvs

        ipvsadm -A -t 192.168.100.100:80 -s rr
        ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.11:80 -g
        ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.12:80 -g

        //测试
        # ipvsadm
            IP Virtual Server version 1.2.1 (size=4096)
            Prot LocalAddress:Port Scheduler Flags
            -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
            TCP  lvs:http rr
            -> 192.168.100.11:http          Route   1      0          1
            -> 192.168.100.12:http          Route   1      0          1