目录
一、集群与分布方式
1.1集群的含义
1.2群集分类
1.2.1负载均衡群集
1.2.2高可用群集
1.2.3高性能运算群集
1.3系统性能扩展方式
1.4负载均衡的结构
1.5集群和分布式
1.6集群设计原则
1.7集群设计实现
1.7.2业务层面
二、LVS工作模式和相关命令
2.1 LVS介绍
2.2?LVS集群的工作模式
2.2.1NAT地址转换
2.2.2IP隧道
2.2.3直接路由
2.2.4LVS工作模式总结和比较
2.3LVS调度算法
2.4?LVS工作原理
2.5LVS 功能及组织架构
2.5.1应用于高访问量的业务
2.5.2扩展应用程序
2.5.3消除单点故障
2.5.4同城容灾 (多可用区容灾)
2.6?LVS集群类型中的术语
三、ipvsadm 工具
3.1 ipvsadm 工具选项说明
四、NAT模式 LVS负载均衡部署
5.1部署共享存储(NFS服务器:192.168.130.10)
5.2配置节点服务器(192.168.130.30、192.168.130.40)
5.3配置负载调度器(内网关 ens33:192.168130.50,外网关 ens36:12.0.0.1)
5.4测试效果
一、集群与分布方式
1.1集群的含义
- Cluster,集群、群集
- 由多台主机构成,但对外之表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机
1.2群集分类
1.2.1负载均衡群集
1.2.2高可用群集
- 提高应用系统的可靠性、尽可能减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
- HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。例如,“故障切换”,“双热备机”等。
1.2.3高性能运算群集
- 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
- 高性能依赖于“分布式运算”、“并行计算”,将多个服务器的CPU、内存整合到一起。例如“云计算”,“网格计算”等
1.3系统性能扩展方式
-
Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务 -
Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster(集群)
1.4负载均衡的结构
- 第一层,负载调度器。通过VIP接收用户的请求,再通过调度算法确定要转发的节点服务器。
- 第二层,服务器池。通过RIP接受调度器转发来的请求,并处理请求进行响应。
- 第三层,共享存储。为各个节点服务器提供稳定、一致的文件存取服务,比如NAS+NFS,文件服务器+NFS,分布式对象存储等设备。
1.5集群和分布式
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
- 集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的。
- 分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。
PS: 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成 同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪 一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同 的业务,如果一个节点垮了,那这个业务可能就会失败。
1.6集群设计原则
-
可扩展性—集群的横向扩展能力 -
性能—访问响应时间 -
容量—单位时间内的最大并发吞吐量(C10K 并发问题) -
可用性—无故障时间 (SLA service level agreement)
1.7集群设计实现
1.7.1基础设施层面
- 提升硬件资源性能—从入口防火墙到后端 web server 均使用更高性能的硬件资源
- 多域名—DNS 轮询A记录解析
- 多入口—将A记录解析到多个公网IP入口
- 多机房—同城+异地容灾
- CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
1.7.2业务层面
二、LVS工作模式和相关命令
2.1 LVS介绍
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名正明), 阿里的四层SLB(Server
Load Balance)是基于LVS+keepalived实现
LVS 官网:http://www.linuxvirtualserver.org/
阿里SLB和LVS:
https://yq.aliyun.com/articles/1803
https://github.com/alibaba/LVS
整个SLB系统由3部分构成:四层负载均衡,七层负载均衡和控制系统
- ?四层负载均衡 ,采用开源软件LVS (linux virtual server),并根据云计算需求对其进行了定制化;该技术已经在阿里巴巴内部业务全面上线应用2年;
- 七层负载均衡,采用开源软件Tengine;该技术已经在阿里巴巴内部业务全面上线应用3年多;·控制系统,用于配置和监控负载均衡系统;
?
2.2?LVS集群的工作模式
- NAT(地址转换)调度器作为所有节点服务器的网关,既作为客户端的访问入口,也作节点服务器响应的访问出口,也就意味着调度器将成为整个集群系统的瓶颈。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 由于在转发过程中做了地址转发,对于节点服务器的安全性比其他模式较好。? ? ? ? ? ? ? ? ? ? ? ? ? 调度器至少有两个网卡,一个承载VIP用于接收客户端的请求,另一个用于使用私有IP在同一个局域网中连接节点服务器。
- DR(直接路由)调度器只负责接收客户端的请求,并根据调度算法转发给节点服务器;节点? 服务器在处理完请求后是直接响应返回给客户端,响应的数据包不经过调度器。? ? ?? ? ? ? ? ? ? ? 调度器和节点服务器使用私有ip在同一个局域网中连接节点服务器。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 性能比NAT模式高
- TUN(IP隧道)架构与DR相似,但是节点服务器分散在互联网各个位置,都具有独立的公网ip,通过专用ip隧道与调度器相互通信。
2.2.1NAT地址转换
lvs-nat:本质是多目标IP的DNAT,通 过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
2.2.2IP隧道
RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是
说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址。
RealServer的通道接口上需要配置VIP地址,以便接收DIP转发过来的数据包,以及作为响应的
报文源IP。
DIP转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而
RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
不支持端口映射
RS的OS须支持隧道功能
一般来说,隧道模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近 折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结 果取回,最后将结果返回给用户。
2.2.3直接路由
- 直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN
模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
- 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道
?直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,
源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
- 源IP/PORT,以及目标IP/PORT均保持不变
?
2.2.4LVS工作模式总结和比较
2.3LVS调度算法
①轮询(Round Robin) 将收到的访问请求按照顺序轮流分配给群集中的各节点 (真实服务器)
均等地对待每台服务器,而不管服务器实际的连接数和系统负载。
②加权轮询(Weighted Round Robin) 根据调度器设置的权重值来分发请求
权重值高的节点优先获得任务并且分配的请求越多
这样可以保证性能高的节点承担更 多请求。
③最少连接(Least Connections) 根据真实服务器已建立的连接数进行分配
将收到的访问请求优先分配给连接数最少的节点
如果所有的服务器节点性能相近,采用这种方式可以更好的均衡负载
④加权最少连接(Weighted Least Connections) 在服务器节点的性能差异较大的 情况下,调度器可以根据节点服务器负载自动调整权重
权重较高的节点将承担更 大比例的活动连接负载。
⑤IP_Hash 根据请求来源的IP地址进行Hash计算,得到后端服务器
这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上
⑥url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器
后端服务器为缓存时比较有效
⑦fair 采用的不是内建负载均衡使用的轮换的均衡算法
而是可以根据页面大小、加载时间长短智能的进行负载均衡
也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配 ?
2.4?LVS工作原理
- VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核
- 级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”
2.5LVS 功能及组织架构
负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性。
2.5.1应用于高访问量的业务
如果您的应用访问量很高,可以通过配置监听规则将流量分发到不同的云服务器 ECS(Elastic
Compute Service 弹性计算服务)实例上。此外,可以使用会话保持功能将同一客户端的请求转发到同一台后端ECS
2.5.2扩展应用程序
可以根据业务发展的需要,随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和App服务器。
2.5.3消除单点故障
可以在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作
2.5.4同城容灾 (多可用区容灾)
- 为了提供更加稳定可靠的负载均衡服务,阿里云负载均衡已在各地域部署了多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内(如:大约30s中断)切换到另外一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。
- 使用负载均衡时,您可以将负载均衡实例部署在支持多可用区的地域以实现同城容灾。此外,建议您结合自身的应用需要,综合考虑后端服务器的部署。如果您的每个可用区均至少添加了一台ECS实例,那么此种部署模式下的负载均衡服务的效率是最高的。
2.6?LVS集群类型中的术语
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)
CIP:Client IP(客户机IP)
VIP:Virtual serve IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP (真实IP)
?
三、ipvsadm 工具
3.1 ipvsadm 工具选项说明
四、NAT模式 LVS负载均衡部署
配置环境
负载调度器:配置双网卡 内网:192.168.59.50(ens33) ?外网卡:12.0.0.1(ens38) 二台WEB服务器集群池:192.168.130.30、192.168.130.40 一台NFS共享服务器:192.168.130.10 客户端:12.0.0.12
5.1部署共享存储(NFS服务器:192.168.130.10)
- NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡 群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支 持的一种协议。
- NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程 到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
echo 'this is kgc web!' > /opt/kgc/index.html
echo 'this is benet web!' > /opt/benet/index.html
vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
--发布共享---
exportfs -rv
5.2配置节点服务器(192.168.130.30、192.168.130.40)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum install nfs-utils rpcbind -y
showmount -e 192.168.130.10
systemctl start rpcbind
systemctl enable rpcbind
--192.168.130.30---
mount.nfs 192.168.130.10:/opt/kgc /var/www/html
vim /etc/fstab
192.168.130.10:/opt/kgc /var/www/html nfs defaults,_netdev 0 0
--192.168.130.40---
mount.nfs 192.168.130.10:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html
vim /etc/fstab
192.168.130.10:/opt/benet /var/www/html nfs defaults,_netdev 0 0
5.3配置负载调度器(内网关 ens33:192.168130.50,外网关 ens36:12.0.0.1)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(1)配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.130.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
(2)加载LVS内核模块
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
(3)安装ipvsadm 管理工具
yum -y install ipvsadm
--启动服务前须保存负载分配策略---
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
(4)配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
ipvsadm -C #清除原有策略
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.130.30:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.130.40:80 -m
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /opt/ipvsadm #保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.1:80 -r 192.168.130.10:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清空策略)
systemctl start ipvsadm #启动服务(根据/etc/sysconfig/ipvsadm重建配置)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
5.4测试效果
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点(或者关闭Web服务的连接保持)。
?
|