负载均衡(Load Balance)是集群技术(Cluster)的一种应用。负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力。目前最常见的负载均衡应用是Web负载均衡。根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询、IP负载均衡和CDN。其中IP负载均衡可以使用硬件设备或软件方式来实现。
开始搭建
- 创建 SpringBoot 项目
等待创建完成, 第一次可能有点慢 ! - 创建 HelloController.java
package com.nginx.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${server.port}")
private Integer port;
@RequestMapping("/hello")
public String hello(){
return "当前项目运行的端口是 : " + port;
}
}
- application.properties配置文件中加人
application.properties
- 配置项目的多实例启动
修改Nginx的配置文件,添加负载均衡的模块
- 使用 vim 打开nginx.conf配置文件编辑负载均衡的模块
vim /usr/local/nginx/conf/nginx.conf
- 添加内容如下:
33 #gzip on;
34 #负载均衡模块
35 upstream myservers{
36 server 192.168.230.1:8082;
37 server 192.168.230.1:8083;
38 server 192.168.230.1:8084;
39 }
40
41 server {
42 listen 80;
43 server_name localhost;
44
45 #charset koi8-r;
46
47 #access_log logs/host.access.log main;
48
49 location / {
50 #root html;
51 #index index.html index.htm;
52 proxy_pass http://myservers;
53 proxy_connect_timeout 30;
54 }
- 如图:
- 修改完后保存退出 !
- 然后重新加载 nginx 的配置文件
nginx -s reload
- 默认是轮询的方式分配请求
- 如图
负载均衡的策略
轮询(默认)
: 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。加权轮询
: 给负载均衡模块的服务器指定权限,按照权重轮询
#声明负载均衡的模块
upstream myservers{
# 每6个请求8081处理1个,8082处理2个,8083处理3个
server 192.168.230.1:8082 weight=1;
server 192.168.230.1:8083 weight=2;
server 192.168.230.1:8084 weight=3;
}
备机策略
:如果主机正常运行,备机不会处理请求,当主机宕机,备机上位
#声明负载均衡的模块
upstream myservers{
#backup 指定备机
server 192.168.230.1:8082 backup;
server 192.168.230.1:8083 weight=2;
server 192.168.230.1:8084 weight=3;
}
hash
:ip_hash
: 根据客户端的ip进行计算,决定由负载均衡模块的哪个服务器处理请求
192.168.230.102 客户端访问nginx, 102%负载均衡模块服务器数量 :102%3
优点:
- 同一个客户端访问时,始终由固定的服务器处理请求,解决多服务器启动导致的session失效问题
缺点
- 如果固定服务器宕机,会导致session失效
fair
: 只有安装第三模块后才可以使用, 客户端请求时,nginx会ping负载均衡模块的所有服务器,先响应的先处理请求
感谢阅读, 如有什么更好的建议或方法 ,可以留言或进群交流. 各种疑难杂症QQ交流群:1101584918,欢迎大家加入。