这是一个比较常见的网络部署架构图,通过LVS+Keepalive做网络层的高可用架构,在应用层通过nginx做应用层细粒度的请求管控,然后根据负载均衡策略将请求转发到后端的tomcat服务。
首先看到这样的图,相信大部分人都能看懂,但是不知道为什么这么部署,这么画,依据到底是什么?大部分人就算有疑问其实都没有真正去理解?
下面我根据我个人最开始的思考,看一下如何去看懂这个图
要想了解这个图,需要了解哪些东西?
1:LVS Keepalive ngixn大概了解是什么,这样协调使用的意义是啥,依据又是啥?
2:举例子说明,这样架构的流程?比如我在电商网上买手机,从购买到成功,在网络架构层面经历了什么(大概,不需要太细节)
3:这样的架构好处是什么
1:LVS服务
LVS(Linux Virtual Server)是一个用于构建高性能、高可用性和可伸缩性的Linux服务器集群的开源软件。它是一个负载均衡器,允许将网络流量分发到多个服务器上,从而提高整个系统的性能和可用性。
以下是一些 LVS 的关键特性和组成部分:
-
负载均衡器:LVS 提供负载均衡服务,将客户端请求分发到多个后端服务器上。这有助于避免单一服务器过载,提高系统的整体性能和可用性。
-
工作模式:LVS 支持不同的负载均衡工作模式,其中最常见的是 NAT 模式、直接路由(Direct Routing)模式和IP隧道(IP Tunneling)模式。
- NAT 模式:LVS 负载均衡器在客户端和服务器之间充当转发器,修改数据包的源和目标地址。
- 直接路由模式:客户端请求通过 LVS 负载均衡器,并直接路由到后端服务器,返回的响应也直接传递给客户端。
- IP 隧道模式:类似于直接路由,但数据包通过 IP 隧道传递,LVS 负载均衡器和后端服务器在不同的子网中。
-
调度算法:LVS 使用不同的调度算法(scheduling algorithms)来确定如何分配请求。常见的调度算法包括轮询(Round Robin)、最小连接数(Least Connections)等。
-
高可用性:LVS 支持高可用性配置,其中多个 LVS 负载均衡器可以配置成热备份,确保系统在一个负载均衡器故障时仍然可用。
-
健康检查:LVS 可以配置用于监测后端服务器状态的健康检查机制,以便自动将请求导向可用的服务器。
LVS 是一个强大的工具,常用于构建大规模的、高性能的网络服务。它可以用于 Web 服务器、邮件服务器、数据库服务器等多种应用场景。由于其开源特性,许多 Linux 发行版都提供了对 LVS 的支持。
总结:LVS其实就是一个网络协调器,可以将网络流量分发到多个服务器(比如linux服务器,或者容器但是本地其实都是同一个内核)
2:Keepalived
作用: Keepalived 是一个用于实现高可用性和故障转移的工具,通常与 LVS 配合使用。它确保在集群中的多个负载均衡器之间进行状态同步,以及在某个负载均衡器失效时,能够将流量切换到另一个正常工作的负载均衡器上。
原理: Keepalived 使用了 VRRP(Virtual Router Redundancy Protocol)协议,允许多个负载均衡器共享一个虚拟 IP 地址。这样,客户端访问虚拟 IP 地址,而 Keepalived 会确保这个虚拟 IP 地址总是映射到当前正常工作的负载均衡器上。
关系
-
协同工作: Keepalived 通常与 LVS 配合使用,以确保高可用性和故障转移。通过 Keepalived,多个负载均衡器能够协同工作,保证即使一个负载均衡器出现故障,流量仍然能够被正确地引导到其他正常工作的负载均衡器上。
-
状态同步: Keepalived 确保在整个集群中的负载均衡器之间保持状态同步,以便它们可以共享相同的配置信息,并在需要时进行流量切换。
简而言之,LVS 是一个负载均衡器,而 Keepalived 是用于实现高可用性和故障转移的工具,它们一起协同工作,以确保在服务器集群中保持平衡和可用性。而且他们一般用于网络层,
3:nginx
Nginx("Engine X"的缩写)是一个高性能的开源反向代理服务器和 Web 服务器。它的主要作用包括:
-
反向代理服务器:
- Nginx 可以作为反向代理服务器,接收客户端的请求,然后将这些请求转发到后端的应用服务器,最终返回响应给客户端。这有助于实现负载均衡、提高安全性,并简化应用服务器的管理。
-
负载均衡:
- Nginx 提供负载均衡的功能,可以将客户端的请求分发到多个应用服务器,从而分担服务器负载,提高整体系统性能和可用性。
-
Web 服务器:
- Nginx 也可以作为静态文件的 Web 服务器,直接提供静态文件的访问,减轻动态应用服务器的负担。它能够高效地处理静态资源,如 HTML、CSS、JavaScript、图像等。
-
SSL/TLS 终结:
- Nginx 可以终结 SSL/TLS 连接,负责处理加密和解密,然后将非加密的流量转发给后端服务器。这有助于减轻应用服务器的负载,并提供更高的安全性。
-
反向代理缓存:
- Nginx 可以缓存后端服务器的响应,从而提高对重复请求的处理速度。这有助于减轻后端服务器的负载,并提高响应速度。
-
反向代理缓解 DDOS 攻击:
- Nginx 可以通过限制请求速率和使用缓存来缓解分布式拒绝服务(DDoS)攻击,提高系统的抗攻击能力。
-
作为 WebSocket 代理:
- Nginx 可以作为 WebSocket 代理,支持 WebSocket 协议,用于实现实时通信应用。
-
日志记录:
- Nginx 具有强大的日志记录功能,可以记录访问日志、错误日志等,有助于进行系统监控和故障排查。
总体而言,Nginx 是一个多功能、高性能的服务器软件,适用于多种场景,从简单的静态文件服务到复杂的负载均衡和反向代理配置。其设计的目标是提供高性能、低资源消耗的服务,因此被广泛用于构建高性能和可扩展的 Web 应用架构。
4:实际应用
在实际运用中,LVS 和 Keepalived 可以与 Nginx 或容器管理平台(如 Kubernetes)配合使用,以构建更完整的负载均衡和高可用性解决方案。
1. 与 Nginx 配合使用
- 负载均衡器层次: LVS 可以工作在更底层的网络层,将请求分发到多个服务器。而 Nginx 则可以工作在应用层,提供更多高级的负载均衡和反向代理功能。
- 组合优势: 将 LVS 和 Nginx 结合使用,可以充分利用 LVS 的性能和效率,同时利用 Nginx 提供的丰富功能,例如 SSL 终结、HTTP/HTTPS 代理、缓存等。
2. 与容器和 Kubernetes 配合使用
- 容器化环境: 在容器化环境中,可以使用 LVS 和 Keepalived 来实现负载均衡和高可用性。这对于确保容器应用的可用性至关重要。
- Kubernetes 中的 Service: Kubernetes 提供了 Service 这一抽象层,它可以自动管理负载均衡和服务的高可用性。在 Kubernetes 中,LVS 和 Keepalived 可以用于底层网络层,而 Kubernetes Service 则可以使用这些负载均衡器。
3. 示例场景
- 传统场景: 在传统的架构中,你可以将 LVS 用作网络层的负载均衡器,将请求分发给多台服务器。同时,Nginx 可以运行在服务器上,提供更高级的应用层负载均衡和代理功能。
- 容器场景: 在容器化环境中,可以使用 LVS 和 Keepalived 配合 Kubernetes,以确保容器服务的高可用性和负载均衡。
总之,具体的架构取决于你的应用需求和场景。LVS 和 Keepalived 是底层的负载均衡和高可用性工具,而 Nginx 和 Kubernetes 则提供更高级的应用层和容器环境的解决方案。在实际运用中,结合使用它们可以构建强大而灵活的系统
从上面我可以得出几点,
1:LVS+ keepalived配合使用,达到快速故障转移的作用,其实就是遇到问题能够及时发现,快速解决。
2:LVS+ keepalived配合使用在网络层
3: nginx作用在应用层,对请求更加细粒度和精确
在回到上面的图
4:总结和举一反三
其实我们已经了解了各个图的含义,现在其实缺少的就是怎么串联起来,
这个时候,举例说明,才能做到逻辑自洽。
以在电商平台购买手机为例
梳理一下:
-
客户端发起请求:
- 你在浏览器中输入网站地址或点击购买手机的链接。
- 浏览器向 LVS(Linux Virtual Server)发送购买手机的请求。
- 信号经过路由器转为电信号,这个时候经过路由器就是物理层
-
LVS 负载均衡:
- LVS 接收到请求后,根据预定义的负载均衡算法和规则,选择一个可用的后端服务器(通常是 Nginx 服务器)。
- LVS 将请求通过网络层的方式,修改数据包的目标 IP 地址,将其转发给被选中的 Nginx 服务器。
- 这个时候其实就到了网络层
-
Nginx 处理请求:
- 被选中的 Nginx 服务器接收到请求。
- Nginx 可以执行以下操作:
- SSL 终结: 如果使用了 SSL,Nginx 可以终结 SSL 连接,解密请求。
- 负载均衡: Nginx 可以根据配置的负载均衡算法将请求分发给多个后端的 Tomcat 服务器。
- 反向代理: Nginx 可以作为反向代理,将请求发送给后端的 Tomcat 服务器。
- 这个时候就是应用层了
-
Tomcat 处理请求:
- 后端的 Tomcat 服务器接收到请求后,执行相应的操作,可能包括:
- 处理购买手机的业务逻辑。
- 与数据库交互,更新库存和订单信息。
- 返回响应给 Nginx。
- 后端的 Tomcat 服务器接收到请求后,执行相应的操作,可能包括:
-
Nginx 返回响应:
- Nginx 收到来自 Tomcat 的响应后,将响应返回给客户端。
- 可能会执行一些附加操作,例如缓存响应、压缩数据等。
- Nginx 收到来自 Tomcat 的响应后,将响应返回给客户端。
-
客户端接收响应:
- 你的浏览器接收到来自 Nginx 的响应,显示购买手机的相关信息。
如果你能仔细看完这个文档,我相信你对上面的网络架构图一定有个新的认知,学习在于积累和平民化,用大白话讲述技术才接地气。