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

环境准备

1.安装tomcat
2.安装nginx

一台服务器配置多个tomcat

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

结果如下图所示:
在这里插入图片描述
4.修改配置文件

因为配置了三个tomcat,防止启动文件冲突,修改tomcat的查找路径

首先,配置环境变量

[root@localhost ~]#vim /etc/profile
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第1张图片
修改后,运行source /etc/profile使该文件更新生效

随后,修改tomcat的启动文件

修改tomcat2和tomcat3的启动文件,因为该文件中的变量依旧是CATALINA_HOME 和 CATALINA_BASE

tomcat2:

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

CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第2张图片
tomcat3:

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

CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第3张图片

5.修改tomcat的端口号

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

一共需要修改三处:

第一处:tomcat、tomcat2、tomcat3依次设置为8005、8006、8007
在这里插入图片描述
第二处:tomcat、tomcat2、tomcat3依次设置为8080、8081、8082
在这里插入图片描述
第三处:tomcat、tomcat2、tomcat3依次设置为8009、8010、8011
在这里插入图片描述
6.检验三个tomcat是否可以同时启动成功
查看进程
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第4张图片
查看端口号
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第5张图片

nginx实现多tomcat负载均衡

1.nginx修改配置文件

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

CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第6张图片
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:
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第7张图片
tomcat2:
在这里插入图片描述
tomcat3:
在这里插入图片描述
4.检验nginx是否实现负载均衡

在浏览器访问:http://ip,即安装nginx的服务器ip地址,不需要输入端口号
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第8张图片
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第9张图片
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第10张图片
通过刷新页面,实现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
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第11张图片
3.Source Code Management
这里就不赘述jenkins如何集成gitlab,可以参考https://blog.csdn.net/weixin_43840640/article/details/88719485
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第12张图片
4.Build Triggers
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第13张图片
5.Build
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第14张图片
6.Post Steps
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第15张图片
7.Post-build Actions
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第16张图片

SSH Server Name:Publish over SSH插件的Server Name
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第17张图片
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,在此就不做赘述了。

CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第18张图片
在Post-build Actions,添加一个对10.20.126.133服务器tomcat的shell执行脚本
CICD环境搭建15-jenkins+nginx+N个tomcat实现负载均衡_第19张图片
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

你可能感兴趣的:(centos,tomcat,linux中间件)