負載均衡(Load Balance)是集羣技術(Cluster)的一種應用。負載均衡可以將工作任務分攤到多個處理單元,從而提高併發處理能力。目前最常見的負載均衡應用是Web負載均衡。根據實現的原理不同,常見的web負載均衡技術包括:DNS輪詢、IP負載均衡和CDN。其中IP負載均衡可以使用硬件設備或軟件方式來實現。
開始搭建
- 創建 SpringBoot 項目
等待創建完成, 第一次可能有點慢 ! - 創建 HelloController.java
package com.nginx.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 使用SpringBoot 項目 測試 Nginx 的負載均衡
* Created by YongXin Xue on 2020/05/31 19:16
*/
@RestController
public class HelloController {
/**
* 使用 Spring EL 讀取配置文件的的參數
* 獲取當前運行項目的端口
*/
@Value("${server.port}")
private Integer port;
@RequestMapping("/hello")
public String hello(){
return "當前項目運行的端口是 : " + port;
}
}
- application.properties配置文件中加人
application.properties
- 配置項目的多實例啓動
修改Nginx的配置文件,添加負載均衡的模塊
- 使用 vim 打開nginx.conf配置文件編輯負載均衡的模塊
vim /usr/local/nginx/conf/nginx.conf
- 添加內容如下:
33 #gzip on;
34 #負載均衡模塊
35 upstream myservers{
36 server 192.168.230.1:8082;
37 server 192.168.230.1:8083;
38 server 192.168.230.1:8084;
39 }
40
41 server {
42 listen 80;
43 server_name localhost;
44
45 #charset koi8-r;
46
47 #access_log logs/host.access.log main;
48
49 location / {
50 #root html;
51 #index index.html index.htm;
52 proxy_pass http://myservers;
53 proxy_connect_timeout 30;
54 }
- 如圖:
- 修改完後保存退出 !
- 然後重新加載 nginx 的配置文件
nginx -s reload
- 默認是輪詢的方式分配請求
- 如圖
負載均衡的策略
輪詢(默認)
: 每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。加權輪詢
: 給負載均衡模塊的服務器指定權限,按照權重輪詢
#聲明負載均衡的模塊
upstream myservers{
# 每6個請求8081處理1個,8082處理2個,8083處理3個
server 192.168.230.1:8082 weight=1;
server 192.168.230.1:8083 weight=2;
server 192.168.230.1:8084 weight=3;
}
備機策略
:如果主機正常運行,備機不會處理請求,當主機宕機,備機上位
#聲明負載均衡的模塊
upstream myservers{
#backup 指定備機
server 192.168.230.1:8082 backup;
server 192.168.230.1:8083 weight=2;
server 192.168.230.1:8084 weight=3;
}
hash
:ip_hash
: 根據客戶端的ip進行計算,決定由負載均衡模塊的哪個服務器處理請求
192.168.230.102 客戶端訪問nginx, 102%負載均衡模塊服務器數量 :102%3
優點:
- 同一個客戶端訪問時,始終由固定的服務器處理請求,解決多服務器啓動導致的session失效問題
缺點
- 如果固定服務器宕機,會導致session失效
fair
: 只有安裝第三模塊後纔可以使用, 客戶端請求時,nginx會ping負載均衡模塊的所有服務器,先響應的先處理請求
感謝閱讀, 如有什麼更好的建議或方法 ,可以留言或進羣交流. 各種疑難雜症QQ交流羣:1101584918,歡迎大家加入。