共计 15665 个字符,预计需要花费 40 分钟才能阅读完成。
一、负载均衡集群介绍
1、集群
① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其 任务调度 则是集群系统中的核心技术。
② 集群是一组 相互独立的、通过高速网络互联 的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
③ 集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性。
2、负载均衡集群技术
① 负载均衡(Load Balance):负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在 计算机集群中尽可能平均地分摊处理。
② 负载通常包括 应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。对于网络流量负载, 当网络服务程序接受了高入网流量,以致无法迅速处理,这时,网络流量就会发送给在其它节点上运行的网络服务程序。也可根据服务器的承载能力,进行服务请求的分发,从而使用户的请求得到更快速的处理。
3、负载均衡集群技术的实现
负载均衡(Load Balance)
负载均衡技术类型:基于 4 层负载均衡技术 和基于 7 层负载均衡技术
负载均衡实现方式:硬件负载均衡设备或者软件负载均衡
硬件负载均衡产品:F5 BIG-IP、Citrix Netscaler、深信服、Array、Radware
软件负载均衡产品: LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(apache traffic server)
4、图示
二、lvs 的介绍
1、lvs
(1)LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。 现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4 内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。
(2)LVS 自从 1998 年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用 LVS 技术实现高可伸缩的、高可用的网络服务,例如 WWW 服务、Cache 服务、DNS 服务、FTP 服务、MAIL 服务、视频 / 音频点播服务等等,有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例如:Linux 的门户网站(www.linux.com)、向 RealPlayer 提供音频视频服务而闻名的 Real 公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
(3)LVS 软件作用:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
2、优缺点:
高并发连接:LVS 基于内核网络层面工作,有超强的承载能力和并发处理能力。单台 LVS 负载均衡器,可支持上万并发连接。
稳定性强:是工作在网络 4 层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和 cpu 资源消耗极低。
成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS 只需一台服务器和就能免费部署使用,性价比极高。
配置简单:LVS 配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为 LVS 工作在 4 层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、DNS、ftp 服务等等
缺点:工作在 4 层,不支持 7 层规则修改,机制过于庞大,不适合小规模应用。
3、LVS 核心组件和专业术语
(1)核心组件
LVS 的管理工具和内核模块 ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的 RS 等;
ipvs:工作于内核上的 netfilter INPUT 钩子之上的程序,可根据用户定义的集群实现请求转发;
(2)专业术语
VS:Virtual Server #虚拟服务
Director, Balancer #负载均衡器、分发器
RS:Real Server #后端请求处理服务器
CIP: Client IP #用户端 IP
VIP:Director Virtual IP #负载均衡器虚拟 IP
DIP:Director IP #负载均衡器 IP
RIP:Real Server IP #后端请求处理服务器 IP
(3)图解
4、LVS 工作内核模型及工作模式
① 当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。
② 当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。
③ LVS 由用户空间的 ipvsadm 和内核空间的 IPVS 组成,ipvsadm 用来定义规则,IPVS 利用 ipvsadm 定义的规则工作,IPVS 工作在 INPUT 链上, 当数据包到达 INPUT 链时,首先会被 IPVS 检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
④ 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往 POSTROUTING 链。
⑤ 最后经由 POSTROUTING 链发往后端服务器。
图解
三、LVS 负载均衡四种工作模式
1、NAT 工作模式
(1)介绍
Virtual Server via NAT(VS-NAT): 用 地址翻译 实现虚拟服务器。地址转换器有能被外界访问到的合法 IP 地址, 它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身, 当外界包送到转换器时, 它能判断出应该将包送到内部网的哪个节点。优点是节省 IP 地址, 能对内部进行伪装; 缺点是效率低, 因为返回给请求方的流量经过转换器。
(2)工作流程
(a). 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的 源 IP 为 CIP,目标 IP 为 VIP
(b). PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(c). IPVS 比对数据包请求的服务 是否为集群服务 ,若是, 修改数据包的目标 IP 地址为后端服务器 IP,然后将数据包发至 POSTROUTING 链 。此时报文的 源 IP 为 CIP,目标 IP 为 RIP
(d). POSTROUTING 链通过选路,将数据包 发送给 Real Server
(e). Real Server 比对发现目标为自己的 IP,开始 构建响应报文 发回给 Director Server。此时报文的 源 IP 为 RIP,目标 IP 为 CIP
(f). Director Server 把 RS 来到响应包,通过 FORWORD 转发给 client 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。此时报文的 源 IP 为 VIP,目标 IP 为 CIP
(3)图解
2、DR 工作模式
(1)介绍
Virtual Server via Direct Routing(VS-DR): 用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在 同一个网段时 可以用此方法, 控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。
(2)工作原理:
DR 和 REAL SERVER 都使用同一个 IP 对外服务。但只有 DR 对 ARP 请求进行响应,所有 REAL SERVER 对本身这个 IP 的 ARP 请求保持静默。也就是说,网关会把对这个服务 IP 的请求全部定向给 DR,而 DR 收到数据包后根据调度算法,找出对应的 REAL SERVER,把目的 MAC 地址 改为 REAL SERVER 的 MAC 并发给这台 REAL SERVER。这时 REAL SERVER 收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于 DR 要对二层包头进行改换,所以 DR 和 REAL SERVER 之间必须在一个广播域,也可以简单的理解为在同一台交换机上
(3)工作流程
(a) 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的 源 IP 为 CIP,目标 IP 为 VIP
(b) PREROUTING 检查发现数据包的目标 IP 是本机,将 数据包送至 INPUT 链
(c) IPVS 比对数据包请求的服务 是否为集群服务 ,若是,将请求报文中的 源 MAC 地址修改为 DIP 的 MAC 地址,将目标 MAC 地址修改 RIP 的 MAC 地址 ,然后将数据包 发至 POSTROUTING 链 。此时的源IP 和目的 IP 均未修改,仅修改了源 MAC 地址 为 DIP 的 MAC 地址,目标 MAC 地址 为 RIP 的 MAC 地址
(d) 由于 DS 和 RS在同一个网络中 ,所以是 通过二层,数据链路层 来传输。POSTROUTING 链检查目标 MAC 地址为 RIP 的 MAC 地址,那么此时数据包将会发至 Real Server。
(e) RS发现请求报文的 MAC 地址是 自己的 MAC 地址 ,就接收此报文。处理完成之后,将响应报文通过lo 接口 传送给 eth0 网卡然后向外发出。此时的 源 IP 地址为 VIP,目标 IP 为 CIP
(f) 响应报文最终送达至客户端
(4)特点
① 保证前端路由将目标地址为 VIP 报文统统发给 Director Server,而不是 RS
② RS 可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对 RIP 进行直接访问
③ RS 跟 Director Server 必须在同一个物理网络中
④ 所有的请求报文经由 Director Server,但 响应报文必须不能进过 Director Server
⑤ 不支持地址转换,也不支持端口映射
⑥ RS 可以是大多数常见的操作系统
⑦ RS 的网关绝不允许指向 DIP(因为我们不允许他经过 director)
⑧ RS 上的 lo 接口配置 VIP 的 IP 地址
(5)工作流程图解
3、TUN 工作模式
1、定义
用 IP 隧道技术 实现虚拟服务器。这种方式是在集群的节点不在 同一个网段 时可用的转发机制, 是将 IP 包封装在其他网络流量中的方法。为了安全的考虑, 应该使用隧道技术中的 VPN, 也可使用租用专线。 集群所能提供的服务是基于 TCP/IP 的 Web 服务、Mail 服务、News 服务、DNS 服务、Proxy 服务器等等.
TUN 模式: 采用 NAT 技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过 IP 隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN 技术后,集群系统的最大吞吐量可以提高 10 倍
2、工作流程
(a) 客户端将请求发往前端的负载均衡器,请求报文 源地址是 CIP,目标地址为 VIP。
(b) 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的 首部再封装一层 IP 报文 , 将 源地址改为 DIP,目标地址改为 RIP,并将此包发送给 RS。
(c) RS 收到请求报文后,会首先拆开第一层封装, 然后发现里面还有一层 IP 首部的目标地址是自己 lo 接口上的 VIP,所以会处理次请求报文,并将响应报文 通过 lo 接口送给 eth0 网卡直接发送给客户端。注意:需要设置 lo 接口的 VIP 不能在共网上出现
3、图解
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148270p2.htm
4、full-nat 工作模式
vlvs-fullnat(双向转换)
通过请求报文的 源地址为 DIP,目标为 RIP来实现转发:对于响应报文而言,修改 源地址为 VIP,目标地址为 CIP来实现转发:
CIP –> DIP VIP –> RIP
架构特点:这是一种对 nat 模型的改进,是一个扩展,使得 RS 与 Director 可以处于不同网络。
(1)RIP,DIP 可以使用私有地址;
(2)RIP 和 DIP 可以不再同一个网络中,且 RIP 的网关未必需要指向 DIP;
(3)支持端口映射;
(4)RS 的 OS 可以使用任意类型;
(5)请求报文经由 Director,响应报文也经由 Director
5、四者的区别
机器名称 | IP 配置 | 服务角色 | 备注 |
lvs-server | VIP:172.16.100.1 DIP:192.168.100.1 | 负载均衡器 | 开启路由功能 (VIP 桥接、DIP 仅主机) |
rs01 | RIP:192.168.100.2 | 后端服务器 | 网关指向 DIP(仅主机) |
rs02 | RIP:192.168.100.3 | 后端服务器 | 网关指向 DIP(仅主机)
|
rs03 | RIP:192.168.100.4 | 后端服务器 | 网关指向 DIP(仅主机)
|
lvs-nat 与 lvs-fullnat:请求和响应报文都经由 Director
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 ipvsadm 命令的使用
1、yum install ipvsadm -y #在 LVS-server 安装 lvs 管理软件
程序包:ipvsadm(LVS 管理工具)
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
2、选项
① -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 虚拟服务表计数器清零(清空当前的连接数量等)
五、实现 LVS 持久连接
1、定义
由于 HTTP 是一种无状态协议,每次请求完毕之后就立即断开了,当用户浏览购物网站挑选商品的时候,看到一件商品加入购物车,此过程被重定向到了 REALSERVER1 上面来,当把第二件商品加入购物车又被重定向到了 REALSERVER2 上面,最后结账的时候在 REALSERVER2 上面,只有一件商品,这显然是用户无法接受的,此时就需要一种持久连接机制,来把同一用户的 HTTP 请求在超时时间内都重定向到同一台 REALSERVER,超时时间可以自己定义,比如说 2 个小时,在超时时间内服务器会不断追踪用户的访问请求,把某一用户的所有请求都转发到同一台 REALSERVER 上面
对于电子商务网站来说,用户在挑选商品的时候使用的是 80 端口来浏览的,当付款的时候则是通过 443 的 ssl 加密的方式,当然当用户挑选完商品付款的时候我们当然不希望 https 的 443 跳转到另外一台 REALSERVER,很显然应该是同一 REALSERVER 才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现
2、功能:
无论 ipvs 使用何种 scheduler,其都能够实现在指定时间范围内始终将来自同一个 ip 地址的请求发往同一个 RS;此功能是通过 lvs 持久连接模板实现,其与调度方法无关;
iptables -t mangle -A PREROUTING -d 172.16.100.100 -p tcp –dport 80 -j MARK –set-mark 99
# 在 iptables 打上标记,把 80 端口标记为 99
iptables -t mangle -A PREROUTING -d 172.16.100.100-p tcp –dport 443 -j MARK –set-mark 99
# 在 iptables 打上标记,把 443 端口标记为 99
ipvsadm -A -f 99 -s rr -p
# 在 lvs 上建立基于 99 号标记的虚拟服务
ipvsadm -a -f 99 -r 172.16.100.2 -g
# 设置后端服务地址
pvsadm -a -f 99 -r 172.16.100.3 -g
六、负载均衡集群企业级应用实战 -LVS
实现基于 LVS 负载均衡集群的电商网站架构
前景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的 1000QPS,变为 3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台 LNMP 的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
实验前准备:
1、ipvsadm
yum install ipvsadm -y #在 LVS-server 安装 lvs 管理软件
2、grep -i -C 10 “ipvs” /boot/config-VERSION-RELEASE.x86_64 查看内核是否支持 IPVS
3、iptables -F && setenforing 清空防火墙策略,关闭 selinux
实战一:LVS 的 NAT 模式实现负载均衡
实战架构图:
1、环境准备:
机器名称 | IP 配置 | 服务角色 | 备注 |
lvs-server | VIP:172.17.1.6 DIP:192.168.30.106 | 负载均衡器 | 开启路由功能 (VIP 桥接、DIP 仅主机) |
rs01 | RIP:192.168.30.107 | 后端服务器 | 网关指向 DIP(仅主机) |
rs02 | RIP:192.168.30.7 | 后端服务器 | 网关指向 DIP(仅主机) |
注意:确保 rs 在一个网段,且只有一个网段
2、在 directory 负载均衡器上
yum -y install ipvsadm
① 开启一个基于 80 端口的虚拟服务 vip,调度方式为 wrr
ipvsadm -A -t 172.17.1.6:80 -s wrr
② 配置 web 服务后端 real server 为 nat 工作方式 权重为 1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.107:80 -m -w 1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.7:80 -m -w 1
③ 修改内核配置,开启路由转发
vim /etc/sysctl.conf 该一行
net.ipv4.ip_forward = 1
sysctl -p 读一些,使其生效
3、在两台 real server 上设置
① 开启实现准备好的 web 网页服务
systemctl start nginx
systemctl start php-mysql
systemctl start mariadb
② 把网关指向 directory
route add default gw 192.168.30.106
4、自己的 windows 做客户端,通过 vip 172.17.1.6 访问 web 服务,调度成功
实战二:LVS 的 DR 模式实现负载均衡
实战架构图:
1、环境准备
机器名称 | IP 配置 | 服务角色 | 备注 |
lvs-server | VIP:172.17.100.100 | 负载均衡器 | 开启路由功能 (VIP 桥接) |
rs01 | RIP:172.17.1.7 | 后端服务器 | 网关指向 DIP(桥接) |
rs02 | RIP:172.17.22.22 | 后端服务器 | 网关指向 DIP(桥接) |
注意:lvs-server 和 rs 要在一个网段,rs 只有一个网段
2、在 lvs-server 上设置
① 配置 VIP 到本地网卡别名,广播只自己响应
ifconfig eth0:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
route add -host 172.17.100.100 dev eth0:0 给网卡别名指向网关
② ipvsadm 策略配置
开启一个基于 80 端口的虚拟服务,调度方式为 wrr
ipvsadm -A -t 172.17.100.100:80 -s wrr
配置 web 服务后端 real server 为 DR 工作方式 权重为 1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.22.22:80 -g -w 1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.1.6:80 -g -w 1
3、real server 上配置
① 配置 VIP 到本地回环网卡 lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
② 使 RS “ 闭嘴 ”
echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略 ARP 广播
echo “1” > /proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭 arp 应答
1:仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
③ 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p 读一下,使其生效
4、开启实现准备好的 web 网页服务
systemctl start nginx
systemctl start php-mysql
systemctl start mariadb
5、效果验证
① 可分别在 rs1 和 rs2 建立 2 个不同内容,统一路径的 test.html 测试文件,测试负载均衡功能
在 RS01 上 vim ../test.html
real server 1
在 RS01 上 vim ../test.html
real server 1
② 打开 http://172.17.1.6/,并在 director 上用 ipvsadm -L - n 观察访问连接
③ 用另外一台测试机,用 ab 压力测试工具,测试经过负载均衡后的服务器容量
实战三:实现 80、443 端口都可访问服务,且 LVS 实现持久连接
1、环境准备
机器名称 | IP 配置 | 服务角色 | 备注 |
lvs-server | VIP:172.17.100.100 | 负载均衡器 | 开启路由功能 (VIP 桥接) |
rs01 | RIP:172.17.1.7 | 后端服务器 | 网关指向 DIP(桥接) |
rs02 | RIP:172.17.22.22 | 后端服务器 | 网关指向 DIP(桥接) |
2、在 vs 上设置:
① 在 iptables 打上标记,把 80 端口标记为 99
iptables -t mangle -A PREROUTING -d 172.17.100.100 -p tcp –dport 80 -j MARK –set-mark 99
在 iptables 打上标记,把 443 端口标记为 99
iptables -t mangle -A PREROUTING -d 172.17.100.100-p tcp –dport 443 -j MARK –set-mark 99
② 在 lvs 上建立基于 99 号标记的虚拟服务
ipvsadm -A -f 99 -s rr -p
设置后端服务地址,用 DR 模式
ipvsadm -a -f 99 -r 172.17.1.7 -g
ipvsadm -a -f 99 -r 172.17.22.22 -g
解析:-p 就是持久连接
3、在 rs 准备好了的 web 服务,开启 80、443 端口
关于 ssl 443 加密的设置
4、测试,自己 windows 做客户端,访问 http://172.17.1.6/
访问 http://172.17.1.6/
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148270.htm
一、负载均衡集群介绍
1、集群
① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其 任务调度 则是集群系统中的核心技术。
② 集群是一组 相互独立的、通过高速网络互联 的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
③ 集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性。
2、负载均衡集群技术
① 负载均衡(Load Balance):负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在 计算机集群中尽可能平均地分摊处理。
② 负载通常包括 应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。对于网络流量负载, 当网络服务程序接受了高入网流量,以致无法迅速处理,这时,网络流量就会发送给在其它节点上运行的网络服务程序。也可根据服务器的承载能力,进行服务请求的分发,从而使用户的请求得到更快速的处理。
3、负载均衡集群技术的实现
负载均衡(Load Balance)
负载均衡技术类型:基于 4 层负载均衡技术 和基于 7 层负载均衡技术
负载均衡实现方式:硬件负载均衡设备或者软件负载均衡
硬件负载均衡产品:F5 BIG-IP、Citrix Netscaler、深信服、Array、Radware
软件负载均衡产品: LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(apache traffic server)
4、图示
二、lvs 的介绍
1、lvs
(1)LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。 现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4 内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。
(2)LVS 自从 1998 年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用 LVS 技术实现高可伸缩的、高可用的网络服务,例如 WWW 服务、Cache 服务、DNS 服务、FTP 服务、MAIL 服务、视频 / 音频点播服务等等,有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例如:Linux 的门户网站(www.linux.com)、向 RealPlayer 提供音频视频服务而闻名的 Real 公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
(3)LVS 软件作用:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
2、优缺点:
高并发连接:LVS 基于内核网络层面工作,有超强的承载能力和并发处理能力。单台 LVS 负载均衡器,可支持上万并发连接。
稳定性强:是工作在网络 4 层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和 cpu 资源消耗极低。
成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS 只需一台服务器和就能免费部署使用,性价比极高。
配置简单:LVS 配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为 LVS 工作在 4 层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、DNS、ftp 服务等等
缺点:工作在 4 层,不支持 7 层规则修改,机制过于庞大,不适合小规模应用。
3、LVS 核心组件和专业术语
(1)核心组件
LVS 的管理工具和内核模块 ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的 RS 等;
ipvs:工作于内核上的 netfilter INPUT 钩子之上的程序,可根据用户定义的集群实现请求转发;
(2)专业术语
VS:Virtual Server #虚拟服务
Director, Balancer #负载均衡器、分发器
RS:Real Server #后端请求处理服务器
CIP: Client IP #用户端 IP
VIP:Director Virtual IP #负载均衡器虚拟 IP
DIP:Director IP #负载均衡器 IP
RIP:Real Server IP #后端请求处理服务器 IP
(3)图解
4、LVS 工作内核模型及工作模式
① 当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。
② 当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。
③ LVS 由用户空间的 ipvsadm 和内核空间的 IPVS 组成,ipvsadm 用来定义规则,IPVS 利用 ipvsadm 定义的规则工作,IPVS 工作在 INPUT 链上, 当数据包到达 INPUT 链时,首先会被 IPVS 检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
④ 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往 POSTROUTING 链。
⑤ 最后经由 POSTROUTING 链发往后端服务器。
图解
三、LVS 负载均衡四种工作模式
1、NAT 工作模式
(1)介绍
Virtual Server via NAT(VS-NAT): 用 地址翻译 实现虚拟服务器。地址转换器有能被外界访问到的合法 IP 地址, 它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身, 当外界包送到转换器时, 它能判断出应该将包送到内部网的哪个节点。优点是节省 IP 地址, 能对内部进行伪装; 缺点是效率低, 因为返回给请求方的流量经过转换器。
(2)工作流程
(a). 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的 源 IP 为 CIP,目标 IP 为 VIP
(b). PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(c). IPVS 比对数据包请求的服务 是否为集群服务 ,若是, 修改数据包的目标 IP 地址为后端服务器 IP,然后将数据包发至 POSTROUTING 链 。此时报文的 源 IP 为 CIP,目标 IP 为 RIP
(d). POSTROUTING 链通过选路,将数据包 发送给 Real Server
(e). Real Server 比对发现目标为自己的 IP,开始 构建响应报文 发回给 Director Server。此时报文的 源 IP 为 RIP,目标 IP 为 CIP
(f). Director Server 把 RS 来到响应包,通过 FORWORD 转发给 client 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。此时报文的 源 IP 为 VIP,目标 IP 为 CIP
(3)图解
2、DR 工作模式
(1)介绍
Virtual Server via Direct Routing(VS-DR): 用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在 同一个网段时 可以用此方法, 控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。
(2)工作原理:
DR 和 REAL SERVER 都使用同一个 IP 对外服务。但只有 DR 对 ARP 请求进行响应,所有 REAL SERVER 对本身这个 IP 的 ARP 请求保持静默。也就是说,网关会把对这个服务 IP 的请求全部定向给 DR,而 DR 收到数据包后根据调度算法,找出对应的 REAL SERVER,把目的 MAC 地址 改为 REAL SERVER 的 MAC 并发给这台 REAL SERVER。这时 REAL SERVER 收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于 DR 要对二层包头进行改换,所以 DR 和 REAL SERVER 之间必须在一个广播域,也可以简单的理解为在同一台交换机上
(3)工作流程
(a) 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的 源 IP 为 CIP,目标 IP 为 VIP
(b) PREROUTING 检查发现数据包的目标 IP 是本机,将 数据包送至 INPUT 链
(c) IPVS 比对数据包请求的服务 是否为集群服务 ,若是,将请求报文中的 源 MAC 地址修改为 DIP 的 MAC 地址,将目标 MAC 地址修改 RIP 的 MAC 地址 ,然后将数据包 发至 POSTROUTING 链 。此时的源IP 和目的 IP 均未修改,仅修改了源 MAC 地址 为 DIP 的 MAC 地址,目标 MAC 地址 为 RIP 的 MAC 地址
(d) 由于 DS 和 RS在同一个网络中 ,所以是 通过二层,数据链路层 来传输。POSTROUTING 链检查目标 MAC 地址为 RIP 的 MAC 地址,那么此时数据包将会发至 Real Server。
(e) RS发现请求报文的 MAC 地址是 自己的 MAC 地址 ,就接收此报文。处理完成之后,将响应报文通过lo 接口 传送给 eth0 网卡然后向外发出。此时的 源 IP 地址为 VIP,目标 IP 为 CIP
(f) 响应报文最终送达至客户端
(4)特点
① 保证前端路由将目标地址为 VIP 报文统统发给 Director Server,而不是 RS
② RS 可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对 RIP 进行直接访问
③ RS 跟 Director Server 必须在同一个物理网络中
④ 所有的请求报文经由 Director Server,但 响应报文必须不能进过 Director Server
⑤ 不支持地址转换,也不支持端口映射
⑥ RS 可以是大多数常见的操作系统
⑦ RS 的网关绝不允许指向 DIP(因为我们不允许他经过 director)
⑧ RS 上的 lo 接口配置 VIP 的 IP 地址
(5)工作流程图解
3、TUN 工作模式
1、定义
用 IP 隧道技术 实现虚拟服务器。这种方式是在集群的节点不在 同一个网段 时可用的转发机制, 是将 IP 包封装在其他网络流量中的方法。为了安全的考虑, 应该使用隧道技术中的 VPN, 也可使用租用专线。 集群所能提供的服务是基于 TCP/IP 的 Web 服务、Mail 服务、News 服务、DNS 服务、Proxy 服务器等等.
TUN 模式: 采用 NAT 技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过 IP 隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN 技术后,集群系统的最大吞吐量可以提高 10 倍
2、工作流程
(a) 客户端将请求发往前端的负载均衡器,请求报文 源地址是 CIP,目标地址为 VIP。
(b) 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的 首部再封装一层 IP 报文 , 将 源地址改为 DIP,目标地址改为 RIP,并将此包发送给 RS。
(c) RS 收到请求报文后,会首先拆开第一层封装, 然后发现里面还有一层 IP 首部的目标地址是自己 lo 接口上的 VIP,所以会处理次请求报文,并将响应报文 通过 lo 接口送给 eth0 网卡直接发送给客户端。注意:需要设置 lo 接口的 VIP 不能在共网上出现
3、图解
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148270p2.htm