1.前置准备
2.启动后台服务
这里使用不同端口启动同一个项目,模拟不同服务器上的两个服务。
root用户启动项目,分别启动在8081端口、8082端口
nohup java -Xms64M -Xmx64M -Xmn32M -Dserver.port=8081 -jar spring-boot-helloWorld.jar &
nohup java -Xms64M -Xmx64M -Xmn32M -Dserver.port=8082 -jar spring-boot-helloWorld.jar &
3.负载均衡简版配置
创建nginx配置 示例:home/nginx/conf/nginx_web_server.conf
#定义Nginx运行的用户和用户组(默认不添加,启动后显示-nobody)
user root;
worker_processes 1; # Nginx 进程数,一般设置为和 CPU 核数一样
events {
worker_connections 1024; # 每个进程允许最大并发数
}
http {
default_type application/octet-stream; # 默认文件类型
sendfile on; # 开启高效传输模式
keepalive_timeout 65; # 保持连接的时间,超时时间,单位秒
charset utf-8; # 设置编码格式
#后台服务 域名要和下面proxy_pass一致
upstream myServerHosts {
server 127.0.0.1:8081 ;
server 127.0.0.1:8082 ;
}
server {
listen 80; # 端口号
server_name www.xqiangme.top; # 配置域名信息
location / {
proxy_set_header HOST $host;
#客户端的 IP 地址
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myServerHosts;
}
}
}
}
4.启动与测试
切换到nginx目录下执行
cd /usr/local/nginx/sbin
# 启动
./nginx -c /home/nginx/conf/nginx_web_server.conf
或
# /usr/local/nginx/sbin/nginx -c /home/nginx/conf/nginx_web_server.conf
访问两次,每台服务各轮询一次
5.负载均衡配置进阶
5.1Nginx负载均衡配置状态
**状态 ** | 概述 |
---|---|
down | 当前的server暂不参与负载均衡 |
backup | 预留的备份服务器,当其他服务器都挂掉的时候,启用, 注:404 页面不转到备机, 502 503 504 到备机。 |
max_fails | 允许请求失败的次数 ,如果请求失败次数超过限制,则进过fail_timeout 时间后从虚拟服务池中kill掉该服务器 |
fail_timeout | 经过max_fails失败后,服务暂停时间,max_fails设置后,必须设置fail_timeout 值 |
max_conns | 限制最大的连接数,用于服务器硬件配置不同的情况下 |
示例:
upstream node {
server 你的IP:8081 down;
server 你的IP:8082 backup;
server 你的IP:8083 max_fails=1fail_timeout=10s;
}
5.2Nginx负载均衡调度策略
调度算法 | 概述 |
---|---|
轮询 | 逐一轮询,默认方式 |
weight | 加权轮询,weight越大,分配的几率越高 |
ip_hash | 每个请求按访问 IP 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决动态网页 session 共享问题。负载均衡每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,显然是不妥; |
url_hash | 按照访问URL的hash结果分配 |
least_conn | 最少链接数,那个服务器链接数少就会给分配 |
hash关键数值 | hash自定义的key |
示例:
##upstream的负载均衡,调度算法##
#调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
upstream webServerHost {
server 192.168.0.1:8080 ;
server 192.168.0.2:8080 ;
}
#调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大
upstream webServerHost {
server 192.168.0.1:8080 weight=2;
server 192.168.0.2:8080 weight=3;
}
#调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
upstream webServerHost {
ip_hash;
server 192.168.0.1:8080 ;
server 192.168.0.2:8080 ;
}
#调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率.Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包
upstream webServerHost {
server 192.168.0.1:8080 ;
server 192.168.0.2:8080 ;
hash $request_uri;
}
关注程序员小强公众号更多编程趣事,知识心得与您分享