Docker+Nginx+tomcat模擬tomcat叢集負載均衡

Docker+Nginx+tomcat模擬tomcat叢集負載均衡

Docker+Nginx+tomcat模擬tomcat叢集負載均衡

啟動docker服務,拉取tomcat,nginx映象

本文是基於 win10 環境進行整合,至於怎麼在win10環境上體驗docker,可自行百度,本文不在闡述。

安裝好docker服務之後,啟動docker服務,執行如下命令,拉取tomcat,nginx映象:

docker pull hub。c。163。com/library/tomcat:latest

docker pull hub。c。163。com/library/nginx:latest

映象拉取成功之後,執行 docker images命令檢視拉取的映象:

λ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

redis latest c5355f8853e4 4 weeks ago 107MB

hub。c。163。com/library/ubuntu latest ccc7a11d65b1 8 months ago 120MB

hub。c。163。com/library/tomcat latest 72d2be374029 8 months ago 292MB

hub。c。163。com/library/nginx latest 46102226f2fd 12 months ago 109MB

啟動tomcat容器,掛載本地目錄

docker run -it -p 58080:8080 -v E:\local_data\:/data ——name tomcat_02 hub。c。163。com/library/tomcat /bin/bash

執行上述命令,啟動容器,將宿主機的 E:\local_data\ 掛載到容器的 /data 目錄下。將打包好的war包放在 E:\local_data\目錄下,使用如下命令將war包複製到 tomcat 的 webapps 下,並啟動tomcat。

cp /data/nginx_tomcat-0。0。1-SNAPSHOT。war /usr/local/tomcat/webapps/sh /usr/local/tomcat/bin/startup。sh

重複上述操作,連續啟動三個tomcat容器,如下所示:

λ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

175d6f2be242 hub。c。163。com/library/tomcat “/bin/bash” 7 hours ago Up 7 hours 0。0。0。0:48080->8080/tcp tomcat_03

11d5b4487c66 hub。c。163。com/library/tomcat “/bin/bash” 7 hours ago Up 7 hours 0。0。0。0:38080->8080/tcp tomcat_02

c77cd2b2a6e9 hub。c。163。com/library/tomcat “/bin/bash” 7 hours ago Up 7 hours 0。0。0。0:58080->8080/tcp tomcat_01

啟動nginx並配置

docker run -p 80:80 ——privileged=true -v E:\my_nginx\config\nginx。conf:/etc/nginx/nginx。conf ——name mynginx hub。c。163。com/library/nginx

將nginx的80埠對映到宿主機的80埠,將宿主機的 E:\my_nginx\config\nginx。conf 目錄掛載到容器的 /etc/nginx/nginx。conf 目錄下,用自定義 nginx。conf配置檔案覆蓋預設配置檔案。

配置檔案如下所示:

user nginx;

worker_processes 1;

error_log /var/log/nginx/error。log warn;

pid /var/run/nginx。pid;

events {

worker_connections 1024;

}

http {

server {

listen 80;

location / {

proxy_pass http://blance;

}

}

upstream blance{

server 172。17。0。2:8080;

server 172。17。0。3:8080;

server 172。17。0。4:8080;

}

include /etc/nginx/mime。types;

default_type application/octet-stream;

log_format main ‘$remote_addr - $remote_user [$time_local] “$request” ’

‘$status $body_bytes_sent “$http_referer” ’

‘“$http_user_agent” “$http_x_forwarded_for”’;

access_log /var/log/nginx/access。log main;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf。d/*。conf;

}

其中,以下為在預設配置內容中新增的內容

server {

listen 80;

location / {

proxy_pass http://blance;

}

}

upstream blance{

server 172。17。0。2:8080;

server 172。17。0。3:8080;

server 172。17。0。4:8080;

}

執行啟動命令,啟動nginx容器。

檢視所有啟動容器,測試是否均衡負載

執行 docker ps 命令檢視所有正在執行的容器:

λ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b0d477164bed hub。c。163。com/library/nginx “nginx -g ‘daemon of…” 35 minutes ago Up 35 minutes 0。0。0。0:80->80/tcp mynginx

175d6f2be242 hub。c。163。com/library/tomcat “/bin/bash” 7 hours ago Up 7 hours 0。0。0。0:48080->8080/tcp tomcat_03

11d5b4487c66 hub。c。163。com/library/tomcat “/bin/bash” 7 hours ago Up 7 hours 0。0。0。0:38080->8080/tcp tomcat_02

c77cd2b2a6e9 hub。c。163。com/library/tomcat “/bin/bash” 7 hours ago Up 7 hours 0。0。0。0:58080->8080/tcp tomcat_01

瀏覽器訪問 127。0。0。1:80 ,進入tomcat 歡迎頁面。

多次訪問 127。0。0。1/nginx_tomcat-0。0。1-SNAPSHOT/test/loadBalancing 連結,會列印請求到的服務的ip及埠,

java程式碼如下:

/**

* Created by Haiyoung on 2018/5/1。

*/@RestController@RequestMapping( value = “/test”)public class LoadBalancing {

@RequestMapping( value = “/loadBalancing”)

public String loadBalancingTest(HttpServletRequest request) throws UnknownHostException {

String ip = java。net。InetAddress。getLocalHost()。getHostAddress();

int post = request。getLocalPort();

System。out。println(ip + “:” + post);

return ip + “:” + post;

}}

請求結果如下所示:

172。17。0。2:8080

172。17。0。3:8080

172。17。0。4:8080

172。17。0。2:8080

172。17。0。3:8080

172。17。0。4:8080

172。17。0。2:8080

可見,nginx實現了對請求的負載均衡。