2018-07-06筆記(LNMP配置)
要理解負載均衡,必須先搞清楚正向代理和反向代理
\
註:
正向代理,代理的是用戶。
反向代理,代理的是服務器。
一、什麽是負載均衡
負載均衡是用反向代理的原理實現的,代理一臺機器,叫做代理服務器,代理多臺機器就叫做負載均衡。nginx通過proxy_pass_http 配置代理站點,upstream實現負載均衡
當一臺服務器的單位時間內的訪問量越大時,服務器壓力就越大,大到超過自身承受能力時,服務器就會崩潰。為了避免服務器崩潰,讓用戶有更好的體驗,我們通過負載均衡的方式來分擔服務器壓力。
我們可以建立很多很多服務器,組成一個服務器集群,當用戶訪問網站時,先訪問一個中間服務器,在讓這個中間服務器在服務器集群中選擇一個壓力較小的服務器,然後將該訪問請求引入該服務器。如此以來,用戶的每次訪問,都會保證服務器集群中的每個服務器壓力趨於平衡,分擔了服務器壓力,避免了服務器崩潰的情況。
二、負載均衡的幾種常用方式(算法)
(1)、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除
(2)、weight (權重)
指定輪詢權重,weight和訪問比率成正比,用於後端服務器性能不均的情況
(3)、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題
(4)、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配
(5)、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器為緩存時比較有效
三、配置nginx負載均衡
dig是用來進行域名解析的,例如我解析www.qq.com這個域名,使用dig能夠反饋更多的解析信息
[root@lnmp-server ~]# dig www.qq.com ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.qq.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23121 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.qq.com. IN A ;; ANSWER SECTION: www.qq.com. 220 IN A 58.60.9.21 www.qq.com. 220 IN A 59.37.96.63 ;; Query time: 37 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) ;; WHEN: 日 7月 08 20:50:20 CST 2018 ;; MSG SIZE rcvd: 71
現在我們開始配置負載均衡,新建一個虛擬主機配置文件:
[root@lnmp-server ~]# vim /usr/local/nginx/conf/vhost/ld.conf`
增加以下內容,我拿解析到www.qq.com的ip來當服務器做這個實驗:
upstream qq #upstream是一個模塊,需要使用它來定義多個IP YY_com=名字可以任意修改
{
ip_hash; #ip_hash是為了讓同一個用戶始終保持在同一個機器上
#定義兩個服務器的ip,qq.com解析出來的ip
server 58.60.9.21:80;
server 59.37.96.63:80;
}
server
{
listen 80; #定義監聽端口
server_name www.qq.com; #定義域名
location /
{
proxy_pass http://qq; #upstream的名稱,這個名稱代表著upstream裏定義的ip
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
編輯完之後保存退出,先不要重新加載配置文件,先測試一下用本機ip去訪問www.qq.com這個域名看看結果會是什麽:
[root@lnmp-server vhost]# curl -x127.0.0.1:80 www.qq.com
This is default server aaa
檢測是否有錯並重載
[root@lnmp-server ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@lnmp-server ~]# /usr/local/nginx/sbin/nginx -s reload
再用curl測試
[root@lnmp-server vhost]# curl -x127.0.0.1:80 www.qq.com
。。。
</script>
<!-- ?1·?? ??-->
<script>
// ??·?
2018-07-06筆記(LNMP配置)