基于LVS的负载均衡

一、计算机集群

1、什么是计算机集群

计算机集群简称集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。

2、使用集群的目的

  • 提高性能
  • 降低成本
  • 提高可扩展性
  • 增强可靠性

3、集群分类

集群分为同构与异构两种,它们的区别在于:组成集群系统的计算机之间的体系结构是否相同。集群计算机按功能和结构可以分成以下几类:

  • 高可用性集群 High-availability (HA) clusters

一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。 计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:平均无故障时间/(平均无故障时间+平均修复时间)。下面就是系统可用性的分类:

  • 负载均衡集群 Load balancing (LB)clusters

负载均衡集群运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。 一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。

  • 高性能计算集群 High-performance (HP) clusters

高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。

  • 网格计算 Grid computing

网格计算或网格集群是一种与集群计算非常相关的技术。网格与传统集群的主要差别是网格是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。还有,网格通常比集群支持更多不同类型的计算机集合。 网格计算是针对有许多独立作业的工作任务作优化,在计算过程中作业间无需共享数据。网格主要服务于管理在独立执行工作的计算机间的作业分配。资源如存储可以被所有结点共享,但作业的中间结果不会影响在其他网格结点上作业的进展。

4、各种集群常见的开源解决方案

  • 负载均衡集群 Load balancing (LB)clusters

基于硬件的LB:F5 公司的 BIG-IP系列 、思杰  NetScaler系列 、A10 AX系列 。

基于软件的LB:lvs,haproxy,nginx,ats

  • 高可用性集群 High-availability (HA) clusters

开源软件架构:heartbeat 、keepalived、corosync+pacemaker 、cman+rgmanager 、cman+pacemaker 、 ultramonkey

  • 高性能计算集群 High-performance (HP) clusters

常见的开源软件:hadoop。

二、负载均衡集群软件LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

1、定义

一般来说LVS采用三层结构:负载调度器、服务器池、共享存储。工作在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发的,由于其转发要依赖于协议的特征进行转发,因此需要在内核的TCP/IP协议栈进行过滤筛选,可想而知,这就需要在内核的模块来完成,而这样的过滤转发规则又是由管理员进行定义的,所以,LVS就是两段式的架构设计,在内核空间中工作的是"ipvs", 而在用户空间中工作的,用来定义集群服务规则的是"ipvsadm"。这就很容易想到iptables而LVS正好工作在iptables的input链上。

2、组成

  • ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。
  • ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)。

注:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能。

4、LVS中每个主机IP地址的定义

  • VIP:Director用来向客户端提供服务的IP地址,也是DNS解析的IP。
  • RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址。
  • DIP:Director用来和RIP进行交互的IP地址。
  • CIP:公网IP,客户端使用的IP。

5、LVS的三种转发模式

  • LVS-NAT:网络地址转换 Network address translation
  • LVS-DR:直接路由 Direct routing
  • LVS-TUN:IP隧道 IP tunneling

6、LVS的三种转发模式特点

  • VS/NAT: 即(Virtual Server via Network Address Translation)

也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。可以看出,在NAT方式下,用户请求和响应报文都必须经过Director Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。

此种模式特点:

  • RIP和DIP必须在同一个网段内。
  • RIP通常是私有地址,仅用于个集群 。RIP的网关必须指向DIP。
  • 支持口映射 。
  • realsever可以使用任意OS(操作系统)
  • 较大规模应用场景中director会成为系统瓶颈。

  • VS/TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。

此种模式特点:

  • 各集群节点可以跨越不同的网络。
  • RIP必须是公网地址。
  • director只负责处理入站请求,相应报文则有realserver直接发往客户端 。
  • realserver网管不能指向director。
  • 只有支持隧道共跟那个的os才能用户realserver 。
  • 不支持端口映射。
  • VS/DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。

此种模式特点:

  • 集群节点跟director必须在同一个物理网络中(不能有路由器分隔)。
  • RIP可以使用公网地址,实现便捷的远程控制服务器。
  • director只负责处理入站请求,相应报文则有realserver直接发往客户端。
  • realserver不能将网关指向DIP。
  • director不支持端口映射 。
  • 大多数操作系统都能应用在real server上 。
  • DR比NAT能处理更多的请求。
  • RS跟Dirctory要在同一物理网络内

7、LVS的静态调度算法

  • rr : round robin:轮叫,轮询

说明:轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。

  • wrr: weight round robin :加权轮询(以权重之间的比例实现在各主机之间进行调度)

说明:由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

  • sh : source hashing : 源地址hash 实现会话绑定session affinity

说明:简单的说就是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。

  • dh : destination hashing : 目标地址hash

说明:将同样的请求发送给同一个server,一般用户于缓存服务器说,简单的说,LB集群后面又加了一层,在LB与real server之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1,这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8、LVS的动态调度算法

  • lc :leash-connection 最少连接

说明:最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。

简单算法:active*256+inactive (谁的小,挑谁)。

  • wlc:加权最少连接

加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器,加大权重,即会接收到更多的请求。

简单算法:(active*256+inactive)/weight(谁的小,挑谁)

  • sed :最少期望延迟

说明:不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。

基于wlc算法,简单算法:(active+1)*256/weight (谁的小选谁)

  • nq  :never queue 永不排队

说明:在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。

  • LBLC :基于局部性的最少连接

说明:基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

  • LBLCR :基于局部性的带复制功能的最少连接

说明:基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

注:LVS默认调度算法是 wlc 。

9、Session持久机制

  • Session绑定:始终将统一请求者的连接定向至统一RS(第一次请求时仍有调度选择),没有容错的能力,反均衡效果。
  • Session复制:在RS之间同步session,因此,每个RS持集群中所有的session,对于大服务器集群环境不适用。
  • Session服务器:利用单独部署的服务器来统一管理session,该服务器必须做到高可用。

三、ipvsadm常用选项

此命令一般情况系统默认不会安装,使用前查看下系统是否安装,若未安装就直接yum。

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p  [timeout]] [-M netmask] 
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port  [-g|i|m] [-w weight] 
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h

命令选项解释:

有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可 以。

  • -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
  • -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
  • -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
  • -C --clear 清除内核虚拟服务器表中的所有记录。
  • -R --restore 恢复虚拟服务器规则。
  • -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式。
  • -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器 记录。也就是在一个虚拟服务器中增加一台新的真实服务器。
  • -e --edit-server 编辑修改一条虚拟服务器记录中的某条真实服务器记录。
  • -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录。
  • -L|-l --list 显示内核虚拟服务器表。
  • -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)。
  • --set tcp tcpfin udp 设置连接超时值 。
  • --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说 明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的 VRRP 功能。
  • --stop-daemon 停止同步守护进程。
  • -h --help 显示帮助信息。

其他的选项:

  • -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务 [vip:port] or [real-server-ip:port]。
  • -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务 [vip:port] or [real-server-ip:port] 。
  • -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
  • -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 默认的调度算法是: wlc。
  • -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客 户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
  • -M --netmask netmask persistent granularity mask。
  • -r --real-server server-address 真实的服务器[Real-Server:port]。
  • -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)。
  • -i --ipip 指定LVS 的工作模式为隧道模式。
  • -m --masquerading 指定LVS 的工作模式为NAT 模式。
  • -w --weight weight 真实服务器的权值。
  • --mcast-interface interface 指定组播的同步接口 。
  • -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c。
  • --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout 。
  • --daemon 显示同步守护进程状态 。
  • --stats 显示统计信息 。
  • --rate 显示速率信息。
  • --sort 对虚拟服务器和真实服务器排序输出 。
  • --numeric -n 输出IP 地址和端口的数字形式

说明:安装ipvsadm时,还会带有两个命令:ipvsadm-restore载入写入的规则,相当于-R选项。  ipvsadm-save报错写入的规则相当于-S选项。

四、LVS-NAT 模式演示

1、实验拓扑图

2、实验环境简介

3、为两台RS安装httpd软件和测试页

我的httpd软件是源码安装,若想做实验直接yum安装就行,只是测试页路径在/var/www/html中。

[[email protected] ~]# cat /usr/local/apache/htdocs/index.html 
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# cat /usr/local/apache/htdocs/index.html 
<html><body><h1>node2</h1></body></html>

4、配置Director及测试

开启转发:

[[email protected] ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[email protected] ~]# sysctl -p
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1

配置lvs-nat模型

[[email protected] ~]# ipvsadm -A -t 192.168.1.88:80 -s rr
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:80 -r 192.168.20.9 -m
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:80 -r 192.168.20.10 -m
[[email protected] ~]# 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.1.88:80 rr
  -> 192.168.20.9:80              Masq    1      0          0         
  -> 192.168.20.10:80             Masq    1      0          0

保存lvs规则

[[email protected] ~]# ipvsadm-save > /etc/sysconfig/ipvsadm.nat
[[email protected] ~]# cat /etc/sysconfig/ipvsadm.nat
-A -t 192.168.1.88:http -s rr
-a -t 192.168.1.88:http -r 192.168.20.9:http -m -w 1
-a -t 192.168.1.88:http -r 192.168.20.10:http -m -w 1

删除规则并还原规则

[[email protected] ~]# ipvsadm -C 
[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[[email protected] ~]# ipvsadm-restore < /etc/sysconfig/ipvsadm.nat 
[[email protected] ~]# 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.1.88:80 rr
  -> 192.168.20.9:80              Masq    1      0          0         
  -> 192.168.20.10:80             Masq    1      0          0

curl测试ipvsadm是否开启转发

[[email protected] ~]# curl 
http://192.168.1.88
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# curl 
http://192.168.1.88
<html><body><h1>node2</h1></body></html>
[[email protected] ~]# curl 
http://192.168.1.88
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# curl 
http://192.168.1.88
<html><body><h1>node2</h1></body></html>

5、修改lvs调度算法

[[email protected] ~]# ipvsadm -E -t 192.168.1.88:80 -s wrr
[[email protected] ~]# ipvsadm -e -t 192.168.1.88:80 -r 192.168.20.9 -m -w 3

测试算法是否生效

[[email protected] ~]# curl 
http://192.168.1.88
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# curl http://192.168.1.88
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# curl http://192.168.1.88
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# curl http://192.168.1.88
<html><body><h1>node2</h1></body></html>
[[email protected] ~]# curl http://192.168.1.88
<html><body><h1>node1</h1></body></html>
[[email protected] ~]# 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.1.88:80 wrr
  -> 192.168.20.9:80              Masq    3      1          6         
  -> 192.168.20.10:80             Masq    1      0          2

显示ipvsadm目前的连接

[[email protected] ~]# ipvsadm -L -c
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:55  TIME_WAIT   192.168.1.103:50197 192.168.1.88:http  192.168.20.9:http
TCP 14:57  ESTABLISHED 192.168.1.103:50199 192.168.1.88:http  192.168.20.9:http

五、LVS-DR 模式演示

1、实验环境

2、同步时间

[[email protected]1 ~]# ntpdate 202.120.2.101

[[email protected] ~]# ntpdate 202.120.2.101

[[email protected]Director ~]# ntpdate 202.120.2.101

3、配置各主机IP和路由

第一步配置Director:

[[email protected] ~]# ifconfig eth0:0 192.168.1.88 netmask 255.255.255.0 up
[[email protected] ~]# route add -host 192.168.1.88 dev eth0:0

第二步配置RS1:

[[email protected] ~]# ifconfig lo:0 192.168.1.88 netmask 255.255.255.255 broadcast 192.168.1.88 up
[[email protected] ~]# route add -host 192.168.20.88 dev lo:0
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[[email protected] ~]# cat /usr/local/apache/htdocs/index.html 
<html><body><h1>node1!</h1></body></html>
[[email protected] ~]# service httpd24 start

第三步配置RS2:

[[email protected] ~]# ifconfig lo:0 192.168.20.88 netmask 255.255.255.255 broadcast 192.168.20.88 up
[[email protected] ~]# route add -host 192.168.20.88 dev lo:0
[[email protected] ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
[[email protected] ~]# echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
[[email protected] ~]# echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
[[email protected] ~]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] ~]# cat /usr/local/apache/htdocs/index.html 
<html><body><h1>node1!</h1></body></html>
[[email protected] ~]# service httpd24 start

说明:

arp_ignore: 定义接收到ARP请求时的响应级别;

0:只要本地配置的有相应地址,就给予响应;

1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;

arp_announce:定义将自己地址向外通告时的通告级别;

0:将本地任何接口上的任何地址向外通告;

1:试图仅向目标网络通告与其网络匹配的地址;

2:仅向与本地接口上地址匹配的网络进行通告;

第四步配置集群服务:

[[email protected] ~]# ipvsadm -A -t 192.168.1.88:80 -s rr
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.9 -g
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.10 -g

六、持久连接演示

尽管我们选择了LVS的分发方法,但是大多时候我们要保证返回给客户端的所有响应请求必须来自于同一台Real Server,这里我们就要用到LVS Persistence(持久性)。

1、LVS 持久连接和类型

  • PCC 来自同一客户端所有服务的所有请求都被重定向到同一台Real Server上,以IP地址为准。
  • PPC 来自同一服务的请求都被重定向到同一台Real Server上,以端口号为准。
  • PNMP 基于防火墙标记的持久连接,根据iptables 的规则,将对于某类服务几个不同端口的访问定义为一类。

2、PCC 演示

PCC是一个虚拟服务没有端口号(或者端口号为0),以"-p" 来标识服务。

缺陷:定向所有服务,期望访问不同的Real Server无法实现。

[[email protected] ~]# ipvsadm -C
[[email protected] ~]# ipvsadm -A -t 192.168.1.88:0 -s rr -p 120
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:0 -r 192.168.1.9 -g
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:0 -r 192.168.1.10 -g
[[email protected] ~]# 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.1.88:0 rr persistent 120
  -> 192.168.1.9:0                Route   1      0          0         
  -> 192.168.1.10:0               Route   1      0          0

定义为PCC后所有端口的连接均会发送到一台realserver,这种方法的使用是不能访问另外的realserver,除非连接时间超时,并从新由调度算法调度到下一台机器。

3、PPC 演示

缺陷:期望访问不同的端口到同一台RS上,无法实现。

[[email protected] ~]# ipvsadm -A -t 192.168.1.88:80 -s rr -p 120 
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.9 -g
[[email protected] ~]# ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.10 -g

4、PNMP 演示

先对某一特定类型的数据包打上标记,然后再将基于某一类标记的服务送到后台的Real Server上去,后台的Real Server 并不识别这些标记。将持久和防火墙标记结合起来就能够实现端口姻亲功能,只要是来自某一客户端的对某一特定服务(需要不同的端口)的访问都定义到同一台 Real Server上去。假设这样一种场景:一个用户在访问购物网站时同时使用HTTP(80)和HTTPS(443)两种协议,我们需要将其定义到同一台 Real Server上,而其他的服务不受限制。

[[email protected] ~]# #iptables -t mangle -A PREROUTING -d 192.168.1.88 -i eth0 -p tcp --dport 80 -j MARK --set-mark 3
[[email protected] ~]# #iptables -t mangle -A PREROUTING -d 192.168.1.88 -i eth0 -p tcp --dport 443 -j MARK --set-mark 3
[[email protected] ~]# #ipvsadm -A -f 3 -s rr -p 600
[[email protected] ~]# #ipvsadm -a -f 3 -r 192.168.1.9 -g
[[email protected] ~]# #ipvsadm -a -f 3 -r 192.168.1.10 -g

这里只是简单介绍lvs的使用,实际中lvs是和keepalived结合使用,由lvs来实现负载均衡,由keepalived实现lvs的高可用。

时间: 2024-11-08 19:09:05

基于LVS的负载均衡的相关文章

基于LVS实现负载均衡

LVS-NAT模型: 工作原理:将内部地址转化为Internets上可用的外部地址.NAT的工作原理是报文头(目标地址.源地址和端口等)被正确改写后,客户相信它们连接一个IP地址,而不同IP地址的服务器组也认为它们是与客户直接相连的.由此,可以用NAT方法将不同IP地址的并行网络服务变成在一个IP地址上的一个虚拟服务. 实验环境:3台虚拟机,其中一台做Director Server配备2个网卡,另外2台是Real Server 操作步骤: 一:在Real Server上: 1:RIP1:# if

基于LVS的负载均衡实现之NAT

一 什么是负载均衡 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 二 什么是LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.LVS是负载均衡最著名的实现之一. 三 LVS基本工作原理 LVS集群采用IP负载均衡技术

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

Linux中使用LVS实现负载均衡

什么是LVS     LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 同时LVS又被称为四层路由,工作于传输层上. LVS技术简介     LVS集群采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转 移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的. 高可用的虚拟服务器.整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序. 为此,在设计时需

使用 LVS 实现负载均衡原理及安装配置详解

使用 LVS 实现负载均衡原理及安装配置详解 来源:肖邦linux 发布时间:2017-02-19 阅读次数:106 0 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用

LVS实现负载均衡(nat,dr,tun)

案例1:基于NAT的负载均衡 网卡配置这里就不在具体描述,在网络环境调通的情况下操作,具体的拓扑如图: Director:10.10.10.133 |                                | RS1: 10.10.10.131           RS2: 10.10.10.132 我在做实验的时候是采用yum的方式进行安装的LVS管理工具ipvsadm,yum安装非常简单这里也不在赘述,这里写一下源码的方式安装 #解压源码包,在下载源码包时注意内核版本,下载对应的配置

LVS-DR实现基于LAMP的负载均衡

基于搭建LAMP环境,并实践基于DNS做基于域名的虚拟主机中的环境,重新搭建一个同样的环境要求: a)实现web服务文件更新的自动同步到另一台机器上 b)数据库实现主从复制 c)通过shell脚本实现网站源代码备份和mysql备份,备份策略包括全量备份.增量备份.差异备份 通过lvs实现负载均衡,要求使用DR模式,并能把其中的原理部分通过自己的理解汇总出来. lvs:Linux Virtual Server, Linux虚拟四层交换的服务器,是一个虚拟的服务器集群系统.LVS有LVS-NAT,L

集群之LVS(负载均衡)详解

提高服务器响应能力的方法 scale on  在原有服务器的基础上进行升级或者直接换一台新的性能更高的服务器. scale out  横向扩展,将多台服务器并发向外响应客户端的请求.优点:成本低,扩展架构比较简单. 集群(Cluster),通俗地讲就是按照某种组织方式将几台电脑组织起来完成某种特定任务的这样一种架构. 三种集群类型: LB,Load Balancing 负载均衡:在一定程度上能够实现高可用的目的. HA,High Availability 高可用:实时在线,能够及时响应客户端请求

总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解 PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的:大型网站或重要的服务,且服务器比较多时