心血來潮,研究一下linux服務器負載均衡的知識點。本來以爲很簡單的一個事情,不想還是研究了大半天的時間,想想還是記錄下來,以防萬一後面再遇到類似的坑。
先來簡單瞭解一下什麼是負載均衡,單從字面上的意思來理解就可以解釋N臺服務器平均分擔負載,不會因爲某臺服務器負載高宕機而某臺服務器閒置的情況。那麼負載均衡的前提就是要有多臺服務器才能實現,也就是兩臺以上即可。
由於沒有自己用的測試服務器,所以就裝了一個虛擬機(VMware),然後在虛擬機中裝了兩臺centos7。
測試用例A:192.168.0.150
測試用例B:192.168.0.151
對了,linux查看本機IP命令:ifconfig
思路:將A作爲主服務器,本地hosts文件中定義一個域名,我這裏用的域名是151net.com。(這個自己隨意在本地定義就好)
在A服務器中打開nginx.conf文件,在http塊內,server塊外面添加
upstream 151net {
server 192.168.0.151:80;
server 192.168.0.150:8088;
}
server{
listen 80;
server_name 151net;
location / {
proxy_pass http://151net/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
保存nginx.conf後重啓nginx服務。
注:A服務器的80端口是用來綁定監聽訪問域名的端口,所以在 upstream中我們使用了8088端口,如果你想吧A服務器也用來做負載的一個服務器的話,下面還得加一個server塊。
server {
listen 8088;
server_name 151net.com;
location / {
root /www/tp5/public;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /www/tp5/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
上面代碼就是表明你將A服務的端口8088綁定到了www目錄下的tp5項目中去了。到了A服務器到這裏就結束了。
然後在B服務器正常對nginx.conf進行配置就好了。
B服務器的nginx.conf
server{
listen 80;
server_name 151net.com;
root /www/tp5/public
index index.php index.html;
}
ok,現在重啓一個B服務器的nginx服務,然後在本地服務器打開151net.com,多刷新兩次,看看效果。大功告成。
除了上面這些簡單的配置之外,順便記錄一下關於nginx負載均衡策略:
哈希法:根據獲取客戶端的IP地址,通過哈希函數計算得到一個數值,用該數值對服務器列表的大小進行取模運算,得到的結果便是客服端要訪問服務器的序號。採用源地址哈希法進行負載均衡,同一IP地址的客戶端,當後端服務器列表不變時,它每次都會映射到同一臺後端服務器進行訪問。
實際配置:ip_hash
將ip_hash添加到upstream塊的第一行即可。
輪詢法:將請求按順序輪流地分配到後端服務器上,它均衡地對待後端的每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。
就是開始默認的方式。
加權隨機法:與加權輪詢法一樣,加權隨機法也根據後端機器的配置,系統的負載分配不同的權重。不同的是,它是按照權重隨機請求後端服務器,而非順序。
實際配置:weight=2
將weight=2放在ip地址之後(server 192.168.0.151:80 weight=2;)
weight後面的數值代表權重,數值越大,表示權重越高。
好了。今天的分享就是這樣子了,後面我會找時間再寫一下負載均衡時候關於session的相關問題。
如果你遇到問題的話,可以給我留言哈,能解決的肯定不會推辭的!哈哈哈