Nginx+Spring boot 实现负载均衡
参考:
链接:https://www.jianshu.com/p/27540cce95ac
必需品:springboot 测试项目一个、Linux服务器一个、
-
将Springboot项目打包四个不同的端口
8001.jar
8002.jar
8003.jar
8004.jar -
登陆Linux使用yum命令安装Nginx
yum install nginx -y -
需要用到的相关命令
查看版本
nginx -v
查看nginx安装目录:
ps -ef | grep nginx
检查配置文件
nginx -t
启动
systemctl start nginx.service
停止
systemctl stop nginx.service
重启
systemctl restart nginx.service
设置开机自启动
systemctl enable nginx.service
停止开机自启动
systemctl disable nginx.service
查看当前状态
systemctl status nginx.service
查看所有已启动的服务
systemctl list-units --type=service
4. 加入开机启动
systemctl enable nginx.service
5. 修改配置文件
vim /etc/nginx/nginx.conf
修改说明:
worker_processes 一般设置为CPU的核心数 比如我的是4核
worker_processes 4;
加入负载均衡的配置 upstream关键字。tomcat为我起的名字 等下需要使用该名字引用 weight分配权重
upstream tomcat {
server 127.0.0.1:8001 weight=1;
server 127.0.0.1:8002 weight=1;
server 127.0.0.1:8003 weight=1;
server 127.0.0.1:8004 weight=1;
}
在server节点下修改 location节点如下 tomcat为我之前起的名字
location / {
proxy_pass http://tomcat;
proxy_redirect default;
}
Nginx访问的端口我们随便 这里用默认80端口
listen 80 default_server;
listen [::]:80 default_server;
nginx 报错处理:
nginx报错"worker_processes" directive is duplicate
参考:https://blog.csdn.net/network_dream/article/details/86606865
查看nginx的错误日志error.log
报错信息:“worker_processes”指令重复在nginx.conf
发现nginx.conf配置出现了两份。不知道什么原因生成的两份。
解决:删除一份,重启成功。
nginx集群报错“upstream”directive is not allow here 错误
参考:https://blog.csdn.net/tanga842428/article/details/78962235
搭建了一个服务器, 采用的是nginx + apache(多个) + php + mysql(两个) 多个apache负载均衡及后端mysql读写分离的服务器.
当然如果网站流量小的话 就完全没有必要了! 一是搭建起来麻烦,二也增加了维护成本! 当你网站流量达到一定级别不考虑也得考虑了.
当设定好 upstream 如下:
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3;}
执行命令:/usr/local/nginx/sbin/nginx -s reload 时 报错如下:
[emerg]: “upstream” directive is not allowed here in /usr/local/nginx/conf/nginx.conf:52
后来检查了一下原来是upstream backend 位置放错了, upstream位置应该放在http模块里面 但必须是在server模块的外面. 应该是下面这样的结构:
http{upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3;} server { location / { proxy_pass http://backend; }}}
如果你配置的服务器也如类似的错误 不妨检查你的upstream位置是否正确!
-
将打好的springboot jar包分别使用java -jar 命令跑起来
java -jar 8004.jar &
java -jar 8003.jar &
java -jar 8002.jar &
java -jar 8001.jar & -
启动Nginx
systemctl start nginx.service -
远端直接访问ip+端口+项目全局路径即可访问到你的springboot项目,分别分发到不同的jar进行处理