设为首页 收藏本站
查看: 1107|回复: 0

[经验分享] LVS-NAT模型实践

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-25 08:49:50 | 显示全部楼层 |阅读模式
友情提醒:实验环境为:Centos 6.6 x86_64 + vmware workstation 10     内容概括:
         1)LVS的点滴汇总
         2)实现LVS-nat模型


一  LVS的点滴汇总
      LVS是Linux Virtual Server的简称,基于IP和端口的负载均衡软件。该开源项目的发起者和主要开发者为章文嵩博士。
    1.1)LVS的组件:
          有2部分组成:
                ipvs:工作在内核空间netfilter/iptables框架的input链上。
                ipvsadm:工作在用户空间的一个命令工具,主要用于复制均衡规则的定制和管理

          ipvsadm定义好集群服务和负载均衡规则后,ipvs在input链上截取相应端口和目标地址的服务包,改写目标地址,通过forward,postrouting链发往后端的真正提供服务的主机。
          iptables规则和ipvsadm定义的规则不能共存。
    1.2)LVS支持的协议:
            目前支持:tcp/udp/sctp/ah/esp/ah_esp
    1.3)术语约定:
          主机类:
                    Director:调度器,做为网络构架的唯一入口。
                    Real Server:简称RS,隐藏于后端提供服务的真正主机。
              
            IP类:
                      用户(cip)<--->(vip)LVS-Director(dip)<---->(rip)real server
     1.4)LVS的工作模型由四种:
              lvs-nat: 后端real server真正隐藏,接受和返回给客户端的数据包均需经由 lvs-Director转发,
后端realserver 与 lvs要求在同一个物理局域网内。

              lvs-dr:   Lvs-Director接受客户端的请求数据包,给返回给客户端的应答包由后端realserver直接返回,后端realserver与lvs要求在同一个物理局域网内。         
              lvs-tun:   Lvs-Director接受客户端的请求数据包,给返回给客户端的应答包由后端realserver直接返回,后端realserver与lvs不在同一个物理局域网内,可以夸地域实现。               

              lvs-fullnat: 这个目前不是LVS标准模型,由阿里巴巴集团开发人员研制出的一种新型结构,是lvs-nat模型的改进型,Lvs-Director与realserver可以跨路由器协同工作。
       1.5)LVS的调度方法:
        静态方法:调度时仅根据算法本身实现调度,而不管后端realserver的负载情况。
                RR:round-robin,轮询
                WRR:weighted round-robin,加权轮询:给lvs一个权重值,值越大承受越多。
                                计算方法:overhead=conn/weight   

RR与WRR,算法的优点是其简洁性,它无需记录当前所有连接的状态,是一种无状态调度,不管服务器的当前连接数和响应速度。
               DH:destination ip hashing,目标地址散列调度,特殊场景中使用,例如有多出口时。
该算法是针对目标IP地址的负载均衡,通过散列(Hash)函数将目标IP地址与后台Realserver组成key:value对应关系的散列表,根据请求包文的目标IP地址,作为键(Hash Key)从静态分配的散列表找出对应的服务器。若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。                     

            SH:source hashing,源地址哈希,来源相同的主机始终发向同一个realserver实现会话绑定。
它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外,它的算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。               

        动态方法:根据算法及后端RS当前的负载状况实现调度
                     LC:least connection
                            计算方法:overhead=Active*256+Inactive
                     WLC:weighted least connection
                             计算方法:overhead=(Active*256+Inactive)/weight
LC与WLC 将新的连接请求将被分配至当前连接数最少的RealServer;是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。                                       SED:Shorted Expection Delay,最短期望延迟
                             计算方法:overhead=(Active+1)*256/weight
                     NQ:Never Queue   
                     LBLC:基于本地的最少连接 Local-Based Least Connection
                           动态方式的DH算法
                     LBLCR:带复制的LBLC





       1.6)ipvsadm命令的使用格式:

                 安装命令:#yum -y install ipvsadm  
                 用法:
                         管理集群服务:创建,修改,删除
                             #ipvsadm -A|-E -t|-u|-f  service-address [-s scheduler]
                             #ipvsadm -D -t|-u|-f service-address
                                -A:创建
                                -E:修改
                                -D:删除
                                -t:tcp,后面的service-address的格式:vip:port,如:192.168.0.1:80
                                -u:udp,后面的service-address的格式:vip:port,如:192.168.0.1:80
                                -f:承载协议为tcp或udp,但该类报文会经由iptables/netfilter打标记,即防火墙标记,其service-address的格式“FWM",例如 "10"
                                 -s scheduler:指定算法。默认为wlc
        

                          管理集群服务的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
                            #ipvsadm -C

                              -r server-address:指明Real Server,格式:ip[:port],如:192.168.1.1:80
                              -g:指明lvs类型为 lvs-dr,默认类型。
                              -i:指明lvs类型为 lvs-tun
                              -m:指明lvs类型为lvs-nat
                              -w weight:指定权重。
                              -d:删除已定义的realserver
                              -C:清空已定义的ipvsadm的规则
                          
         

                           规则存取:
                                保存规则:

                                   #service ipvsadm save
                                      -->规则保存至/etc/sysconfig/ipvsadm
                                   #ipvsadm  -S > /etc/sysconfig/ipvsadm
                                   #ipvsadm-save > /etc/sysconfig/ipvsadm
                                读取规则:
                                    #service ipvsadm restart  
                                   #ipvsadm  -R < /etc/sysconfig/ipvsadm
                                   #ipvsadm-restore</etc/sysconfig/ipvsadm
      

                         规则和统计数据查看:
                                  #ipvsadm -L -n  [option]
                                  #ipvsadm -Z
                                        -L 显示规则
                                        -n 数字表示
                                        -Z 情况数据统计值
                                        option:

                                                 -c  显示当前的活动链接分配
                                                 --stats 显示统计数据
                                                 --rates 列出速率
                                                 --exact 显示精确值
                                         
二  Lvs-Nat模型的实现:
       2.1)Lvs-nat模型下数据包ip头地址的转换
            请求包头:client(cip,vip)--->lvs(dip)-->(cip,rip)-->realserver
            响应包头: client(vip,cip)<---lvs(dip)<--(rip,cip)<--realserver
      2.2) Lvs-nat架构特性:
           (1):rip为私有地址,vip为公网地址
           (2):read sever网关指向dip,rip与dip在同一网段中。
           (3):请求和相应报文都经由Director转发,lvs在高负载场景下成为系统同瓶颈。
           (4):lvs必须为linux,real server可以是任意OS
      2.3)实验环境:
主机
角色
IP地址
Test01
LVS Director
vip:192.168.100.1
        [vmnet8]
dip:172.16.0.1
        [vmnet3]

Test02
LVS realserver,提供简单的web服务

rip:172.16.0.2
       [vmnet3]

Test03
LVS realserver,提供简单的web服务

rip:172.16.0.3
        [vmnet3]

win7
客户机,发起web请求
cip:192.168.100.100
        [vmnet8]

         实验拓扑图:

                                                                               |<--->Test02(realserver)

win7 <---[vmnet8]----->Test01<----[vmnet 3]---->|

(client)                        (LVS-Director)                        |<--->Test03(realserve)

    2.4)实验步骤:
        2.4.1) 网卡桥接,I地址设定和相应的web服务

设定Test02:
1
2
3
4
5
6
7
8
[iyunv@Test02 ~]# service iptables stop
[iyunv@Test02 ~]#setenforce 0
[iyunv@Test02 ~]#yum -y install httpd
[iyunv@Test02 ~]#ip addr add 172.16.0.2/24 dev eth2
[iyunv@Test02 ~]#touch /var/www/html/index.html
[iyunv@Test02 ~]#echo "<h1>privateli-Test02,web station,172.16.0.2 is my address</h1>">/var/www/html/index.html
[iyunv@Test02 ~]#service httpd start
#实际中相同端口的集群服务内容应该一致,但在这个实验中为了测试效果,故设定web内容不一致。



    wKiom1Vhbp-BAu8XAAQ5Ak_dYM4828.jpg
设定Test03:
1
2
3
4
5
6
7
8
[iyunv@Test03 ~]# service iptables stop
[iyunv@Test03 ~]#setenforce 0
[iyunv@Test03 ~]#yum -y install httpd
[iyunv@Test03 ~]#ip addr add 172.16.0.3/24 dev eth2
[iyunv@Test03 ~]#touch /var/www/html/index.html
[iyunv@Test03 ~]#echo "<h1>privateli-Test03,web station,172.16.0.3 is my address</h1>">/var/www/html/index.html
[iyunv@Test03 ~]#service httpd start
#实际中相同端口的集群服务内容应该一致,但在这个实验中为了测试效果,故设定web内容不一致。



wKioL1VhbiLzm6NPAAIXVtIBVVQ465.jpg
wKioL1VhbuDhzqkGAAI9-im2fDI658.jpg

设定Test01:
1
2
3
4
5
[iyunv@Test03 ~]# service iptables stop
[iyunv@Test03 ~]#setenforce 0
[iyunv@Test03 ~]#ip addr add 172.16.0.1/24 dev eth2
[iyunv@Test03 ~]#ip addr add 192.168.100.1/24 dev eth1
[iyunv@Test03 ~]#



wKioL1Vhh0exjd-8AAQtQ2qVWl8324.jpg

        2.4.2)路由设定:
用为是LVS-NAT模型,需要realserver的 rip网卡的网关设定为Directory的dip
1
2
[iyunv@Test03 ~]# ip route add default via 172.16.0.1
[iyunv@Test02 html]# ip route add default via 172.16.0.1



        2.4.3)Lvs-director Test01上启动ipv4数据包转发:
1
[iyunv@Test01 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward



        2.4.4)lvs-director上设定服务:
#安装ipvadm工具

1
[iyunv@Test01 ~]# yum -y install ipvsadm



#设定集群服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@Test01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[iyunv@Test01 ~]# ipvsadm -A -t 192.168.100.1:80 -s rr
[iyunv@Test01 ~]# ipvsadm -a -t 192.168.100.1:80 -r 172.16.0.2:80 -m
[iyunv@Test01 ~]# ipvsadm -a -t 192.168.100.1:80 -r 172.16.0.3:80 -m
[iyunv@Test01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.1:80 rr
  -> 172.16.0.2:80                Masq    1      0          0         
  -> 172.16.0.3:80                Masq    1      0          0         
[iyunv@Test01 ~]#





2.4.5)win7 上测试效果
wKiom1VhirGhVKj3AAMi0K1JbT0755.jpg

wKioL1VhlDPBJiKYAAFGgsGzEug250.jpg
再次刷新:
wKiom1VhksXysVqJAAFa1qkCass564.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-70284-1-1.html 上篇帖子: 构建负载均衡服务器之一 负载均衡与集群详解 下篇帖子: linux cluster LB集群之LVS 模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表