目录
一.tomcat的优化
二.nginx+tomcat负载均衡、动静分离
三.nginx的反向代理类型
四.nginx的调度算法(调度策略、负载均衡模式)
五.nginx反向代理如何实现会话保持
tomcat的优化分为:系统优化,配置文件参数优化,JVM优化(java虚拟机)。
配置文件优化,修改配置文件:
系统内核优化:/etc/security/limits.conf(内核限制文件 )noproc 打开的进程数,nofile打开的文件数,memlock unlimited 不做内存锁定。
/etc/sysctl.conf(内核参数配置文件 )net.ipv4.tcp_tw_reuse = 1开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接;net.ipv4.tcp_tw_recycle = 1 开启TCP连接中TIME-WAIT sockets的快速回收;net.ipv4.tcp_keepalive_time = 600 发送keepalive探测包消息的频率,确认客户端是否断网;net.ipv4.tcp_fin_timeout = 30 修改系默认的 TIMEOUT 时间
net.ipv4.tcp_syncookies = 1 开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击。
java虚拟机JVM优化:修改/usr/local/tomcat/bin/catalina.sh,在 cygwin=false 配置前添加 JAVA_OPTS 参数 JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m -XX:ParallelGCThreads=2"
-server:启动Server模式 多核服务器性能更佳
-Xms2048m -Xmx2048m:设置JVM堆内存初始值和最大值为一样大,一般设置为物理内存的1/2
-XX:PermSize=1024m -XX:MaxPermSize=1024m: 设置永久代(非堆内存)初始值和最大值为一样大,一般设置为物理内存的1/4。
由于nginx不能处理动态页面的请求,只能转发给tomcat来处理。客户端发送的静态页面是nginx本身自己处理,动态页面则是由nginx作为客户端转发给tomcat来处理动态,并返回给nginx。
跟着上面步骤继续操作,在tomcat网页页面下添加网页内容:
在到另一台多实例部署的tomcat主机上添加网页页面:
到tomcat1中添加:
在到tomcat2中添加:
访问下页面:
现在我们已经准备好了tomcat配置,我们到另一台主机上设置nginx:
先创建网页目录,做静态资源内容:
在添加图片:
回到nginx的配置文件目录下,并修改配置文件:
要有空格。
重启后看下状态:
访问页面(注意访问时先清除缓存记录在访问):
静态页面:
动态页面:
每次刷新都能显示不一样的页面。我们访问的是nginx服务器,在网页目录下没有ky33这个网页目录及内容,是通过tomcat来进行处理的。
四层反向代理 :基于 IP + PORT 实现的代理转发(根据IP和PORT来转发请求),通常用于做客户端的访问入口和负载均衡器等应用场景。
配置:
1,编译安装需要 ./configure --with-stream 添加四层代理模块
2,在 http 同层级,一般在 http 配置块上面添加 stream 配置块,在里面定义服务器池、监听端口和转发配置
七层反向代理:基于 http、https、mail 等七层应用协议的代理转发(根据用户访问请求的URL路径来转发请求),通常用于动静分离等应用场景。
配置:
1,在 http 配置块中设置 upstream 定义 后端/上游服务器池的名称和节点参数
2,在 server 配置块中用 location 匹配用户访问请求的URL路径,使用 proxy_pass 基于协议转发请求
需要再准备两台服务器:
切换到配置好nginx的服务器test3上,远程复制nginx到test4上:
看下有没有nginx:
在下载依赖包:
到test3中复制网页目录到test4中:
在将由systemd管理的文件复制过去:
到test4中开启nginx:
用test3和test4作为nginx四层代理的服务器。
到两台服务器的网页内容进行修改下,方便识别:
访问网页:
建议把双方的长连接配置关闭掉,避免等待:
在到test5上做nginx四层代理:
进行本地yum源安装nginx:
切换到nginx 的配置文件目录内:
修改配置文件下添加stream模块:
检查配置文件是否错误:
访问静态页面:
访问动态页面:
轮询(round robin、rr) nginx默认的调度算法,按照时间顺序逐一分配请求
加权轮询(weight round robin、wrr) 使用weight参数设置权重,weight值越高的后端节点被分配请求的概率越大
least_conn(最小连接、最少连接) 优先给当前连接数最少的后端节点分配请求
ip_hash(源地址哈希) 根据客户端IP做hash缓存调度,分配请求给固定的一个后端节点
url_hash 根据客户端访问的URL路径做hash缓存调度,分配请求给固定的一个后端节点,需另外安装第三方模块
fair 优先给响应时间最少的后端节点分配请求,需另外安装第三方模块
random 随机分配
hash $remote_addr(nginx全局变量) consistent 一致性hash算法,根据客户端IP做hash调度,是ip_hash的加强版
1.ip_hash url_hash 一致性hash算法 基于客户端IP或访问的URL路径做哈希缓存实现会话保持,但是容易导致负载失衡
2.sticky_cookie_insert 另外安装第三方的sticky模块,基于cookie来判断实现会话保持
3.通过redis等数据库做session复制,使用后端服务器自身通过相关机制保持session同步来实现会话保持