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

[经验分享] LVS的工作模式

[复制链接]

尚未签到

发表于 2019-1-3 10:04:30 | 显示全部楼层 |阅读模式

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。


LVS三种工作模式:
  

1. Virtual server via NATVS-NAT
类似于设备中的DNAT,用于内部服务器的发布。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。


2. Virtual server via IP tunnelingVS-TUN
可以实现异地容灾
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持"IPTunneling"(IP Encapsulation)协议。
  



  3. Virtual Server via Direct RoutingVS-DR
优点:VSTUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.362.2.92.2.102.2.12Solaris 2.5.12.62.7FreeBSD 3.13.23.3NT4.0无需打补丁;IRIX 6.5HPUX11等。

  不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上。
  

  

  

  案例一:NAT模型
  拓扑:
  
  实验前准备:配置好各个节点的IP地址,注意后方的Server要将网管指向前段的director。
  在后方的Server上安装Apache:

  Server2上的配置与Server1类似,不再列出……
  

  设置前段的director

  首先要开启系统的转发功能:
  [root@Director ~]# cat /boot/config-2.6.18-164.el5| grep IP_VS /////查看内核是否支持IPVS
  CONFIG_IP_VS=m
  # CONFIG_IP_VS_DEBUG is not set
  CONFIG_IP_VS_TAB_BITS=12
  CONFIG_IP_VS_PROTO_TCP=y
  CONFIG_IP_VS_PROTO_UDP=y
  CONFIG_IP_VS_PROTO_ESP=y
  CONFIG_IP_VS_PROTO_AH=y
  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
  CONFIG_IP_VS_NQ=m
  CONFIG_IP_VS_FTP=m
  [root@Director ~]#vim /etc/sysctl.conf  /////编辑该文件开启系统的转发功能

  [root@Director ~]# sysctl –p  /////使修改的参数生效
  net.ipv4.ip_forward = 1
  net.ipv4.conf.default.rp_filter = 1
  net.ipv4.conf.default.accept_source_route =0
  kernel.sysrq = 0
  kernel.core_uses_pid = 1
  net.ipv4.tcp_syncookies = 1
  kernel.msgmnb = 65536
  kernel.msgmax = 65536
  kernel.shmmax = 4294967295
  kernel.shmall = 268435456
  

  

  安装ipvsadm工具
  [root@Director ~]# mkdir /mnt/cdrom
  [root@Director ~]# mount /dev/cdrom/mnt/cdrom/
  mount: block device /dev/cdrom iswrite-protected, mounting read-only
  [root@Director ~]# rpm -ivh /mnt/cdrom/Cluster/ipvsadm-1.24-10.i386.rpm
  

  

  设置规则(轮询调度)
  [root@Director ~]# ipvsadm -A -t192.168.2.100:80 -s rr
  [root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.3.2 -m
  [root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.3.3 -m
  [root@Director ~]# ipvsadm -L
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http rr
  -> 192.168.3.3:http    Masq 1  0   0
  -> 192.168.3.2:http    Masq 1  0   0
  [root@Director ~]# service ipvsadm save
  Saving IPVS table to/etc/sysconfig/ipvsadm:    [ OK ]
  

  访问192.168.2.100:


  查看规则的匹配情况:
  [root@Director ~]# ipvsadm -L
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http rr
   -> 192.168.3.3:http   Masq 1  0   12
   -> 192.168.3.2:http   Masq 1  0   12
  由于中间刷新了好多次,可以看到后方的两个服务器个访问到了12次。
  

  修改为带权重的轮询调度
  [root@Director ~]# ipvsadm -E -t192.168.2.100:80 -s wrr
  [root@Director ~]# ipvsadm -e -t192.168.2.100:80 -r 192.168.3.2 -m -w 1
  [root@Director ~]# ipvsadm -e -t192.168.2.100:80 -r 192.168.3.3 -m -w 3
  [root@Director ~]# ipvsadm -L
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http wrr
  -> 192.168.3.3:http   Masq 3  0   0
  -> 192.168.3.2:http   Masq 1  0   0
  [root@Director ~]# service ipvsadm save
  Saving IPVS table to/etc/sysconfig/ipvsadm:    [ OK ]
  

  

  重新访问几次192.168.2.100,这是访问后方的服务器是访问3次Server2后再访问1次Server1这样交替进行。
  [root@Director ~]# ipvsadm -L
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http wrr
  -> 192.168.3.3:http    Masq 3  0   27
  -> 192.168.3.2:http    Masq 1  0   9
  

  

  

  
  案例二:DR模型
  拓扑:
  
  首先要配置各个节点的IP地址,特别注意的是此时的VIP是配置在各个节点lo:0节点上的192.168.2.100,而且Server只要能与director通信即可,不需要将网关指向director。这里列出director上lo:0的配置过程:
  



  

  

  设置后方的服务器使其不宣告自己的IP地址:


  设置Server2:


  安装Apache:


  Server2上的安装过程于其类似,不再列出……

  

  

  

  
  在director上安装ipvsadm工具:
  [root@Director ~]# mount /dev/cdrom/mnt/cdrom/
  mount: block device /dev/cdrom iswrite-protected, mounting read-only
  [root@Director ~]# cd /mnt/cdrom/Cluster
  [root@Director Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm
  warning: ipvsadm-1.24-10.i386.rpm: HeaderV3 DSA signature: NOKEY, key ID 37017186
  Preparing...    ########################################### [100%]
  1:ipvsadm    ########################################### [100%]
  

  

  设置director的分发规则:

  
  [root@Director Cluster]# ipvsadm -A -t192.168.2.100:80 -s rr
  [root@Director Cluster]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.2 -g
  [root@Director Cluster]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.3 -g
  [root@Director Cluster]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http rr
  -> 192.168.2.3:http   Route 1  0   0
  ->192.168.2.2:http    Route 1  0   0
  [root@Director Cluster]# service ipvsadmsave
  Saving IPVS table to/etc/sysconfig/ipvsadm:    [ OK ]
  


  

  测试:

  刷新几次后查看director上的匹配情况:

  
  [root@Director Cluster]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http rr
  -> 192.168.2.3:http    Route 1  0   5
  -> 192.168.2.2:http    Route 1  0   4
  


  

  

  实现NAS:
  以nfs的方式实现网络附加存储
  设置后方的target实现共享:



  

  在前端的Server上挂载后方的共享文件夹:




  在Server2上的操作与Server1相同。

  

  测试:

  

  

  

  案例三:持久连接
  在案例二的前提下继续进行……
  
  

  持久连接指一个client在一定的条件下访问server,director将其请求定位在同一个server
  

  持久连接类型
  PCC 基于客户端的持久连接将client的所有请求全部定位到同一个服务器
  PPC 基于端口的持久连接将client不同服务的请求分别定位在不同的服务器上
  基于防火墙标记的持久连接 将具有引擎关系的数据请求定位在同一个服务器上,比如HTTPhttps ftp2120端口
  

  

  在Server2上也要这么做。
  

  例1、PCC
  
  [root@Director ~]# ipvsadm -C
  [root@Director ~]# ipvsadm -A -t 192.168.2.100:0-s rr -p 60  /////设置持久连接60秒
  [root@Director ~]# ipvsadm -a -t 192.168.2.100:0 -r 192.168.2.2 -g
  [root@Director ~]# ipvsadm -a -t 192.168.2.100:0 -r 192.168.2.3 -g
  [root@Director ~]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:0 rr persistent 60
  -> 192.168.2.3:0    Route 1  0   0
  -> 192.168.2.2:0    Route 1  0   0
  [root@Director ~]# serviceipvsadm save
  Saving IPVS table to/etc/sysconfig/ipvsadm:    [ OK ]
  
测试:


  查看director上的匹配情况:

  
  [root@Director ~]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:0 rr persistent 60
  -> 192.168.2.3:0    Route 1  0   16
  -> 192.168.2.2:0    Route 1  0   0
  可以看到在60s内,director将所有的用户请求全部定向到Server2。
  过60s后重新访问

  [root@Director ~]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:0 rr persistent 60
  -> 192.168.2.3:0    Route 1  0   0
  -> 192.168.2.2:0    Route 1  0   1
  

  

  

  例2、PPC

  
  [root@Director ~]# ipvsadm -C
  [root@Director ~]# ipvsadm -A -t192.168.2.100:80 -s rr -p 60
  [root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.2 -g
  [root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.3 -g
  [root@Director ~]# ipvsadm -A -t192.168.2.100:22 -s rr -p 60
  [root@Director ~]# ipvsadm -a -t192.168.2.100:22 -r 192.168.2.3 -g
  [root@Director ~]# ipvsadm -a -t192.168.2.100:22 -r 192.168.2.2 -g
  [root@Director ~]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  TCP 192.168.2.100:http rr persistent 60
  -> 192.168.2.3:http   Route 1  0   0
  -> 192.168.2.2:http   Route 1  0   0
  TCP 192.168.2.100:ssh rr persistent 60
   -> 192.168.2.2:ssh    Route 1  0   0
  -> 192.168.2.3:ssh    Route 1  0   0
  [root@Director ~]# service ipvsadm save
  Saving IPVS table to/etc/sysconfig/ipvsadm:    [ OK ]
  


  测试:
  HTTP请求首先定向到Server2,SSH服务首先定向到Server1


  

  

  

  例3、基于防火墙标记的持久连接
  设置后方服务器提供FTP服务并使用被动模式




  

  

  使用iptables给向21、10000、10001、10002端口发出请求的数据进行标记

  [root@Director ~]# iptables -t mangle -APREROUTING -d 192.168.2.100 -p tcp --dport 21 -j MARK --set-mark 21
  [root@Director ~]# iptables -t mangle -APREROUTING -d 192.168.2.100 -p tcp -m multiport --dport 10000:10002 -j MARK--set-mark 21
  [root@Director ~]# iptables -t mangle -L -n-v --line-number
  Chain PREROUTING (policy ACCEPT 226packets, 15502 bytes)
  num pkts bytes target  prot optin  out  source    destination
  1  0  0 MARK  tcp -- *  *  0.0.0.0/0   192.168.2.100  tcp dpt:21 MARK set 0x15
  2  0  0 MARK  tcp -- *  *  0.0.0.0/0   192.168.2.100  multiport dports 10000:10002 MARK set0x15
  

  Chain INPUT (policy ACCEPT 226 packets,15502 bytes)
  num pkts bytes target  prot optin  out  source    destination
  

  Chain FORWARD (policy ACCEPT 0 packets, 0bytes)
  num pkts bytes target  prot optin  out  source    destination
  

  Chain OUTPUT (policy ACCEPT 136 packets,15364 bytes)
  num pkts bytes target  prot optin  out  source    destination
  

  Chain POSTROUTING (policy ACCEPT 136packets, 15364 bytes)
  num pkts bytes target  prot optin  out  source    destination
  

  

  ipvsadm设置定向规则:
  [root@Director ~]# ipvsadm -C
  [root@Director ~]# ipvsadm -A -f 21 -s rr-p 60
  [root@Director ~]# ipvsadm -a -f 21 -r192.168.2.2 -g
  [root@Director ~]# ipvsadm -a -f 21 -r192.168.2.3 -g
  [root@Director ~]# ipvsadm -l
  IP Virtual Server version 1.2.1(size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
  FWM 21 rr persistent 60
  -> 192.168.2.3:0    Route 1  0   0
  -> 192.168.2.2:0    Route 1  0   0
  [root@Director ~]# service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm:    [ OK ]
  

  测试:


  


  


  





运维网声明 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-658878-1-1.html 上篇帖子: LVS_NAT实现过程... 下篇帖子: 一次惊险的lvs切换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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