一、负载均衡
1.负载均衡分类
四层负载均衡
基于IP+端口的负载均衡,实现四层负载均衡的软件有F5(硬件负载均衡器,功能很好,但成本很高),``lvs(重量级的四层负载软件),nginx(轻量级的四层负载软件,带缓存功能,正则表达式较灵活),haproxy(模拟四层转发,较灵活)
七层负载均衡
基于虚拟的URL或主机IP的负载均衡,负载均衡设备在七层负载中,更类似于一个代理服务器,负载均衡和前端的客户端以及后端的服务器会分别建立连接
2.区别
3.总结
从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
二、LVS实现四层负载均衡项目实战
1.LVS优势和不足
优势:
1.高并发连接
2.稳定性强
3.成本低廉
4.配置简单
5.支持多种算法
6.支持多种工作模型
不足:
工作在4层,不支持7层规则修改,不适合小规模应用
2.专业术语
VS #虚拟服务
Director, Balancer #负载均衡器、分布器
RS #后端请求处理服务器
CIP #客户端IP
VIP #负载均衡虚拟IP
DIP #负载均衡器IP
RIP #后端请求处理服务器IP
3.LVS负载均衡工作模式
1.NAT模式: 进站和出战的数据流量经过负载均衡器(修改的是IP地址,利用三层网络层来传输)
2.DR直接路由模式: 只有进站的数据流量经过负载均衡器(修改的是mac地址,是通过二层数据链路层来传输)
3.TUN隧道模式: 只有进站的数据流量经过分发器,但是服务器要支持隧道协议
4.LVS ipvsadm命令的使用
yum -y install ipvsadm #安装lvs管理软件
-A #在服务器列表中新添加一条新的虚拟服务器记录
-a #在服务器表中添加一条新的真实主机记录
-t #说明虚拟服务器提供tcp服务
-u #说明虚拟服务器提供upd服务
-r #只是服务器地址
-m #指定LVS工作模式为NAT模式
-w #真实服务器的权值
-g #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-s #使用的调度算法,默认调度算法是 wlc
-C #清除内核虚拟服务器表中的所有记录
-S #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-d #删除一条虚拟服务器记录中的某条真实服务器记录
-L #显示内核虚拟服务器表
-n #以数字形式输出地址和端口号
5.实战项目(LVS/DR模式下负载均衡)
在实验之前我们要关闭防火墙和selinux
Director分发器配置
#配置VIP
ip addr add dev ens33 192.168.91.10/32 #设置VIP
yum -y install ipvsadm
service ipvsadm start #启动
注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录,需要手动生成文件
ipvsadm --save > /etc/sysconfig/ipvsadm
注意:为什么RS上lo配置的VIP掩码为32位?
这是由于lo设备的特殊性导致, 如果lo绑定VIP/24,则该设备会响应该网段所有IP(192.168.246.0-254)的请求,而不是只响应192.168.246.160这一个地址。,就算是不设置为32也是可以的,只不过会影响访问
如果添加ip错了,删除命令如下:
#ip addr del 192.168.246.193 dev ens33
#定义LVS分发策略
ipvsadm -C #清除内核虚拟服务器表中的所有记录。
ipvsadm -A -t 192.168.91.10:80 -s rr
ipvsadm -a -t 192.168.91.10:80 -r 192.168.91.150 -g
ipvsadm -a -t 192.168.91.10:80 -r 192.168.91.149 -g
ipvsadm -S > /etc/sysconfig/ipvsadm
所有的RS配置
yum install -y nginx
ip addr add dev lo 192.168.246.160/32 #在lo接口上绑定VIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
systemctl start nginx && systemctl enable nginx
配置完成后我们就有可以进行测试
elinks -dump http://192.168.91.10 #非交互式模式测试