LVS实现四层负载均衡实验–基于NAT模式
1、NAT模式(VS-NAT)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
业务需求
随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。
考虑解决方案?
横向:scale out 对磁盘等资源扩容
纵向:scale up 增加新的服务器
一、环境准备
1、准备虚拟机
准备 3 台纯净的虚拟机,两台 web 服务器
2、LVS-server 安装lvs管理软件
[root@lvs-server ~]# yum -y install ipvsadm
程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config
16,color_FFFFFF,t_70#pic_center)
3、LVS/NAT网络拓朴
主机名 | ip | 系统 | 用途 |
---|---|---|---|
client | 10.11.67.88 桥接 | windows10 | 客户端 |
lvs-server | 10.11.67.82 桥接模式 192.168.240.128 nat模式 | centos7.6 | 分发器 |
web-server1 | 192.168.240.129 nat模式 | centos7.6 | web1 |
web-server2 | 192.168.240.130 nat模式 | centos7.6 | web2 |
#准备服务器,关闭selinux和防火墙
[root@lvs ~]# setenforce 0
[root@lvs ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@lvs ~]# systemctl stop firewalld
[root@lvs ~]# systemctl disable firewalld
4、配置web-server1和web-server2 (两服务器相同)
[root@web-server1 ~]# yum install httpd -y
[root@web-server1 ~]# echo lvs-web1 > /var/www/html/index.html
[root@web-server1 ~]# systemctl start httpd
[root@web-server1 ~]# ip route add default via 192.168.72.130 # 配置默认路由
#lvs-server上进行本地解析:
vim /etc/hosts
10.11.67.82 lvs-server #这里是lvs机器的vip
192.168.240.129 web-server1
192.168.240.130 seb-server2
5、配置lvs-server 开启路由转发模式(让本机的两块网卡可以通信)
[root@lvs-server ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs-server ~]# sysctl -p //确保打开路由转发
#永久开启: echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
#临时开启: echo 1 > /proc/sys/net/ipv4/ip_forward
[root@lvs-server ~]# yum install ipvsadm -y
设置集群调度算法,(便于验证,此处使用轮询算法):
[root@lvs-server ~]# ipvsadm -A -t 10.11.67.82:80 -s rr
设置后端服务器:
[root@lvs-server ~]# ipvsadm -a -t 10.11.67.82:80 -r 192.168.240.129:80 -m
[root@lvs-server ~]# ipvsadm -a -t 10.11.67.82:80 -r 192.168.240.130:80 -m
查看ipvsadm规则:
[root@lvs-server ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.108:80 rr
-> 192.168.72.128:80 Masq 1 0 7
-> 192.168.72.129:80 Masq 1 0 7
这些规则没有保存在配置文件,重启失效
#ping测试
[root@lvs ~]# ping -I 10.11.67.82 192.168.204.128
[root@lvs ~]# ping -I 10.11.67.82 192.168.204.129
[root@lvs ~]# ping -I 10.11.67.82 192.168.204.130
如果桥接ip能ping通nat模式ip,则没有问题
6、做开启启动
[root@lvs-server ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@lvs-server ~]# ipvsadm -Ln > /etc/sysconfig/ipvsadm
7、测试
[root@client ~]# elinks -dump http://10.11.67.82/
[root@client ~]# ab -c 1000 -n 1000 http://10.11.67.82/
#扩展:修改算法为:加权轮循
ipvsadm -E -t lvs-server:80 -s wrr
ipvsadm -e -t lvs-server:80 -r web1:80 -m -w 2