码迷,mamicode.com
首页 > 其他好文 > 详细

lvs

时间:2015-08-07 20:20:39      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:blank   服务器   target   linux   博士   

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

技术分享

lvs:四层路由,四层交换

         根据目标ip和port实现请求转发至后端的多个主机中的一个(根据挑选法则)

         借助于netfilter

         查看内核是否编译进来lvs命令

         grep –i “ipvs”  /boot/config-version,否则重新编译内核

lvs:

         ipvsadm:用户空间用于转发规则的程序

         ipvs:工作于内核空间的INPUT链根据规则完成请求调度的程序

         支持的协议:TCP UDP SCTP AH ESP AH_ESP

lvs中常用术语

Director:主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况

Real  Server:Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器等

client ip:CIP

director ip:DIP

director virtual   ip:VIP

real server ip:RIP

lvs类型

        lvs-nat:

                1、RS应用使用私有地址;RS的网关必须指向DIP;
                2、请求和响应都要经过Director;高负载场景中,Director易成为性能瓶颈;
                3、支持端口映射;
                4、RS可以使用任意

                5、RIP和DIP要在同一网段

        lvs-dr:修改目标MAC,直接送给网卡驱动,目标MAC是基于调度方法选出某RS的网络接口的MAC地址
            1、保证前端路由将目标地址为VIP的报文统统发往Directory,而不能是RS;
                解决方案:
                    (1) 静态地址绑定:在前端路由器上操作
                        问题:未必有路由操作权限
                    (2) aprtables
                    (3) 修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求;
            2、RS可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过RIP对其直接发起管理访问;
            3、RS跟Directory必须在同一物理网络中;
            4、请求报文经由Director,但响应报文必须不能经过Director;
            5、不支持端口映射;
            6、RS可以是大多数常见的OS;
            7、RS的网关绝不允许指向DIP;

        lvs-tun:不修改请求报文IP首部,通过隧道机制在IP首部外部再封装一个IP首部(sip:DIP,dip:RIP),进过网络发往服务器
                1、RIP、VIP、DIP全部是公网地址;
                2、RS的网关不会也不可能指向DIP;
                3、请求报文经由Director,但响应报文必须不能经过Director;
                4、不支持端口映射;
                5、RS的OS必须支持隧道功能;

        lvs-fullnat:

lvs scheduler:WLC默认调度算法
        # grep -i ‘VS‘ /boot/config-VERSION

        静态方法:仅根据调度算法本身进行调度
            rr: round robin,轮流,轮询,轮叫
            wrr: weighted round robin, 加权轮询
            sh: source hashing,源地址hash,表示来源于同一个CIP的请求将始终被定向至同一个RS;SESSION保持;
            dh: destination hashing, 目标地址hash,

        动态方法:根据算法及各RS当前的负载状况进行调度
            lc: least connection,最少连接
                Overhead=Active*256+Inactive
            wlc: weighted lc
                Overhead=(Active*256+Inactive)/weight 
            sed: shortest expection delay
                Overhead=(Active+1)*256/weight 
     LVS调度基于定义的集群服务进行的。

            定义集群服务
            为集群添加各RS

ipvsadm用法:

         管理集群服务:

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

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

                       -A:添加

                       -E:修改

                       -D:删除

                       -t:tcp协议

                       -u:udp协议

                       -f:FWM,防火墙标记,标记用数字表示,将多个端口绑定在一起定义成一个集群服务时使用

                     service-address:
                         -t|u: VIP:Port
                         -f: #

            向一个已经存在集群服务添加一个RS:
                ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

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

                       -a:添加RS

                       -e:修改RS

                       -d:删除RS

                       -r server-address:RS的地址 ip[:port]port省略默认使用相同端口

                       -g:GATEWAY

                        -i:ipip

                        -m:MASQUERADE

                        -w:权重

          查看已经定义的集群服务及RS:
                 ipvsadm -L -n
                     -c: 查看各连接
                     --stats: 统计数据
                     --rate: 速率
                     --exact: 精确值

          清空所有的集群服务:
                 ipvsadm -C

           保存集群服务定义:
                 ipvsadm -S > /path/to/some_rule_file
                 ipvsadm-save > /path/to/some_rule_file

             让规则文件中的规则生效:
                 ipvsadm -R < /path/from/some_rule_file
                 ipvsadm-restore < /path/from/some_rule_file

RS: 配置内核参数
    arp_ignore: 如何响应接收ARP地址请求;默认0;1表示仅在请求的地址配置在请求报文的接口进行响应;
    arp_announce: 如何通告本地地址;默认0;2表示仅通过网络直连的接口的地址;

RS:首先配置内核参数
    配置VIP时使用:
    ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
    route add -host VIP dev lo:0

keepalived:

结合netfilter来实现一种集群服务定义机制;
                (1) 在mangle表的PREROUTING链定义规则,实现指定防火墙标记;
                # iptables -t mangle -A PREROUTING -d VIP -p {tcp|udp} --dport PORT -j MARK --set-mark #
                (2) 基于此前的标记定义集群服务;
                # ipvsadm -A -f # [-s METHOD]
                # ipvsadm -a -f # -r RS [options]

            功能:将同属于同一组应用的多个不同端口的服务定义成一个集群服务,统一调度;

lvs持久连接功能:
            无论使用什么调度方法,持久连接功能都能保证在指定的一段时间内,来自同一个用户的请求始终被定向至同个RS;其调度基准为集群服务;
            持久连接的类型:
                PCC:
                    在基于tcp或udp定义集群服务时,其端口为0,格式为VIP:0,表示将来自于用户请求的任何一种请求(无论请求指定协议的哪个端口)统统转给后端的RS;基于持久连接时,来自于同一个Client的所有请求统统被转发至同一个RS;

                  ipvsadm –A –t ip:0    –s rr –p  300

                  ipvsadm –a –t  ip:0 –r rip –g -w
                PPC:每端口持久
                    持久机制;单服务调度;各集群服务分开调度
                PFM:单服务调度;可以通过防火墙标记将多个协议定义为同一个服务;

ipvs:对RS的健康状态检查可以借助于keepalived实现

                 检查思路:

                     1.IP:ICMP

                     2.传输层:端口开放状态

                      3.应用层:请求关键性资源

RS的健康状态检测:
            1、自动上下线各RS;
                如果状态发生了改变:
                    online --> fail
                        探测三次及以上;
                    offline --> ok
                        一次即可;
            2、所有RS均故障时,应该提供一个back server; 

            如何检测RS的健康状态:
                利用集群服务依赖的协议进行检测
                利用端口扫描或探测类工具对指定协议的端口进行探测
                在网络层探测 

lvs

标签:blank   服务器   target   linux   博士   

原文地址:http://jianchixuexi.blog.51cto.com/4026260/1682759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!