LVS的转发

LVS的转发

LVS(Linux Virtual Server),linux虚拟服务器,它是一个实现资源合理调度的负载调度器,集成在内核中。
    Internet 的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要提供大量并发访问服务的能力。因此对于大负载的服务器来讲,CPU、I/O处理处理舱力很快会成为瓶颈。由 于单台服务器的性舵总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用 多服务器和负载均衡技术才能满足大并发访问的需要。Linux虛拟服务器(Linux Virtual Server,LVS)使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问 需求提供了一个负载能力易于扩展,而价格低廉的解决方案。

  LVS工作原理
    LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。 RS间可通过局域网或广城网连接。WS的这种结构对用户是透明的,用户只髓看见一台作为LB 的虚拟服务器(Virtual Server),而看不到提供服务的RS群。
    当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转 发给RS。RS再将用户请求结果返回绐用户。同请求包一样.应答包的返回方式也与包转发策略有关。
  

  LVS的包转发策略有三种:
    1、NAT(Network Address Translation)模式。LB收到用户诮求包后,LB将傭求包中虚拟服务器的 IP地址转换为某个选定RS的IP地址,转发给RS,RS将应答包发给LB。LB将应答包中RS的 IP转为虛拟服务器的IP地址,回送给用户。

    2、DR(Direct Routing)模式.LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS 的MAC地址后将包转发出去,RS收到诮求包后,可直接将应答内容传给用户。此时要求LB和所有RS那必须在一个物理段內且LB与RS群共享一个虛拟IP。

     3、IP隧道(IP Tunneling)模式.LB收到用户请求包后,根据IP隧道协议封装该包.然后传给某 个选定的RS,RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。

  ipvsadm基本工作模式

    ipvs工作于内核上的netfilter的INPUT钩子之上的一个程序,可根据用户定义的集群实现抟发。 不建议和iptables环境使用ipvsadm规则.Nat规则不能使用。工作在INPUT链上,监控到INPUT链的 每个数据报文,任何目标地址是地都要经过INPUT

  ipvsadm/ipvs:用户空间的一个命令行工具,用于管理集群职务及集群服务上的RS

  ipvsadm/NAT转发:

    概念:通过网络地址转化的功能,调度器(Director)重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器(Real Server);真实服务器的响应报文通过调度器时,报文的源地址又被重写,再通过调度器返回给用户,完成整个负载调度过程。
    其中Real Server在发送响应报文之前,需要将Director的IP地址作为自己的网关,否则可能会出现能接收请求报文,而无法返回响应报文;

  拓扑图:

      

  实验,实现Nginx的负载均衡。

  1、VS的操作如下

    (1) 安装ipvsadm管理工具

1
# yum install -y ipvsadm


    (2) 开启核心转发功能(使之永久生效)

1
2
3
# vim /etc/sysctl.conf
  net.ipv4.ip_forward = 1
# sysctl -p

   2、RS两台主机操作如下:(除网页内容不同,其余操作均相同)

    (1) 安装nginx

1
# yum install -y nginx

    (2) 添加测试页内容

1
2
3
4
5
6
7
RS1:配置
# echo "RS1 192.168.25.1" > /usr/share/nginx/html/index.html
# systemctl start nginx
 
RS2:配置
# echo "RS2 192.168.25.2" > /usr/share/nginx/html/index.html
# systemctl start nginx

    (3) 通过VS主机对测试页进行测试检查

1
2
3
4
5
# curl http://192.168.25.1
  RS1 192.168.25.1
 
# curl http://192.168.25.2
  RS2 192.168.25.2

  3、VS主机上添加负载均衡集群规则

1
2
3
4
5
6
7
8
9
10
# ipvsadm -A -t 172.18.100.100:80 -s rr  #这里我们使用rr调度算法,它会轮询调度到后面的各个服务器上
# ipvsadm -a -t 172.18.100.100:80 -r 192.168.25.1 -m  #这里-m表示我们使用的负载均衡技术是LVS/NAT类型的
# ipvsadm -a -t 172.18.100.100:80 -r 192.168.25.2 -m
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.3.100:80 rr
  -> 172.16.3.20:80 Masq 1 0 0
  -> 172.16.3.30:80 Masq 1 0 0

  4、客户端测试结果

1
2
3
4
5
6
7
8
9
10
11
# for i in {1..10}; do curl http://172.16.100.100/;done
RS1 192.168.25.1
RS2 192.168.25.2
RS1 192.168.25.1
RS2 192.168.25.2
RS1 192.168.25.1
RS2 192.168.25.2
RS1 192.168.25.1
RS2 192.168.25.2
RS1 192.168.25.1
RS2 192.168.25.2

  5、检测成功

  ipvsadm/DR转发:

    概念:VS/DR通过改写请求报文的MAC地址,将请求发送到后端的真实服务器,而真实服务器直接响应报文返回给客户端。这样大大提高了集群系统的效用,这种方法要求调度器和真实服务器都有一块网卡连在同一物理网段上。

  拓扑图:

    

  1、分别准备好各自的服务

    (1)  VS安装ipcsadm管理工具

1
# yum install -y ipvsadm

    (2)  RS配置好Nginx服务

1
# yum install -y nginx

  2、在VS、RS主机上配置网卡别名

    给VS配置网卡别名,确定好对外的VIP地址

1
# ifconfig eth0:0 192.168.25.10 netmask 255.255.255.255 broadcast 192.168.25.10 up

  3、配置RS,使它不会主动广播出自己的地址

    编写一个配置脚本,分别在两个RS上运行以完成管理配置

1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
 
vim  DR_rs.sh  //编写一个配置脚本,使每个RS运行后的配置相同
 

#!/bin/bash

vip=192.168.25.10
mask='255.255.255.255‘
dev=lo:1

case $1 in

start)

  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig $dev $vip netmask $mask broadcast $vip up
  route add -host $vip dev $dev
   ;;
stop)
  ifconfig $dev down
  echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ;;
*)
  echo "Usage: $(basename $0) start|stop"
  exit 1
  ;;
esac

# chmod +x DR_rs.sh  //给这个配置脚本加执行权限

# ./DR_rs.sh start  //运行配置脚本

   4、配置VS的报文转发策略

1

2

3

4

5

# iptables -F 

# ipvsadm -A -t 192.18.25.10:80 -s wrr  //定义为加权轮询

# ipvsadm -a -t 192.168.25.10:80 -r 192.168.25.88 -m -w 2 //定义这个主机的权重为2

# ipvsadm -a -t 192.168.25.10:80 -r 192.168.25.99 -m  //不定义权重,默认权重为1

# 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.25.10:80 wrr
  -> 192.168.25.88:80 Masq 2 0 0
  -> 192.168.25.99:80 Masq 1 0 0

  5、客户端测试结果

1
2
3
4
5
6
7
8
9
10
11
# for i in {1..10}; do curl http://192.168.25.10/;done
RS1 192.168.25.88
RS2 192.168.25.88
RS1 192.168.25.99
RS2 192.168.25.88
RS1 192.168.25.88
RS2 192.168.25.99
RS1 192.168.25.88
RS2 192.168.25.88
RS1 192.168.25.99
RS2 192.168.25.88

  6、检测成功

原文地址:https://www.cnblogs.com/handsome1013/p/11180459.html