创建 服务端应用

创建SpringBoot项目

pom.xml 文件具体如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.12.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.lcy</groupId>
  12. <artifactId>springboot-demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>springboot-demo</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-web</artifactId>
  27. </dependency>
  28. </dependencies>
  29. <build>
  30. <plugins>
  31. <plugin>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-maven-plugin</artifactId>
  34. </plugin>
  35. </plugins>
  36. </build>
  37. </project>

编辑 application.properties 文件

server.port=8088

编辑主启动类

package com.lcy.springboot.demo;

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

}

编辑 Controller 层

package com.lcy.springboot.demo.controller;

@RestController
public class HelloController {

    @Value("${server.port}")
    private int serverPort;

    @GetMapping("/hello")
    public String hello() {
        InetAddress address = null;
        try {
            address = InetAddress.getLocalHost();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "当前服务器的IP地址:"+address.getHostAddress() +", 端口号:"+this.serverPort;
    }

}

使用 maven 工具打包应用

Nginx 实现负载均衡实操 - 图1

服务器端操作

这里准备了3台服务器, IP地址分别为 192.168.3.18,192.168.3.19,192.168.3.20。 这里以 192.168.3.19 为例,其他2台做相同类似的操作。

设置 服务器的主机名

原来的主机名

[root@localhost ~]# hostnamectl --static
localhost.localdomain

设置 服务器主机名:

[root@localhost ~]# hostnamectl set-hostname server19

修改 hosts 文件

vim /etc/hosts

在文件中新增一条记录:

192.168.3.19    server19

如图:
Nginx 实现负载均衡实操 - 图2
修改完后, 可能需要重启服务器才生效。
补充
为什么要做这一步(修改主机名和hosts)?
因为在 linux 系统中,如果不这么做,那通过 InetAddress.getLocalHost().getHostAddress()获取的ip为127.0.0.1

运行程序

将程序上传到服务器

我们在步骤1的时候打包的 springboot-demo-0.0.1-SNAPSHOT.jar 程序,将其上传到 服务器中 /data 目录下
Nginx 实现负载均衡实操 - 图3

执行程序

java -jar springboot-demo-0.0.1-SNAPSHOT.jar

Nginx 实现负载均衡实操 - 图4

注意: 这里需要提前配置好 java环境

测试

在浏览器中输入:http://192.168.3.20:8088/hello
执行结果:
Nginx 实现负载均衡实操 - 图5

nginx 配置

nginx 安装过程省略

将 nginx 安装在 192.168.3.18 的服务器上

编辑 nginx 配置文件

vi /usr/local/nginx/conf/nginx.conf

在http标签内添加如下内容:

    upstream springbootCluster{
        server 192.168.3.18:8088 weight=1 max_fails=3 fail_timeout=3;
        server 192.168.3.19:8088 weight=1 max_fails=3 fail_timeout=3;
        server 192.168.3.20:8088 weight=1 max_fails=3 fail_timeout=3;
    }

    server {
        listen      7777;
        server_name localhost;
        location / {
            proxy_pass http://springbootCluster;
        }

    }

补充
Nginx 实现负载均衡实操 - 图6

启动 nginx

可以用如下命令,检测修改nginx的配置文件有没有错误

[root@server18 sbin]# cd /usr/local/nginx/sbin/
[root@server18 sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动 nginx

[root@server18 sbin]# ./nginx

测试

测试之前需要在3台服务器上分别使用 java -jar 命令执行 springboot-demo-0.0.1-SNAPSHOT.jar 文件。
然后,确保 nginx 已经启动。
最后在浏览器中输入:http://192.168.3.18:7777/hello
运行结果:
Nginx 实现负载均衡实操 - 图7
多刷新几次,就发现nginx负载均衡起作用了