原理解析
💯LVS:
- 中国开发,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。
- 是一台独立的负载均衡服务器
- 有三种模式:NAT网络地址转换、DR路由直连、TUN隧道
- 进行集群代理,用户的请求通过LVS,LVS将请求(负载均衡)分发给对应的real Server(真实服务器)
- LVS-NAT 用于不同的网段之间的 通信,LVS-DR 用于同一网段 通信
一、LVS-NAT 部署
简介
NAT 转发模式:Network Address Translation 网络地址转换
优点:网络隔离安全,客户端只能访问到LVS、节约IP(虚拟IP替换一个公网IP)
缺点:用户所有的进出流量都要经过LVS服务器,当某一时间点用户PV量突增,LVS处理性能差,将会成为瓶颈
架构:Client > 互联网(公网) > 路由器 > 交换机 > (公网IP) LVS (私网IP) > Web服务器(私网)
工作流程
- 首先 LVS 服务器 必须能够 同时连接 公网与私网,把LVS充当路由转发器
- 外网客户端Client 向内网Web请求数据
- Client(公网IP)先到达 LVS(负载),LVS会将公网IP地址进行转换(私网IP)
- 转换为与Web同网段的私网IP,将请求转发进行路由到后方对应的Web服务器
- Web 向 客户端Client 传输请求的数据
- Web服务器(私网IP)返回数据,先到达LVS,LVS会将私网IP转换 (公网IP)
- 转换为与Client同网段的IP,将请求回复给 Client
1、环境准备
1、client:vmnet0 192.168.35.141
2、LVS:vmnet0 192.168.35.15 vmnet2 192.168.239.128
3、web1:vmnet2 192.168.239.130
4、web2:vmnet2 192.168.239.131
# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0
2、web软件安装
1、安装与开启http:
# yum -y install httpd net-tools
# systemctl --now enable httpd
2、web1网站内容:
# echo 'web1' > /var/www/html/index.html
3、web2网站内容:
# echo 'web2' > /var/www/html/index.html
3、web 路由配置
3.1、web1
LVS的vmnet0的IP网段:
# route add -net 192.168.35.0/24 gw 192.168.239.128
3.2、web2
LVS的vmnet0的IP网段:
# route add -net 192.168.35.0/24 gw 192.168.239.128
4、LVS配置
4.1、配置路由转发
1、临时开启转发:
# echo 1 > /proc/sys/net/ipv4/ip_forward
如果想要永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p 生效
4.2、安装软件
ip Virtula Server admin # ip虚拟服务管理
# yum -y install ipvsadm
4.3、进行路由建立
1、对外提供虚拟IP,填写vmnet0的IP:
# ipvsadm -A -t 192.168.35.15:80 -s rr
2、虚拟IP路由转发请求到Web:
# ipvsadm -a -t 192.168.35.15:80 -r 192.168.239.130:80 -m
# ipvsadm -a -t 192.168.35.15:80 -r 192.168.239.131:80 -m
5、Client 访问测试
# yum -y install elinks
1、访问LVS的虚拟IP:
# elinks --dump http://192.168.35.15
web1
# elinks --dump http://192.168.35.15
web2
6、删除路由
1、查看路由
# ipvsadm -l
2、删除虚拟IP
# ipvsadm -D -t 192.168.35.15:80
3、删除虚拟IP路由转发规则
# ipvsadm -d -t 192.168.35.15:80 -r 192.168.239.131:80
二、LVS-DR部署
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7QOvX9N-1640083216409)(服务部署过程.assets/LVS-DR.jpg)]
简介
DR路由直连模式: Dirct connections Route
优点:解决了LVS-NAT模式的瓶颈,吞吐量优于NAT,Web服务回复给用户的数据不经过LVS,直接发送给客户端Client,因为在同一网段。
缺点:安全性相对于LVS-NAT 较弱,在同一网段
架构:Client > LVS > Web-Server
工作流程:
- Client访问Web
- 当Client请求Web数据时,先到达LVS(VIP)
- 通过LVS的VIP到达 后方的Web服务器的lo:0,通过配置的lo:0 最终请求到Web
- 原理上是对 MAC地址之间的访问,由Client源IP(MAC) 与 VIP的MAC进行关联
- 其实 VIP的MAC就是 Web上 lo:0 的MAC
- Web 返回 数据给 Client,直接返回,不经过LVS
1、环境准备
1、client:192.168.178.7
2、LVS:192.168.178.60
3、web1:192.168.178.61
4、web2:192.168.178.16
# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0
2、LVS配置
2.1、添加虚拟IP
1、安装服务
# yum -y install net-tools ipvsadm
2、添加虚拟IP:
# ifconfig ens33:0 192.168.178.100 brodercast 192.168.178.255 netmask 255.255.255.0 up
如果你想永久添加虚拟IP,请看下方
# cd /etc/sysconfig/network-scripts/
# cp -r ifcfg-ens33 ifcfg-ens33:0
# vim ifcfg-ens33:0
找到进行修改
IPADDR=192.168.178.100
NAME=ens33:0
DEVICE=ens33:0
删除UUID这行
# systemctl restart network
2.2、配置虚拟路由
1、虚拟路由
# route add -host 192.168.178.100 dev ens33:0
2、配置路由转发
# vim /etc/sysctl.conf
#开启路由转发功能
net.ipv4.ip_forward=1
#禁止重定向报文
net.ipv4.conf.all.send_redirects=0
#禁止ens33转发重定向报文
net.ipv4.conf.ens33.send_redirects=0
#禁止转发默认重定向报文
net.ipv4.conf.default.send_redirects=0
2.3、配置负载规则
1、配置负载规则,路由后方的Web:
# ipvsadm -A -t 192.168.178.100:80 -s rr
# ipvsadm -a -t 192.168.178.100:80 -r 192.168.178.16:80 -g
# ipvsadm -a -t 192.168.178.100:80 -r 192.168.178.61:80 -g
2、规则永久生效:
# ipvsadm-save > /etc/sysconfig/ipvsadm
3、设置开机自启
# systemctl enable ipvsadm
4、查看配置成功的路由
# ipvsadm -ln
3、Web配置
web1 与 web2 同时进行
3.1、添加虚拟IP
**解析:**lo(local back):本机的虚拟网卡,回环地址 设置32位子网掩码,该IP有且一个,防止地址冲突
1、web1与web2同时进行:
# ifconfig lo:0 192.168.178.100/32
3.2、设置内核参数
1、忽略ARP响应,不允许接收
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
2、让VIP发包出去,但允许发
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
4、测试访问
1、安装测试软件:
# yum -y install elinks
2、访问虚拟IP,进行测试
# elinks http://192.168.178.100 --dump
web2
# elinks http://192.168.178.100 --dump
web1
3、在LVS服务器上查看路由信息:
# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 00:08 FIN_WAIT 192.168.178.7:57086 192.168.178.100:80 192.168.178.61:80
TCP 00:07 FIN_WAIT 192.168.178.7:57080 192.168.178.100:80 192.168.178.16:80
TCP 00:06 FIN_WAIT 192.168.178.7:57078 192.168.178.100:80 192.168.178.61:80
TCP 00:05 FIN_WAIT 192.168.178.7:57076 192.168.178.100:80 192.168.178.16:80
TCP 00:01 FIN_WAIT 192.168.178.7:57074 192.168.178.100:80 192.168.178.61:80
TCP 00:07 FIN_WAIT 192.168.178.7:57082 192.168.178.100:80 192.168.178.61:80
TCP 00:08 FIN_WAIT 192.168.178.7:57084 192.168.178.100:80 192.168.178.16:80