美文网首页
01_nginx与Tomcat搭建负载均衡

01_nginx与Tomcat搭建负载均衡

作者: 王康健_0124 | 来源:发表于2019-03-19 18:28 被阅读0次

https://blog.51cto.com/zero01/2112989

第一步、搭建Tomcat

下载最新的Tomcat安装包(我选择了最新版的)

官网地址:`https://tomcat.apache.org/

如果下载到本机,可以用xftp上传到需要安装的linux上,路径 /usr/local/src/ ,我使用wget下载。
右键tar.gz,复制链接地址:http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz然后去linux主机上,wget 下载

  • Linux操作步骤:可按步骤命令搭建负载均衡环境
进入要下载的文件的目录
cd /usr/local/src/ 

下载选择的Tomcat包
wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz

解压
tar -zvxf apache-tomcat-9.0.16.tar.gz

因为等会要与Nginx做负载均衡,所以创建两个tomcat文件
先复制一份到制定的路径下
cp -r apache-tomcat-9.0.16 /usr/local/tomcat01
再把原文件移动到刚刚相同的文件的目录下
mv apache-tomcat-9.0.16 /usr/local/tomcat02

修改Tomcat配置文件
cd /usr/local/tomcat01/conf/
vim server.xml
修改内容:下图
注意:一共是三个地方,按顺序从上往下改

修改tomcat访问页面的内容(等会区分负载均衡是否配置成功用)
vim /usr/local/tomcat01/webapps/ROOT/index.jsp
添加:echo "-----------first  tomcat------------"

vim /usr/local/tomcat02/webapps/ROOT/index.jsp
添加:echo "-----------second  tomcat------------"

  • Tomcat是java程序,所以在运行Tomcat前面,需要配置jdk,如果有配置了jdk可以跳过这段
cd /usr/local/src/
官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
建议不要用wget现在,这样下载下来用tar解压不了
具体的下载的包包含在这个页面的一个link中,因此运行上述下载命令下载的实际是一个html的page。
file XXXXX.tar.gz
XXXXX.tar.gz: HTML document
所以报错的原因在这里,而不是解压命令不对的问题
下载到Windows上,通过xftp上传到/usr/local/src/路径下,然后解压

wget下载的包QAQ,所以....

配置java环境变量 
vim /etc/profile
在最后面 添加下面配置
export JAVA_HOME=/usr/local/src/jdk1.8.0_201
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

启动tomcat01文件下的tomcat服务
cd ../bin/
sh startup.sh

tomcat01启动成功!

启动tomcat02
sh /usr/local/tomcat02/bin/startup.sh

tomcat02启动成功

二、搭建nginx

  • Nginx与Redis一样,都是C语言开发的,所以都需要在Linux上使用C语言编译后才能使用,所以得先安装用于编译的c环境
    安装Redis时,只需要安装下面第一项的"yum install gcc-c++"即可;nginx则需要安装下面4项
安装gcc-c++
yum install gcc-c++
检查是否安装
rpm -q gcc-c++

下载pcre
cd /usr/local/src/
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz

下载zlib
wget http://zlib.net/zlib-1.2.11.tar.gz

下载openssl
wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz

下载nginx
wget http://nginx.org/download/nginx-1.14.2.tar.gz


解压
tar -zxvf nginx-1.14.2.tar.gz
tar -zxvf pcre-8.39.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
tar -zxvf openssl-1.0.2r.tar.gz

安装PCRE库
cd pcre-8.39
./configure
make
make install

安装zlib库
cd /usr/local/src/zlib-1.2.11
./configure
make
make install

安装openssl
cd /usr/local/src/openssl-1.0.2r
./config
make   (时间有点长哦)
make install   (时间也有点长哦)

安装nginx
cd /usr/local/src/nginx-1.14.2
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre=../pcre-8.39 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2r

make
make install
cd /usr/local/nginx/sbin/
启动nginx
./nginx

浏览器输入ip查看是否启动成功

第二步安装nginx已经大


三、配置stub_status 模块(后面做性能分析用)

备份旧文件
mv nginx nginx.bak
将编译好的nginx执行文件拷贝到启动的目录
cp /usr/local/src/nginx-1.14.2/objs/nginx /usr/local/nginx/sbin/
编辑配置文件,如下:开启stub_status 
vim /usr/local/nginx/conf/nginx.conf
在server下添加:
 location /nginx_status {
         stub_status on;
         access_log off;
       }

重启nginx,重新加载nginx配置文件
./nginx -s reload
访问如下命令
curl 127.0.0.1/nginx_status

Active connections: 1 
server accepts handled requests
 4 4 4 
Reading: 0 Writing: 1 Waiting: 0 

或者百度(我用的是自己的linux公网,如果你在本机安装的,请用你自己的ip)
http://118.31.57.104/nginx_status

nginx_status展现字段 含义描述
Active connections 对上游服务发起的连接数
Server accepts handled requests 总共处理了10个连接,成功创建10次握手(证明中间没有失败的),总共处理了63个请求.
Reading: nginx读取到客户端的Header信息数
Writing nginx返回给客户端的Header信息数.

需要注意的是如果reading或writing的值很高,说明正在处理的数据量很大,可能是因为后端的动态就用程序处理慢,这个时候需要对后端进行优化。
Waiting: 开启keep-alive的情况下,这个值等于 Active – (Reading + Writing),意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接.所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.waiting的意思就是已经将请求处理完毕,并且把数据已经返回给了客户端,已经闲置在等待接受下次请求了,因此这个值比较高往往说明请求处理的很快。一般应该是writing和reading越小“越好”,而waiting越高“越好”。

四、nginx和Tomcat做负载均衡
nginx和Tomcat做负载均衡其实主要玩的就是nginx的conf文件配置

进入nginx配置文件
cd /usr/local/nginx/conf/
vim conf/nginx.conf
listen 80;代表监听80端口
server_name xxx.com;代表外网访问的域名(losthost本机)
location / {};代表一个过滤器,/匹配所有请求,
我们还可以根据自己的情况定义不同的过滤,比如对静态文件js、css、image制定专属过滤
root html;代表站点根目录
index index.html;代表默认主页

这样配置完毕我们输入域名就可以访问到该站点了。

  • 负载均衡功能往往在接收到某个请求后分配到后端的多台服务器上,那我们就需要upstream{}块来配合使用,配置如下:
    upstream webservers {
         server 118.31.57.104:8081 weight=1;
         server 118.31.57.104:8081 weight=2;
        }
            proxy_pass  http://webservers;
            proxy_redirect default;

conf文件配置解释

nginx.conf变量 描述
upstream xxx{} upstream模块是命名一个后端服务器组,内部可以写多台服务器ip和port,还可以设置跳转规则及权重等等(XXX规范点就写服务器站点的域名)
ip_hash 代表使用ip地址方式分配跳转后端服务器,同一ip请求每次都会访问同一台后端服务器(我这边没有配置)
server 代表后端服务器地址
weight 转发请求的权重,等会下面单独列一个模块写
server{} server模块依然是接收外部请求的部分
server_name 代表外网访问域名,losthost就是指本机的ip
location / {} 同样代表过滤器,用于制定不同请求的不同操作
proxy_pass 代表后端服务器组名,upstream 后的XXX
proxy_redirect 当后端服务做302、301跳转的时候,需要用proxy_redirect将后端设置在response header中的Location做转换(default:我不想让他生效)

server_name和upstream{}的组名可以不一致,server_name是外网访问接收请求的域名,upstream{}的组名是跳转后端服务器时站点访问的域名

重启nginx,查看负载均衡是否成功
cd /usr/local/nginx/sbin/
./nginx -s reload
在浏览器输入ip然后刷新:因为我weight设置的是1,2,所以:没三次刷新
first tomcat显示一次
second tomcat显示两次
含义:nginx接受到了浏览器的请求,然后转发给upstream 中配置的Tomcat服务器,按照weight的权重配置进行转发

到这里就大功告成了~
下篇介绍Tomcat的性能监控和nginx负载均衡里每个Tomcat搭建bugfree应用程序

(以下是拷贝别人的,本身也不是很理解,还没有那样配置过,测试小白路过)

upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。
缺点:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

ip_hash(访问ip)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream favresin{ 
      ip_hash; 
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
}

fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

 upstream favresin{      
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
      fair; 
}

url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

 upstream resinserver{ 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32; 
}

upstream还可以为每个设备设置状态值,这些状态值的含义分别如下:

upstream配置 含义
down 表示单前的server暂时不参与负载.
weight weight 默认为1.weight越大,负载的权重就越大。
max_fails 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
fail_timeout max_fails次失败后,暂停的时间。
backup 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态

      ip_hash; 
      server 10.0.0.11:9090 down; 
      server 10.0.0.11:8080 weight=2; 
      server 10.0.0.11:6060; 
      server 10.0.0.11:7070 backup; 
}

相关文章

网友评论

      本文标题:01_nginx与Tomcat搭建负载均衡

      本文链接:https://www.haomeiwen.com/subject/jtirmqtx.html