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: