LINUX【企业】 ------- LNMP架构下的Tomcat的部署
Tomcat简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。
部署过程如下:
-
安装tomcat
server1:
1.下载并解压相关软件包
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/localtar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
为方便应用与管理,我们创建软连接
cd /usr/localln -s apache-tomcat-7.0.37 tomcatln -s jdk1.7.0_79 java
2.在/etc/profile中添加环境变量
export JAVA_HOME=/usr/local/java export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/bin
4.编辑配置文件
cd /usr/local/openresty/nginx/confvim nginx.conf 74 location ~ .jsp$ { 75 proxy_pass http://127.0.0.1:8080; //如果访问本地ip/.jsp文件,代理访问 http://127.0.0.1:8080 76 }
5.编辑Index.jsp文件,作为测试的文件
cd /usr/local/openresty/nginx/html
vim index.jspthe time is: <%=new java.util.Date() %>
6.开启tomcat
cd /usr/local/tomcat/bin/./startup.sh
*测试*:在浏览器中访问172.25.60.1:8080,出现如下测试页
-
部署两台tomcat服务器的轮询访问
1.将server1上tomcat的配置复制到server2中
scp -r root@172.25.60.1:/usr/local/tomcat /usr/local/scp -r root@172.25.60.1:/usr/local/java /usr/local/
2.配置server2的环境变量文件,添加java的环境变量
export JAVA_HOME=/usr/local/java export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/bin
3.编辑server2和server1的tomcat的测试文件
cd /usr/local/tomcat/webapps/ROOT/ vim test.jsp server1 the time is: <%=new java.util.Date() %>
4.开启tomcat
cd /usr/local/tomcat/bin/./startup.sh
5.编辑server1的nginx的配置文件,实现轮询
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; //转向访问tomcat 74 } //屏蔽掉之前的memcache的配置 78 location ~ \.php$ { 79 #set $key $uri$args; 80 #srcache_fetch GET /memc $key; 81 #srcache_store PUT /memc $key; 82 root html; 83 fastcgi_pass 127.0.0.1:9000; 84 fastcgi_index index.php; 85 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 86 include fastcgi.conf; 87 }
*测试:*在浏览器中访问172.25.60.1/test.jsp时,会轮询访问server1和server2的test.jsp文件
刷新后
Tomcat实现session共享
session的工作原理
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
session交叉共享的作用
为了数据保存的更加牢靠,即是某个服务器宕机了,数据并不会丢失,二是存放在集群中别的服务器的memcache中。
nginx会话保持之sticky模块
在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:1.ip hash,根据客户端的IP,将请求分配到不同的服务器上;2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,注意:cookie需要浏览器支持,且有时候会泄露数据
Sticky工作原理
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。2.后端服务器处理完请求,将响应数据返回给nginx。3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值4.客户端接收请求,并保存带route的cookie。5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
部署:
1.将新的test.jsp覆盖原来的test.jsp
[kiosk@foundation27 Desktop]$ scp test.jsp root@172.25.27.1:/usr/local/tomcat/webapps/ROOTroot@172.25.27.1's password: test.jsp 100% 968 1.0KB/s 00:00 [kiosk@foundation27 Desktop]$ scp test.jsp root@172.25.27.4:/usr/local/tomcat/webapps/ROOTroot@172.25.27.4's password: test.jsp 100% 968 1.0KB/s 00:00
在浏览器输入172.25.60.1/test.jsp
当我们再次输入时,server info和ID都会发生改变
如何能够使其不变呢??
2.重新编译nginx-1.14,将sticky模块编译进去,并用新生成的二进制文件替换旧的
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng
make
[root@server1 objs]# cp nginx /usr/local/lnmp/nginx/sbin/cp: overwrite `/usr/local/lnmp/nginx/sbin/nginx'? y[root@server1 objs]# cp /usr/local/openresty/nginx/conf/nginx.conf /usr/local/lnmp/nginx/conf/cp: overwrite `/usr/local/lnmp/nginx/conf/nginx.conf'? y
3.编辑nginx的配置文件
cp /usr/local/openresty/nginx/conf/nginx.conf /usr/local/lnmp/nginx/conf/
vim nginx.conf 17 http { 18 upstream tomcat { 19 sticky; 20 server 172.25.27.1:8080; 21 server 172.25.27.4:8080; 22 }
4.开启nginx
cd /usr/local/openresty/nginx/sbin/ ./nginx -s reload netstat -nlpt
测试:172.25.27.1/test.jspSenver Info 和 ID不会变,输入的Session List 会保存在同一台主机上
5.session共享第一步:将jre中的session共享的包分别放到server1和server2的/usr/local/tomcat/lib下
编辑/usr/local/tomcatconf目录下的配置文件conten.txt
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 35 memcachedNodes="n1:172.25.27.1:11211,n2:172.25.27.4:11211" 36 failoverNodes="n2" ##server1改为n1 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" 39 />
第二步:server2和server1的配置相同,安装memcached服务并开启
yum install -y memcached/etc/init.d/memcached startnetstat -nlpt
第三步:server1和server2重启tomcat
[root@server4 bin]# ./shutdown.sh ./startup.sh
测试:172.25.27.1/test.jsp当server1的tomcat宕掉时,会自动切换到server4上,并且server1上的缓存会移动到server2上(在加入数据时,server1和server4开启不必同时开启),如果不添加数据,刷新页面即可
在server1的tomcat宕机后,发现在server1上的缓存漂移到了server2上