centos 7部署Tomcat及其负载均衡配置详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos 7部署Tomcat及其负载均衡配置详解相关的知识,希望对你有一定的参考价值。

Tomcat服务器是一个免费的开源web应用服务器,属于轻量级应用服务器,在中小型系统和并发用户不是很多的场合中被普遍使用,是开发和测试JSP程序的首选。一般来说,Tomcat虽然和apache或者nginx这些web服务器一样,具有处理html页面的功能,然而由于其处理静态页面的能力远不如apache或者Nginx,所以Tomcat一般是作为一个servlet和JSP容器,单独运行在后端,Tomcat应用场景如下:

技术图片

用户访问的永远是apache/Nginx服务器,然后由apache/Nginx服务器转交给Tomcat服务器处理,所有服务器都连接着共享存储服务器,以便使用户每次访问到数据是一样的,apache/Nginx是用来做调度的,也就是熟知的负载均衡,关于负载均衡不多解释了。。。

通常情况下,一台Tomcat站点由于可能出现单点故障及无法应付过多的客户复杂多样的请求等问题,不能单独应用于生产环境下,所以需要使用负载均衡来解决这些问题。

Nginx是一个非常优秀的http服务器软件,它能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU等系统资源消耗非常低。目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力。

开始准备工作,搭建下面的环境,为了简化,就不部署共享存储服务器了,环境如下:

技术图片

一、部署前准备:

三台服务器均使用centos7来部署,部署过程中所用到的软件如下:

二、配置Tomcat服务器:

1、开始在192.168.1.1服务器上部署Tomcat(关于防火墙的配置这里就省略了,请自行配置防火墙以放行相关流量,我这里直接停掉了防火墙,Tomcat默认使用的端口号是8080;Nginx默认使用的端口号是80):

[[email protected] ~]# java -version    #查看JDK是否安装,若没有,自行安装
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
[[email protected] media]# tar zxf apache-tomcat-8.5.16.tar.gz -C /usr/src      #解压Tomcat包
[[email protected] media]# cd /usr/src/
[[email protected] src]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8 
#Tomcat不用编译安装,解压后即可用
[[email protected] src]# mkdir -p /web/webapp1        #建立Java的web站点,用于存放网站文件
[[email protected] src]# vim /web/webapp1/index.jsp          #建立一个index.jsp的测试页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
 <head>
        <title>JSP test1 page</title>
 </head>
 <body>
        <% out.println("www.test1111.com");%>
 </body>
</html>
[[email protected] src]# vim /usr/local/tomcat8/conf/server.xml       #修改Tomcat的主配置文件

                    ......................................
 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">     #定位到该行,然后添加下面两行内容
        <Context docBase="/web/webapp1" path="" reloadable="false">
        </Context>
#docBase:web应用的文档默认目录;
#path=""设置默认“类;”
#reloadable设置监视“类”是否变化;
[[email protected] ~]# /usr/local/tomcat8/bin/startup.sh              
#启动服务,停止服务的话,只需将startup.sh换为shutdown.sh即可。
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH: /usr/local/tomcat8/bin/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.

[[email protected] src]# netstat -antp | grep 8080             #查看默认端口8080是否在监听状态
tcp6       0      0 :::8080        :::*            LISTEN      13220/java          

本机测试访问:192.168.1.1:8080,看到如下测试页面:
技术图片

至此,192.168.1.1的Tomcat就已经配置完成了,另一台Tomcat服务器192.168.1.2的配置和192.168.1.1的配置完全一样,将上面的配置在192.168.1.2服务器上配置一遍即可,不过为了测试的时候可以看出负载均衡的效果,让我们可以看出每次访问的服务器都不是同一台,需要将192.168.1.2的Tomcat服务器的测试页面和192.168.1.1的页面不一样。

不过在实际生产环境中,两台Tomcat访问的一定是使用同一个共享存储服务器,不管是哪台服务器向用户提供服务,用户接受到的页面一定是一样的。

自己在192.168.1.2的服务器上将上面的配置来一遍吧,将192.168.1.2服务器的测试页面内容更改一下,如下:

[[email protected] src]# vim /web/webapp1/index.jsp  
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
 <head>
        <title>JSP test1 page</title>
 </head>
 <body>
        <% out.println("www.test22222222222222.com");%>
 </body>
</html>

三、配置Nginx服务器(IP:192.168.1.1):

1、安装Nginx:

 [[email protected] ~]# yum -y install pcre-devel zlib-devel openssl-devel
 #安装依赖包
 [[email protected] ~]# useradd www -s /bin/false        #创建运行用户
[[email protected] media]# tar zxf nginx-1.12.0.tar.gz -C /usr/src     #解包
[[email protected] media]# cd /usr/src/nginx-1.12.0/       #切换至该目录
[[email protected] nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module && make && make install               #编译安装
[[email protected] nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf              #编辑主配置文件
                 .............................
   #gzip  on;                  #定位到该行,写入下面四行
    upstream tomcat_server           
        server 192.168.1.1:8080 weight=1;
        server 192.168.1.2:8080 weight=1;

   #写到这里结束
     #weight参数表示权重,权重越高,表示被分配到的概率越大。
     #为了测试效果明显,这里将权重设置为一样
    server 
        listen       80;
        server_name  localhost;
         ......................
  location / 
            root   html;
            index  index.html index.htm;
            proxy_pass  http://tomcat_server;               #定位到该 中,写入该行,“http://”后面的名字要和上面添加的upstream项后面的名字一致,才可实现调度。
        

2、优化Nginx的控制:

[[email protected] nginx-1.12.0]#  ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/                 
#创建主程序的链接文件
[[email protected] ~]# vim /etc/init.d/nginx     #编辑服务脚本
#!/bin/bash
# chkconfig: - 99 20
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
  start)
        $PROG
  ;;
  stop)
        kill -s QUIT $(cat $PIDF)
  ;;
  restart)
        $0 stop
        $0 start
  ;;
  reload)
        kill -s HUP $(cat $PIDF)
  ;;
  *)
        echo "USAGE:$0 start | stop | restart | reload"
        exit 1
esac
exit 0
[[email protected] ~]# chmod +x /etc/init.d/nginx      #添加执行权限
[[email protected] ~]# chkconfig --add nginx           #添加为系统服务
[[email protected] nginx-1.12.0]# nginx -t              #检查主配置文件是否有误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] ~]# systemctl start nginx             #启动Nginx服务,以确认脚本的正常运行
[[email protected] ~]# netstat -anpt | grep nginx                    #查看80端口是否处于监听状态
tcp        0      0 0.0.0.0:80      0.0.0.0:*      LISTEN      90475/nginx: master 

四、访问测试:

至此,部署工作已经完成,现在使用客户机访问Nginx服务器192.168.1.1测试,效果如下:

第一次访问将会看到如下界面:

技术图片

刷新一下网页将会看到如下界面

技术图片

可以看到,我们访问的是Nginx服务器,真正处理访问请求的是Tomcat服务器,而且每次访问请求都是不同的Tomcat服务器来处理,效果也就显而易见了。

五、写在最后:部署过程中遇到的小小问题:

在更改完Tomcat服务器的配置文件后,访问测试时,看到访问的依然是Tomcat自带的默认页面,有点摸不着头脑,试着使用如下命令来对Tomcat服务进行几次启停后,就好了:

[[email protected] webapp1]# /usr/local/tomcat8/bin/shutdown.sh                   #停止服务
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:/usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
[[email protected] webapp1]# /usr/local/tomcat8/bin/startup.sh                #启动服务
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:/usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.

可能是这个服务启停的问题,没有深究,这个服务与别的服务都不太一样:
Nginx服务停止后,查端口号是查不到的,如下:

[[email protected] ~]# systemctl stop nginx
[[email protected] ~]# netstat -anpt | grep nginx                 #Nginx服务停止后,什么都查不到
[[email protected] ~]# 

而Tomcat服务停止后,查端口号会发现,状态如下(启动时的Listen状态变成了TIME_WAIT状态),等待片刻后,才查不到相关信息:

[[email protected] webapp1]# netstat -antp | grep 8080
tcp6       0      0 ::1:56448               ::1:8080                TIME_WAIT

不深究了,最后效果出来就好了,而且也是第一次遇见这种情况。

以上是关于centos 7部署Tomcat及其负载均衡配置详解的主要内容,如果未能解决你的问题,请参考以下文章

在Centos7上部署Tomcat及其负载均衡

基于centos 7安装Tomcat服务及其负载均衡

部署Tomcat及其负载均衡

部署 Tomcat 及其负载均衡配置

CentOS 7.3 部署Tomcat + nginx 负载均衡

部署Tomcat及其负载均衡