负载均衡集群
1、集群(cluster)可以在付出较低成本的情况下获得再性能、可靠性、灵活性方面的相对较高的收益,任务调度是集群系统中的核心技术。
2、集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率。
负载均衡集群技术的实现:
负载均衡(Load Balance)
负载均衡技术类型:基于四层负载均衡技术和基于七层负载均衡技术
负载均衡的实现方式:硬件负载均衡设备以及软件负载均衡
硬件负载均衡产品:F5、深信服、Radware
软件负载均衡产品:LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(apache traffic server)
负载均衡分类:
二层负载均衡(mac):一般用于虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接受分配后端实际的MAC地址响应。
三层负载均衡(ip):一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。
四层负载均衡(tcp):在三层负载均衡的基础上,用ip+port接受请求,再转发到对应的机器上。
七层负载均衡(http):根据虚拟的url或ip,主机名接受请求,在转向相应的处理服务器。
在实际的应用中只有四层、七层比较常用
实现四层负载均衡的软件有:
F5:硬件负载均衡器,功能很好,但是成本很高
lvs:重量级的四层负载均衡
nginx:轻量级的四层负载均衡软件,带缓存功能,正则表达式较灵活
haproxy:模拟四层转发,较灵活
实现七层负载均衡的软件有:
haproxy:天生负载均衡技能,全面支持七层代理、会话保持、标记、路径转移。
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
在具体业务架构设计时,使用四层负载均衡或者七层负载均衡还得根据具体情况综合考虑。
LVS是Linux Virtual Server的简称,也就是linux虚拟服务器
为什么使用lvs?
1、高并发连接:有超强的承接能力和并发处理能力
2、稳定性强:是工作在网络四层之上仅作分发之用,对内存和cpu资源消耗少
3、成本低廉:lvs只需要一台服务器就能完成免费部署
4、配置简单:lvs配置非常简单,仅需几行命令,且可以写成脚本进行管理
5、支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
6、支持多种工作模式:可根据不同业务场景使用不同的工作模式
7、应用范围广:几乎所有应用都可以使用lvs来进行负载均衡
缺点:只工作在四层,不支持七层修改,机制过于庞大,不适合小规模使用
LVS核心组件和专业术语:
核心组件:
LVS管理工具和内核模块: ipvsadm、ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发;
专业术语:
VS: Virtual Server #虚拟服务
DR: Director,Balancer #负载均衡器、分发器
RS: Real Server #后端请求处理服务器
CIP: Client IP #用户端ip
VIP: Director Virtual IP #负载均衡虚拟IP
DIP: Director IP #负载均衡IP
RIP: Real Server IP #后端请求处理服务器IP
SIP: 源IP
LVS的四种工作模式:
1、LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(ip负载均衡,他修改的是IP地址) —利用三层功能
2、LVS/DR:直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)—利用二层功能mac地址(MAC:mac地址又称为物理地址,具有全球唯一性,可以在局域网中标识一台设备)
3、LVS/TUN:隧道模式,只有进站的数据流量经过分发器,必须是公网ip合法ip,real server必须是公网ip。
4、LVS/full-nat:双向转换:将源IP改为DIP,将目标IP转为后端RS的RIP。通过请求报头的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发。
四者的区别:
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr与lvs-tun:请求报头要经有Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
LVS-server安装lvs管理软件
yum -y install ipvsadm
程序包:ipvsadm(lvs管理工具)
程序命令位置:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm —save > /etc/sysconfig/ipvsadm
配置文件:/etc/sysconfig/ipvsadm-config
ipvsadm命令选项:
-A —add-service #在服务器列表中新添加一条新的虚拟服务器记录
-t #表示为tcp服务
-u #表示为udp服务
-s —scheduler #使用的调度算法,rr | wrr | lc | wlc 默认的算法是wlc
例:ipvsadm -A -t 192.168.157.153: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.157.153:80 -r 192.168.157.154:80 -m -w 1
-E -edit-service #编辑内核虚拟服务表中的一条虚拟服务器记录
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录
-C -clear #清除内核虚拟服务器表中的所有记录
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R选项可读的格式
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
—numeric,-n #以数字形式输出地址和端口号
—stats #统计信息
—rate #输出速率信息
-Z -zero #虚拟服务表计数器清零(清空当前的连接数量等)
LVS部署实验:
环境准备:三台干净服务器(有条件可以多准备一台,用于当作客户端进行访问测试),保证网络畅通,防火墙、selinux关闭,base、epel仓库可用,且服务器的网络模式为NAT
这里准备的三台虚拟机分别为:
192.168.157.154/24(DR) VIP:192.168.157.10/32
192.168.157.155/24(SR-1) VIP:192.168.157.10/32
192.168.157.156/24(SR-2) VIP:192.168.157.10/32
部署DR机:
下载lvs管理工具:
>yum -y install ipvsadm
如果要使用域名进行访问测试则进行本地域名解析,此次实验未使用域名
配置VIP(Director分发器配置):
>ip addr add dev ens33 192.168.157.10/32 #定义了一个VIP为ens33,且子网掩码为32
>systemctl start ipvsadm #启动ipvsadm
如果报错可以是缺少文件目录需要手动创建文件:
>ipvsadm —save > /etc/sysconfig/ipvsadm
再次启动即可:
>systemctl start ipvsadm
定义LVS分发策略:
>ipvsadm -C #清除内核虚拟服务器表中的所有记录
>ipvsadm -A -t 192.168.157.10:80 -s rr #创建一个新的虚拟服务器记录且调度算法指定为rr
>ipvsadm -a -t 192.168.157.10:80 -r 192.168.157.155:80 -g #在虚拟服务器记录中添加真实记录SR-1,-g可不加默认就是直接路由模式
>ipvsadm -a -t 192.168.157.10:80 -r 192.168.157.156:80 -g #在虚拟服务器记录中添加真实记录SR-2,-g可不加默认就是直接路由模式
#添加真实服务器记录,模式为DR
ipvsadm -S > /etc/sysconfig/ipvsadm #保存,保存到一个文件中
>ipvsadm -ln #查看表中记录以及算法
SR-1部署:
下载nginx:
>yum -y install nginx && systemctl start nginx
>echo “this is SR-1” > /usr/share/html/index.html #给nginx默认发布目录添加内容
>ip addr add dev lo 192.168.157.10/32 #在lo接口上绑定VIP
>echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播,让ARP静默保证用户访问VIP的时候访问DR
>echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
>echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确IP地址回包,为了RS直接将数据返还回Client
以上均为永久修改
SR-2部署:
与SR-1步骤相同:
下载nginx:
>yum -y install nginx && systemctl start nginx
>echo “this is SR-2” > /usr/share/html/index.html #给nginx默认发布目录添加内容
>ip addr add dev lo 192.168.157.10/32 #在lo接口上绑定VIP
>echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播,让ARP静默保证用户访问VIP的时候访问DR
>echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
>echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确IP地址回包,为了RS直接将数据返还回Client
以上均为永久修改
随后进行访问测试,在访问时访问我们定义的VIP
使用服务器时:curl http://192.168.157.10
使用浏览器直接地址栏输入即可,推荐服务器访问测试
