1、四层负载均衡(基于IP+端口的负载均衡)
所谓四层负载均衡,也就是主要通过报文中的目标ip地址和端口,再加上负载均衡设备设置的服务器选择方式(分发策略,轮询),决定最终选择的内部服务器。
实现四层负载均衡的有:
F5:硬件负载均衡器,功能很好,但是成本很高
lvs:重量级的四层负载均衡软件
haproxy:模拟四层、七层转发,较灵活
2、七层的负载均衡(基于虚拟的URL或主机IP的负载均衡)
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
实现七层负载均衡的软件有:
haproxy:天生负载均衡技能,全面支持四层,七层代理,会话保持,标记,路径转移
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多
apache:功能较差
MySQL proxy:功能尚可
3、四层负载与七层负载的区别
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 四层负载均衡? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 七层负载均衡
基于? ? ? ? ? ? ? ? ? ? ? ?基于IP+port的? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?基于URL或主机IP等
类似于? ? ? ? ? ? ? ? ? ? 路由器? ? ? ? ? ? ? ? ?? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ?代理服务器
复杂度? ? ? ? ? ? ? ? ? ? ?低? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??高
性能head等信息? ? ?高;无需解析内容? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 中;需要算法识别URL和http
安全性? ? ? ? ? ? ? ? ? ? 低? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 高
额外功能? ? ? ? ? ? ? ? 无? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?会话保持,图片压缩,等
总结:最大区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
4、命令选项
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-t #表示为tcp服务
-u #表示为udp服务
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
#例:ipvsadm -A -t 192.168.1.2:80 -s wrr
-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量呗转到同一个realserver的会话存留时间
#例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号
--exact: #扩展信息,精确值
--connection,-c: #当前IPVS连接输出
--stats: #统计信息
--rate : #输出速率信息
参数也可以从/proc/net/ip_vs*映射文件中查看
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)
5、lvs负载均衡集群企业级应用实战
1准备虚拟机,三台虚拟机,两台web服务器
2lvs-server安装lvs管理软件
[root@lvs-server ~]# yum -y install ipvsadm
程序包:ipvsadm(lvs管理工具)
主程序:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config
3lvs/DR模式
1)关闭防火墙和selinux做解析
[root@lvs-server ~]# vim /etc/hosts
192.168.73.131 lvs-server
192.168.73.132 real-server1
192.168.73.133 real-server2
2)配置VIP
[root@lvs-server ~]# ip addr add dev ens33 192.168.73.131/32 #设置VIP
[root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用
[root@lvs-server ~]# service ipvsadm start #启动
注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
需要手动生成文件
[root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
定义lvs分发策略
-A:添加VIP
-t:用的是tcp协议
-a:添加的是lo的vip地址
-r:转发到realserverip
-s:算法
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号
-g --gatewaying #指定LVS工作模式为直接路由器模式DR(也是LVS默认的模式)
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
rr:轮循
如果添加ip错了,删除命令如下:
# ip addr del 192.168.73.193 dev ens33
[root@lvs-server ~]# ipvsadm -C #清除内核虚拟服务器表中的所有记录。
[root@lvs-server ~]# ipvsadm -A -t 192.168.73.134:80 -s rr
[root@lvs-server ~]# ipvsadm -a -t 192.168.73.134:80 -r 192.168.73.132 -g 第一台机器ip
[root@lvs-server ~]# ipvsadm -a -t 192.168.73.134:80 -r 192.168.73.133 -g 第二台机器ip
[root@lvs-server ~]# service ipvsadm save #保存方式一,使用下面的保存方式,版本7已经不支持了
[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式二,保存到一个文件中
[root@lvs-server ~]# ipvsadm -ln
[root@lvs-server ~]# ipvsadm -L -n
[root@lvs-server ~]# ipvsadm -L -n --stats #显示统计信息
1. Conns (connections scheduled) 已经转发过的连接数
2. InPkts (incoming packets) 入包个数
3. OutPkts (outgoing packets) 出包个数
4. InBytes (incoming bytes) 入流量(字节)
5. OutBytes (outgoing bytes) 出流量(字节)
[root@lvs-server ~]# ipvsadm -L -n --rate #看速率
1. CPS (current connection rate) 每秒连接数
2. InPPS (current in packet rate) 每秒的入包个数
3. OutPPS (current out packet rate) 每秒的出包个数
4. InBPS (current in byte rate) 每秒入流量(字节)
5. OutBPS (current out byte rate) 每秒出流量(字节)
3)所有RS配置
[root@real-server1 ~]# yum install -y nginx
[root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html
#两台机器都安装,按顺序添加不同的主机名以示区分
[root@real-server1 ~]# ip addr add dev lo 192.168.73.134/32 #在lo接口上绑定VIP
[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
[root@real-server1 ~]# systemctl start nginx
[root@real-server1 ~]# systemctl enable nginx
[root@client ~]# vim /etc/nginx/nginx.conf
keepalive_timeout 0;
4)测试
[root@client ~]# elinks -dump http://192.168.73.134
#浏览器输入 192.168.73.134
6、lvs-NAT模式:
查看Linux已加载的内核模块
[root@sql-review ~]# lsmod
加载与卸载内核模块
[root@sql-review ~]# modprobe ip_vs #动态加载ip_vs 模块,这个命令只是临时生效,需要添加到开机启动项目里面
[root@sql-review ~]# lsmod | grep ip_vs #过滤模块是否加载成功!
[root@sql-review ~]# modprobe -r ip_vs #动态卸载ip_vs模块
查看内核模块信息
[root@sql-review ~]# modinfo ip_vs
设置开机启动项
[root@sql-review ~]# echo "modprobe ip_vs" >> /etc/rc.local
[root@sql-review ~]# chmod +x /etc/rc.local #切记添加执行权限
#添加到开机启动项里面如果不需要这个模块的时候只需要将etc/rc.local里面对应的命令删除掉。但是这样需要重新启动服务器。 可以通过下面的命令立即生效。
先在Real server安装如nginx(两台机器real-server)
[root@real-server1 ~]# yum install -y nginx
[root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html
#两台机器都安装,按顺序添加不同的主机名以示区分
#所有机器
systemctl stop firewalld && setenforce 0
7、lvs/NAT模式实施
1)准备工作(集群中所有主机)都要做解析
[root@lvs-server ~]# vim /etc/hosts
192.168.73.131 lvs-server
192.168.73.132 real-server1
192.168.73.133 real-server2
2)RS配置
[root@real-server1 ~]# route add default gw 192.168.246.166 dev ens33
3)director分发器配置
#先给LVS服务器新添加一块网卡网络模式设置为桥接模式。会自动生成一个ip,作为VIP。
[root@lvs-server ~]# ip addr add dev ens37 192.168.50.128/24 #设置VIP(新加网卡地址)
[root@lvs-server ~]# vim /etc/sysctl.conf #开启路由转发
net.ipv4.ip_forward = 1
[root@lvs-server ~]# sysctl -p #开启转发功能
定义lvs的分发策略
[root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用
[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
[root@lvs-server ~]# service ipvsadm start #启动
[root@lvs-server ~]# ipvsadm -A -t 192.168.50.128:80 -s rr
[root@lvs-server ~]# ipvsadm -a -t 192.168.50.128:80 -r 192.168.246.161 -m
[root@lvs-server ~]# ipvsadm -a -t 192.168.50.128:80 -r 192.168.246.162 -m
[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式一
[root@lvs-server ~]# service ipvsadm save #保存方式二,使用上面你的保存方式
[root@lvs-server ~]# ipvsadm -Ln
[root@lvs-server ~]# ipvsadm -L -n --stats // 显示统计信息
[root@lvs-server ~]# ipvsadm -L -n --rate //看速率
4)测试
[root@client ~]# elinks -dump http://ens37
#浏览器输入 ens37
|