負(fù)載均衡指的是對(duì)請(qǐng)求數(shù)據(jù)包的轉(zhuǎn)發(fā)真竖,從負(fù)載均衡下面的節(jié)點(diǎn)服務(wù)器來(lái)看脐雪,接收到的請(qǐng)求還是來(lái)自訪問(wèn)負(fù)載均衡器
的客戶端的真實(shí)用戶,而反向代理服務(wù)器指的是接收到用戶的請(qǐng)求后恢共,會(huì)代理用戶重新發(fā)起請(qǐng)求代理下的節(jié)點(diǎn)服務(wù)器战秋,最后把數(shù)據(jù)返回給客戶端用戶,在節(jié)點(diǎn)服務(wù)器看來(lái)讨韭,范文的節(jié)點(diǎn)服務(wù)器的客戶端用的就是反向代理服務(wù)器了脂信,而非真實(shí)的網(wǎng)站訪問(wèn)用戶癣蟋。
Nginx http功能模塊
ngx_nginx upstream 負(fù)載均和模塊,可以實(shí)現(xiàn)網(wǎng)站的負(fù)載均衡功能及節(jié)點(diǎn)的健康檢查
ngx_http_proxy_module Proxy模塊狰闪,用于把請(qǐng)求后拋給服務(wù)器節(jié)點(diǎn)或upstream服務(wù)器池
Nginx的upstream支持5種分配方式梢薪。其中,前三種為Nginx原生支持的分配方式尝哆,后兩種為第三方支持的分配方式:
1)rr輪詢
輪詢是upstream的默認(rèn)分配方式秉撇,即每個(gè)請(qǐng)求按照時(shí)間順序輪流分配到不同的后端服務(wù)器,如果某個(gè)后端
服務(wù)器down掉后秋泄,能自動(dòng)剔除琐馆。按照1:1輪詢。
upstream backend {
server 192.168.1.101:88;
server 192.168.1.102:88;
}
2)wrr輪詢
輪詢的加強(qiáng)版恒序,即可以指定輪詢比率瘦麸,weight和訪問(wèn)幾率成正比,主要應(yīng)用于后端服務(wù)器異質(zhì)的場(chǎng)景下歧胁。
upstream backend {
server 192.168.1.101 weight=1;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=3;
}
3)ip_hash (upstream_fair)
每個(gè)請(qǐng)求按照訪問(wèn)ip(即Nginx的前置服務(wù)器或者客戶端IP)的hash結(jié)果分配滋饲,這樣每個(gè)訪客會(huì)固定訪問(wèn)
一個(gè)后端服務(wù)器,可以解決session一致問(wèn)題喊巍。
upstream backend {
ip_hash;
server 192.168.1.101:81;
server 192.168.1.102:82;
server 192.168.1.103:83;
}
注:當(dāng)使用ip_hash時(shí)屠缭,服務(wù)器狀態(tài)不可使用weight和backup
4)fair (第三方的hash模塊)
fair顧名思義,公平地按照后端服務(wù)器的響應(yīng)時(shí)間(rt)來(lái)分配請(qǐng)求崭参,響應(yīng)時(shí)間短即rt小的后端服務(wù)器優(yōu)
先分配請(qǐng)求呵曹。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
fair;
}
5)url_hash
與ip_hash類似,但是按照訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求何暮,使得每個(gè)url定向到同一個(gè)后端服務(wù)器奄喂,主要應(yīng)
用于后端服務(wù)器為緩存時(shí)的場(chǎng)景下。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
hash $request_uri;
hash_method crc32;
}
upstream支持的狀態(tài)參數(shù)
down: 暫停對(duì)該服務(wù)器的調(diào)度
backup: 類似于LVS Sorry Server海洼,當(dāng)所有的非backup的服務(wù)器故障
max_fails: 請(qǐng)求失敗的次數(shù)跨新,默認(rèn)為1
fail_timeout: 在經(jīng)歷max_fails次失敗后,暫停服務(wù)的時(shí)間
[vip: 10.0.0.11]
[LB1 Nginx] [LB2 Nginx]
10.0.0.20 10.0.0.21
web1 web2 phpserver1 phpserver2
10.0.0.22 10.0.0.23 10.0.0.24 10.0.0.24
一坏逢、實(shí)施過(guò)程
后端服務(wù)器部署詳細(xì)過(guò)程:
安裝軟件:
# yum install nginx php php-fpm -y
# vim /etc/nginx/nginx.conf //添加php配置
在server里面添加如下配置:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
修改php-fpm進(jìn)程賬戶并開(kāi)啟php-fpm的進(jìn)程: 端口是9000
#vim /etc/php-fpm.d/www.conf //修改如下參數(shù)域帐,默認(rèn)值是apache
user = nginx
group = nginx
為什么設(shè)置成nginx:
因?yàn)閚ginx.conf配置的賬戶為nginx
# systemctl start php-fpm
前端nginx反向代理服務(wù)器:
upstream web {
server 10.0.0.22 weight=1 max_fails=2 fail_timeout=2;
server 10.0.0.23 max_fails=2 fail_timeout=5 down;
}
upstream phpserver {
server 10.0.0.24 backup;
server 10.0.0.25;
} #上面的配置寫到http里面server外面
server {
listen 80;
server_name www.baidu.com;
location ~* \.html${ #html的配置
proxy_pass http://web;
}
location ~* \.php$ { #php的配置
proxy_pass http://phpserver;
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_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
}
}