nginx对tomcat的负载均衡

nginx不适合处理静态页面,tomcat用来处理动态页面

Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障

当浏览器访问一个由tomcat搭建的web应用程序时,tomcat会把相应的文件,转换成浏览器能够显示的文件。   浏览器访问的是一个jsp文件时,tomcat会把jsp文件编译成一个servlet,servlet再给浏览器发送相应的数据。只有第一次访问的时候才会编译成servlet以后访问就直接调用对应的servlet。
 

1:apache-tomcat

1:解压压缩包:

[root@server1 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server1 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/

2:做软连接

[root@server1 ~]# cd /usr/local/
[root@server1 local]# ln -s jdk1.7.0_79 /usr/local/java
[root@server1 local]# ln -s apache-tomcat-7.0.37/ tomcat

3:编辑java环境变量:

[root@server1 local]# vim /etc/profile    ##在最后添加三行
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

4:加载环境变量


[root@server1 local]# source /etc/profile

5:编写java,输出hello world

[root@server1 local]# vim test.java 
public class test {
        public static void main(String[] args)
        {
                System.out.println("hello word");

        }
}

6:测试和输出hello world

[root@server1 local]# javac test.java 
[root@server1 local]# ll
-rw-r--r--  1 root root  108 May  6 12:24 test.java
[root@server1 local]# java test
hello word

7:开启tomcat服务:

[root@server1 local]# cd tomcat/bin    #到tomcat的启动目录下去
[root@server1 bin]# ./startup.sh       #关闭服务:./shutdown
[root@server1 bin]# netstat -antlp     #查看8080端口

8:修改配置文件

[root@server1 bin]# cd ../
[root@server1 tomcat]# cd ..
[root@server1 local]# cd openresty/
[root@server1 openresty]# ls
bin  COPYRIGHT  luajit  lualib  nginx  pod  resty.index  site
[root@server1 openresty]# cd nginx/
[root@server1 nginx]# cd conf/
[root@server1 conf]# vim nginx.conf               ##修改nginx服务的配置文件(/usr/local/openresty/nginx/conf/nginx.conf)
 73         location ~ \.jsp$ {
 74             proxy_pass   http://127.0.0.1:8080;   ##本机
 75         }

9:重新加载nginx服务

[root@server1 conf]# cd ../sbin/
[root@server1 sbin]# ./nginx -s reload

10:编写.jsp文件,查看本机时间的一个文件

[root@server1 sbin]# cd ..
[root@server1 nginx]# cd html/
[root@server1 html]# ls
50x.html  example.php  index.html  index.php
[root@server1 html]# vim index.jsp
          the time is: <%=new java.util.Date() %>
[root@server1 html]# ls
50x.html  example.php  index.html  index.jsp  index.php

11:测试,真机浏览器进行访问172.25.36.1/index.jsp查看的是Tomcat的静态界面

12:在开启一台虚拟机server2,在server1上获取tomcat和java的所有文件

[root@server2 ~]# scp -r root@server1:/usr/local/tomcat /usr/local/
[root@server2 ~]# scp -r root@server1:/usr/local/java /usr/local/

13:编译server2上的环境变量,和server1里/etc/profile里添加的一样

[root@server2 tomcat]# vim /etc/profile

 

[root@server1 local]# tail  /etc/profile   (查看文件,然后将后面的内容复制粘贴到server2上)

14:加载环境变量

[root@server2 tomcat]# source /etc/profile

15:server1上编写nginx的配置文件

[root@server1 sbin]# vim /usr/local/openresty/nginx/conf/nginx.conf

修改如下:

 17 http {
 18         upstream tomcat {
 19                 server 172.25.60.1:8080;
 20                 server 172.25.60.2:8080;
 21         }
 72         location ~ \.jsp$ {
 73             proxy_pass   http://tomcat;
 74         }

 54 #       location /memc{                         
 55 #               internal;
 56 #               memc_connect_timeout 100ms;
 57 #               memc_send_timeout 100ms;
 58 #               memc_read_timeout 100ms;
 59 #               set $memc_key $query_string;
 60 #               set $memc_exptime 300;
 61 #               memc_pass memcache;

16:cd到nginx的启动目录,重新启动nginx服务

[root@server1 conf]# cd -
/uer/local/openresty/nginx/sbin
[root@server1 sbin]# ./nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
[root@server1 sbin]# ./nginx -s reload

17:server2上开启tomcat服务:

[root@server2 local]# cd tomcat/
[root@server2 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@server2 tomcat]# cd bin/
[root@server2 bin]# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

18:查看端口 tomcat占用的是8080端口:

[root@server2 bin]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      864/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      940/master          
tcp        0      0 :::8080                     :::*                        LISTEN      1053/java           
tcp        0      0 :::22                       :::*                        LISTEN      864/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      940/master          
tcp        0      0 :::8009                     :::*                        LISTEN      1053/java 

19:真机浏览器进行检测:172.25.60.1:8080看到的是tomcat的动态界面

 

20:在/usr/local/tomcat/webapps/ROOT/目录下新建test.jsp(内容和之前的index.jsp内容一样)

[root@server1 html]# cat index.jsp 
the time is: <%=new java.util.Date() %>
[root@server1 html]# cd 
[root@server1 ~]# cd /usr/local/
[root@server1 local]# cd tomcat/
[root@server1 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@server1 tomcat]# cd webapps/
[root@server1 webapps]# ls
docs  examples  host-manager  manager  ROOT
[root@server1 webapps]# cd ROOT/
[root@server1 ROOT]# ls
asf-logo.png       bg-nav-item.png  favicon.ico        tomcat.css        tomcat.svg
asf-logo-wide.gif  bg-nav.png       index.jsp          tomcat.gif        WEB-INF
bg-button.png      bg-upper.png     RELEASE-NOTES.txt  tomcat.png
bg-middle.png      build.xml        test.jsp           tomcat-power.gif
[root@server1 ROOT]# vim test.jsp 
[root@server1 ROOT]# cat test.jsp 
the time is: <%=new java.util.Date() %>

真机浏览器浏览:

21:将test.jsp发送给server2

[root@server1 ROOT]# scp test.jsp root@server2:/usr/local/tomcat/webapps/ROOT/

22:修改test.jsp文件,为了看出差别

[root@server2 ROOT]# vim test.jsp 
server2   the time is: <%=new java.util.Date() %>

23:server2启动tomcat服务

[root@server2 ROOT]# cd ../..
[root@server2 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@server2 tomcat]# cd bin/
[root@server2 bin]# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

24:检测:输入172.25.60.1/test.jsp会在srevre1和server2之间轮询

nginx对tomcat负载均衡的第二部分:

1:当主机重启之后,支持该操作需要打开的服务有:(恢复换将之后能够看到上面之前的页面)

恢复环境打开mysql,php,memcache,openresty下的nginx,tomcat

[root@server1 ~] # /etc/init.d/mysqld start
[root@server1 ~] # /etc/init.d/php-fpm start
[root@server1 ~] # /etc/init.d/memcached start
[root@server1 ~] # cd /usr/local/tomcat/bin
[root@server1 bin] # ./startup.sh
[root@server1 ~] # cd /usr/local/openresty/nginx/sbin
[root@server1 sbin] # ./nginx -t ##检测
[root@server1 sbin] # ./nginx    ##开启服务

2:在tomcat中弄新的测试文件

[kisok@foundation0 ~] $ scp test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT

[kisok@foundation0 ~] $ scp test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT

3:新的test.jsp是一个用户登录界面

4:建立用户进行测试(建立用户是会在server1 和server2之间进行轮询)

server和ip都是在不断变化的


5:此时要将nginx系统换到1.10的版本,新版本不支持接下来的服务操作

6:解压nginx-1.10压缩包

[root@server1 ~] # tar zxf nginx-1.10.1.tar.gz 

7:隐藏版本号和关闭debug

vim /src/core/nginx.h 
     14 #define NGINX_VER          "nginx/" 
vim ~/nginx-1.10.1/auto/cc/gcc 
     178 # debug
     179 #CFLAGS="$CFLAGS -g"

8:关闭原来openresty的nginx

cd /usr/local/openresty/nginx/sbin/

./nginx -s stop

9:解压nginx-sticky-module-ng.tar.gz 压缩包

[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz 

10:编译 安装:

[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make
[root@server1 nginx-1.10.1]# make install

10:进入到nginx1.10的配置文件目录中去,复制之前的nginx的配置文件到当前目录下,然后编写配置文件

cd /usr/local/lnmp/nginx/
cd conf/
ls
cp /usr/local/openresty/nginx/conf/nginx.conf .
vim nginx.conf
修改如下:
[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
http {
    upstream tomcat {
        sticky;
        server 172.25.60.1:8080;
        server 172.25.60.2:8080;
        }


      location ~ \.jsp$ {
            proxy_pass   http://tomcat;
        }

11:开启nginx服务:

[root@server1 local]# cd lnmp/nginx/
[root@server1 nginx]# nginx -t
[root@server1 nginx]# sbin/nginx -s reload

12:真机浏览器访问172.25.60.1/test.jsp  此时发现server和id都不会发生变化

一直就在一台主机上添加用户

tomcat的日志在:在这里能看到新建用户的情况

13:但是,如果server2挂掉,那么server1会起作用,但是server1的数据不存在了

[root@server2 ~] # cd/usr/local/tomcat/bin
[root@server2 bin] # ./shutdown.sh
继续添加用户,完成后,查看server2的日志

[root@server1 ~] # cd /usr/local/tomcat/logs/
[root@server1 ~] # tail -f catalina.out 

发现只有新添加的用户。

如何实现server1和server2的数据同步:

1:server2上安装memcached服务并开启

[root@server2 tomcat]# yum install memcached -y
[root@server2 tomcat]# /etc/init.d/memcached start

2:需要jar包:

外部主机:

scp * [email protected]:/usr/local/tomcat/lib/

scp * [email protected]:/usr/local/tomcat/lib/

[root@server1 lib]# ls
annotations-api.jar  jsp-api.jar                              tomcat-api.jar
asm-3.2.jar          kryo-1.04.jar                            tomcat-coyote.jar
catalina-ant.jar     kryo-serializers-0.10.jar                tomcat-dbcp.jar
catalina-ha.jar      memcached-session-manager-1.6.3.jar      tomcat-i18n-es.jar
catalina.jar         memcached-session-manager-tc7-1.6.3.jar  tomcat-i18n-fr.jar
catalina-tribes.jar  minlog-1.2.jar                           tomcat-i18n-ja.jar
ecj-4.2.1.jar        msm-kryo-serializer-1.6.3.jar            tomcat-jdbc.jar
el-api.jar           reflectasm-1.01.jar                      tomcat-util.jar
jasper-el.jar        servlet-api.jar
jasper.jar           spymemcached-2.7.3.jar

3:如果有该安装包记得删除:

rm -rf memcached-session-manager-tc6-1.6.3.jar	##与版本不匹配

4:server1上修改tomcat的配置文件:

[root@server1 tomcat]# vim conf/context.xml 
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.60.1:11211,n2:172.25.60.2:11211"
failoverNodes="n1"    ##server1为n1 server2位n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

5:将之前的配置文件发所给server2:

[root@server1 lib]# scp context.xml server2:/usr/local/tomcat/conf
[root@server2 tomcat]# vim conf/context.xml 
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.60.1:11211,n2:172.25.60.2:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

[root@server2 lib]# ls
annotations-api.jar  jsp-api.jar                              tomcat-api.jar
asm-3.2.jar          kryo-1.04.jar                            tomcat-coyote.jar
catalina-ant.jar     kryo-serializers-0.10.jar                tomcat-dbcp.jar
catalina-ha.jar      memcached-session-manager-1.6.3.jar      tomcat-i18n-es.jar
catalina.jar         memcached-session-manager-tc7-1.6.3.jar  tomcat-i18n-fr.jar
catalina-tribes.jar  minlog-1.2.jar                           tomcat-i18n-ja.jar
ecj-4.2.1.jar        msm-kryo-serializer-1.6.3.jar            tomcat-jdbc.jar
el-api.jar           reflectasm-1.01.jar                      tomcat-util.jar
jasper-el.jar        servlet-api.jar
jasper.jar           spymemcached-2.7.3.jar

6:server1 和server2上开启tomcat服务

[root@server1 tomcat]# bin/startup.sh 
[root@server2 tomcat]# bin/startup.sh 
server1和server2必须都安装memcached,并打开

yum install memcached -y
/etc/init.d/memcached start

重启两个tomcat

cd /usr/local/tomcat/bin/
./shutdown.sh 
./startup.sh 

7:检测:访问172.25.60.1/test.jsp

给server1添加用户,此时关闭server1的tomcat,(此时转移到server2)

继续添加用户(给server2),查看server2的日志(页面上也可以看到之前的数据没有消失),发现server1数据并没有丢失.

此时关闭server1的tomcat:

猜你喜欢

转载自blog.csdn.net/yinzhen_boke_0321/article/details/87783697