lvs

lvs

1、简介

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:The Linux Virtual Server Project。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

2、lvs的作用

LVS主要用于多服务器的负载均衡。它工作在传输层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。

因为lvs工作在传输层,所以相对于其他的负载均衡的解决办法(DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的)

LVS的通过控制IP来实现负载均衡。IPVS是其具体的实现模块。

3、lvs的工作模式

3.1、DR模式

直接路由:Direct Routing,简称 DR 模式,采用半开放式的网络结构,与 TUN 模式的结构类似,但各节点并不是分散在各个地方,而是与调度器位于同一个物理网络,负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道。它是最常用的工作模式,因为它的功能性强大。

3.1.DR 模式的原理

用户请求到达LVS服务器后,LVS进行确定是不是已定义的服务,如果是定义过的VIP服务,将会根据配置信息,从后端RealServer组中选出一个服务器,然后将目的MAC地址修改为选出的RS服务器的MAC地址,数据包到达RealServer服务器后,发现目的MAC地址是自己,将会处理该报文,处理完成后,将响应报文向外发出。此时源地址IP为VIP,目标IP地址为CIP

image

3.1. DR 模式的优缺点:

优点:
响应数据不经过 LVS,性能高;
对数据包修改小,信息完整性好;
缺点:
LVS 与 RS 必须在同一个物理网络;
RS 上必须配置 lo 和其他内核参数;
不支持端口映射;

3.1.试试

环境准备

主机名 服务 IP地址
DR lvs 10.0.0.5
RS1 nginx 10.0.0.15
RS2 nginx 10.0.0.17
VIP VIP 10.0.0.128

SR1配置

#//关闭selinux、防火墙
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
setenforce 0
systemctl disable --now firewalld.service

#//安装nginx并配置主页
yum -y install nginx
cat << eof >/etc/nginx/conf.d/lvs.conf
server {
   listen 80;
   server_name  lvs.kaike.plus _;
   root /code/lvs;
   location / {
   index index.html ;
   }
}
eof
systemctl restart nginx.service 
mkdir -p /code/lvs
echo RS1 > /code/lvs/index.html

#//修改内核参数 抑制arp解析
cat << 'eof' >>/etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2 
eof
sysctl -p

#//配置VIP 重启失效
ip addr add 10.0.0.128/32 dev lo label lo:1 


RS2配置

#//关闭selinux、防火墙
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
setenforce 0
systemctl disable --now firewalld.service

#//安装nginx并配置主页
yum -y install nginx
cat << eof >/etc/nginx/conf.d/lvs.conf
server {
   listen 80;
   server_name  lvs.kaike.plus _;
   root /code/lvs;
   location / {
   index index.html ;
   }
}
eof
systemctl restart nginx.service 
mkdir -p /code/lvs
echo RS2 > /code/lvs/index.html

#//修改内核参数 抑制arp解析
cat << 'eof' >>/etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2 
eof
sysctl -p

#//配置VIP 重启失效
ip addr add 10.0.0.128/32 dev lo label lo:1

DR配置

#//关闭selinux、防火墙
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
setenforce 0
systemctl disable --now firewalld.service

#//安装ipvsadm
yum -y install ipvsadm
ipvsadm

#//添加VIP 重启失效
ip addr add 10.0.0.128/24 dev eth0 label eth0:0

#//配置规则
ipvsadm -A -t 10.0.0.128:80 -s rr
ipvsadm -a -t 10.0.0.128:80 -r 10.0.0.15:80 -g
ipvsadm -a -t 10.0.0.128:80 -r 10.0.0.17:80 -g

ipvsadm命令手册

3.2、NAT模式

地址转换:Network Address Translation,简称:NAT 模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,作为客户机的访问入口,也是各节点回应客户机的访问出口,服务器节点使用私有 IP 地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。

3.3、原理

客户端发出请求数据包经过网络到达 LVS服务器,此时数据包源 IP 为 CIP,目的 IP 为 VIP。
到达 LVS 后,通过目的 IP 和目的 port 查找是否为已定义的服务,如果是,将会选择一个 RS 来作为后端服务器,数据包的目的 IP 地址将会修改为 RIP,这时并以 RIP 为目的 IP 去查找路由,确定下一跳及 port 信息后,数据包将会转发
到达 RS 服务器,数据包源 IP 为 CIP,目的 IP 为 RIP服务器经过处理后数据包源 IP 为 RIP,目的 IP 为 CIP
LVS 服务器收到响应数据包后,根据目的 IP 和 目的 PORT 查找相应的服务,这时,源 IP 为 VIP,目的IP为CI

3.3、TUN模式

4.基于keepalived管理lvs

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×