Nginx負載均衡實踐
本次實踐是爲了體驗在目前分佈式集羣的環境部署的條件下,使用nginx實現負載均衡配置,體驗服務器集羣處理請求操作的過程。
一、服務器環境搭建
本次實踐使用了兩臺AWS服務器,每臺機器上部署了相同的服務,並且在其中一臺機器上搭建了nginx,進行負載均衡。
1.創建虛擬機
本次實驗選擇的虛擬機的操作系統是ubuntu 16.04 LTS,創建虛擬機的操作比較簡單,但是AWS默認使用的是密鑰登陸,對新手用戶不是很友好,尤其容易讓人忘記需要下載密鑰文件到本地保存,並設置使用權限爲400。
服務器列表:
AWS默認用戶名爲: ubuntu
AWS密碼爲: *****************
連接示例:
將密鑰登陸修改爲密碼登陸:設置AWS服務器爲密碼登陸
2.安裝nginx
使用命令:
sudo apt-get install nginx
完成安裝之後,ubuntu會默認啓動nginx,在瀏覽器中輸入對應AWS服務器端外網IP計科訪問到nginx的主頁。
3.安裝Java
此次實踐的服務是使用Java語言開發的,因此運行需要Java的環境。
安裝步驟請參考:ubuntu環境下Java Web環境搭建
安裝命令如下:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
安裝完成之後使用命令:
java -version
檢查java是否安裝成功
二、部署應用
1.克隆代碼
本次實驗的代碼我已經上傳到Github,代碼倉庫的地址爲:
git@github.com:JimmyU1/turing_robot.git
使用命令
git clone git@github.com:JimmyU1/turing_robot.git
即可將代碼克隆到本地進行修改。
2.打包代碼
代碼進行修改之後需要將代碼重新打包,使用maven工具進行打包
打包命令:
mvn clean
mvn package -D skipTests
然後會在代碼目錄下生成一個target
文件夾,裏面由一個jar
文件即爲本項目的可執行文件
3.上傳代碼
在服務器上的/home/ubuntu
路徑下新建一個文件夾命名webroot
用於存儲代碼文件。使用命令:
sudo mkdir webroot
sudo chmod 777 webroot
創建好目錄之後把打包好的jar
文件上傳至服務器。使用命令(文件名、目錄名和服務器地址請自行替換):
sudo scp robot-0.0.1-SNAPSHOT.jar ubuntu@52.36.73.236:/home/ubuntu/webroot
4.啓動服務
進入到webroot
目錄,使用nohup
從後臺啓動程序:
nohup java -jar robot-0.0.1-SNAPSHOT.jar &
本服務默認使用端口號是11200,之後的nginx配置將對11200端口的服務進行負責均衡。
三、負載均衡配置
負載均衡的配置是通過修改nginx配置文件來實現的。
nginx的默認配置文件路徑爲/etc/nginx/conf.d/
。
在其中一臺服務器上配置nginx來進行負載均衡,在/etc/nginx/conf.d/
目錄下創建一個配置文件,命名turing_robot.conf
,具體內容如下:
upstream turingrobot{
server 127.0.0.1:11200;
server 52.36.73.236:11200;
}
server{
listen 8700;
location / {
proxy_pass http://turingrobot;
}
}
備註:
1. upstream用於配置同樣服務的多個服務器,不要帶有http或者https的協議頭。
2. upstream的裏面配置多個server,是是提供服務的服務器地址和端口號。
3. server結構中,listen接口表示的是nginx對外服務的端口號。是服務訪問的實際入口。
4. proxy_pass 用於表示該服務代理的是upstream中配置的對應實際服務地址。
最後重新加載nginx的配置文件即可完成配置,使用命令:
sudo nginx -s reload
四、效果演示
我們在代碼中會獲取服務器的IP(內網IP,暴露外網IP存在安全隱患),並返回給了前端,然後前端會在每次請求返回只有在頁面上展示對應的服務器IP。下圖中兩次返回的IP地址並不一樣,表示我們兩次請求分別是由不同的服務器來處理的。
展示效果:
1
1