这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡。

1、首先需要对一些知识点进行扫盲(对自己进行扫盲,囧):
  • 集群(Cluster)

    简单来说就是用N台服务器构成一个松耦合的多处理器系统(对外是一个服务器),内部通过网络实现通信。让N台服务器之间相互协作,共同承载一个网站的请求压力。用知乎上一个作者的话来说就是“同一个业务,部署在多个服务器上”,这就是集群。 集群中比较重要的是任务调度。
  • 负载均衡(Load Balance)

    简单来说就是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求,从而共同完成工作任务。
2、安装环境如下:
  • 腾讯云主机,安装的是Centos7.3 64bits
  • Nginx 1.7.4
  • JDK8Tomcat8
3、具体安装步骤:
  • JDK安装请参照 点我试试

  • Nginx安装请参照 点我试试

  • 配置Nginx web反向代理, 实现两个Tomcat负载均衡:

      --安装及配置Tomcat
    tar -zxvf apache-tomcat-8.5.28.tar.gz
    cp -rf apache-tomcat-8.5.28 /usr/local/tomcat1
    mv apache-tomcat-8.5.28 /usr/local/tomcat2 --修改tomcat1端口号
    $ cd /usr/local/tomcat1/conf/
    $ cp server.xml server.xml.bak
    $ cp web.xml web.xml.bak
    $ vi server.xml
    <Server port="8005" shutdown="SHUTDOWN">
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" > ##修改Tomcat2端口号
    $ cd /usr/local/tomcat2/conf/
    $ cp server.xml server.xml.bak
    $ cp web.xml web.xml.bak
    $ vi server.xml
    <Server port="8006" shutdown="SHUTDOWN">
    <Connector port="8081" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2" > --添加Tomcat1开机自动启动
    --将/usr/local/tomcat1/bin/catalina.sh文件复制到/etc/init.d目录下并改名为tomcat1
    # cp /usr/local/tomcat1/bin/catalina.sh /etc/init.d/tomcat1
    --修改/etc/init.d/tomcat1文件,在文件中添加:
    # vi /etc/init.d/tomcat1
    --在第一行下面输入如下内容(否则出现错误:tomcat 服务不支持 chkconfig): #!/bin/sh
    # chkconfig: 2345 10 90
    # description:Tomcat1 service # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements. See the NOTICE file distributed with
    .....................................................................
    # $Id: catalina.sh 1498485 2013-07-01 14:37:43Z markt $
    # ----------------------------------------------------------------------------- CATALINA_HOME=/usr/local/tomcat1
    JAVA_HOME=/usr/local/jdk8 # OS specific support. $var _must_ be set to either true or false. --添加tomcat服务:
    # chkconfig --add tomcat1
    --设置tomcat为开机自启动:
    # chkconfig tomcat1 on
    --将tomcat2设置开机自启动
    --将/usr/local/tomcat2/bin/catalina.sh文件复制到/etc/init.d目录下并改名为tomcat2
    # cp /usr/local/tomcat2/bin/catalina.sh /etc/init.d/tomcat2
    --修改/etc/init.d/tomcat2文件,在文件中:
    # vi /etc/init.d/tomcat2
    --在第一行下面输入如下内容(否则出现错误:tomcat 服务不支持 chkconfig):
    #!/bin/sh
    # chkconfig: 2345 10 90
    # description:Tomcat2 service # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements. See the NOTICE file distributed with
    .....................................................................
    # ----------------------------------------------------------------------------- CATALINA_HOME=/usr/local/tomcat2
    JAVA_HOME=/usr/local/jdk8 # OS specific support. $var _must_ be set to either true or false. --添加tomcat服务:
    # chkconfig --add tomcat2
    --设置tomcat为开机自启动:
    # chkconfig tomcat2 on

到这里,tomcat已经安装好了,分别启用它们,打印出来引用的环境分别对应两个tomcat就是对的:

    [root@VM_177_101_centos src]# service tomcat1 start
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started. [root@VM_177_101_centos src]# service tomcat2 start
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.

最后配置配置一下Nginx:

--切换到目录
cd /usr/local/nginx/conf
--修改配置文件
vi nginx.conf --一些常用配置
--worker_processes:工作进程个数,可配置多个
--worker_connections:单个进程最大连接数
--server:每一个server相当于一个代理服务器
--lister:监听端口,默认80
--server_name:当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost)
--location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
--index:当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔
--proxy_pass:请求转向自定义的服务器列表
--upstream name{ }:服务器集群名称 --现在想通过nginx访问到tomcat,就需要修改配置中的server部分 server
{
listen 80 default;
charset utf-8;
server_name localhost;
access_log logs/host.access.log; location / {
proxy_pass http://localhost:8080;
proxy_redirect default;
}
}
--到这里方向代理已经完成,这样所有的请求都需要经过代理服务器才能访问到正式服务器。

接下来实现负载均衡,在安装的过程中tomcat1配置的端口是8080,tomcat2配置的端口是8081。然后我们需要在配置文件中定义上游服务器(upstream server)

#服务器的集群
upstream testcomcat {
#weight是权重 权重越大,分配的几率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
} server
{
listen 80 default;
charset utf-8;
access_log logs/host.access.log; location / {
proxy_pass http://testcomcat;
proxy_redirect default;
}
} --为了看到不一样,我将tomcat root下面的index.jsp页面稍微改动了一下,分别加入了TEST1,TEST2,方便区分,重启nginx,浏览器地址栏输入IP,进行访问,多刷新几次页面,会发现是在两个服务器间切换,如下图所示:
service nginx reload



Nginx反向代理实现Tomcat负载均衡的更多相关文章

  1. nginx 反向代理 和lvs负载均衡

    nginx反向代理:用户请求nginx代理服务器然后代理服务器将用户请求转为服务器再由nginx代理服务器将服务器的响应反应给用户. lvs负载均衡:用户请求nginx代理服务器然后代理服务器将用户请 ...

  2. Nginx反向代理 实现Web负载均衡

    实现负载均衡的方式有很多种,DNS.反向代理.LVS负载均衡器(软件实现).F5(负载均衡器,硬件,非常昂贵)这里我们只提到基于DNS,以及反向代理的方式来实现负载均衡Web服务       DNS服 ...

  3. Nginx反向代理及简单负载均衡配置

    nginx配置文件主要分为六个区域:main section.events section.http section.sever section.location section.upstream s ...

  4. nginx作反向代理,实现负载均衡

    nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...

  5. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  6. Nginx反向代理实现Tomcat+Jpress和halo

    一.利用Nginx反向代理Jpress+Tomcat 1.环境准备 服务器 IP地址 作用 系统版本 Proxy代理服务器 10.0.0.101 负载均衡Nginx Web服务器 Ubuntu2004 ...

  7. Nginx学习笔记(三)--- Nginx实现反向代理和配置负载均衡

    1.反向代理 2.Nginx反向代理流程图 3.安装多个tomcat 3.1把tomcat的压缩包传到Linux上 3.2 解压tomcat 3.3 给压缩好的tomcat改个名字用来区分一下 3.4 ...

  8. [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享

    反向代理概念 先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个FQ软件,通过FQ软件才能访问youtube. FQ软件就叫做正向代理.所谓的反向代理,指的是用户要访问youtube ...

  9. Nginx反向代理实现Tomcat多个应用80端口访问

    应用背景 一般我们在开发时,一个工程里会有多个Web应用,比如一个前台一个后台,那我们就需要配置2个Tomcat服务器,比如一个是http://localhost:8080,一个是http://loc ...

随机推荐

  1. AWS认证权威考经(助理级认证篇)

    笔者作为AWS官方认证的早期通过者,已经拿到了AWS的助理级解决方案架构师.开发者认证,系统管理员认证.这几年也陆续指导公司多人通过AWS的认证.本篇文章将分享如何通过自学的方式轻松通过AWS的助理级 ...

  2. JavaScript动画:offset家族和匀速动画详解(含轮播图的实现)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. offset家族简介 我们知道,三大家族包括:offset/scroll ...

  3. Ubuntu中使用dnw工具:没有找到/dev/secbulk0

    Ubuntu中使用dnw动机: 一. 之前没有用ubuntu中的dnw,想试试. 二. 因为换了win10系统,怕搞不定win10中dnw的驱动,想着在ubuntu中不用禁用数字签名啥的比较省心.(事 ...

  4. Linux 下Telnet 服务安装

    Linux 下Telnet 服务安装 注:以下所有命令均在root用户下执行. 命令测试在Linxu版本6.x下完成,部分命令不适用Linux 7.0以上 1.简介 默认情况下Linux只安装了Tel ...

  5. Codevs 3990 [中国剩余定理]

    模板题 注意如何得到[a,b]区间范围内的解 #include <iostream> #include <cstdio> #include <cstring> #i ...

  6. POJ 2826 An Easy Problem?![线段]

    An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12970   Accepted: 199 ...

  7. Android逆向之so的半自动化逆向

    因为工作需要,转型干android逆向,有几个月了.不过对于so的逆向,任然停留在,难难难的阶段,虽然上次自己还是逆向了一个15k左右的小so文件,但是,那个基本是靠,一步一步跟代码,查看堆栈信息来自 ...

  8. 使用 RxJS 实现一个简易的仿 Elm 架构应用

    使用 RxJS 实现一个简易的仿 Elm 架构应用 标签(空格分隔): 前端 什么是 Elm 架构 Elm 架构是一种使用 Elm 语言编写 Web 前端应用的简单架构,在代码模块化.代码重用以及测试 ...

  9. 【算法】哈希表的诞生(Java)

    参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>       ...

  10. php 处理并发问题

    对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制. 方案一:使用文件锁排它锁 f ...