tinydu 2020-06-04
LVS负载均衡中有三种调度方法,分别为:NAT(Network Address Translation网络地址转换)、TUN(tunnel 隧道)、DR(direct route 直接路由)
LVS-DR
DR模式下需要LVS服务器和后台服务器绑定同一个VIP, 一个请求过来时,LVS只需要将网络帧的MAC地址修改为其中一台后台服务器的MAC,该包就会被转发到相应的服务器处理,当服务器返回响应时,只要直接向用户的IP地址返回即可,不再经过LVS服务器
优缺点:
1)lvs接收请求输入,将请求转发给RS,由RS输出响应给用户,性能非常高。
2)不足之处是要求负载均衡器与RS在一个物理段上
LVS-TUN
LVS-TUN模式是通过ip隧道技术减轻lvs调度服务器的压力,很多时候服务器收到的请求包很短小,但应答包通常很大,负载均衡器只负责将请求包分发给后台服务器,后台服务器会直接将应答包返回给用户。因此,负载均衡器能处理很巨大的请求量。
优缺点:
1)性能比LVS-NAT模式要高的多,且不限制负载均衡器与后台服务器在一个物理段上
2)不足之处是需要所有的服务器都要支持"IP Tunneling"协议
LVS-NAT
LVS-NAT模式是一种外网和内网地址映射的技术。在NAT模式中,LVS需要作为后台服务器的网关,当客户端访问LVS服务器的外网网卡IP地址时,LVS会将数据包的目标IP地址改为后台服务器的IP地址;当后台服务器返回响应时,同样需要通过LVS服务器作为网关进行中转,LVS服务器会将数据包的源地址改为LVS服务器的外网网卡IP地址,因此客户端会认为响应是LVS服务器返回的
优缺点:
1)可以有效把后台服务器IP地址隐藏起来
2)NAT模式请求和响应都需要经过lvs,性能没有DR模式好
前期准备
准备三台centos7,配置IP地址和hostname,同步时间,关闭防火墙和selinux,配置IP地址和hostname映射
hostname | ip |
---|---|
node1 | 192.168.29.143 |
node2 | 192.168.29.142 |
node3 | 192.168.29.144 |
在node2和node3中部署httpd服务并修改首页内容
[ ~]# yum install httpd -y [ ~]# echo node2 > /var/www/html/index.html [ ~]# yum install httpd -y [ ~]# echo node3 > /var/www/html/index.html [ ~]# systemctl start httpd [ ~]# systemctl start httpd
node1部署ipvsadm
[ ~]# yum install ipvsadm -y [ ~]# systemctl start ipvsadm.service
node1端设置部署
添加VIP和设置路由表
[ ~]# ifconfig ens33:0 192.168.29.122 broadcast 192.168.29.122 netmask 255.255.255.255 up [ ~]# route add -host 192.168.29.122 dev ens33:0
开启包转发功能
[ ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
设置ipvsadm转发规则
#先清除所有转发规则 [ ~]# ipvsadm --clear [ ~]# ipvsadm -A -t 192.168.29.122:80 -s rr [ ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.142:80 -g -w 1 [ ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.144:80 -g -w 1 #设置完成后查看状态 [ ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP node1:http rr -> node2:http Route 1 0 0 -> node3:http Route 1 0 0 #选项说明: -A:添加一个虚拟服务,使用ip地址、端口号、协议来唯一定义一个虚拟服务 -t:使用TCP服务,该参数后需加主机与端口信息 -s:指定lvs的调度算法 rr:轮询算法 -a:添加一台真实服务器 -r:设置真实服务器IP与端口 -g:设置lvs工作模式为DR直连路由 -w:指定真实服务器权重
node2和node3设置部署
添加VIP和设置路由表
[ ~]# ifconfig lo:0 192.168.29.122 broadcast 192.168.29.122 netmask 255.255.255.255 up [ ~]# route add -host 192.168.29.122 dev lo:0 [ ~]# ifconfig lo:0 192.168.29.122 broadcast 192.168.29.122 netmask 255.255.255.255 up [ ~]# route add -host 192.168.29.122 dev lo:0
关闭arp解析
[ ~]# 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 [ ~]# sysctl -p [ ~]# 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 [ ~]# sysctl -p
测试验证
浏览器访问http://192.168.29.122,刷新则会按照轮询算法自动进行负载均衡
node1端设置部署
添加VIP
[ ~]# ip addr add 192.168.29.122 dev ens33:0
开启包转发功能
[ ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
设置ipvsadm转发规则
#先清除所有转发规则 [ ~]# ipvsadm --clear [ ~]# ipvsadm -A -t 192.168.29.122:80 -s rr [ ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.142:80 -i [ ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.144:80 -i #设置完成后查看状态 [ ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP node1:http rr -> node2:http Tunnel 1 1 2 -> node3:http Tunnel 1 0 1 #选项说明: -i:设置lvs工作模式为TUN隧道
node2和node3设置部署
添加tunl0隧道
modeprobe ipip
添加VIP
[ ~]# ip addr add 192.168.29.122 dev tunl0 [ ~]#ip link set tunl0 up [ ~]# ip addr add 192.168.29.122 dev tunl0 [ ~]#ip link set up tunl0
关闭arp解析
[ ~]# vi /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 net.ipv4.conf.all.rp_filter = 0 [ ~]# sysctl -p [ ~]# vi /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 net.ipv4.conf.all.rp_filter = 0 [ ~]# sysctl -p
测试验证
浏览器访问http://192.168.29.122,刷新则会按照轮询算法自动进行负载均衡
在部署LVS-NAT架构前需要在调度机上安装两块网卡,一块为内网地址,另一块为外网地址
内网ip | 外网ip |
---|---|
192.168.29.143 | 192.168.31. 128 |
node1端设置部署
开启包转发功能
[ ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
设置ipvsadm转发规则
#先清除所有转发规则 [ ~]# ipvsadm --clear [ ~]# ipvsadm -A -t 192.168.31.128:80 -s rr [ ~]# ipvsadm -a -t 192.168.31.128:80 -r 192.168.29.142:80 -m [ ~]# ipvsadm -a -t 192.168.31.128:80 -r 192.168.29.144:80 -m #设置完成后查看状态 [ ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP node1:http rr -> node2:http Masq 1 0 0 -> node3:http Masq 1 0 0 #选项说明: -m:设置lvs工作模式为NAT地址转换模式
node2和node3设置部署
设置路由表
[ ~]# route add -net 192.168.31.0/24 gw 192.168.29.143 [ ~]# route add -net 192.168.31.0/24 gw 192.168.29.143
测试验证