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
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
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