負載均衡,單從字面上的意思來理解就可以解釋N臺服務器平均分擔負載,不會因為某臺服務器負載高宕機和某臺服務器閑置的情況亥鬓。那么負載均衡的前提就是要2臺以上服務器才能實現(xiàn)。
由于沒有服務器域庇,所以本次測試直接host指定域名嵌戈,服務器不夠,我們用nodejs監(jiān)聽了三個端口(8881,8882,8888)來模擬多臺服務器听皿。nginx監(jiān)聽80端口作為主服務器熟呛。
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('server 8881');
}).listen(8881);
// 終端打印如下信息
console.log('Server running at http://127.0.0.1:8881/');
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('server 8882');
}).listen(8882);
// 終端打印如下信息
console.log('Server running at http://127.0.0.1:8882');
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('server 8888');
}).listen(8888);
// 終端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
測試域名yongle.com
A服務器監(jiān)聽80端口(主)
B服務器監(jiān)聽8881端口(從)
C服務器監(jiān)聽8882端口(從)
D服務器監(jiān)聽8888端口(從)
A服務器做為主服務器,域名直接解析到A服務器( 127.0.0.1:80)上尉姨,由A服務器負載均衡到B服務器( 127.0.0.1:8881)庵朝、C服務器( 127.0.0.1:8882)和D服務器( 127.0.0.1:8888)上。
A服務器nginx.conf設置打開nginx.conf又厉,文件位置在nginx安裝目錄的conf目錄下九府。在http段加入以下代碼
upstream yongle.com {
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8888;
}
server{
listen 80;
server_name yongle.com;
location / {
proxy_pass http://yongle.com;
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即可完成負載均衡
我們把域名解析到A服務器,然后由A服務器轉發(fā)到B服務器C服務器與D服務器覆致,那么A服務器只做一個轉發(fā)功能侄旬,現(xiàn)在我們讓A服務器也提供站點服務。
如果添加主服務器到upstream中煌妈,那么可能會有以下兩種情況發(fā)生:
1儡羔、主服務器轉發(fā)到了其它IP上婆排,其它IP服務器正常處理;
2笔链、主服務器轉發(fā)到了自己IP上段只,然后又進到主服務器分配IP那里,假如一直分配到本機鉴扫,則會造成一個死循環(huán)赞枕。
怎么解決這個問題呢?因為80端口已經(jīng)用來監(jiān)聽負載均衡的處理坪创,那么本服務器上就不能再使用80端口來處理yongle.com的訪問請求炕婶,必須重新監(jiān)聽一個新的端口。于是我們把主服務器的nginx.conf加入以下一段代碼:
server {
listen 8000;
server_name yongle.com;
location / {
root html;
index index.html index.htm;
}
}
把主服務器添加到upstream中
upstream yongle.com {
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8888;
server 127.0.0.1:8000;
}
到這里我們就完成了把主服務器也加入到了負載均衡中莱预。
- Nginx負載均衡有4種方案配置
1柠掂、輪詢
輪詢即Round Robin,根據(jù)Nginx配置文件中的順序依沮,依次把客戶端的Web請求分發(fā)到不同的后端服務器上
2涯贞、最少連接 least_conn;
Web請求會被轉發(fā)到連接數(shù)最少的服務器上。
3危喉、IP地址哈希 ip_hash;
前述的兩種負載均衡方案中宋渔,同一客戶端連續(xù)的Web請求可能會被分發(fā)到不同的后端服務器進行處理,因此如果涉及到會話Session辜限,那么會話會比較復雜皇拣。常見的是基于數(shù)據(jù)庫的會話持久化。要克服上面的難題薄嫡,可以使用基于IP地址哈希的負載均衡方案氧急。這樣的話,同一客戶端連續(xù)的Web請求都會被分發(fā)到同一服務器進行處理毫深。
4吩坝、基于權重 weight
基于權重的負載均衡即Weighted Load Balancing,這種方式下费什,我們可以配置Nginx把請求更多地分發(fā)到高配置的后端服務器上钾恢,把相對較少的請求分發(fā)到低配服務器手素。