lvs简单使用

LB集群实现

 

硬件

1 F5
2 BIG-IP
3 Citrix NetScaler
4 A10
5 Redware

 

软件

1 lvs 

2 haproxy

3 nginx

4 ats apache traffic server

5 perlbal

基于工作协议层次划分

    传输层

        lvs,haproxy(mode tcp)

    应用层

        naproxy, nginx, ats, perlbar

 

LVS基础知识

工作在传输层的软件(TCP/IP协议栈),能基于TCP和UDP(目标IP和目标PORT)对请求进行负载均衡,也称四层交换、四层路由

能根据负载均衡算法发送至后端主机集群中某一台主机

netfilter链使用

    PREROUTING ---> INPUT ---> POSTROUTING

ipvsadm 

    用户空间命令行工具,定义集群规则,管理集群服务

ipvs

    工作在内核中netfilter INPUT钩子上

    ipvsadm通过系统调用将规则发送给ipvs

支持TCP、UDP、AH、EST、AH_EST、SCTP等诸多协议

 

查看内核编译IPVS情况

1 grep -i -A 10 'IPVS' /boot/config-3.10.0-693.17.1.el7.x86_64

 

LVS Arch

1 调度器:director, dispatcher, balancer 
2 RS:Real Server

 

LVS Type

lvs-nat

lvs简单使用

MASQUERADE类型

多目标的DNAT模式(iptables):它通过修改请求报文的目标IP地址(必要时一并修改目标PORT)至挑选出的Real Server的IP地址实现转发

特性

    1. RealServer的IP地址和DIP使用私网地址

    2. 请求和响应报文都经由调度器转发,极高负载的场景中,调度器:director可能会成为系统瓶颈

    3. 支持端口映射

    4. RealServer可以使用任意OS

    5. RIP 和 DIP 最好在同一IP网络

 

lvs-dr (direct routing)

lvs简单使用

GATEWAY类型

它通过修改请求报文的目标mac地址进行转发

1. 保证前端路由器将目标IP为VIP的请求报文发送给Director

    静态绑定

    arptables

    修改RS主机的内核参数

2. RIP可以使用私网地址也可以使用公网地址,只要保证能和Director、公网通信

3. RealServer 和 Director 要在一个局域网中

4. 请求报文经由Director调度,但响应报文直接由Real Server发送

5. RealServer网关不能指向DIP

6. 不支持端口映射

7. RealServer可以用大多数OS

 

lvs-tun (ip tunneling)

lvs简单使用

IPIP类型

1. RIP,DIP,VIP全都是公网地址

2. RealServer的网关不能指向DIP

3. 请求报文必须由Director调度,但响应报文必须由RealServer发送

4. 不支持端口映射

5. RealServer必须支持隧道功能

 

lvs-fullnat

lvs简单使用

Director通过同时修改请求报文的目标地址和源地址进行转发

1. VIP是公网地址,RIP和DIP是私网地址,二者无须在同一网络中

2. Real Server 接收到请求报文的源地址为DIP,因此要响应给DIP

3. 请求报文和响应报文都经由Director

4. 支持端口映射机制

5. Real Server 可以使用任意OS

 

LVS Scheduler

静态方法:仅根据算法本身调度

    RR
    
        round robin,轮询

    WRR
    
        weight round robin,加权轮询
    
    DH

        destination hash,将对同一个目标的请求始终调度至同一RealServer

    SH

        source hash,session保持机制

动态方法:根据算法和各RealServer当前负载状态进行调度

    LC

        least connection,最少活动连接

        Overhead(负载) = Active * 256 + Inactive

    WLC

        weight least connection,加权最少活动连接

        Overhead = (Active * 256 + Inactive) / weight

    SED

        shortest expection delay,最短期望延迟

        Overhead = (Active + 1 ) * 256 

    NQ

        never queue,永不排队

        SED算法改进:第一轮用SED挑,挑一个排除一个,直到所有的RS都处理过一个请求,后续的使用SED处理 

    LBLC

        locality-based least connection,动态DH算法

        正向代理情形下的cache server调度

    LBLCR

        Locality-Based Least-Connection with Replication,带复制功能的LBLC

 

ipvs集群服务

1. 一个ipvs主机可以同时定义多个cluster service

2. 一个cluster service上至少应该有一个Real Server

3. 定义cluster service时,要同时指明lvs-type、lvs scheduler

 

ipvsadm用法

service-address

    tcp:-t ip:port

    udp:-u ip:port

    fwm:-f mark

server-address

    ip[:port]

lvs-type

    -g:gateway,dr

    -i:ipip,tun

    -m:masquerade,nat

scheduler

    -s:默认为wlc

管理集群服务

    ipvsadm -A|E -t|u|f service-address [-s scheduler]

    ipvsadm -D -t|u|f service-address

管理集群服务的RealServer

    ipvsadm -a|e -t|u|f service-address -r server-address

    ipvsadm -d -t|u|f service-address -r server-address

清空和查看

    ipvsadm -C

    ipvsadm -L|l [options]

        -n:numberic,以数字格式显示地址和端口

        -c:connection,显示当前TCP连接

        --stats,statistics,显示统计数据

        --rate:速率

        --sort:排序

        --exact:精确值

保存和重载

    ipvsadm -R

    ipvsadm -S [-n]

置零计数器

    ipvsadm -Z [-t|u|f service-address]

 

实例:lvs-nat

Director 

    VIP 192.168.111.128

    DIP 192.168.1.1

RealServer(Web Server)

    RIP1 192.168.1.2:8080

    RIP2 192.168.1.3:8080

ipvsadm -A -t 192.168.111.128:80 -s rr

ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.2 -m

ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.3 -m

ipvsadm -L -n

ipvsadm -E -t 192.168.111.128:80 -s sh 

ipvsadm -L -n

ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.2:8080 -m

ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.3:8080 -m 

ipvsadm -S > /etc/sysconfig/ipvsadm || ipvsadm-save

 

实例:lvs-dr

Director 

    VIP 192.168.111.10

    DIP 192.168.111.128

RealServer(Web Server)

    RIP1 192.168.111.11 gw 192.168.111.1

    VIP1(lo) 192.168.111.10

    RIP2 192.168.111.12 gw 192.168.111.1

    VIP2(lo) 192.168.111.10

LAN-ARP问题解决(多个VIP地址相同,IP地址必须唯一)

    修改RealServer两个内核参数

        arp_announce

            0 通告自身拥有的所有地址

            1 尽量避免把非本网络的地址往外通告

            2 总是使用最佳地址向外通告(能解决问题)

        arp_ignore

            0 通告自身拥有的所有地址

            1 请求报文从哪个接口进入,就用哪个接口的地址响应(能解决问题)

Director VIP Configure (alias broadcast intface_network)

    ifconfig ens33:0 192.168.111.10/32 broadcast 192.168.111.10 up 

    route add -host 192.168.111.10 dev ens33:0

Real Server Configure (defined kernel args)

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce

    ifconfig lo:0 192.168.111.10/32 broadcast 192.168.111.10 up

    route add -host 192.168.111.10 dev lo:0

IPVS Rule

    ipvsadm -A -t 192.168.111.10:80 -s rr 

    ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.11 -g

    ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.12 -g 


多服务负载使用同一集群

    将共享同一组RS的集群服务同一进行定义

    Directior

        # 使用FWM定义集群

        iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 80 -j MARK --set-mark 10 

        iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 443 -j MARK --set-mark 10 

        # iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 22 -j MARK --set-mark 10 

        # 基于FWM定义集群服务

        ipvsadm -A -f 10 -s rr 

        ipvs -a -f 10 -r 192.168.111.11

        ipvs -a -f 10 -r 192.168.111.12

 

实例:lvs-dr (RIP,DIP不在同一网段)

lvs简单使用lvs简单使用
1 加一台Route Host两个IP地址,一个能和公网通信,另一个是RIP的网关
2 这样即使RIP和DIP不在同一网段,也能通过这台路由器转发数据包
3 路由器既要对DIP到RIP的数据包进行转发,也要对VIP到CIP的数据包进行转发
View Code

 

RealServer高可用

lvs简单使用lvs简单使用
防止:RS宕机而Director还继续对它进行调度

方法:让Director对其做健康状态检测机制,并根据检测的结果自动完成添加或移除等管理功能

总结

    1. 基于协议层检测

        网络层:icmp

        传输层:检测端口的开放状态

        应用层:请求获取关键性资源

    2. 检查频率

    3. 状态判断

        下线: success ---> failure ---> failure ---> failure

        上线:failure ---> success ---> success ---> success

    4. 日志问题

        做PV时,健康检测访问Web的日志不应该被算入正常请求日志

    5. back server, sorry server 

        所有RS宕机时,需要反馈用户一些信息

        默认sorry server weight为0,当所有RS宕机时sorry为1
View Code

 

解决Session保持问题

lvs简单使用lvs简单使用
session绑定

    object

        source ip hash

        cookies hash

    lvs sh

        将来自同一个用户IP的请求都定向到同一个Real Server,自行维护一个会话追踪表

    lvs persistence

        无论ipvs使用何种调度方法,其都能实现将来自同一个Client的请求始终定向至上一次调度时挑选出的RS

        需求:持久连接模板,sourceip realserver timer,每个连接都有一个计数器, 存储在模板中,为LVS提供算法调度的参数

        持久连接的实现方式

            每个端口持久:PPC,单服务持久调度

            每个FWM持久:PFWMC,单FWM持久调度

                PORT AFFINITY

            每个客户端持久:PCC,单客户端持久调度

                Director会将用户的任何请求都识别为集群服务,并向RS进行调度

        使用:-p指定超时时间单位s

            ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]


session复制

    ...

session集群

    ...

session服务器

    ...
View Code