💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
Nginx+Tomcat 负载均衡、动静分离集群
一、Nginx负载均衡实现原理
1、Nginx实现负载均衡是通过反向代理实现
2、反向代理原理
3、Nginx 配置反向代理的主要参数
(1) upstream 服务池名 {}
配置后端服务器池,比提供相应数据
(2)proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理
二、Nginx动静分离实现原理
1、动静分离原理
服务端接收来自客户端的请求中。既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
2、Nginx 静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器
1 Nginx 服务器:192.168.116.100:80 2 Tomcat服务器1:192.168.116.70:8080 3 Tomcat服务器2:192.168.116.120:8080 192.168.116.120:8081
2、部署Nginx 负载均衡器
1 systemctl stop firewalld 2 setenforce 0 3 4 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make 5 6 useradd -M -s /sbin/nologin nginx
1 cd /opt 2 tar zxvf nginx-1.12.0.tar.gz -C /opt/ 3 4 cd nginx-1.12.0/ 5 ./configure \ 6 --prefix=/usr/local/nginx \ 7 --user=nginx \ 8 --group=nginx \ 9 --with-file-aio \ #启用文件修改支持 10 --with-http_stub_status_module \ #启用状态统计 11 --with-http_gzip_static_module \ #启用 gzip静态压缩 12 --with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持 13 --with-http_ssl_module #启用 SSL模块,提供SSL加密功能 --with-stream #启用stream模块,开启四层调度 14 ---------------------------------------------------------------------------------------------------------- 15 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
--with-stream
1 make && make install 2 3 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 4 5 vim /lib/systemd/system/nginx.service 6 [Unit] 7 Description=nginx 8 After=network.target 9 [Service] 10 Type=forking 11 PIDFile=/usr/local/nginx/logs/nginx.pid 12 ExecStart=/usr/local/nginx/sbin/nginx 13 ExecrReload=/bin/kill -s HUP $MAINPID 14 ExecrStop=/bin/kill -s QUIT $MAINPID 15 PrivateTmp=true 16 [Install] 17 WantedBy=multi-user.target 18 19 chmod 754 /lib/systemd/system/nginx.service 20 systemctl start nginx.service 21 systemctl enable nginx.service
3、部署2台Tomcat 应用服务器
Tomcat应用服务器1
1 systemctl stop firewalld 2 setenforce 0 3 4 tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ 5 6 vim /etc/profile.d/java.sh 7 export JAVA_HOME=/usr/local/jdk1.8.0_91 8 export JRE_HOME=${JAVA_HOME}/jre 9 export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 10 export PATH=${JAVA_HOME}/bin:$PATH 11 12 source /etc/profile.d/java.sh
1 tar zxvf apache-tomcat-8.5.16.tar.gz 2 3 mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat 4 5 /usr/local/tomcat/bin/shutdown.sh 6 /usr/local/tomcat/bin/startup.sh 7 8 netstat -ntap | grep 808
4、动静分离配置
Tomca服务器1 配置
1 mkdir /usr/local/tomcat/webapps/test 2 vim /usr/local/tomcat/webapps/test/index.jsp 3 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 4 <html> 5 <head> 6 <title>JSP test1 page</title> #指定为 test1 页面 7 </head> 8 <body> 9 <% out.println("动态页面 1,http://www.test1.com");%> 10 </body> 11 </html>
1 vim /usr/local/tomcat/conf/server.xml 2 #由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置 3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 4 <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"> 5 </Context> 6 </Host> 7 8 /usr/local/tomcat/bin/shutdown.sh 9 /usr/local/tomcat/bin/startup.sh
Tomcat服务器2 配置(多实例)
Tomcat服务器2--第一实例配置
1 mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test 2 3 vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp 4 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 5 <html> 6 <head> 7 <title>JSP test2 page</title> #指定为 test2 页面 8 </head> 9 <body> 10 <% out.println("动态页面 2,http://www.test2.com");%> 11 </body> 12 </html>
1 vim /usr/local/tomcat/tomcat1/conf/server.xml 2 #删除前面的 HOST 配置 3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 4 <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" /> 5 </Host> 6 7 /usr/local/tomcat/tomcat1/bin/shutdown.sh 8 /usr/local/tomcat/tomcat1/bin/startup.sh
Tomcat服务器2--第二实例配置
1 vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp 2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 3 <html> 4 <head> 5 <title>JSP test3 page</title> #指定为 test3 页面 6 </head> 7 <body> 8 <% out.println("动态页面 3,http://www.test3.com");%> 9 </body> 10 </html>
1 vim /usr/local/tomcat/tomcat2/conf/server.xml 2 #删除前面的 HOST 配置 3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 4 <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" /> 5 </Host> 6 7 /usr/local/tomcat/tomcat2/bin/shutdown.sh 8 /usr/local/tomcat/tomcat2/bin/startup.sh
Nginx server 配置
1 #准备静态页面和静态图片 2 echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html 3 mkdir /usr/local/nginx/html/img 4 cp /root/game.jpg /usr/local/nginx/html/img 5 6 vim /usr/local/nginx/conf/nginx.conf 7 ...... 8 http { 9 ...... 10 #gzip on; 11 12 #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大 13 upstream tomcat_server { 14 server 192.168.116.70:8080 weight=1; 15 server 192.168.116.120:8080 weight=1; 16 server 192.168.116.120:8081 weight=1; 17 } 18 19 server { 20 listen 80; 21 server_name www.kgc.com; 22 23 charset utf-8; 24 25 #access_log logs/host.access.log main; 26 27 #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理 28 location ~ .*\.jsp$ { 29 proxy_pass http://tomcat_server; 30 #设置后端的Web服务器可以获取远程客户端的真实IP 31 ##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。 32 proxy_set_header HOST $host; 33 ##把$remote_addr赋值给X-Real-IP,来获取源IP 34 proxy_set_header X-Real-IP $remote_addr; 35 ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来 36 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 37 } 38 39 #配置Nginx处理静态图片请求 40 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { 41 root /usr/local/nginx/html/img; 42 expires 10d; 43 } 44 45 location / { 46 root html; 47 index index.html index.htm; 48 } 49 ...... 50 } 51 ...... 52 }
测试效果
1 测试静态页面效果 2 浏览器访问 http://192.168.116.100/ 3 浏览器访问 http://192.168.116.100/game.jpg 4 5 测试负载均衡效果,不断刷新浏览器测试 6 浏览器访问 http://192.168.116.100/index.jsp