Nginx的負(fù)載均衡策略
個人博客地址:
擁抱ChatGPT,國內(nèi)訪問網(wǎng)站:
共六種: 輪詢、權(quán)重、ip_hash、least_conn、fair、url_hash
http {
upstream backend {
? server backend1.example.com;
? server backend2.example.com;
? server backend3.example.com;
}
server {
? listen 80;
? server_name example.com;
? location / {
? ? ?proxy_pass http://backend;
? }
}
}
2、權(quán)重(Weight)負(fù)載均衡策略:通過為每個后端服務(wù)器分配不同的權(quán)重,將請求按照權(quán)重比例分配到不同的后端服務(wù)器,以實現(xiàn)負(fù)載均衡。例如,如果后端服務(wù)器A的權(quán)重是3,后端服務(wù)器B的權(quán)重是2,則在處理請求時,服務(wù)器A會收到3/(3+2)=60%的請求,而服務(wù)器B會收到?。玻ǎ常玻?0%的請求。
http {
upstream backend {
? server backend1.example.com weight=5;
? server backend2.example.com weight=10;
? server backend3.example.com weight=5;
}
server {
? listen 80;
? server_name example.com;
? location / {
? ? ?proxy_pass http://backend;
? }
}
}
3、IP散列(ip_hash)負(fù)載均衡策略:使用客戶端的IP地址來計算散列值,將同一個IP地址的請求發(fā)送到同一個后端服務(wù)器上,以實現(xiàn)會話保持(Session Persistence)。
http {
upstream backend {
? ip_hash;
? server backend1.example.com;
? server backend2.example.com;
? server backend3.example.com;
}
server {
? listen 80;
? server_name example.com;
? location / {
? ? ?proxy_pass http://backend;
? }
}
}
4、最少連接數(shù)(least_conn)負(fù)載均衡策略:將請求發(fā)送到當(dāng)前連接數(shù)最少的后端服務(wù)器上,以達(dá)到最優(yōu)的負(fù)載均衡效果。
http {
upstream backend {
? least_conn;
? server backend1.example.com;
? server backend2.example.com;
? server backend3.example.com;
}
server {
? listen 80;
? server_name example.com;
? location / {
? ? ?proxy_pass http://backend;
? }
}
} ?
5、公平(fair)負(fù)載均衡策略:將請求基于當(dāng)前后端服務(wù)器的處理速度,將請求發(fā)送到當(dāng)前處理速度最快的后端服務(wù)器上,以充分利用服務(wù)器資源并提高響應(yīng)速度。
http {
upstream backend {
?server backend1.example.com;
?server backend2.example.com;
?fair;
}
server {
?listen 80;
?location / {
? ?proxy_pass http://backend;
?}
}
} ?
6、URL散列(url_hash)負(fù)載均衡策略:使用客戶端請求中的URL地址計算散列值,并將同一個URL地址的請求發(fā)送到同一個后端服務(wù)器上,以實現(xiàn)會話保持(Session Persistence)和動態(tài)負(fù)載均衡(Dynamic Load Balancing)功能。
http {
upstream backend {
?server backend1.example.com;
?server backend2.example.com;
?hash $request_uri;
?hash_method crc32;
}
server {
?listen 80;
?location / {
? ?proxy_pass http://backend;
?}
}
}