Springboot 多实例负载均衡部署一、测试代码:

  1. 控制层测试代码:

    import java.net.Inet4Address;import java.net.InetAddress;import java.net.UnknownHostException;@Controller@RequestMapping("/test")public class TestController {    @GetMapping("")    @ResponseBody    public String test() {        InetAddress localHost = null;        try {            // 返回服务器地址            localHost = Inet4Address.getLocalHost();            return localHost.getHostAddress();        } catch (UnknownHostException e) {            return "未知ip";        }    }}

    本地方法测试:

  1. maven打好jar包,命名test.jar

二、单机多容器(docker + nginx)

  1. 打好的包放在一台linux服务器上: /opt/springboot/test.jar

  2. 新建dockerFile文件,也放在同一个目录下: /opt/springboot/dockerfile

    FROM openjdk:8-jdk-alpineMAINTAINER lzfCOPY *.jar /jar/test.jar# 正常服务启动CMD ["java", "-Xms200m", "-Xmx200m", "-jar","/jar/test.jar"]
  3. 在服务器上部署两个springboot容器。

    • 切换到 /opt/springboot/ 目录下,制作docker镜像 docker build -t test .

    • # 部署的时候指定network,可以方便用容器名互相访问docker network create my_network# 我的nginx是用docker部署的,也是在my_network下docker run -d --name test_1 --network my_network testdocker run -d --name test_2 --network my_network test
  4. 配置nginx负载均衡

    配置nginx.conf文件:

        server {        listen 80;        location / {            proxy_pass http://balance;        }    }    upstream balance{      # weight 代表权重,可以不设置。注意:想要禁用这个server,不能设置为0,会报错,可以设置为backup: server 172.19.0.3:8080 backup;        server 172.19.0.3:8080 weight=1;        server 172.19.0.4:8080 weight=5;        # 如果nginx和test_1和test_2都是在同一个network下,就能使用容器名进行访问    #server test_1:8080;        #server test_2:8080;    }#  用以下命令可以查看容器的ip#  docker inspect test_1 | grep IPAddress#  docker inspect test_2 | grep IPAddress

    改nginx配置记得重新加载: nginx -s reload

  5. 效果: