nginx+tomcat多服务器及负载均衡配置

nginx+tomcat配置教程:多服务器与负载均衡实践
本文详细介绍了如何配置nginx+tomcat实现多服务器模式,包括安装jdk、设置环境变量、配置多服务器、端口修改、权限设置以及启动服务。接着,文章讲解了如何通过nginx进行负载均衡配置,包括轮询、加权轮询等算法的实现,为高效管理服务器集群提供了实用指导。

目标:

      (1)安装jdk

      (2)配置nginx+tomcat多服务器模式

      (3)配置负载均衡

      (4)配置反代服务器

一、jdk安装

       (1)jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

       (2)下载完成后解压压缩包即可

       (3)设置环境变量

        修改/etc/profile文件,在最后面添加jdk的路径即可

        export JAVA_HOME=/usr/java/jdk1.8.0_171  #根据实际路径来设置

        export  PATH=$PATH:$JAVA_HOME/bin

        export  CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

        添加完成后需要使环境变量生效,使用source /etc/profile,然后echo $JAVA_HOME,使用命令java -version,如果能够输出jdk的版本的话,说明环境变量已经生效了。

二、配置nginx+tomcat多服务器模式

    1、安装nginx+tomcat(网上资源比较多,就此略过)

   注意:在下载tomcat包的时候需要选择core中的包,其他的包不是完整的。tomcat包下载后解压即可。

    2、tomcat多服务模式设置

   (1)tomcat包解压后就相当于形成了一个web环境,因此需要多服务模式的话就应该有多个web环境。方式很简单,将解压后的文件copy多份即可 

     ~]# mv apache-tomcat-8.5.32tomcat1

     ~]# cp –ar tomcat1 tomcat2

 至此,我们已经有了两个tomcat环境了,要想两个都能同时运行,还得设置好两个tomcat的环境变量。

   (2)环境变量设置

就如同安装jdk时需要设置环境变量之外,tomcat也需要设置,由于tomcat有两个web环境,因此都需要设置进去,否则那个没有环境变量的是启动不了的。修改/etc/profile文件,在最后面添加如下内容:

      export  CATALINA_BASE=/usr/tomcat1

      export  CATALINA_BASE2=/usr/tomcat2

      export  PATH=$PATH:CATALINA_BASE/bin:CATALINA_BASE2/bin

现在就有两个tomcat的环境变量了,分别是CATALINA_BASE和CATALINA_BASE2这两个变量了。

修改完成之后先不要急着将tomcat启动,因为tomcat2的环境变量名称是CATALINA_BASE2,但是在tomcat2和tomcat1的配置文件中的环境变量名称都是CATALINA_BASE(tomcat2是从tomcat1复制过来的,因此目前所有文件都一致),所以,必须得将tomcat2的配置文件中的所有相关字符串全部修改过来。具体修改内容如下:

      第一步:

        ~]# vim /usr/tomcat2/bin/catalina.sh

        在文件的110行附近添加如下内容:

          # OS specific support. $var _must_be set to either true or flase.

          # self: add

          export CATALINA_BASE=$CATALINA_BASE2

          JAVA_OPTS="-server -Xms512m -Xmx512 -Xss512K -XX:PermSize=128m -XX:MaxPermSize=256m"

          如图所示:

 

      第二步:将当前文件夹下的catalina.bat和startup.sh文件中的所有CATALINA_BASE换成CATALINA_BASE2

     首先开始编辑文件,进入命令模式,在最底行输入:%s/CATALINA_BASE/CATALINA_BASE2/g,这样就把所有的字符串全部修改了。

    至此,tomcat的环境变量就设置完毕了,快来开始下一步吧。

(3)tomcat端口修改

      我们都知道,两个独立的进程是不能使用同一个端口的,但是我们刚才直接将tomcat1复制到了tomcat2,所以端口肯定都是一样的啦,这怎么行,一山不容二虎,一个球门怎么能站两个守门员呢

     第一步:我们首先要了解的是,tomcat总共需要占用三个端口,默认情况下,它们分别是

      HTTP:8080(这就是tomcat的主要服务端口啦)

      AJP:8009(用于监听其他服务的请求)

      SHUTDOWN:8005(关闭端口)

     第二步:了解以上情况,我们需要将tomcat2的端口修改成不能与tomcat1一样,索性就将tomcat2的默认端口都加1吧,也  就是tomcat2的端口分别是

      HTTP:8081

      AJP:8010

      SHUTDOWN:8006

    第三步:修改/usr/tomcat2/conf/server.xml文件

将相应的端口都修改成以上的值就行了

      至此,tomcat的端口也已经全部修改完毕了。

(4)权限设置

      我们将tomcat解压时的属主和属组都是root,但是进程运行是通过tomcat用户来操作的,因此需要建立tomcat用户并且将权限交给tomcat。

      第一步:将tomcat的启动和关闭脚本都设置为所有者可执行

      ~]# cd /usr/tomcat1/bin

      ~]# chmod u+x ‘*.sh’

      ~]# useradd tomcat

      ~]# chown –R tomcat:tomcat/usr/tomcat1

      第二步:tomcat2与tomcat1是一样的操作

      权限修改完毕,终于到了启动阶段了。

 (5)tomcat启动

      刚才已经知道了,tomcat的启动脚本在/usr/tomcat1/bin/目录下了,名称为startup.sh,关闭脚本为shutdown.sh。此时我们运行startup.sh脚本即可。

      运行完毕我们通过以下命令即可查看是否启动完成:

      ~]# ss –tnl

      如果看到了tomcat的三个端口了,那就说明tomcat1启动成功了,tomcat2是一样的操作,到最后我们应该看到6个端口才对。

3、nginx启动

      相对于tomcat来说,nginx启动实在是太简单了。

直接运行nginx的启动文件即可,/usr/local/nginx/sbin/nginx

然后运行ss –tnl查看到80端口起来了就说明启动成功。

至此,我们已经将nginx和tomcat完全启动完毕了,剩下的就是修改nginx的配置文件来进行负载均衡和反代服务器的设置了。

 

三、负载均衡和反代服务器配置

      1、nginx和tomcat相关文件目录

nginx配置文件:/usr/local/nginx/conf/nginx.conf内容如下:

      nginx的web页面目录:/usr/local/nginx/html

      tomcat的web页面目录:/usr/tomcat/webapps/ROOT/

      2、nginx有很多模块,这次主要研究研究的是http模块,包括其中的upstream模块和server等模块。

      server模块:

            server{

                  listen80;

                  server_namelocalhost;

                  #charsetkoi8-r;

                  #access_loglogs/host.access.log main

 

                  location/ {

                  root html;

                  index index.html index.htm;

            }          

    }

      这个server其实设置的就是一个代理服务器,可以同时配置多个。

      listen:表示代理服务器监听的端口,配置多个的时候端口值需要修改成不一样的。

      server_name:表示监听后需要转到哪个服务器

      location:表示匹配的路径都会转到其后面包括的内容里面

      root:一旦匹配到这个请求的路径时,将会在这个文件夹下寻找内容,如“root html”表示的就是在/usr/loca/nginx/html/这个目录下寻找

      index:当没有指定主页的时候,则会默认选择这几个文件(这几个文件就在root里面)

nginx转发到tomcat

            刚才说过location就是基于匹配的内容来进行转接的。因此,若需转到tomcat,则只需要讲location中的内容修改为

            location/ {

                  proxy_pass/http://localhost:8080;

}

      我们知道,tomcat监听的就是8080和8081这两个端口,刚刚又将nginx的80端口转到了8080端口。因此我们相当于访问了http://IP:8080了,此处我们用的是虚拟机配置的服务,因此在自己电脑浏览器上应该输入的是http://IP:8080,否则就会报错。

      至此,我们就可以将nginx的欢迎页变成tomcat1的欢迎页了,也就是说完成了nginx反代服务器的配置了,真的是很简单。

负载均衡配置

通俗来说,nginx后端的web服务器是不可能只有一台的,一般都是一个集群,包括多台服务器。所以一旦客户端发送了请求来的话,如果我们不能合适地控制请求的流向的话,那就很有可能大部分的请求都发送到某一个后端服务器上了,这样是极其不利于集群的性能的,并且很有可能导致此服务器宕机。因此我们要合理地使客户端的请求分发到后端服务器上。

这就要使用到nginx的upstream模块了。

      第一步:我们首先得定义这个集群,通过upstream模块可以很好的定义集群。

      upstreamtomcat {

            serverlocalhost:8080;

            serverlocalhost:8081;

}

      这样,我们就定义好了一个集群了。其中tomcat我们姑且认为是这个集群集群得的组名吧,也就是说我们可以用http://tomcat来表示这里面的所有服务器。

      第二步:设置好了集群之后,我们想要将客户端的请求发送到此集群的话只需要这样:

      server{

            listen80;

            server_namelocalhost;

            location/ { 

            proxy_pass http://tomcat/;

}

}

      这样,我们就将nginx收到的请求全部发送到了后端的tomcat集群了,也就是说,用户在访问http://localhost:80的时候,其实是在访问http://tomcat/

      但是,我们的目的是将请求合适地发送给后端集群的啊,就只是这样将请求转发到后端服务器完全不是我们的目标啊。因此,我们需要使用负载均衡算法来完成请求的合理分配。

负载均衡算法

      首先,我们需要了解负载均衡算法有哪些呢?主要有如下几种:

      轮询算法(Round Robin):这个就相当于一个环形队列,每次从头开始分发请求,轮询一圈完毕之后又从头开始分发请求,无穷无尽。

      加权轮询算法(WRR):加权可以给某台服务器添加权重,权重大的服务器有更高的几率获得请求(根据我实验发现并不是概率,而是根据权重的值来分配的,比如两台服务器的权重为4和2,那么前四个请求就是第一个服务器的,后面两个请求才是第二个服务器的,而并不是按照概率来算的)

      ip_hash算法:就是根据客户端的ip地址来进行hash运算,通过计算得到的值,然后根据hash的表来根据值来进行请求分发。

      最少连接算法(least connections):顾名思义,通过比较后端的服务器的连接数来分发请求,连接数最少的才可以得到请求。

      随机算法(Random):如果后台有两台服务器的话,那么每次每台服务器获得请求的概率都是1/2;同理,三台服务器就是1/3…

      fair算法:根据后台服务器的响应时间来分发请求

      url_hash算法:根据请求报文的url来进行hash运算,然后根据hash表来进行分发请求

      负载均衡的配置:

             负载均衡算法是配置在upstream模块里面的。各种算法的配置示例如下:

      (1)轮询算法

            upstreamtomcat { 

                  serverlocalhost:8080;

                  serverlocalhost:8081;

}

    (2)加权轮询算法

      upstream tomcat {

            server localhost:8080 weight=1;

            server localhost:8081 weight=2;

}    

      这里的权重都是1的话相当于是轮询算法。其他数值不行,因为这个是按数量来分发请求的。

    (3)ip_hash算法

      upstream tomcat {

            ip_hash;

            server localhost:8080;

            server localhost:8081;

}

   (4)最少连接算法

     

   (5)fair算法

            upstream {

            serverlocalhost:8080;

            server localhost:8081;

            fair;

 }

  (6)url_hash算法

            upstream {

            server localhost:8080;

            server localhost:8081;

            hash $request_uri;

            hash_method crc32;

}

至此,负载均衡算法的配置也基本完成了,若想调用该算法,只需要设置好相应的集群和算法,然后在server模块中将nginx请求转发到响应的集群中即可。目前技术知识能力有限,只能记录于此,后期再跟进其他内容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值