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
浏览器访问 http://127.0.0.1:80 ,进入tomcat 欢迎页面。
多次访问 http://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实现了对请求的负载均衡。





猜你喜欢

转载自blog.csdn.net/haiyoung/article/details/80209985