1.安装tomcat
2.安装nginx
1.上传tomcat压缩包到服务器上
2.解压缩
tar -zxvf apache-tomcat-8.5.38.tar.gz
3.复制解压好的apache-tomcat-8.5.38,到/opt/目录下,创建软链接
#tomcat1
[root@localhost software]# cp -r apache-tomcat-8.5.38 /opt/
[root@localhost opt]# ln -s apache-tomcat-8.5.38 tomcat
重复以上步骤两次
#tomcat2
[root@localhost opt]# cp -r apache-tomcat-8.5.38 apache-tomcat-8.5.38-2
[root@localhost opt]# ln -s apache-tomcat-8.5.38-2 tomcat2
#tomcat3
[root@localhost software]# cp -r apache-tomcat-8.5.38 apache-tomcat-8.5.38-3
[root@localhost opt]# ln -s apache-tomcat-8.5.38-3 tomcat3
因为配置了三个tomcat,防止启动文件冲突,修改tomcat的查找路径
首先,配置环境变量
[root@localhost ~]#vim /etc/profile
修改后,运行source /etc/profile
使该文件更新生效
随后,修改tomcat的启动文件
修改tomcat2和tomcat3的启动文件,因为该文件中的变量依旧是CATALINA_HOME 和 CATALINA_BASE
tomcat2:
[root@localhost ~]# vim /opt/tomcat2/bin/catalina.sh
[root@localhost ~]# vim /opt/tomcat3/bin/catalina.sh
5.修改tomcat的端口号
部署的三台tomcat,默认的端口号是一样的,如果不修改的话,将第三个tomcat都启动之后,发现只有一个是可以被执行的。
一共需要修改三处:
第一处:tomcat、tomcat2、tomcat3依次设置为8005、8006、8007
第二处:tomcat、tomcat2、tomcat3依次设置为8080、8081、8082
第三处:tomcat、tomcat2、tomcat3依次设置为8009、8010、8011
6.检验三个tomcat是否可以同时启动成功
查看进程
查看端口号
1.nginx修改配置文件
[root@localhost ~]# vim /opt/nginx/nginx.conf
weight:权重,默认是1,数值越大提供服务的次数就越多
listen:表示当前的代理服务器监听的端口,默认的是监听80端口
server_name:表示监听到之后需要转到哪里去
proxy_pass http://tomcatServer:把nginx的默认站点通过 proxy_pass方法代理到设定好的tomcat_server负载均衡服务器上
2.检查配置文件nginx.conf是否正确
执行以下命令:
[root@localhost ~]# cd /opt/nginx
[root@localhost nginx]# ./sbin/nginx -t
若显示一下两行信息,说明配置文件正确:
修改完配置文件一定要重启nginx服务才能让修改的内容生效吗?
答案是,不需要。
因为nginx能够自动更新配置文件。
3.修改各个tomcat的index.jsp文件
[root@localhost nginx]# cd /opt/tomcat/webapps/ROOT/
[root@localhost ROOT]# vim index.jsp
将jsp文件存放在ROOT文件夹下,通过浏览器查看时,不需要输入文件路径,直接输入http://ip:端口,即可
tomcat:
tomcat2:
tomcat3:
4.检验nginx是否实现负载均衡
在浏览器访问:http://ip,即安装nginx的服务器ip地址,不需要输入端口号
通过刷新页面,实现nginx切换tomcat,而且会发现,tomcat出现的机率是根据nginx.conf配置的权重分配的。
在jenkins从gitlab拉取项目通过ssh+shell自动部署到远程tomcat的基础上(该部分的实现,可以参考前文:https://blog.csdn.net/weixin_43840640/article/details/88709981),添加nginx+tomcat实现负载均衡。
1.构建一个maven项目,并填写一个名称
2.General
3.Source Code Management
这里就不赘述jenkins如何集成gitlab,可以参考https://blog.csdn.net/weixin_43840640/article/details/88719485
4.Build Triggers
5.Build
6.Post Steps
7.Post-build Actions
SSH Server Name:Publish over SSH插件的Server Name
Transfer Set Source files:填写jenkins服务器要传输的文件和文件夹,格式:target/*.war
Remove prefix:移除目录(只能指定Transfer Set Source files中的目录)
如果该处不填,则构建后的war包相对于远程目录Remote directory的相对路径为 target/.war (实际上“”为maven构建的war包名称)
如果此处填了,比如我填了target,那么构建后的war包相对于远程目录Remote
directory的相对路径为 .war (实际上“”为maven构建的war包名称)
Remote directory:远程目录
Exec command:要执行的命令或者shell脚本写在里面
脚本编写的思路:
1.jenkins通过SSh把编译好的war包传输到tomcat远程服务的临时文件夹;
2.执行脚本,检查远程服务器的3个tomcat是否启动,如果启动,则关闭;
3.关闭3个tomcat后,将临时文件中的war包复制到到3个tomcat的webapps目录下,启动3个tomcat。
情况1:3个tomcat放在同一台服务器
source ~/.bash_profile
#!/bin/bash
#kill tomcat pid
#关闭tomcat
pidlist=`ps -ef|grep tomcat|grep -v "grep"|awk '{print $2}'`
function stop(){
if [ "$pidlist" == "" ]
then
echo "----tomcat 已经关闭----"
else
echo "tomcat 进程号 :$pidlist"
kill -9 $pidlist
echo "KILL $pidlist:"
fi
}
stop
pidlist2=`ps -ef|grep tomcat|grep -v "grep"|awk '{print $2}'`
if [ "$pidlist2" == "" ]
then
echo "----关闭tomcat成功----"
else
echo "----关闭tomcat失败----"
return 1
fi
#移除原来tomcat中的webapps中的项目文件夹
rm -rf /opt/tomcat/webapps/ROOT*
rm -rf /opt/tomcat2/webapps/ROOT*
rm -rf /opt/tomcat3/webapps/ROOT*
#复制jenkins生成的war包到tomcat中的webapps中
cp -rf /opt/tmp/scm-nginx-0.0.1-SNAPSHOT.war /opt/tomcat/webapps/ROOT.war
cp -rf /opt/tmp/scm-nginx-0.0.1-SNAPSHOT.war /opt/tomcat2/webapps/ROOT.war
cp -rf /opt/tmp/scm-nginx-0.0.1-SNAPSHOT.war /opt/tomcat3/webapps/ROOT.war
sleep 10s
#启动tomcat
echo "starting tomcat"
cd /opt/tomcat/bin
./startup.sh
#启动tomcat2
echo "starting tomcat"
cd /opt/tomcat2/bin
./startup.sh
#启动tomcat3
echo "starting tomcat"
cd /opt/tomcat3/bin
./startup.sh
情况2:3个tomcat放在不同服务器上
1.在系统管理->系统设置中,配置Publish over SSH插件,添加一个SSH Server Name,添加方式可以参考https://blog.csdn.net/weixin_43840640/article/details/88709981,在此就不做赘述了。
在Post-build Actions,添加一个对10.20.126.133服务器tomcat的shell执行脚本
tomcat和tomcat的执行脚本几乎一致,只是tomcat的名字不一样而已:
source ~/.bash_profile
#!/bin/bash
#kill tomcat pid
#关闭tomcat
pidlist=`ps -ef|grep tomcat|grep -v "grep"|awk '{print $2}'`
function stop(){
if [ "$pidlist" == "" ]
then
echo "----tomcat 已经关闭----"
else
echo "tomcat 进程号 :$pidlist"
kill -9 $pidlist
echo "KILL $pidlist:"
fi
}
stop
pidlist2=`ps -ef|grep tomcat|grep -v "grep"|awk '{print $2}'`
if [ "$pidlist2" == "" ]
then
echo "----关闭tomcat成功----"
else
echo "----关闭tomcat失败----"
return 1
fi
#移除原来tomcat中的webapps中的项目文件夹
rm -rf /opt/tomcat2/webapps/ROOT*
#复制jenkins生成的war包到tomcat中的webapps中
cp -rf /opt/tmp/scm-nginx-0.0.1-SNAPSHOT.war /opt/tomcat2/webapps/ROOT.war
sleep 10s
#启动tomcat2
echo "starting tomcat"
cd /opt/tomcat2/bin
./startup.sh