通常情况下一台Tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独用于生产环境。所以我们就需要一套更可靠的解决方案来完善Web站点架构。

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

案例环境

案例实施

(1)安装部署Tomcat 1服务

[root@localhost ~]#  tar zxf apache-tomcat-8.5.16.tar.gz -C /usr/src
[root@localhost ~]# mv /usr/src/apache-tomcat-8.5.16/ /usr/local/tomcat8
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml 
                          ……………………          //省略部分内容
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
//host定义一个虚拟主机,域名为localhost,appBase定义应用程序基准目录,unpackWARs定义是否自动解压,autoDeploy定义是否自动部署
                     ……………………          //省略部分内容,添加以下内容
        <Context docBase="/web/webapp" path="" reloadable="false">
        </Context>
//context定义一个web应用(虚拟目录),path指定访问目录,docBase定义网页目录,当应用程序发生变化时候,自动装载,不用重启tomcat(手动添加 <Context  ……></Context>内容)

      </Host>
[root@localhost ~]# /usr/src/tomcat8/bin/startup.sh 
//启动Tomcat服务
[root@localhost ~]# mkdir -p /web/webapp
[root@localhost ~]# vim /web/webapp/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
        <head>
                <title>JSP test1 page</title>
</head>
<body>
<% out.println("welcome to test");%>
</body>
</html>
[root@localhost ~]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      18026/java   
[root@localhost ~]# firewall-cmd --add-port=8080/tcp
success
//开启相应的端口,不建议关闭防火墙

客户端访问测试:

搭建Tomcat服务器详细信息及软件包网盘下载点就参考博文:部署Tomcat(Web)服务详解

(2)安装部署Tomcat 2服务

搭建方法跟搭建第一台Tomcat服务器一样**(实际生产环境中,主页内容必须一致,但是,为了看出实验效果,建议主页内容不要一样)**

客户机访问效果:

(3)安装部署Nginx服务

[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel
//pcre为nginx提供rewrite所需的正则表达式语法,zlib:提供压缩,openssl-devel:提供ssl加密
[root@localhost ~]# groupadd www
[root@localhost ~]# useradd -g www www -s /bin/false
//创建所需的程序用户及组(/bin/false)这个shell非常严格,无论通过何种方式登录系统都不允许
[root@localhost ~]# tar zxf nginx-1.12.0.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/nginx-1.12.0/
[root@localhost 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  \
 --with-http_ssl_module 
 [root@localhost nginx-1.12.0]# make && make install

Nginx服务详细介绍及相关软件包,请参考博文:基于Nginx搭建Web服务器及虚拟主机相关配置详解

各配置项含义:

  • --prefix=:指定安装目录;
  • --user=,--group=:指定运行的用户和组;
  • --with-file-aio:启用文件修改支持;
  • --with-http_stub_status_module:启用状态统计;
  • --with-http_gzip_static_module:启用gzip静态压缩;
  • --with-http_flv_module:启用flv模块,提供寻求内存使用基于时间的偏移量文件;
  • --with-http_ssl_module :启用SSL模块;
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
//该Nginx服务配置文件
http {
										 ………………         //省略部分内容

        upstream  tomcat_server {
        server 192.168.1.2:8080 weight=1;
        server 192.168.1.3:8080 weight=1;
        }
				 //设定负载均衡的服务器列表,weight参数表示权限,权值越高被分到的概率越大
				 //Nginx使用upstream模块实现代理,如果有多台Tomcat服务器,按照前两台的格式继续写就好
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat_server;
						 //把nginx的默认站点通过proxy_pass方法代理到设定好的tomcat_server负载均衡服务器组 
        }
	                                       ………………………………    //省略部分内容																	
}																		
[root@localhost nginx-1.12.0]# /usr/local/nginx/sbin/nginx -t
//检查Nginx服务配置文件是否有语法错误
[root@localhost nginx-1.12.0]# /usr/local/nginx/sbin/nginx 
//启动服务,由于没有优化路径,所以应打绝对路径
[root@localhost nginx-1.12.0]# netstat -anpt | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      46627/nginx: master 
[root@localhost nginx-1.12.0]# firewall-cmd --add-service=http
success

测试负载均衡效果: Nginx+Tomcat实现负载均衡群集已经实现!!!

———————— 本文至此结束,感谢阅读 ————————