环境准备
首先要提前准备好所需的环境:三台Linux服务器,并配置好IP地址,关闭防火墙。我这边已经提前准备好了三台linux服务器,IP地址分别为:
并且在linux上面安装好所需的软件:MySQL、Nginx、JDK1.8、Redis等等,可以先将一台Linux安装好环境,在使用克隆功能克隆出另外两台服务器,这样就不需要重复安装软件了。我们将安装的软件统一放到/usr/local目录下面:
安装方法可以参考其他文章,这边就不详细说明。
项目架构
项目整体架构如下图所示,我准备的项目是springboot+vue前后端分离的项目,未使用Redis。大家可以根据自己已有的前后端分离来进行部署。IP地址为10.211.55.8这台Linux服务器用来部署前端项目,IP地址为10.211.55.13和10.211.55.14这两台服务器用来部署后端项目,形成一个集群。MySQL数据库和Nginx部署在IP为10.211.55.8这台服务器上面。
前端项目打包部署
文件配置
打开前端项目的.env.production文件,写入VUE_APP_BASEURL = '/prod-api',注意prod前面有'/',这样前端的访问就会加上这个访问前缀。
打包
打开终端,进入前端项目的目录,我的前端项目统一放在vue文件夹中,如下图:
使用npm install安装依赖,如下图:
下载完成后使用npm run build打成产环境的包如下图所示:
打包完成后会生成一个dist文件夹,如图:
我们将dist文件夹上传到IP地址为:10.211.55.8的服务器上面,在根目录(root)下面创建workspace目录,再创建vue目录,将dist目录放入其中。
进入/usr/local/nginx/conf目录,打开nginx.conf文件,进行如图所示配置,upstream配置两个后端实例的地址,即另外两台服务器的IP地址。在location下的root后面位置dist文件所在目录的位置。新建一个location /prod-api/,prod-api为统一访问后端的前缀,并进行如图所示配置。不同的照抄。
后端项目打包部署
文件配置
对于后端项目,我们要配置MySQL地址,打开application.yml文件,找到数据库配置,讲url后面配置成第一台服务器IP为10.211.55.8的地址。账号密码也是这台服务器的。
打包
在idea右侧打开我们的Maven,将test关闭,然后点击package进行打包,如下图:
打包完成后会在target目录下面生成一个springboot-0.0.1-SNAPSHOT.jar的jar包,如下图:
将生成的jar包分别上传到IP地址为10.211.55.13和10.211.55.14的服务器上,在root目录下创建workspace/springboot目录,将生成的jar包放在此目录。如下图所示:
接着添加启动和停止脚本,使用命令vim start.sh编写如下代码:
NAME=springboot-0.0.1-SNAPSHOT.jar
nohup java -jar $NAME > server.log 2>&1 &
echo 'start success'
vim stop.sh,编写如下代码:
PORT=9090
pid=`netstat -tnlp | grep $PORT | grep -v grep | awk '{print $7}' | awk -F/ '{print $1}'`
if [ ${pid} ]; then
kill -9 $pid
echo "kill $PORT"
else
echo 'stop sucess!'
fi
赋权 chmod +x *,这样现在就可使用start.sh和stop.sh进行一键启动和停止后端项目。
项目启动
进入IP地址为:10.211.55.8这台服务器,cd /usr/local/nginx,进入Nginx的目录,进入sbin目录,输入命令:./nginx即可启动Nginx服务器。
接着开IP为:10.211.55.13,这台Linux服务器j,进入/workspace/springboot目录,就是jar包和编写脚本所在目录,输入./start.sh,看到start success,接着输入tail -100f server.log指令来查看日志。如下图:
IP地址为10.211.55.14页执行相同的操作,这样两台后端就可查看日志,如下图:
在浏览器输入IP:10.211.55.8,即可进入前端项目,
我们看到两个后端实例都可处理消息:
至此Nginx负载均衡就以实现。
最后,文中有很多细节可能未提及,读者可以查看其他作者的博客,或者评论。