一、tomcat
Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。
同步
交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪怕URL 不变,整个网页都需要重新渲染。例如,用户填写注册信息,只是 2 次密码不一致,提交后,整个注册页面重新刷新,所有填写项目重新填写( 当然有办法让用户减少重填 ) 。这种交互非常不友好。从代价的角度看,就是为了注册的一点点信息,结果返回了整个网页内容,不但浪费了网络带宽,还需要浏览器重新渲染网页,太浪费资源了,影响了用户体验和感受。上面这些请求的过程,就是同步过程,用户发起请求,页面整个刷新,直到服务器端响应的数据到来并重新渲染。
异步
传统的网页如果需要更新内容,必需重载整个网页面。 Ajax 的出现,改变这一切,同时极大的促进了Javascript的发展。 Ajax 即 "Asynchronous Javascript And XML" (异步 JavaScript 和 XML ),是指一种创建交互式、快速动态网页应用的网页开发技术,最早起源于1998 年微软的 Outlook Web Access 开发团队。Ajax 通过在后台与服务器进行少量数据交换, 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的 WEB API 中的XMLHttpRequest 对象实现 Ajax 技术。早期 Ajax 结合数据格式 XML ,目前更多的使用 JSON 。利用 AJAX 可实现前后端开发的彻底分离,改变了传统的开发模式。
安装
1.安装jdk
bash
[root@tomcat-node1 ~]# yum install -y java-1.8.0-openjdk.x86_64
2.解压tomcat
bash
[root@tomcat-node1 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/
3.设置软连接
bash
[root@tomcat-node1]# cd /usr/local
[root@tomcat-node1 local]# ln -s apache-tomcat-9.0.93 tomcat
4.开启tomcat
bash
[root@tomcat-node1 ~]# /usr/local/tomcat/bin/startup.sh
5.生成tomcat主配置文件
bash
[root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
6.创建用户
bash
[root@tomcat-node1 ~]# useradd -s /sbin/nologin -M tomcat
7.生成启动文件
bash
# 修改权限
[root@tomcat-node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node1 ~]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@tomcat-node1 ~]# systemctl daemon-reload
8.重启tomcat
bash
[root@tomcat-node1 ~]# systemctl restart tomcat
另一台主机同上
bash
[root@tomcat-node2 ~]# yum install -y java-1.8.0-openjdk.x86_64
[root@tomcat-node2 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
[root@tomcat-node2 ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
# 修改权限
[root@tomcat-node2 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node2 ~]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@tomcat-node2 ~]# systemctl daemon-reload
[root@tomcat-node2 ~]# systemctl restart tomcat
二、反向代理实现Tomcat
2.1 常见部署方式
准备一台安装好nignx的服务器
2.2 Nginx反向代理
反向代理单台web服务器
bash
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf
server {
listen *:80;
server_name www.lm.org;
root /data/wb/html;
index index.html;
location ~ \.jsp$ {
proxy_pass http://172.25.254.10:8080;
}
}
[root@nginx-node1 ~]# systemctl restart nginx
2.3 负载均衡
1.ip_hash
bash
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf
upstream tomcat {
ip_hash;
#hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen *:80;
server_name www.lm.org;
root /data/wb/html;
index index.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}
[root@nginx-node1 ~]# systemctl restart nginx
源地址哈希,后端服务器不会改变
2.cookie哈希
bash
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf
upstream tomcat {
#ip_hash;
hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen *:80;
server_name www.lm.org;
root /data/wb/html;
index index.html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}
[root@nginx-node1 ~]# systemctl restart nginx
三、session 共享服务器
msm
msm ( memcached session manager )提供将 Tomcat 的 session 保持到 memcached 可以实现高可用。项目早期托管在google code, 目前在 Github github网站链接 : https://github.com/magro/memcached-session-manager
部署:
1.解压
bash
[root@tomcat-node1 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/
2.复制
bash
[root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/
[root@tomcat-node1 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/
root@172.25.254.20's password:
test.jsp 100% 968 409.9KB/s 00:00
- 修改tomcat
172.25.254.10
bash
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
failoverNodes="m1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@tomcat-node1 ~]# systemctl restart tomcat.service
172.25.254.20
bash
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
failoverNodes="m2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
[root@tomcat-node2 ~]# systemctl restart tomcat.service
4.下载
bash
[root@tomcat-node2 ~]# yum install -y memcached
bash
[root@tomcat-node1 ~]# yum install -y memcached
测试
- 在两台 tomcat 都开启的情况下:
- 在 n1 被停止后继续提交信息看是否可以读取到之前的会话信息