1.Nginx
1.概念:
概念:反向代理web服务器,作用于服务器,管理多个服务器。
多进程,多个工作进程,一个主进程。
目的:单节点故障,实现负载均衡,load balance,非阻塞,解决大客户量并发请求问题。
2.代理:
(1).正向代理:作用于客户端。
(2).反向代理:作用在服务器端,客户端不知道反向代理服务器的存在。
3.单节点故障:
(1)大并发请求下,服务器只有一个,如果服务器挂掉,单节点发生故障,整个就不能正常运行了。
(2)解决方案:配置服务器集群。使用 nginx ,通过ip 管理多个 tomcat服务器。
2.模拟伪集群
1.解压两个tomcat,在serve.xml文件配置两套不同的端口,8080,8005,8009。
2.修改Nginx的nginx.conf配置文件,实现负载均衡。
(1).服务器集群配置
(2).nginx不能处理jsp页面,交由tomcat处理。
(3).代码参考:(这里要改nginx.conf里的配置)
#服务器集群配置
upstream test.com{
server 127.0.0.1:18081 weight=1;
#服务器配置,weight是权重,权重越大,分配的概率越大。
server 127.0.0.1:28083 weight=2;
}
#当前的nginx配置
server {
listen 80;#侦听端口号
server_name localhost;
#当前服务的域名.如果是localhost:8080的请求,则交给jeffrey.com的集群来处理。
location / {
proxy_pass http://test.com ;
#与服务器集群的名称一致
proxy_redirect default;
}
location = /50x.html {
root html;
}
}
3.关闭nginx :
(1)nginx -s stop
(2)nginx -s quit
4.这里出现一个新问题:
(1)一个服务器挂掉后,nginx不会立刻判断其死亡,而是等待,但是死掉的服务器里的信息怎么办?
(2)一个应用通常有多个服务器,登录成功后,session只会在一台存储,想要多台服务器都识别到这个session,后端统一存储。
(3)所以,集群产生的新问题:session共享。
5.解决session共享:
(1)session复制
(2)后端统一存储,后端统一找一个中间件将Session存起来即可,这个中间件是数据库redis或者缓存。此时,tomcat作为客户端,redis作为服务端。
(3)不要使用session。
6.redis实现session共享
7.改写tomcat底层
8.三个session的jar包复制到tomcat下的lib中,commons-pool2-2.2.jar,jedis-
2.5.2.jar,tomcat-redis-session-manager-2.0.0.jar。
9.安装redis server
10.tomcat修改conf/context.xml,新增
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
启动redis-server.exe
//启动
redis-server redis.windows.conf
//关闭
shutdown
启动tomcat,启动nginx;
11.nginx,tomcat,redis集群中。redis处理了两件事情,session共享,缓存。
缓存的问题,缓存穿透和击穿。
缓存处理流程:
12.前台请求,后台先从缓存中取数据,取到直接返回结果。
取不到时从数据库中取,数据库取到更新缓存,并返回结果。
数据库也没取到,那直接返回空结果。