百萬(wàn)級(jí)并發(fā)架構(gòu)設(shè)計(jì):LVS+Nginx+Keepalived 方案詳解!
隨著互聯(lián)網(wǎng)和移動(dòng)應(yīng)用的快速發(fā)展,應(yīng)用的并發(fā)量不斷增加,傳統(tǒng)單機(jī)架構(gòu)已無法滿足大規(guī)模的高并發(fā)需求。
為了應(yīng)對(duì)百萬(wàn)級(jí)并發(fā)訪問,現(xiàn)代化的架構(gòu)設(shè)計(jì)需要具備高可用性、負(fù)載均衡能力和彈性伸縮特性。
LVS(Linux Virtual Server)、Nginx 和 Keepalived ,通過它們的有機(jī)結(jié)合,可以有效地應(yīng)對(duì)高并發(fā)壓力。
如何實(shí)現(xiàn)百萬(wàn)級(jí)負(fù)載架構(gòu)
整體架構(gòu),如下圖所示:
文章預(yù)覽
整體架構(gòu),分工如下:
LVS:前端四層負(fù)載均衡,將流量分發(fā)到 Nginx;
Nginx:中間七層負(fù)載均衡,反向代理到后端應(yīng)用;
Keepalived:監(jiān)控 LVS 和 Nginx,提供 VIP 漂移;
后端應(yīng)用:業(yè)務(wù)服務(wù)器(如 Tomcat、Spring Boot)。
Nginx
Nginx:作為反向代理和負(fù)載均衡器,在 Web 服務(wù)器前提供請(qǐng)求轉(zhuǎn)發(fā)、緩存和 SSL 協(xié)議處理等功能。
Nginx 可以作為前端的負(fù)載均衡器,利用輪詢、最少連接等策略將流量均衡分發(fā)到后端 Web 服務(wù)器。
文章預(yù)覽
Upstream 配置:通過 upstream
配置,Nginx 可以管理一組服務(wù)器,并對(duì)其進(jìn)行負(fù)載均衡。
upstream backend_servers {
# 負(fù)載均衡算法
# least_conn;
# ip_hash;
server <app_server_ip_1>:<app_port> weight=5;
server <app_server_ip_2>:<app_port> weight=5;
# ... 添加更多應(yīng)用服務(wù)器
}
server {
listen <PORT>;
server_name <your_domain_or_VIP>;
location /{
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 其他 proxy 配置
}
# 其他 server 配置
}
Nginx 可以和 LVS 一起工作,提供七層負(fù)載均衡和高級(jí)流量管理。
LVS
LVS (Linux Virtual Server):提供四層負(fù)載均衡服務(wù),負(fù)責(zé)將請(qǐng)求流量分發(fā)到多個(gè)后端 Web 服務(wù)器。
文章預(yù)覽
LVS 是內(nèi)核級(jí)別的負(fù)載均衡,支持對(duì) TCP 和 UDP 流量的高效轉(zhuǎn)發(fā)。
它工作在操作系統(tǒng)的網(wǎng)絡(luò)層,主要負(fù)責(zé)流量的分發(fā)和轉(zhuǎn)發(fā)。
LVS工作原理
LVS 通過將客戶端請(qǐng)求轉(zhuǎn)發(fā)到多個(gè)真實(shí)服務(wù)器(Real Servers,簡(jiǎn)稱 RS),實(shí)現(xiàn)負(fù)載均衡。
LVS 負(fù)責(zé)在請(qǐng)求和響應(yīng)之間進(jìn)行網(wǎng)絡(luò)層的轉(zhuǎn)發(fā),通常采用輪詢、最少連接、加權(quán)輪詢等調(diào)度算法。
常用的調(diào)度算法:
- 輪詢(Round Robin,RR):請(qǐng)求平均分配給所有服務(wù)器。
- 最少連接(Least Connections,LC):選擇連接數(shù)最少的服務(wù)器。
- 加權(quán)輪詢(Weighted Round Robin,WRR):根據(jù)權(quán)重分配請(qǐng)求。
LVS 提供了多種工作模式:
- NAT(Network Address Translation)模式:LVS 修改請(qǐng)求包和響應(yīng)包的源 IP 和目標(biāo) IP,適用于內(nèi)網(wǎng)小型集群。
- DR(Direct Routing)模式:LVS 只修改目標(biāo) MAC 地址,后端服務(wù)器直接向客戶端響應(yīng),性能最好,適用于同網(wǎng)段部署。
- TUN(IP Tunnel)模式:LVS 使用 IP 隧道將流量傳輸給后端服務(wù)器,適用于跨網(wǎng)段部署。
LVS 作為負(fù)載均衡器,需要和 Keepalived 配合使用,以保證虛擬 IP 地址的高可用性。
Keepalived
Keepalived 是一款高可用性管理工具,使用 VRRP 協(xié)議實(shí)現(xiàn)主備 LVS 節(jié)點(diǎn)的 VIP 漂移。
當(dāng)主節(jié)點(diǎn)故障時(shí),VIP 會(huì)自動(dòng)漂移到備節(jié)點(diǎn),確保系統(tǒng)的高可用性。
文章預(yù)覽
Keepalived 通過 VRRP 協(xié)議在主備節(jié)點(diǎn)間共享虛擬 IP 地址。
主節(jié)點(diǎn)通過一定的優(yōu)先級(jí)和健康檢查機(jī)制,決定是否保持 VIP。
如果主節(jié)點(diǎn)失效,備節(jié)點(diǎn)會(huì)通過 Keepalived 獲取 VIP,接管流量。
配置 Keepalived 時(shí),需要為主備 LVS 服務(wù)器配置相同的 VIP 地址。
Keepalived 會(huì)定期檢查 LVS 節(jié)點(diǎn)的健康狀況,如果主節(jié)點(diǎn)出現(xiàn)故障,VIP 會(huì)迅速漂移到備節(jié)點(diǎn)。
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.168.1.100
}
}
最后,整體如下:
+--------------------------++-------------------++------------------+
| LVS LoadBalancer|----|NginxFrontend|-----|WebServers|
|(Virtual IP Address)||(Proxy&Cache)||(Application)|
+--------------------------++-------------------++------------------+
|||
+--------------------++--------------------++-----------------+
|||||
+----------++----------+|
|Keepalived||Keepalived|+-----------+
|(Failover)||(Failover)||Database|
+----------++----------++-----------+
通過 Keepalived 實(shí)現(xiàn) LVS 和 Nginx 的主備切換,保障系統(tǒng)的高可用性。
通過 LVS 和 Nginx 提供四層和七層的流量分發(fā),確保流量均衡地分配到各個(gè) Web 服務(wù)器。