trssc 发表于 2019-1-4 06:31:50

lvs的原理及应用

  一、什么是lvs?
  LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
  如图:
http://xysun.blog.运维网.com/attachment/201210/11/5628254_1349945428YakC.jpg
  二、技术简介
  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
  # uname -r
  2.6.18-164.el5
  # grep -i ip_vs /boot/config-2.6.18-164.el5
  打开路由转发功能,如下:
  # vim /etc/sysctl.conf
  7 net.ipv4.ip_forward = 1
  # sysctl –p
  ##立即生效
  # yum install ipvsadm –y
  安装成功!
  # ipvsadm -A -t 192.168.101.15:80 -s rr
  # ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.100 -m
  # ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.101 -m
  # service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
  # service ipvsadm start
  Clearing the current IPVS table: [ OK ]
  Applying IPVS configuration: [ OK ]
  # 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服务
  # cd /mnt/cdrom/Server/
  # rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  # cd /var/www/html/
  # echo "web1" >index.html
  启动服务
  # service httpd start
  3.Realserver2配置
  网络配置
  安装httpd服务
  # cd /mnt/cdrom/Server/
  # rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  # cd /var/www/html/
  # echo "web2" >index.html
  启动服务
  # service httpd start
  测试
  2)调度方法wrr
  Load balancer配置
  设置web1的权重为web2的2倍
  # vim /etc/sysconfig/ipvsadm
  # ipvsadm -E -t 192.168.101.15:80 -s wrr
  # ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.100 -m -w 10
  # ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.101 -m -w 5
  # service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
  # service ipvsadm restart
  Clearing the current IPVS table: [ OK ]
  Applying IPVS configuration: [ OK ]
  测试
  用user用户访问3次
  案例二 使用lvs_dr模式
  实验拓扑图
  Realserver1的配置
  # echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
  # echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
  # echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
  # echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
  # sysctl –p
  配置网络信息
  添加路由
  # route add -host 192.168.2.11 dev lo:0
  安装httpd服务
  # cd /mnt/cdrom/Server/
  # rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  # cd /var/www/html/
  # echo "web1" >index.html
  启动服务
  # service httpd start
  Realserver2配置
  将realserver1的配置copy过来
  # scp 192.168.2.100:/etc/sysctl.conf /etc/
  配置网络信息
  添加路由信息
  # route add -host 192.168.2.11 dev lo:0
  安装httpd服务
  # cd /mnt/cdrom/Server/
  # rpm -ivh httpd-2.2.3-31.el5.i386.rpm
  新建一个网页
  # cd /var/www/html/
  # echo "web1" >index.html
  启动服务
  # service httpd start
  LinuxDirector配置
  配置网络信息
  安装ipvsadm服务
  # cd /mnt/cdrom/
  # cd Cluster/
  # rpm -ivh ipvsadm-1.24-10.i386.rpm
  启动服务
  # service ipvsadm save
  Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
  # service ipvsadm start
  Clearing the current IPVS table: [ OK ]
  Applying IPVS configuration: [ OK ]
  # chkconfig ipvsadm on
  # ipvsadm -A -t 192.168.2.11:80 -s rr
  # ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.100 -g
  # ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.101 -g
  # 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
  测试
  持久连接
  # ipvsadm -A -t 192.168.2.11:0 -s rr -p 60
  # ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.100 -g
  # ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.101 -g
  # 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
  #
  测试
  在60s内访问都是web2



页: [1]
查看完整版本: lvs的原理及应用