LVS

LVS(linux virtual server)即linux虚拟服务器,是一个虚拟的服务器集群系统。

使用集群技术和Linux操作系统实现一个高性能,高可用的服务器,很好的可伸缩性(scalability),很好的可靠性(reliability),很好的可管理性(manageability).

contos7:

grep -i ipvs /boot/config-3.10.0-693.e17.x86_64

grep -i ipvs -C 10 /boot/config-3.10.0-693.e17.x86_64

yum install ipvsadm

rpm -ql ipvsadm

curl命令

lvs服务器:
需要两块网卡

启用Ipforward:

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

sysctl -p

sysctl -a | grep ip_forward

iptables -vnl

client:
需要桥接

RS1:
设置网关

yum install httpd

echo RS1 > /var/www/html/index.html

RS2;
设置网关

yum install httpd

echo RS2 > /var/www/html/index.html

LVS:

定义ipvs规则:NAt模式

yum install ipvsadm

ipvsadm -A -t 172.20.0.200:80 -s rr

ipvsadm -Ln

ipvsadm -a -t 172.20.0.200:80  -r 192.168.80.17 -m

ipvsadm -a -t 172.20.0.200:80  -r 192.168.80.27 -m

ipvsadm -Ln

并发4百万 apache 1万

集群

Cluster概念

  • 系统扩展方式:

    scale up: 向上扩展,增强
    scale out: 向外扩展,增加设备,调度分配问题, cluster
    
  • Cluster: 集群,未解决某个特定问题将多台计算机组合起来形成的单个系统

  • Linux Cluster类型:
    LB:load blancing, 负载均衡
    HA:high availiablity, 高可用, spof(single point of failure)

    MTBF: Mean Time Between Failure 平均无故障时间
    MTTR: Mean Time To REStoration (repair) 平均恢复前时间(故障时间)
    A=MTBF/(MTBF+MTTR) (0,1): 99%,99.5%, 99.9%, 99.99%, 99.999%
    

    HPC: high-performance computing . 高性能 www.top500.org

  • 分布式系统:
    分布式存储: 云盘
    分布式计算: hadoop, spark
    

Cluster分类

  • LB Cluster的实现
  • 硬件:
    F5 big-ip
    citrix netscaler
    A10 A10
    
  • 软件:
    lvs: linux virtual server
    nginx: 支持七层调度
    haproxy: 支持七层调度
    ats: apache trafficserver
    perlbal: perl编写
    pound
    
  • 基于工作的协议层划分:
  • 传输层(通用):DPORT
    LVS:
    nginx:stream
    haproxy: mode tcp
  • 应用层(专用):针对特定协议,自定义的请求模型分类
    proxy server:

    http:nginx, httpdm haproxy(mode http),...
    fastcgi: nginx, httpd, ...
    mysql: mysql-proxy,...
    
  • 会话保持:负载均衡

    (1)session sticky: 同一用户调度固定服务器
        source ip: lvs sh算法(对某一特定服务而言)
        cookie
    (2)session replication: 每台服务器拥有全部session
            session multicast cluster
    (3)session server: 专门的session服务器
                memcached, redis
    
  • HA集群实现方案
    keepalived: vrrp协议
    ais:应用接口规范
    heartbeat
    cman + rgmanager(RHCS)
    coresync_pacemaker
    

LVS介绍

LVS介绍

  • LVS: linux virtual server, 负载调度器,集成内核
    官网:http://www.linuxvirtualserver.org/
    VS:virtual server,负责调度
    RS:real server,负责真正提供服务
    L4:四层路由器或交换机
  • 工作原理:vs根据请求报文的目标ip和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
  • iptables/netfilter:
    iptables:用户空间的管理工具
    netfilter:内核空间上的框架
    流入:PREROUTING–>INPUT
    流出:OUTPUT–> POSTROUTING
    转发:PREROUTING–>FORWARD–>POSTROUTING
    DNAT:目标地址转换;PREROUTING

LVS概念

  • lvs集群类型中的术语:
    VS:virtual server, director server(DS)

    dispatcher(调度器),load balancer
    

    RS:real server(lvs), upstream server(nginx)

    backend server(haproxy)
    

    CIP:client ip
    VIP:virtual serve ip VS外网的ip
    DIP:director ip VS内网Ip
    RIP:real server ip

    访问流程:CIP<-->VIP==DIP<-->RIP

LVS集群的类型

  • lvs: ipvsadm/ipvs
    ipvsadm: 用户空间的命令行工具,规则管理器
    ipvs: 工作于内核空间netfilter的INPUT钩子上的框架

  • lvs集群的类型:
    lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
    lvs-dr: 操纵封装新的MAC地址
    lvs-tun: 在原请求IP报文之外新加一个IP首部
    lvs-fullnat: 修改请求报文的源和目标IP

lvs-nat模式

  • lvs-nat:
    本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
    (1)RIP和DIP应在同一个IP网络,且应使用私网地址,RS的网关要指向DIP
    (2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
    (3)支持端口映射,可修改请求报文的目标PORT
    (4)VS必须是linux系统,RS可以是任意OS系统

lvs-fullnat模式

  • lvs-fullnat:
    通过同时修改请求报文的源IP地址和目标IP地址进行转发
    CIP-->DIP
    VIP-->RIP
    
    (1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此。RIP的网关一般不会指向DIP
    (2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
    (3)请求和响应报文都经由Director
    (4)支持端口映射
    注意:此类型kernel默认不支持

LVS工作模式总结

VS/NAT VS/TUN VS/DR
server any tunneling non-arp device
server network private LAN/WAN LAN
server number low(10~20) high(100) high(100)
server gateway load balancer own router own router
  • lvs-nat与lvs-fullnat:请求和响应报文都经由director
    lvs-nat:RIP的网关要指向DIP
    lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

  • lvs-dr与lvs-tun:请求报文要经由director,但相应报文有RS直接发往client
    lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
    lvs-tun: 通过在院IP报文外封装新IP头实现转发,支持远距离通信

ipvs scheduler

  • ipvs scheduler:
    根据其调度时是否考虑各RS当前的负载状态
    两种:静态方法和动态方法
  • 静态方法:仅根据算法本身进行调度

    1. RR: roundrobin,轮询
    2. WRR: weighted RR,加权轮询
    3. SH: source hashing,实现session sticky,源IP地址hash;将来自同一个IP地址的请求,始终发往第一次挑中的RS,从而实现会话绑定
    4. DH: destination hashing, 目标地址哈希,将发往同一个目标地址的骑牛始终发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡;如:宽带运行商
    
  • 动态方法:
    主要根据每个RS当前的负载状态及调度算法进行调度overhead=value较小的RS将被调度

    1. LC: least connections 适用于长连接应用
      overhead=activeconns*256+inactiveconns
    2. WLC: weighted LC,默认调度方法
      overhead=(acticeconns*256+inactiveconns)/weight
    3. SED: shortest expection delay,初始连接高权重优先
      overhead=(activeconns+1)*256/weight
    4. NQ: never queue, 第一轮均匀分配,后续sed
    5. LBLC: locality-based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
    6. LBLCR: LBLC with replication, 带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

ipvsadm命令

  • ipvsadm 命令:
  • 核心功能:

    集群服务管理:增,删,改
    集群服务的RS管理:增,删,改
    查看
    

    ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [–pe persistence_engine] [-b sched-flags]
    ipvsadm -D -t|u|f service-address 删除
    ipvsadm -C 清空
    ipvsadm -R 重载
    ipvsadm -S [-n] 保存
    ipvsadm -a|e -t|u|f service-address -r server-address [options]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|U|f service-address]

  • 管理集群上的RS:增,删,改

  • 增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  • 删:ipvsadm -d -t|u|f service-address -r server-address
  • server-addres:
    rip[:port] 如省略port,不作端口映射
  • 选项:
    lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip,tun类型
    -m: masquerade, nat类型
    
    -w weight: 权重

参考

http://blog.sina.com.cn/s/blog_6786545e0102vjvq.html