天天看點

docker實作nginx tocmat的負載均衡應用場景操作步驟

應用場景

當一個應用部署在tomcat後,發現通路量越來越多,伺服器完全無法承受住壓力,導緻系統卡頓延時等,此時需要通過nginx技術将應用壓力進行平均配置設定到其他伺服器,将多台伺服器一起提供資源,通過nginx來協調資源進行負載均衡。

操作步驟

1. 目标與準備

目标:使用docker部署nginx+tomcat,nginx實作負載均衡。

準備:

docker主機,192.168.199.32 (docker2)

tomcat容器1:tomcat01

tomcat容器2:tomcat03

nginx容器:nginx_test

2. 鏡像下載下傳

docker主機pull鏡像檔案,需要tomcat和nginx。
 # docker pull docker.io/tomcat
 # docker pull docker.io/malderhout/tomcat
 # docker pull nginx           

下載下傳兩個不同版本的tomcat鏡像檔案,隻是為了後期更好的驗證nginx的負載均衡。

用# docker search tomcat指令搜尋tomcat的鏡像,進行選擇,選擇一個tomcat7,一個tomcat8。

3. 部署2個tomcat容器

# docker run -d -ti --name tomcat01 docker.io/tomcat
 # docker run -d -ti --name tomcat03 docker.io/malderhout/tomcat           
檢視兩個容器是否已開啟:
 # docker ps           
tomcat容器預設啟用8080端口。

4. 部署nginx容器,并修改配置檔案,commit新鏡像。

啟動nginx容器,并進入到容器:
 # docker run -ti docker.io/nginx /bin/bash           
進入容器中,進行修改配置檔案:
 # cd /etc/nginx/
 # cd conf.d/
 # vi default.conf
   bash: vi: command not found           
提示沒有vi指令,執行
 # apt-get update
 # apt-get install vim           
編輯default.conf檔案,如下:
 # vim default.conf           
upstream web_app{
server tomcat01:8080 weight=1 max_fails=2 fail_timeout=30s;
server tomcat03:8080 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name nginx_test localhost;
index index.jsp index.html index.htm;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web_app;
root /usr/share/nginx/html;
index index.html index.htm;
}
location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /usr/share/nginx/html;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /\.ht {
# deny all;
#}
}           
該配置檔案為網上找的,如果有好的配置檔案可以替換。 注意,配置檔案引用的為容器的name,而不是ip位址,好處就是不用關心ip變動。nginx_test ,為nginx容器name,一會需要建立。
手動執行nginx,看是否報錯,如果報錯進行調試,直至沒有報錯。
 # nginx
 # ps -ef           

複制這個臨時容器的id:0b85b3e2edda

退出臨時容器,使用剛建立的臨時容器commit新的鏡像,鏡像名:nginx_tomcat

# docker commit 0b85b3e2edda nginx_tomcat
 # docker images           
使用nginx_tomcat部署nginx_test容器:

 # docker run -d -p 80:80 --name nginx_test nginx_tomcat nginx -g “daemon off;”
 # docker ps           

5. 驗證

浏覽器打開: http://192.168.199.32 連續打開2次,發現第一個為tomcat8.0界面,第二個為tomcat7.0界面。