CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡

发布时间 2023-07-11 11:52:36作者: GaoYanbing

环境准备
1.安装tomcat
2.安装nginx

一台服务器配置多个tomcat
1.上传tomcat压缩包到服务器上

2.解压缩

tar -zxvf apache-tomcat-8.5.38.tar.gz
1
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
1
2
3
重复以上步骤两次

#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
1
2
3
4
5
6
结果如下图所示:

4.修改配置文件

因为配置了三个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
1

tomcat3:

[root@localhost ~]# vim /opt/tomcat3/bin/catalina.sh
1


5.修改tomcat的端口号

部署的三台tomcat,默认的端口号是一样的,如果不修改的话,将第三个tomcat都启动之后,发现只有一个是可以被执行的。

一共需要修改三处:

第一处:tomcat、tomcat2、tomcat3依次设置为8005、8006、8007

第二处:tomcat、tomcat2、tomcat3依次设置为8080、8081、8082

第三处:tomcat、tomcat2、tomcat3依次设置为8009、8010、8011

6.检验三个tomcat是否可以同时启动成功
查看进程

查看端口号


nginx实现多tomcat负载均衡
1.nginx修改配置文件

[root@localhost ~]# vim /opt/nginx/nginx.conf
1

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
1
2
若显示一下两行信息,说明配置文件正确:

修改完配置文件一定要重启nginx服务才能让修改的内容生效吗?

答案是,不需要。

因为nginx能够自动更新配置文件。

3.修改各个tomcat的index.jsp文件

[root@localhost nginx]# cd /opt/tomcat/webapps/ROOT/
[root@localhost ROOT]# vim index.jsp
1
2
将jsp文件存放在ROOT文件夹下,通过浏览器查看时,不需要输入文件路径,直接输入http://ip:端口,即可

tomcat:

tomcat2:

tomcat3:

4.检验nginx是否实现负载均衡

在浏览器访问:http://ip,即安装nginx的服务器ip地址,不需要输入端口号

 

通过刷新页面,实现nginx切换tomcat,而且会发现,tomcat出现的机率是根据nginx.conf配置的权重分配的。

jenkins+nginx+N个tomcat实现负载均衡
在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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
情况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
————————————————
版权声明:本文为CSDN博主「月月吃喝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43840640/article/details/88847591