01_nginx与Tomcat搭建负载均衡

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; 
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容