目录

LVS(Linux Virtual Server  Linux)  虚拟服务器

LVS集群的三层结构:

LVS的三种包转发模式:

1、NAT(网络地址映射)

2、IP_TUN(IP隧道)

3、DR(Direct Routing)(应用较多)

LVS的几种调度模式

三种转发模式的实战

1、NAT模式

2、IP-TUN模式

3、DR模式


LVS(Linux Virtual Server  Linux 虚拟服务器

它是一个虚拟的服务器集群系统,1998年5月由章文嵩博士成立,是国内最早出现自由软件项目之一

官网:http://www.linuxvirtualserver.org

中文站点:http://zh.linuxvirtualserver.org

学习LVS之前,我们先来了解一下什么是集群。

集群(cluster):

就是一组主机,作为一个整体向用户提供一组网络资源,其中单个的主机就是集群的节点(node)

集群种类:

LB负载均衡集群(Load Balance):几台机器共同提供服务

HA高可用集群(High Availability):集群发生单点故障时,由备份顶上去

HPC高性能计算集群(High Perfermance Computing):将几台机器的cpu联合起来,进行并行运算,提高效率

LB负载均衡集群的实现手段:

硬件手段:F5负载均衡器

软件手段:LVS(osi 4层)、Nginx(osi 7层)

LVS集群的三层结构:

1、分发器(director)或者叫 负载调度器(load balance)

它是整个集群对外的一个前端机,负责将客户的请求发送到一组服务器上执行,而客户端认为服务是来自一个IP地址(VIP虚拟IP地址)。

2、服务器池(server pool)

是一组真正执行客户请求的服务器real server,用来提供服务,比如:web、ftp、dns、mail等

3、共享存储(shared storage)

为服务器池提供一个共享的存储区,使得服务器池拥有相同的数据。

LVS的三种包转发模式:

1、NAT(网络地址映射)

通过网络地址转换一组服务器构成一个高性能的虚拟服务器。它支持任何操作系统以及私有网络,并且只需要一个公网IP地址。

缺点:请求量大时,就会有很大的延迟,因为只从一个IP地址出去。

下图是NAT的包转发过程

LVS负载均衡的三种包转发模式及配置

CIP:客户端IP,也就是公网IP,用于向集群发送请求

VIP:提供服务的虚拟IP

DIP:分发器接受到请求后,由DIP转发出去到各个集群节点

RIP:real ip 真实服务器的IP

2、IP_TUN(IP隧道)

分发器将请求分配到不同的real server上,real server处理后直接回复给客户机,也就是绕过分发器,这样即提高了服务的高效性,也能充分发挥分发器的调度能力。

此模式下,real  server可以在任何LAN或WLAN上运行,这意味着允许地理上的分布服务器必须拥有真实的IP,与客户机通讯,并且支持隧道协议

3、DR(Direct Routing)(应用较多)

与IP tuning类似,相比于IPtun,没有IP封装的开销,但它采用的是物理层技术(修改MAC地址),所有服务器都必须在同一个网段。而tun模式可跨网段

LVS三种包转发模式的比较:

LVS负载均衡的三种包转发模式及配置

一些属性的比较:

  NAT模式 IP-TUN模式 DR模式
节点要求 可以是任何操作系统 必须支持IP隧道,目前只有Linux 支持虚拟网卡设备,能够禁用设备的ARP相应
网络要求 拥有私网IP的局域网 拥有合法IP(公网地址)的局域网或广域网 拥有合法IP的局域网,节点和调度器必须在同一网段
支持的节点数 10-20个,视调度器的处理能力而定 可以支持100个节点 与IP-TUN相同
网关 调度器就是各节点的网关 节点和自己的网关或路由器连接,不经过调度器 与IP-TUN相同
节点安全性 较好,节点采用的是内部ip,较为隐蔽 较差,节点采用的是公网IP,完全暴露 与IP-TUN相同
IP要求 仅需要一个合法IP,作为虚拟IP(VIP) 除VIP外,每个节点有合法的IP,可以和客户端直接通信 与IP-TUN相同

 

 

 

 

 

 

 

 

 

 

总体来说。在性能方面,NAT模式较其他两种来说差一倍(因为他有一个拆包和封装包的过程,用来做地址转换),目前应用最多的负载均衡是LVS-DR和Nginx负载均衡

LVS的几种调度模式

1、轮询(Round Robin):将请求按照顺序依次分配给real-server

2、加权轮询(Weight RR):带有权重值的轮循,权重为0时,不接收请求

3、最少连接数(Least Connections):优先分配到当前连接数少的real-server上  

4、加权最少连接数(Weight LC):在LC的基础上加了一个权重值

还有很多种,这里只介绍了常用的几种

三种转发模式的实战

1、NAT模式

下面是一个拓扑图:

LVS负载均衡的三种包转发模式及配置

准备工作:关掉虚拟机的iptables和selinux

iptables -F

Director(分发器)配置(63):

1、打开路由转发功能

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

2、配置网络环境

eth0:192.168.1.63  模式:桥接 (用来模拟VIP)

eth1:192.168.2.63  模式:Vmnet4  (用来模拟DIP)

3、安装LVS工具ipvsadm

cd /run/media/root/CentOS\ 7\ x86_64/Packages/

rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm

4、配置分发功能

ipvsadm -A -t 192.168.1.63:80 -s rr  

-A添加一条规则

-t 表示 tcp, 后面跟VIP:端口   

-s 指定调度算法round-robin轮循,即每一台real-server执行一次请求

此分发器的目的是,一旦接收到来自1.63:80的请求,不做处理,只负责分发给real-server

ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.62 -m

ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.64 -m

-a 表示添加real-server的地址

-r  指定real-server的IP

-m  masquerade表示NAT模式的LVS

查看ipvsadm -L -n   #查看规则,显示虚拟服务器表 -L列出 -n不解析

-c  查看客户端连接分发器,以及real-server的情况

--stats  连接dezhunagtai

--rate   速率

-Z  清空服务器的记录 zero

-C  清空规则 clear

-d 删除 (ipvsadm -d -t 192.168.1.63:80 -r 192.168.2.62精确到一个real-server)

保存ipvsadm -S

保存在了/etc/sysconfig/ipsadm

real-server配置

准备:

real-server1(62):eth0: 192.168.2.62  网关:192.168.2.63  Vmnet4

real-server2(64):eth0: 192.168.2.64  网关:192.168.2.63  Vmnet4

将62和64配置为real-server,并提供web服务

yum install httpd


报错:ServerName

vim /etc/httpd/conf/httpd.conf

ServerName  192.168.2.64:80

echo 192.168.2.64 welcome > /var/www/html/index.html


systemctl start httpd

测试

测试时,尽量在别的服务器上测试,因为测试工具本身也会消耗CPU和内存资源

准备:yum install elinks   #网络测试工具

测试real-server

elinks 192.168.2.64

elinks 192.168.2.64  --dump  

测试VIP

elinks 192.168.1.63  --dump

多次执行,发现。62和64轮流响应


2、IP-TUN模式

概述:

DR模式是通过MAC,规模是一个交换网络,而TUN模式,是通过给数据包加上新的IP头部来实现,所以可以跨越整个广域网

异地机房

好处:可以容灾 坏处:不能实现边界最近访问到对应realserver

实战:

LVS负载均衡的三种包转发模式及配置

1、将63配置成Director

1)、网络

eth0   DIP

eth0:1  VIP

2)、配置分发功能

ipvsadm -A -t 192.168.1.63:80 -s rr

ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -i

ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -i   

i为IP-tun模式,-g 表示DR模式  

ipvsadm -Ln  查看

2、real-server配置

1)、配置RIP

62:eth0: 192.168.1.62 网关:192.168.1.1  桥接

64:eth0: 192.168.1.64 网关:192.168.1.1  桥接

modprobe ipip  #加载ipip隧道模块,就会有默认的tunl0隧道

ifconfig -a 可以看到tunl0

2)、配置VIP

采用环回口

cp ifcfg-lo ifcfg-tunl0

vim ifcfg-tunl0

DEVICE=tunl0

IPADDR=192.168.1.63

NETMASK=255.255.255.255

重启网络服务

systemctl restart network

3)、关闭ARP转发,

目的是防止VIP冲突,因为每台机器都有1.63,我们的目的是当1.63的请求过来经过交换机后,只让分发器接受,对于real-server来说,只要不属于eth0上对应ip地址的包,都丢弃。

echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter   #默认为1 ,改为0关闭此功能

rp_filter 用于实现反向过滤技术,即uRPF,它验证反向数据包的流向,以避免伪装IP攻击,即从哪儿收到,就从哪儿发出去

而TUN模式,从real-server出去的IP数据包是直接回复给客户机的,所以要关闭此功能。实际上,DR和TUN模式就是在网络层使用了一个伪装IP数据包的功能

使其永久生效:

vim /etc/sysctl.conf

net.ipv4.conf.tunl0.arp_ignore = 1

net.ipv4.conf.tunl0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.tunl0.rp_filter=0

sysctl -p 生效

3、启动httpd,用elinks测试


3、DR模式

LVS负载均衡的三种包转发模式及配置

Director(分发器)配置(63):

1、网络环境配置

DIP:  eth0   192.168.1.70

VIP:  eth0:1  192.168.1.63

需要两个网卡配置文件,拷贝eth0的即可,同时eth0:1的MAC地址必须和

eth0相同,GATEWAY和DNS可以去掉,重启网络服务生效。

2、配置分发功能

ipvsadm -A -t 192.168.1.63:80 -s rr

ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -g

ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g   

注意:三种模式中只有NAT需要开启路由转发功能。因为数据在回给客户机的时候需要经过分发器。

real-server配置

1、配置RIP

62:eth0: 192.168.1.62 网关:192.168.1.1  桥接

64:eth0: 192.168.1.64 网关:192.168.1.1  桥接

2、配置VIP

采用环回口

cp ifcfg-lo ifcfg-lo:1

vim ifcfg-lo:1

DEVICE=lo:1

IPADDR=192.168.1.63

NETMASK=255.255.255.255

3、关闭ARP转发

echo 1 > /proc/sys/net/ipv4/conf/eno16777736/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce

arp_ignore=1 : 当arp请求过来时,如果接收的网卡设备上没有这个IP,就不做出响应。默认是0,只要有一个网卡上有这个IP,就响应,发送MAC地址

arp_announce=2 :宣告,如果eth0接受到一个VIP的arp请求,内核判断这个VIP地址是不是和eth0上的一致,如果一致,则回复,不一致,丢弃。

使其永久生效

vim /etc/sysctl.conf

文件最后追加

net.ipv4.conf.eno16777736.arp_ignore = 1

net.ipv4.conf.eno16777736.arp_announce = 2

sysctl -p 生效

4、网关指向出口路由器的IP

vim .../ifcfg-eno16777736

GATEWAY=192.168.1.1

5、启动httpd,用elinks测试

注意提前修改/var/www/html/index.html中的内容,方便看效果

 

如有错误,敬请指正~~

 

 

 

 

相关文章:

  • 2021-11-07
  • 2021-11-27
  • 2021-07-11
猜你喜欢
  • 2021-08-30
  • 2021-11-07
  • 2021-09-25
  • 2021-08-27
  • 2021-04-13
  • 2021-12-21
  • 2021-12-07
相关资源
相似解决方案