Linux之调度器LVS

栏目: 后端 · 发布时间: 5年前

内容简介:1,此环境Ansible作为路由器,配置只需开启路由转发功能,其余IP主机配置IP等地址省略,仅书写有关键配置项

1,实验拓扑图:VS/NAT

Linux之调度器LVS Linux之调度器LVS

1,全部基于Ansible主机操作

安装ipvsadm    基于光盘yum源
# yum install ipvsadm
# ipvsadm -A -t 172.22.145.146:80       添加集权主节点,VIP:PORT
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.22.145.146:80 wlc  wlc算法实验看起来不明显

# ipvsadm -E -t 172.22.145.146:80 -s rr     修改算法为轮询
# ipvsadm -a -t 172.22.145.146:80 -r 172.16.36.10:8080 -m
# ipvsadm -a -t 172.22.145.146:80 -r 172.16.36.11:80 -m
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.22.145.146:80 rr
    -> 172.16.36.10:8080            Masq    1      0          0         
    -> 172.16.36.11:80              Masq    1      0          0  
开启路由转发功能
# sysctl -a | grep forward 模糊查找路由功能
# vim /etc/sysctl.conf
        net.ipv4.ip_forward = 1
# sysctl -p 重读配置文件,使之生效

ipvsadm.service服务启动文件,其实就是保存配置和删除配置一样

start调用重载/sbin/ipvsadm-restore< /etc/sysconfig/ipvsadm
stop调用存储并删除集权规则 /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

2,实验拓扑图:VS/DR

Linux之调度器LVS Linux之调度器LVS

1,此环境Ansible作为路由器,配置只需开启路由转发功能,其余IP主机配置IP等地址省略,仅书写有关键配置项

# vim /etc/sysctl.conf
        net.ipv4.ip_forward = 1

LVS配置(方法一):

# cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:1}
# vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
        DEVICE="ens33:1"
        IPADDR=10.0.0.254
        PREFIX=30
        DEFROUTE=yes
        GATEWAY=10.0.0.253
# ipvsadm -A -t 10.0.0.254:80 -s rr
# ipvsadm -a -t 10.0.0.254:80 -r 172.16.36.10 -g
# ipvsadm -a -t 10.0.0.254:80 -r 172.16.36.11 -g

LVS配置(方法二):标签法,不同端口进行同一调度,例如http和https

# cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:1}
# vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
        DEVICE="ens33:1"
        IPADDR=10.0.0.254
        PREFIX=30
        DEFROUTE=yes
        GATEWAY=10.0.0.253
# iptables -t mangle -A PREROUTING -d 10.0.0.254 -p tcp –m multiport --dports 80,443 -j MARK --set-mark 10
# ipvsadm -A -f 10 -s rr -p             -p选项的意思是,虽然算法随为轮询,但在一定时间内(默认360秒),会一直往一台机器调度。
# ipvsadm -a -f 10 -r 172.16.36.10 -g
# ipvsadm -a -f 10 -r 172.16.36.11 -g

Web1配置和Web2配置相同

# cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:1}
# vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
        DEVICE="ens33:1"
        IPADDR=10.0.0.254
        PREFIX=30
        DEFROUTE=yes
        GATEWAY=10.0.0.253
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce

图示2:

Linux之调度器LVS

图示2:如果路由器的R2口IP与内网在一个网段,VIP不和内网在一个网段时,DIP的网关(此网关肯定要写,写与内网在一个段的任何IP,只要有个默认路由收到包能转出去即可,后续回应客户机的请求与VS主机无关),RIP的网关一定要指向路由器R2口IP。VIP无网关。

RS服务器健康检测小工具

ldirectord

ldirectord:监控和控制LVS守护进程,可管理LVS规则
    包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
    下载:http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/x86_64/
    文件:
        /etc/ha.d/ldirectord.cf                                     主配置文件
        /usr/share/doc/ldirectord-3.9.6/ldirectord.cf   配置模版
        /usr/lib/systemd/system/ldirectord.service     服务
        /usr/sbin/ldirectord                                         主程序,Perl实现
        /var/log/ldirectord.log                                     日志
        /var/run/ldirectord.ldirectord.pid pid               文件

Ldirectord,在VS上安装,且需要启动httpd服务,

# systemctl start httpd
# echo 'Sorry,It will be ok later' > /var/www/html/index.html
# yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm 
# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
# vim /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
fallback=127.0.0.1:80
logfile=“/var/log/ldirectord.log #日志文件
quiescent=no #down时yes权重为0,no为删除
virtual=10.0.0.254:80 #指定VS的FWM或IP:port
real=172.16.36.10:80 gate
real=172.16.36.11:80 gate
fallback=127.0.0.1:80 gate #sorry server
service=http
scheduler=rr
checktype=negotiate
checkport=80
request="index.html"
receive=“Test Ldirectord"

客户端测试:

正常情况下:
    Server Web2
    Server Web1
RS web1停止httpd服务后:
    Server Web2
    Server Web2
RS web1web2都停止httpd服务后,VS服务器道歉页面
    Sorry,It will be ok later
    Sorry,It will be ok later
    Sorry,It will be ok later
RS web1web2重启httpd服务后,调度恢复正常
    Server Web2
    Server Web1

LVS介绍

LVSLinux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明)
官网:http://www.linuxvirtualserver.org/
        VS: Virtual Server,负责调度
        RS: Real Server,负责真正提供服务
L4:四层路由器或交换机
阿里的四层LSB(Server Load Balance)是基于LVS+keepalived实现
工作原理:
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

netfilter

iptables/netfilter
iptables:用户空间的管理工具
netfilter:内核空间上的框架
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
DNAT:目标地址转换; PREROUTING

内核支持

[root@martinhe~]# grep -i -A 10 "IPVS" /boot/config-3.10.0-862.el7.x86_64
    # IPVS transport protocol load balancing support
    CONFIG_IP_VS_PROTO_TCP=y #开启tcp
    CONFIG_IP_VS_PROTO_UDP=y #开启udp
    CONFIG_IP_VS_PROTO_AH_ESP=y
    CONFIG_IP_VS_PROTO_ESP=y
    CONFIG_IP_VS_PROTO_AH=y
    CONFIG_IP_VS_PROTO_SCTP=y #

    # IPVS scheduler #默认支持的算法
    CONFIG_IP_VS_RR=m
    CONFIG_IP_VS_WRR=m
    CONFIG_IP_VS_LC=m
    CONFIG_IP_VS_WLC=m
    CONFIG_IP_VS_LBLC=m
    CONFIG_IP_VS_LBLCR=m
    CONFIG_IP_VS_DH=m
    CONFIG_IP_VS_SH=m
    CONFIG_IP_VS_SED=m

LVS集群体系结构

Linux之调度器LVS

Linux之调度器LVS

LVS概念

lvs集群类型中的术语:
    VSVirtual ServerDirector Server(DS)
        Dispatcher(调度器),Load Balancer
    RSReal Server(lvs), upstream server(nginx)
        backend server(haproxy)
    CIPClient IP
    VIP: Virtual serve IP VS外网的IP
    DIP: Director IP VS内网的IP
    RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP

Linux之调度器LVS

lvs集群的类型

lvs: ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,规则管理器
用于管理集群服务及RealServer
ipvs:工作于内核空间netfilterINPUT钩子上的框架

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

LVS-NAT模式:

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

LVS-DR模式:

LVS-DRDirect Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MACDIP所在的接口的MAC,目标MAC是某挑选出的RSRIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
1 Director和各RS都配置有VIP
2 确保前端路由器将目标IPVIP的请求报文发往Director
在前端网关做静态绑定VIPDirectorMAC地址
RS上使用arptables工具
    arptables -A IN -d $VIP -j DROP
    arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
RS上修改内核参数以限制arp通告及应答级别
    /proc/sys/net/ipv4/conf/all/arp_ignore
    /proc/sys/net/ipv4/conf/all/arp_announce
    3RSRIP可以使用私网地址,也可以是公网地址;RIPDIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
    4RSDirector**必须以及肯定**要在同一个物理网络
    5)请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
    6)不支持端口映射(端口不能修败)
    7RS可使用大多数OS系统

LVS-TUN模式:

转发方式:不修改请求报文的IP首部(源IPCIP,目标IPVIP),而在原IP报文之外再封装一个IP首部(源IPDIP,目标IPRIP),将报文发往挑选出的目标RSRS直接响应给客户端(源IPVIP,目标IPCIP
        (1) DIP, VIP, RIP都应该是公网地址
        (2) RS的网关一般不能指向DIP
        (3) 请求报文要经由Director,但响应不经由Director
        (4) 不支持端口映射
        (5) RSOS须支持隧道功能

LVS-FULLNAT模式

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

Linux之调度器LVS

lvs-natlvs-fullnat:请求和响应报文都经由Director
        lvs-natRIP的网关要指向DIP
        lvs-fullnatRIPDIP未必在同一IP网络,但要能通信
lvs-drlvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
        lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
        lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

ipvs scheduler

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度
        1RRroundrobin,轮询
        2WRRWeighted RR,加权轮询
        3SHSource Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
        4DHDestination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
    动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
        1LCleast connections 适用于长连接应用
        Overhead=activeconns*256+inactiveconns
        2WLCWeighted LC,默认调度方法
        Overhead=(activeconns*256+inactiveconns)/weight
        3SEDShortest Expection Delay,初始连接高权重优先
        Overhead=(activeconns+1)*256/weight
        4NQNever Queue,第一轮均匀分配,后续SED
        5LBLCLocality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
        6LBLCRLBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

FireWall Mark

FWMFireWall Mark
MARK target 可用于给特定的报文打标记
        --set-mark value
        其中:value 可为0xffff格式,表示十六进制数字
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度
实现方法:
            Director主机打标记:
            # iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER
            Director主机基于标记定义集群服务:
            # ipvsadm -A -f NUMBER [options]

持久连接

session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs sh算法无法实现
    持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS
        # ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
    持久连接实现方式:
        每端口持久(PPC):每个端口定义为一个集群服务,每集群服务单独调度
        每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity
        每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式

LVS高可用性

Director不可用,整个系统将不可用;SPoF Single Point of Failure
解决方案:高可用
    keepalived heartbeat/corosync
RS不可用时,Director依然会调度请求至此RS
解决方案: Director对各RS健康状态进行检查,失败时禁用,成功时启用
    keepalived heartbeat/corosync ldirectord
检测方式:
    (a) 网络层检测,icmp
    (b) 传输层检测,端口探测
    (c) 应用层检测,请求某关键资源
    RS全不用时:backup server, sorry server

以上所述就是小编给大家介绍的《Linux之调度器LVS》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript RIA开发实战

JavaScript RIA开发实战

(英)Dennis Odell / 张立浩 / 清华大学出版社 / 2010 / 48.00元

本书介绍如何采用最合理的方式为RIA编写可靠的、易于维护的HTML、CSS和JavaScript代码,以及如何使用Ajax技术在后台实现浏览器与Web服务器的动态通信。本书将介绍您在构建Web应用程序时可能遇到的性能限制,以及如何以最佳的方式克服这些限制。此外,本书提供的提示可以使用户界面响应更加灵敏。 本书也将介绍如何通过添加使用自定义字体的印刷标题、多媒体回放组件、自定义窗体控件和动态绘......一起来看看 《JavaScript RIA开发实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具