百万级负载架构是大型架构经常涉及的,下面我重点来详解如何实现百万级负载架构@mikechen
百万级并发架构
在大型网站、或高流量系统中,如何实现高并发、高可用、负载均衡是架构师必须面对的问题。
今天,我们来详解一套实战验证无数次的高并发架构组合:LVS + Nginx + Keepalived。
这套解决方案,被广泛用于电商、直播、门户…等对高可用性要求极高的业务中。
整体架构,如下图所示:
LVS集群作为最前端入口,负责四层负载均衡。
Nginx集群作为中间层,负责七层负载均衡、反向代理、静态资源处理。
后端多台Web/应用服务器集群。
Keepalived确保LVS层和Nginx层的高可用。
LVS
LVS(Linux Virtual Server):是一种基于Linux内核的四层负载均衡解决方案,主要用于将外部请求高效地分发到后端服务器集群中。
LVS 凭借内核级转发、极高的性能和稳定性,成为大型互联网和高可用集群的首选流量分发组件。
LVS 直接在内核空间处理转发,极大减少了上下文切换和资源消耗,单机可支撑百万级并发连接。
LVS 集群 (LVS Cluster):LVS Master (Director Server)+LVS Backup (Director Server)。
LVS Master:负责接收所有VIP上的请求,并通过LVS的DR模式(推荐),将请求直接转发给Nginx集群中Nginx服务器。
LVS Backup:处于待命状态,一旦Master发生故障。
Keepalived会提升Backup为Master,并接管VIP,实现服务无缝切换。
Nginx
Nginx接收LVS转发的请求,并进行七层处理。
比如:HTTP请求解析、URL重写、SSL卸载、会话保持、缓存…等。
worker_processes auto; events { worker_connections 10240; use epoll; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; gzip_types text/plain application/json application/javascript text/css; upstream backend { server 192.168.10.101:8080 max_fails=2 fail_timeout=10s; server 192.168.10.102:8080 max_fails=2 fail_timeout=10s; keepalive 32; } server { listen 80; server_name localhost; location / { proxy_pass http://backend; } location /health { return 200 'ok'; add_header Content-Type text/plain; } } }
Nginx再将请求,负载均衡到后端的Web/App服务器集群。
Keepalived
Keepalived 是一个用于实现服务高可用性(High Availability,HA)的软件,主要在 Linux 平台上运行。
LVS虽然性能卓越,但LVS Director Server本身也存在单点故障问题。
为了解决这个问题,我们需要引入Keepalived,为LVS集群提供高可用性。
与 LVS 结合,实现 LVS 节点的主备高可用,确保 VIP 始终可用。
与 Nginx 结合,保证 Nginx 故障后,VIP 自动切换至备用节点。