马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Nginx+Tomcat负载平衡、动静分离
一、Nginx 应用
Nginx是一款非常精良的HTTP服务器软件,支持高达50,000个并发毗连数的相应,拥有强大的静态资源处理处罚本事。其运行稳固,且对内存、CPU等体系资源的斲丧非常低。如今,许多大型网站都应用Nginx服务器作为后端网站步调的反向署理及负载平衡器,以提拔整个站点的负载并发本事。
二、正向署理和反向署理
1.1 正向署理
1.1.1 什么是正向署理
正向署理署理的是客户端去访问服务器,目标是加快访问速率。当客户端访问一台服务器有停滞时,可以通过一台可以访问到该服务器的署理服务器来实现访问。客户端发送哀求给署理服务器,署理服务器再去访问目标服务器,并将返回数据转达给客户端。正向署理可以屏蔽或埋伏客户端的信息。
1.2 反向署理(单级)
1.2.1 什么是反向署理
反向署理署理的是服务端,常用于负载平衡。反向署理服务器埋伏了服务器的信息,常用于多台服务器的分布式摆设。客户端发来的哀求先由反向署理服务器吸收,然后按肯定规则分发到详细的服务器,客户端无法知道详细是哪台服务器相应了哀求。
三、负载平衡模式
1.1 轮询(Round Robin)
1.1.1 轮询算法
轮询算法是Nginx的默认分流算法,按序次将哀求依次分配给每一台后端服务器,直到末了一台服务器,然后重新从第一台服务器开始。这种方法简单且匀称地分配流量。
设置示例:- upstream backend {
- server backend1.example.com;
- server backend2.example.com;
- server backend3.example.com;
- }
复制代码 1.2 最少毗连数(Least Connections)
1.2.1 最少毗连数算法
最少毗连数算法将哀求分配给当前活动毗连数最少的服务器,实用于哀求处理处罚时间不匀称的情况,可以有用平衡服务器的负载。
设置示例:- upstream backend {
- least_conn;
- server backend1.example.com;
- server backend2.example.com;
- server backend3.example.com;
- }
复制代码 1.3 IP 哈希(IP Hash)
1.3.1 IP 哈希算法
IP 哈希算法通过盘算客户端 IP 地点的哈希值,将哀求始终分配给同一台服务器,实用于须要将特定客户端的哀求固定在同一台服务器上的场景。
设置示例:- upstream backend {
- ip_hash;
- server backend1.example.com;
- server backend2.example.com;
- server backend3.example.com;
- }
复制代码 1.4 加权轮询(Weighted Round Robin)
1.4.1 加权轮询算法
加权轮询算法允许为每台服务器设置权重,权重越大的服务器将会得到更多的哀求,实用于服务器性能不平衡的情况。
设置示例:- upstream backend {
- server backend1.example.com weight=3;
- server backend2.example.com weight=1;
- server backend3.example.com weight=2;
- }
复制代码 1.5 最少时间算法(Least Time)
1.5.1 最少时间算法
最少时间算法基于哀求的相应时间,将哀求分配给相应时间最短的服务器。这种算法实用于须要最大化相应速率的场景。
设置示例:- upstream backend {
- least_time header;
- server backend1.example.com;
- server backend2.example.com;
- server backend3.example.com;
- }
复制代码 1.6 划一性哈希(Consistent Hashing)
1.6.1 划一性哈希算法
划一性哈希算法包管当集群中某台服务器故障时,只有部分哀求会重新分配到其他服务器,而不是全部重新分配,这在缓存等场景中非常有用。
设置示例:- upstream backend {
- hash $request_uri consistent;
- server backend1.example.com;
- server backend2.example.com;
- server backend3.example.com;
- }
复制代码 四、规划摆设负载平衡和反向署理
1.1 摆设Nginx负载平衡器
1.1.1 安装和设置Nginx
起首克制防火墙并关闭SELinux:- systemctl stop firewalld
- setenforce 0
复制代码 然后安装所需依赖,并创建Nginx用户:- yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
- useradd -M -s /sbin/nologin nginx
复制代码 接下来下载并解压Nginx源代码,进入目次举行设置:- cd /opt
- tar zxvf nginx-1.20.2.tar.gz -C /opt/
- cd nginx-1.20.2/
- ./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 --with-http_ssl_module
- make && make install
复制代码 创建Nginx服务:- vim /lib/systemd/system/nginx.service
复制代码 内容如下:- [Unit]
- Description=nginx
- After=network.target
- [Service]
- Type=forking
- PIDFile=/usr/local/nginx/logs/nginx.pid
- ExecStart=/usr/local/nginx/sbin/nginx
- ExecReload=/bin/kill -s HUP $MAINPID
- ExecStop=/bin/kill -s QUIT $MAINPID
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target
复制代码 启动Nginx服务并设置开机启动:- chmod 754 /lib/systemd/system/nginx.service
- systemctl start nginx.service
- systemctl enable nginx.service
复制代码 1.2 摆设2台Tomcat应用服务器
1.2.1 Tomcat服务器设置
起首克制防火墙并关闭SELinux:- systemctl stop firewalld
- setenforce 0
复制代码 安装JDK:- tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
复制代码 设置情况变量:添加以下内容:- export JAVA_HOME=/usr/local/jdk1.8.0_91
- export JRE_HOME=${JAVA_HOME}/jre
- export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
- export PATH=${JAVA_HOME}/bin:$PATH
复制代码 应用情况变量:解压Tomcat并启动:- tar zxvf apache-tomcat-8.5.16.tar.gz
- mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
- /usr/local/tomcat/bin/shutdown.sh
- /usr/local/tomcat/bin/startup.sh
复制代码 五、动静分离设置
1.1 Tomcat1 服务器设置
1.1.1 设置动态页面
在Tomcat1服务器上创建动态页面:- mkdir /usr/local/tomcat/webapps/test
- vim /usr/local/tomcat/webapps/test/index.jsp
复制代码 添加以下内容:- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <html>
- <head>
- <title>JSP test1 page</title>
- </head>
- <body>
- <% out.println("动态页面 1,http://www.test1.com");%>
- </body>
- </html>
复制代码 编辑server.xml文件:- vim /usr/local/tomcat/conf/server.xml
复制代码 设置内容如下:- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
- <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
- </Context>
- </Host>
复制代码 重启Tomcat:- /usr/local/tomcat/bin/shutdown.sh
- /usr/local/tomcat/bin/startup.sh
复制代码 1.2 Tomcat2 服务器设置
1.2.1 设置动态页面
在Tomcat2服务器上创建动态页面:- mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
- vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
复制代码 添加以下内容:- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <html>
- <head>
- <title>JSP test2 page</title>
- </head>
- <body>
- <% out.println("动态页面 2,http://www.test2.com");
- %>
- </body>
- </html>
复制代码 编辑server.xml文件:- vim /usr/local/tomcat/tomcat1/conf/server.xml
复制代码 设置内容如下:- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
- <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
- </Host>
复制代码 重启Tomcat:- /usr/local/tomcat/tomcat1/bin/shutdown.sh
- /usr/local/tomcat/tomcat1/bin/startup.sh
复制代码 1.3 Nginx 服务器设置
1.3.1 设置静态页面和负载平衡
创建静态页面和静态图片目次:- echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
- mkdir /usr/local/nginx/html/img
- cp /root/game.jpg /usr/local/nginx/html/img
复制代码 编辑Nginx设置文件:- vim /usr/local/nginx/conf/nginx.conf
复制代码 设置内容如下:- http {
- upstream tomcat_server {
- server 192.168.10.23:8080 weight=1;
- server 192.168.10.22:8080 weight=1;
- server 192.168.10.22:8081 weight=1;
- }
- server {
- listen 80;
- server_name www.kgc.com;
- charset utf-8;
- location ~ .*\.jsp$ {
- proxy_pass http://tomcat_server;
- proxy_set_header HOST $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
- root /usr/local/nginx/html/img;
- expires 10d;
- }
- location / {
- root html;
- index index.html index.htm;
- }
- }
- }
复制代码 六、测试结果
1.1 测试静态页面结果
在欣赏器中访问:
- 静态页面:http://192.168.10.19/
- 静态图片:http://192.168.10.19/game.jpg
1.2 测试负载平衡结果
不绝革新欣赏器访问:http://192.168.10.19/index.jsp,以测试负载平衡结果。
|