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

[经验分享] lvs的原理及应用

[复制链接]

尚未签到

发表于 2019-1-4 06:31:50 | 显示全部楼层 |阅读模式
  一、什么是lvs?
  LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
  如图:

  二、技术简介
  LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。一般来说,LVS集群采用三层结构,其主要组成部分为:
  1) 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
  2) 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
  3) 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
  LVS集群种类通常是通过LVS Director中继到集群节点的请求的方法来形容的,目前有三种可用的方法:
  1) 网络地址转换(LVS-NAT)
  Virtual Server via Network Address Translation(VS/NAT)     
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

  如图:
  2) 直接路由(LVS-DR)
  Virtual Server via Direct Routing(VS/DR)
  VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。
  如图:
  3) IP隧道(LVS-TUN)
  Virtual Server via IP Tunneling(VS/TUN)     
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

  如图:
  LVS调度方法
  1) 固定(或非动态)调度方法
  循环法(RR)
  权重循环(WRR)
  目标散列法
  源散列法
  2) 动态调度方法
  最少连接(LC)
  权重最少连接(WLC)
  最短预期延迟(SED)
  永不排队(NQ)
  基于本地最少连接(LBLC)
  基于本地最少连接重复调度(LBLCR)
  三、案例 实现lvs负载均衡
  案例一 使用lvs_nat模式
  1)调度方法为rr
  实验拓扑图:
  1. Load balancer配置
  网络配置
  首先查看内核是否支持ipvs
  [root@localhost ~]# uname -r
  2.6.18-164.el5
  [root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5
  打开路由转发功能,如下:
  [root@localhost ~]# vim /etc/sysctl.conf
  7 net.ipv4.ip_forward = 1
  [root@localhost ~]# sysctl –p
  ##立即生效
  [root@localhost ~]# yum install ipvsadm –y
  安装成功!
  [root@localhost ~]# ipvsadm -A -t 192.168.101.15:80 -s rr
  [root@localhost ~]# ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.100 -m
  [root@localhost ~]# ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.101 -m
  [root@localhost ~]# service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
  [root@localhost ~]# service ipvsadm start
  Clearing the current IPVS table: [ OK ]
  Applying IPVS configuration: [ OK ]
  [root@localhost ~]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 192.168.101.15:80 rr
  -> 192.168.2.100:80 Masq 1 0 0
  -> 192.168.2.101:80 Masq 1 0 0
  2.Realserver1配置
  网络配置
  安装httpd服务
  [root@localhost ~]# cd /mnt/cdrom/Server/
  [root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  [root@localhost Server]# cd /var/www/html/
  [root@localhost html]# echo "web1" >index.html
  启动服务
  [root@localhost ~]# service httpd start
  3.Realserver2配置
  网络配置
  安装httpd服务
  [root@localhost ~]# cd /mnt/cdrom/Server/
  [root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  [root@localhost Server]# cd /var/www/html/
  [root@localhost html]# echo "web2" >index.html
  启动服务
  [root@localhost ~]# service httpd start
  测试
  2)调度方法wrr
  Load balancer配置
  设置web1的权重为web2的2倍
  [root@localhost ~]# vim /etc/sysconfig/ipvsadm
  [root@localhost ~]# ipvsadm -E -t 192.168.101.15:80 -s wrr
  [root@localhost ~]# ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.100 -m -w 10
  [root@localhost ~]# ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.101 -m -w 5
  [root@localhost ~]# service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
  [root@localhost ~]# service ipvsadm restart
  Clearing the current IPVS table: [ OK ]
  Applying IPVS configuration: [ OK ]
  测试
  用user用户访问3次
  案例二 使用lvs_dr模式
  实验拓扑图
  Realserver1的配置
  [root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
  [root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
  [root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
  [root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
  [root@localhost ~]# sysctl –p
  配置网络信息
  添加路由
  [root@localhost ~]# route add -host 192.168.2.11 dev lo:0
  安装httpd服务
  [root@localhost ~]# cd /mnt/cdrom/Server/
  [root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  [root@localhost Server]# cd /var/www/html/
  [root@localhost html]# echo "web1" >index.html
  启动服务
  [root@localhost ~]# service httpd start
  Realserver2配置
  将realserver1的配置copy过来
  [root@localhost ~]# scp 192.168.2.100:/etc/sysctl.conf /etc/
  配置网络信息
  添加路由信息
  [root@localhost ~]# route add -host 192.168.2.11 dev lo:0
  安装httpd服务
  [root@localhost ~]# cd /mnt/cdrom/Server/
  [root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  [root@localhost Server]# cd /var/www/html/
  [root@localhost html]# echo "web1" >index.html
  启动服务
  [root@localhost ~]# service httpd start
  LinuxDirector配置
  配置网络信息
  安装ipvsadm服务
  [root@localhost ~]# cd /mnt/cdrom/
  [root@localhost cdrom]# cd Cluster/
  [root@localhost Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm
  启动服务
  [root@localhost Cluster]# service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
  [root@localhost Cluster]# service ipvsadm start
  Clearing the current IPVS table: [ OK ]
  Applying IPVS configuration: [ OK ]
  [root@localhost Cluster]# chkconfig ipvsadm on
  [root@localhost Cluster]# ipvsadm -A -t 192.168.2.11:80 -s rr
  [root@localhost Cluster]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.100 -g
  [root@localhost Cluster]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.101 -g
  [root@localhost Cluster]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 192.168.2.11:80 rr
  -> 192.168.2.101:80 Route 1 0 0
  -> 192.168.2.100:80 Route 1 0 0
  测试
  持久连接
  [root@localhost ~]# ipvsadm -A -t 192.168.2.11:0 -s rr -p 60
  [root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.100 -g
  [root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.101 -g
  [root@localhost ~]# ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 192.168.2.11:0 rr persistent 60
  -> 192.168.2.101:0 Route 1 0 0
  -> 192.168.2.100:0 Route 1 0 0
  [root@localhost ~]#
  测试
  在60s内访问都是web2




运维网声明 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-659088-1-1.html 上篇帖子: LVS NAT试验 下篇帖子: LVS的工作原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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