文章目录
- Nginx实现负载均衡配置
- 为什么要用负载均衡?
- 负载均衡说明:
- 常见负载均衡算法:
- 代码:
- Nginx轮询配置:
- Nginx权重配置:
- Nginx源地址哈希法配置:
Nginx实现负载均衡配置
为什么要用负载均衡?
在之前一般都使用单台机器对台提供集中式服务,随着业务的量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这时候我们就要用负载均衡,我们要把多台服务器组成一个集群并提供对外的服务,然而对外提供的访问入口都是一个的,例如:baidu.com;当用户在浏览器输入baidu.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
负载均衡说明:
负载均衡:把一个项目部署多台服务器,减少服务器压力,从而保持服务器集群的整体性能最优,这就是负载均衡。
今天我们就利用Nginx服务器来实现一个简单的负载均衡,由于我只有一台服务器就在一台服务器上面进行负载均衡演示。
常见负载均衡算法:
1、轮询法: 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
2、权重法: 可以根据机器配置定义权重.权重越高被分配到的几率越大
3、源地址哈希法: 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
代码:
DemoApplication:
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Autowired
private ProtConfiguration prot;
@RequestMapping("/")
public void index(HttpServletResponse resp) throws Exception {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("<!DOCTYPE HTML><html> <h1>" + prot.getPort() + "<h1> </html>");
}
}
端口号:
server.port=8001
# server.port=8001
获取当前项目端口号:
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 获取当前项目端口号
*/
@Component
public class ProtConfiguration implements ApplicationListener<WebServerInitializedEvent> {
private int serverPort;
@Override
public void onApplicationEvent(WebServerInitializedEvent event) {
this.serverPort = event.getWebServer().getPort();
}
public int getPort() {
return this.serverPort;
}
}
分别给8001和8002进行打包并上传服务器!
分别运行8001和8002:
在jar的目录下输入 nohup java -jar 8001.jar log.out
推荐使用阿里云一键部署! 传送
Server配置:
server
{
# 监听端口号
listen 80;
# 域名
server_name demo.xffjs.com;
location / {
proxy_pass http://demo;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}
Nginx轮询配置:
upstream demo{
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
每次刷新会更换!
Nginx权重配置:
upstream demo{
server 127.0.0.1:8001 weight=1;
server 127.0.0.1:8002 weight=3;
}
一共刷新了6次其中大部分都是访问的8002
Nginx源地址哈希法配置:
upstream demo{
ip_hash
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
每次刷新都是一样的,除非更换ip地址
其他参数:
1、down : 表示单前的server临时不參与负载.
2、weight: 默觉得weight越大,负载的权重就越大(值越大用户访问域名时这个服务器压力就越大)
3、backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻