【Nginx】 大名鼎鼎,麻雀虽小五脏俱全,它拥有小而稳且高效的特性。
为目前大多数中小企业所利用。
nginx可以做以下几件事:

反向代理负载均衡动静分离网页、图片缓存

Tomcat】 是一个免费开放源代码的 Web 运用做事器,具有开源免费、随意马虎安装、 随意马虎使 用、占用资源小、易于和其他软件集成等优点。
Tomcat 很受广大程序员的喜好,由于它运行时占用的系统资源小,扩展性好,支持负载 平衡与邮件做事等开拓运用系统常用的功能;而且它还在不断的改进和完善中,任何一个感 兴趣的程序员都可以变动它或在个中加入新的功能。

【N+T的负载均衡】

jsp禁止f5刷新Linux下Nginx多Tomcat负载平衡实现详解 Ruby

然而他们的组合将是一把无与伦比的利刃。
首先解释一下它的要求事理(路径走向)

Nginx作为反向代理做事器,实现负载均衡。
首先浏览器发起要求,到达Nginx,由Nginx将要求地址转发给相应的tomcat做事器,再由tomcat做事器将结果返回给Nginx,Nginx将结果再转发给浏览器。

下面上图:

图中的信息显而易见,以nginx做事器作为中转分发要求,以达到负载均衡的目的。

二、环境需求

【由于博主的主机(酡颜~)配置低,以是只开一开虚拟机作为这次负载均衡的测试。
一个ip三个端口既可实现上图所述的效果了】

主机A:192.168.0.144/24

apache-tomcat-6.0.35.tar.gz tomcat 6 利用的紧张端口:18080

apache-tomcat-7.0.82.tar.gz tomcat 7 利用的紧张端口:28080

apache-tomcat-8.5.23.tar.gz tomcat 8 利用的紧张端口: 8088

nginx-1.0.12.tar.gz

jdk7u79linuxx64.tar.gz

(其他一些根本环境比如gcc-c++的自己补全吧)

三、各个环境的搭建

3.1 Nginx搭建

先把所有准备好的软件工具放到一个目录下(都先准备好必用软件,不然配置起来才去找软件是很烦人的)

[root@N+T lhl]# ll total 175172 -rw-r--r-- 1 root root 9472492 Dec 1 2017 apache-tomcat-8.5.23.tar.gz -rw-r--r-- 1 root root 153512879 Dec 7 2017 jdk7u79linuxx64.tar.gz -rw-r--r-- 1 root root 691002 May 9 2012 nginx-1.0.12.tar.gz -rw-r--r-- 1 root root 15692490 Nov 29 2017 Tomcat6-7.zip

接下来安装一下开拓环境

[root@N+T lhl]# yum -y install gcc gcc-c++

在/usr目录下面创建一个nginx的目录,并把nginx包移动到该目录下,再解压到该目录下面

[root@N+T lhl]# mkdir -p /usr/nginx [root@N+T lhl]# mv nginx-1.0.12.tar.gz /usr/nginx/ &&cd /usr/nginx/&&tar -zxvf nginx-1.0.12.tar.gz

最好进入nginx-1.0.12目录,再编译安装

[root@N+T nginx-1.0.12]# ./configure &&make &&make install

一样平常编译安装都默认在/usr/local/nginx/ 目录下面 ,下面这个便是nginx的主程序。

[root@N+T sbin]# ll /usr/local/nginx/sbin/nginx -rwxr-xr-x 1 root root 954836 Aug 16 04:43 /usr/local/nginx/sbin/nginx

本博文为了搭建的方便直接把这个主程序拉倒/usr/bin/ 目录下了

[root@N+T sbin]# cp -a /usr/local/nginx/sbin/nginx /usr/bin/

下面是配置文件

[root@N+T sbin]# ll /usr/local/nginx/conf/nginx.conf

大略的配置了一下配置文件

#####nginx+3 T 负载均衡测试############ #####最简化的配置文件了--############### user nobody; #对付用户有安全性限定的伙伴可以创建一个账户去利用 worker_processes 1; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 60; #大略文本显示格式编辑 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 8 128k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_temp_path /dev/shm; server{ listen 80; server_name localhost; access_log /var/log/nginx/aeecss.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://li7105.com; proxy_redirect default; } } }

下面运行nginx,查看信息

[root@N+T sbin]# /usr/bin/nginx -c /usr/local/nginx/conf/nginx.conf [root@N+T sbin]# ps -ef | grep nginx root 1561 1 0 13:04 ? 00:00:00 nginx: master process /usr/bin/nginx -c /usr/local/nginx/conf/nginx.conf www 1562 1561 0 13:04 ? 00:00:00 nginx: worker process root 1709 1573 0 18:49 pts/1 00:00:00 grep --color nginx

把稳:nginx没有启动起来,麻烦去负责的检讨一下nginx配置文件。

PS:开机警活启动的话,直接把启动代码丢进rc.local这个文件里面即可。

[root@N+T lhl]# echo \"大众/usr/bin/nginx -c /usr/local/nginx/conf/nginx.conf\"大众 >> /etc/rc.d/rc.local

nginx的基本支配完成!

3.2 Tomcat 的搭建

由于tomcat依赖于jdk环境下运行,以是先搭建jdk环境,配置变量环境

[root@N+T lhl]# mkdir /usr/java/ [root@N+T lhl]# mv jdk7u79linuxx64.tar.gz /usr/java/ && cd /usr/java/ && tar -zxvf jdk7u79linuxx64.tar.gz [root@N+T java]# ll total 4 drwxr-xr-x 8 uucp 143 4096 Apr 11 2015 jdk1.7.0_79 [root@N+T java]# cd jdk1.7.0_79/ [root@N+T jdk1.7.0_79]# pwd #看清楚路径 /usr/java/jdk1.7.0_79 [root@N+T jdk1.7.0_79]#

PS:关于软件依赖的变量环境

就目前来去为一个软件或者环境的运行去搭建变量环境紧张用下面三种方法

1、在/etc/profile下配置,这属于大环境的配置了。
不过管理上不灵巧,属于点到面的管理(本博文由于只有这个tomcat用到,以是在这配置了)

2、在/etc/profile.d/目录下面创建一个专属的变量环境如:tomcat.sh 在里面指的变量路径以及文件路径,这种办法管理很灵巧,属于点到点的管理。

3、在软件的某个文本下面去直接添加指定的变量环境,如tomcat的。

[root@N+T bin]# pwd /usr/tomcatG/tomcat6/bin [root@N+T bin]# ll total 612 -rw-r--r-- 1 root root 22705 Nov 28 2011 bootstrap.jar -rw-r--r-- 1 root root 11830 Nov 28 2011 catalina.bat -rwxr-xr-x 1 root root 17708 Nov 28 2011 catalina.sh -rw-r--r-- 1 root root 2374 Nov 28 2011 catalina-tasks.xml -rw-r--r-- 1 root root 24172 Nov 28 2011 commons-daemon.jar -rw-r--r-- 1 root root 199623 Nov 28 2011 commons-daemon-native.tar.gz -rw-r--r-- 1 root root 1342 Nov 28 2011 cpappend.bat -rw-r--r-- 1 root root 2108 Nov 28 2011 digest.bat -rwxr-xr-x 1 root root 1689 Nov 28 2011 digest.sh -rw-r--r-- 1 root root 3150 Nov 28 2011 setclasspath.bat -rwxr-xr-x 1 root root 4153 Aug 16 10:57 setclasspath.sh ###在这个文件里面指定变量环境 -rw-r--r-- 1 root root 2108 Nov 28 2011 shutdown.bat -rwxr-xr-x 1 root root 1628 Nov 28 2011 shutdown.sh -rw-r--r-- 1 root root 2109 Nov 28 2011 startup.bat -rwxr-xr-x 1 root root 2023 Nov 28 2011 startup.sh -rw-r--r-- 1 root root 32277 Nov 28 2011 tomcat-juli.jar -rw-r--r-- 1 root root 249259 Nov 28 2011 tomcat-native.tar.gz -rw-r--r-- 1 root root 3479 Nov 28 2011 tool-wrapper.bat -rwxr-xr-x 1 root root 3472 Nov 28 2011 tool-wrapper.sh -rw-r--r-- 1 root root 2113 Nov 28 2011 version.bat -rwxr-xr-x 1 root root 1632 Nov 28 2011 version.sh [root@N+T bin]#

setclasspath.sh 里面指定。
软件的不同在不同的文件指定吧,这个可以在度娘查到。
第三种办法一样平常很少用到。

连续!
下面在/etc/profile下配置变量环境

export JAVA_HOME=/usr/java/jdk1.7.0_79/ #路径别弄错 export JAVA_BIN=$JAVA_HOME/bin export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

末了直接实行,使得文件profile生效

[root@N+T /]# source /etc/profile

接着实行 java -version 命令即可看到对应的版本号,解释已经生效了。
(在这里有些小伙伴会时常涌现一个问题,明明tomcat已经实在用这个

jdk版本了,可是输入命令java -version 显示出来的却不是目前tomcat在用的jdk版本,这时候该把稳一下查看tomcat下面的comment目录下的jdk版本是否对应的,不是的话。
就把jdk下的更换过去,其余我还有探求其余一种办理办法,希望各位见教。

jdk支配完毕!

3.3 tomcat 的搭建

在/usr 下创建tomcatG 的目录,并且把三个版本的tomcat拉到目录下分别改名为tomcat6、tomcat7、tomcat8。
末了分别解压,再修正server.xml 文档的端口

[root@N+T tomcatG]# ll total 12 drwxr-xr-x 9 root root 4096 Aug 16 10:27 tomcat6 drwxr-xr-x 9 root root 4096 Aug 16 10:49 tomcat7 drwxr-xr-x 9 root root 4096 Aug 16 11:11 tomcat8 [root@N+T tomcatG]#

下面修正tomcat6的server.xml文件:三处地方

1、

<Connector port=\"大众18080\公众 protocol=\公众HTTP/1.1\"大众 connectionTimeout=\"大众20000\"大众 redirectPort=\公众8443\公众 />

2、

<Connector port=\"大众18009\公众 protocol=\"大众AJP/1.3\"大众 redirectPort=\公众8443\公众 />

3、

<Server port=\"大众18005\"大众 shutdown=\公众SHUTDOWN\"大众>

剩下的tomcat7和tomcat8以此类推!

下面启动tomcat6-8

启动tomcat6:

[root@N+T bin]# pwd /usr/tomcatG/tomcat6/bin [root@N+T bin]# ll total 612 -rw-r--r-- 1 root root 22705 Nov 28 2011 bootstrap.jar -rw-r--r-- 1 root root 11830 Nov 28 2011 catalina.bat -rwxr-xr-x 1 root root 17708 Nov 28 2011 catalina.sh -rw-r--r-- 1 root root 2374 Nov 28 2011 catalina-tasks.xml -rw-r--r-- 1 root root 24172 Nov 28 2011 commons-daemon.jar -rw-r--r-- 1 root root 199623 Nov 28 2011 commons-daemon-native.tar.gz -rw-r--r-- 1 root root 1342 Nov 28 2011 cpappend.bat -rw-r--r-- 1 root root 2108 Nov 28 2011 digest.bat -rwxr-xr-x 1 root root 1689 Nov 28 2011 digest.sh -rw-r--r-- 1 root root 3150 Nov 28 2011 setclasspath.bat -rwxr-xr-x 1 root root 4153 Aug 16 10:57 setclasspath.sh -rw-r--r-- 1 root root 2108 Nov 28 2011 shutdown.bat -rwxr-xr-x 1 root root 1628 Nov 28 2011 shutdown.sh #这是停滞 -rw-r--r-- 1 root root 2109 Nov 28 2011 startup.bat -rwxr-xr-x 1 root root 2023 Nov 28 2011 startup.sh #启动 -rw-r--r-- 1 root root 32277 Nov 28 2011 tomcat-juli.jar -rw-r--r-- 1 root root 249259 Nov 28 2011 tomcat-native.tar.gz -rw-r--r-- 1 root root 3479 Nov 28 2011 tool-wrapper.bat -rwxr-xr-x 1 root root 3472 Nov 28 2011 tool-wrapper.sh -rw-r--r-- 1 root root 2113 Nov 28 2011 version.bat -rwxr-xr-x 1 root root 1632 Nov 28 2011 version.sh [root@N+T bin]# ./startup.sh

如图所示!

tomcat 7-8以此类推!

再看一下三个tomcat启动的进程。

[root@N+T bin]# ps -ef |grep tomcat root 1278 1 0 13:50 ? 00:00:10 /usr/java/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/usr/tomcatG/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/tomcatG/tomcat7/endorsed -classpath /usr/tomcatG/tomcat7/bin/bootstrap.jar:/usr/tomcatG/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/tomcatG/tomcat7 -Dcatalina.home=/usr/tomcatG/tomcat7 -Djava.io.tmpdir=/usr/tomcatG/tomcat7/temp org.apache.catalina.startup.Bootstrap start start root 1287 1 0 13:50 ? 00:00:13 /usr/java/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/usr/tomcatG/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /usr/tomcatG/tomcat8/bin/bootstrap.jar:/usr/tomcatG/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/usr/tomcatG/tomcat8 -Dcatalina.home=/usr/tomcatG/tomcat8 -Djava.io.tmpdir=/usr/tomcatG/tomcat8/temp org.apache.catalina.startup.Bootstrap start start root 1301 1 0 13:50 ? 00:00:08 /usr/java/jdk1.7.0_79/jre/bin/java -Djava.util.logging.config.file=/usr/tomcatG/tomcat6//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/tomcatG/tomcat6//endorsed -classpath /usr/tomcatG/tomcat6//bin/bootstrap.jar -Dcatalina.base=/usr/tomcatG/tomcat6/ -Dcatalina.home=/usr/tomcatG/tomcat6/ -Djava.io.tmpdir=/usr/tomcatG/tomcat6//temp org.apache.catalina.startup.Bootstrap start root 1509 1418 0 15:02 pts/0 00:00:00 grep --color tomcat [root@N+T bin]#

可以看到,各个端口以及运行的变量环境(jdk)这个排版比较长,须要今后面拉取才能看到所有内容。

3.4 配置负载均衡

在nginx里面添加几条代码即可,下面请看

#####nginx+3 T 负载均衡测试############ user nobody; worker_processes 1; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 60; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 8 128k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_temp_path /dev/shm; upstream li7105.com { #在此插入 server 127.0.0.1:18080 weight=1; #tomcat6分流 weight=1 这是权重分配。
server 127.0.0.1:28080 weight=2; #tomcat7分流 weight=2 显然2更大,那么它被分配任务的几率也就更大 server 127.0.0.1:8088 weight=2; #tomcat8分流 } server{ listen 80; server_name localhost; access_log /var/log/nginx/aeecss.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://li7105.com; proxy_redirect default; } } }

【关于nginx的负载均衡的分配办法】

nginx关于这个负载均衡方面的权重分配办法有4种:

1.轮询,默认采纳此办法,Nginx会按照要求韶光的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自动将其摘掉。

2.weight,权重,即轮询的几率,值越大,被分发的可能性越大,用于后端做事器性能不均的情形。

3. ip_hash ,每个要求按访问ip的hash结果分配,这样每个访客固定访问一个后端做事器,可以办理共享session的问题。

4.自定义规则

PS:

down 表示当前的Web Server暂时不参与负载

weight 默认为1.weight越大,负载的权重就越大。

backup: 其它所有的非backup Server down或者忙的时候,要求backup机器。
以是这台机器压力会最轻。

四、负载均衡的测试

为了是的测试的效果明了些,我把/usr/tomcatG/tomcat6/webapps/ROOT 目录下的index.jsp 文件的内容全部删除掉,直接改为tomcat6 ,7-8一样如此。

[root@N+T ROOT]# cat index.jsp I am Tomcat 6666666666666!

在测试之前须要检讨一下,下面几个个问题。
确保没问题了,就去测试,不然返回来做无用功了。

1、nginx、tomcat、jdk正在运行

2、网页上能够哦正常访问nginx 和 tomcat

3、防火墙

我就在本地主机上面的浏览器测试吧,由于跟物理机是连通的。

在浏览器输入:http://192.168.0.144/index.jsp 然后一直按F5刷新网页,接着网页会一直的在tomcat6、tomcat7、tomcat8的内容标识上面做跳转,显示的内容也会不一样。

如图:

一直的刷新,看着页面的变革。
你会创造权重即是1的tomcat6涌现的次数会比tomcat7和tomcat8的次数很多的。

上面只是个大略的测试,有兴趣的伙伴可以添加去修正这个jsp文档,哈哈。

上述图片解释了nginx的负载均衡是正在运行中的了。
测试完毕!

五、总结

在搭建这个环境须要把稳的几点:

1、tomcat的端口,由于是在一台机器上面支配3个tomcat,以是改的端口就有9个了。
主机端口的范围,超出范围不然tomcat是无法启动的

2、jdk变量环境的搭建,把稳路径。

3、nginx 配置文档的参数、模块把稳编写。
不然无法启动

4、把稳防火墙设置,对付需求安全性的伙伴们。
当然测试你可以完备的关闭掉。

nginx和tomcat的负载均衡,基本配置完毕,这类型的负载均衡目前在很多的企业被利用。
然而这仅仅是企业网络架构中的一个小小的部分,我期待后面能够给大家讲述更多关于这方面的知识。