一 LVS
LVS:Linux Virtaul Server,该软件的功能是实现 LB(load balance)
二LVS 的三种工作模式
1.NAT 模式(NAT)
LVS 服务器同时充当一台 NAT 网关,拥有公有 IP ,同时负责将针对此公共 IP 的请求依据算法将请求转发给 LAN 中的某台真实服务器(node) ,node 处理完成请求后将结果返回至 LVS Server, 在由 LVS Server 将结果返回给用户。可以将内部网络隐藏
2.IP 隧道模式(TUN)
可以实现让集群中的节点处于不同网络段
3.直连路由模式(DR)
当参与集群的计算机和作为控制管理的计算机在同一个网段时可以使用此种方法。控制管理的计算机接收到请求包时直接送到参与集群的 node 上。当 node 处理完请求后将直接把结果返还至用户而不通过 LVS Server 返还。DR 的优势在于速度快、开销少。
三 、三种模式的对比
NAT 方式适用于在同一个 LAN 中实现小型 LB
TUN 方式适用于 node 部分在 Internet 上
DR 方式使用与在同一个 LAN 中实现较为大型 LB
四 LVS 的八种算法
1.算法:将客户端的请求按照不同的算法转发给 web 服务器
2.算法的种类
1)rr:轮询 rr 算法就是将外部请求顺序轮流分配到集群中的 node 上,但不考虑每台 node的负载情况。
2)wrr:加权轮询 wrr 算法在 rr 算法的基础上会考察每台 node 的负载情况,并尝试让负较轻的 node 承担更多请求。
(权重为0表示不能接收,权重值越大越能接收)
3)lc:最少连接 算法可以让 LVS 尝试把新的请求交给当前连接数最少的 node ,直到此node 连接数不再属于最少标准
4)wlc:加权最少连接 wlc 算法也由权重的干预。LVS 会根据每台 node 的权重并综合连接数控制转发行为
5)lblc:局部最少连接 算法会加上针对源请求 IP 地址的路由估算,并尝试把请求发送到源请求 IP 路由最近的 node 上。此种方法一般用于远程或者是大规模的集群组
6)lblcr:带有复制的局部最少连接算法 lblcr 算法是在 lblc 算法的基础上增加了一个 node列表,先依据 lblc 算法计算出与源请求 IP 地址最近的一组 node ,然后在决定把请求发送
到最近一组中的最近的一台 node 。若此 node 没有超载则将请求转发给这台 node, 如果超载则依据”最少连接”原则找到最少连接的 node 并将此 node 加入集群组中。并将请求转
给此 node
7)dh:目标地址散列算法 相当于随机
8)sh:原地址散列算法 相当于随机
五 ipvsadm 语法格式
注:需安装 lvs 软件:yum install ipvsadm -y
1.ipvsadm -C:清空 kernel 中的 lvs 列表(清空虚拟主机及转发记录)
ipvsadm -A -t 虚拟主机 IP:80 -s 算法 :声明一个虚拟主机
ipvsadm -a -t 虚拟主机 IP:80 -r 接受连接的真实服务器 IP:80 lvs 的模式 -w 权重值 2.三种
模式
-i TUN 模式
-g DR 模式
-m NAT 模式
六 NAT 模式
<-->(192.168.1.2)web1
client(172.16.0.2)<-->(172.16.0.1)lvs(192.168.1.1)
<-->(192.168.1.3)web2
2.安装软件
在 client:yum install elinks -y
在 lvs 上:yum install ipvsadm iptables-services -y
在 web1/web2 上:yum install httpd -y
3.在 web1/web2 上,配置好 httpd
在 lvs 上,编辑脚本 vim lvs-nat.sh
#!/bin/bash
iptables -F
iptables -X
iptables -Z
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
ipvsadm -C
ipvsadm -A -t 172.16.0.1:80 -s wrr
ipvsadm -a -t 172.16.0.1:80 -r 192.168.1.2:80 -m -w 2
ipvsadm -a -t 172.16.0.1:80 -r 192.168.1.3:80 -m -w 3
注:该 iptables 语句实现了隐藏内网的功能(内网服务器返回给外网客户端信息时,将自己的源 IP 地址伪装为 lvs 服务器的外网 IP 地址)
4.在 web1/web2 上:systemctl restart httpd
在 lvs 上:bash lvs-nat.sh
5.在 client 上测试:elinks http://172.16.0.1 可见 web1/web2 上的网页交替出现(因为采用了 wrr 算法,web2 出现的频率高一些)在 web1/web2 上测试:ssh root@172.16.0.2 连接成功后,在 client 端:netstat -lantu |grep 22,可以看到,web1/web2 的源地址被伪装成 lvs 服务器的公网 IP 地址(172.16.0.1)
七 DR 模式
1.搭建网络拓扑
clinet(192.168.1.2)<--->(192.168.1.1)router(192.168.0.1)
<-------->(192.168.0.3)web1
<------->(192.168.0.2)lvs
<--------<(192.168.0.4)web2
2.安装软件
在 client:elinks
在 lvs 上:ipvsadm
在 web1、web2 上:httpd
3.在 lvs 上,vim lvs-dr.sh
#!/bin/bash
VIP=192.168.0.254
RIP1=192.168.0.3
RIP2=192.168.0.4
ipvsadm -C
ifconfig eno16777736:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host : dev eno16777736:0
ipvsadm -A -t $VIP:80 -s wlc
ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1
ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
在 web1 和 web2 上,vim web.sh
#!/bin/bash
VIP=192.168.0.254
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
4.在 lvs 上:bash lvs-dr.sh
在 web1、web2 上:bash web.sh
配置好 httpd
5.在客户端测试:elinks http:192.168.0.254,可见 web1 和 web2 上的网页交替出现
八 TUN 模式
执行原理:
①LVS接收到请求包(目标IP为VIP),进行IP Tunnel封装(在原有 的包头上加上IP Tunnel的包头),然后发送出去。
②节点(需配置VIP)收到数据包后,解开IP Tunnel包头信息(逻 辑上的隐形隧道,LB和RS之间传输),得到客户的请求进行响应处理。
③回复过程:RS使用自己的公网,将数据直接回复给客户端。
1.网络拓扑:
<---->(192.168.0.2)web1
client(192.168.0.4)<--->(192.168.0.1)lvs
<---->(192.168.0.3)web2
2.安装软件
client:elinks
lvs:ipvsadm
web1、web2:httpd
3.在 web1、web2 上:
配置好 httpd
编辑脚本:vim web.sh
#!/bin/bash
VIP=192.168.0.88
ifconfig tunl0 down
ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev tunl0
echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
注:为了实现IP隧道,Linux定义了一种新的协议IPIP,产生一个成为tun10的网络设备用来封装数据。使用方式和普通网卡没有差异
4.在 lvs 上编辑脚本
vim lvs-tun.sh
#!/bin/bash
VIP=192.168.0.88
RIP1=192.168.0.2
RIP2=192.168.0.3
ipvsadm -C
ifconfig eno16777736:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev eno16777736:0
ipvsadm -A -t $VIP:80 -s wlc
ipvsadm -a -t $VIP:80 -r $RIP1:80 -i -w 1
ipvsadm -a -t $VIP:80 -r $RIP2:80 -i -w 1
5.在 web1、web2 上:bash web.sh
在 lvs 上:bash lvs-tun.sh
6.在 client:elinks http://192.168.0.88 可以看到 web1 和 web2 上的网页交替出现