您的位置:首页 > 运维架构 > 反向代理

CentOS 6.5 下 Nginx的反向代理和负载均衡的实现

2017-09-17 14:50 302 查看
一、环境:

一台虚拟机(VM 8.0),Linux系统 CentOS 6.5 版本;

两个甚至更多的Java Web应用服务器 tomcat 7.0(本篇只放置两个,JDK 1.8已安装)一个Nginx反向代理服务器,基本配置已完成,反向代理和负载均衡暂未配置。

二、什么是反向代理?

我们知道,大型web网站的访问量是相当大的,就拿某宝来说,单单一个双11,16年的成交量中,零点过后仅用52秒交易额就破了10亿,合计每秒2千万的交易额,假设每人贡献200元,那么每秒访问量就是10万次(当然,这只是最少的假设,毕竟很多人访问了,并没有交易,也就是每秒的访问量要远远大于这个数字),如果只有一台服务器,一个tomcat的话,那绝对不可能,一个Tomcat,500访问量还差不多,如果有100台的话,也还远远不够,因为访问可不止打开一个链接那么简单,如果服务器太少,访问请求的量比较大,且请求的内容比较复杂,那么,就算500台服务器,估计也够呛,高峰期,一样会崩掉,造成部分用户的请求丢失或者请求一直未响应,因此,对于某宝来说,至少也得是千级或万级以上的服务器集群。

那么问题来了,我们知道一个网站的域名地址只有一个,一台服务器上部署一套相同的Java web应用源码放在tomacat下面,两台就是两个tomcat,三台就是三个,但是每个tomact启动的时候,默认都是8080端口,且域名只有一个,我们输入唯一的域名地址,怎么做到,请求哪一个tomact服务呢?当然,响应只能由一个tomcat做出,这就要在PC机和装有tomcat的服务器之间再架一台反向代理服务器,由反向代理服务器,以轮询的(最常见的)方式去
从决定具体由哪一台tomcat来响应PC机的请求,所谓轮询,就是123 123 123,当然,123里面的内容(web源码)是一样的,更复杂的本篇不讨论。我们看下 图片描述:



三、Nginx的反向代理模拟 + 负载均衡实现

本篇,我们结合Nginx,来模拟一下Nginx的反向代理和负载均衡的实现,我们知道,Nginx 的特性有三个:

(1)基于http服务,可以做网页静态服务器  --  (前面博文已讲)

(2)虚拟主机:可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机(前面博文已讲)

(3)反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多态服务器可以平均分担负载(权重 weight),不会因为某台服务器负载高宕机而某服务器闲置的情况。(本篇进行ing.....)

(一)模拟之前,我们需要在Linux系统上装Tomcat,装之前,需要先装Java JDK--->Linux JDK 安装




Tomcat 7 .0 下载地址   ----> 
Tomcat 官网




选择下载Linux版本的压缩包,如下:



下载完成后,利用SSH工具上传至Linux的/root目录下,不知道如何上传的看这里--->Here

然后就是解压包(tar -zxvf apache-tomcat-7.0.81.tar.gz ),解压后,如下:



我们在一台虚拟机(区别于nginx的虚拟主机)上,放两个tomcat,我们就用这个apache-tomcat-7.0.81目录,进行目录递归拷贝,拷贝的父目录是 /usr/local/tomcats,当然,我们需要先创建这个目录

mkdir /usr/local/tomcats

创建好后,我们命令实现一下拷贝,当然,拷贝的两个名字一个是tomact1,一个是tomcat2

cp -pr apache-tomcat-7.0.81 /usr/local/tomcats/tomcat1

注意切换到,/root目录下

cd /root



同理,我们拷贝创建tomcat2,最后我们到tomcats目录下,看下这两个文件 是不是创建成功了



成功后,我们还需要改一下这两个tomcat的配置,如果不改的话,区分不开,因为目前,二者都用的是8080端口,我们只改一个就行,同时还要改下index.jsp的内容(Tomcat Title)

我们就改tomcat2吧,拿它开刀,我们切换到 /tomcat2/webapps/ROOT目录下



我们用vim修改index.jsp文件的内容,如下:



然后保存退出,用同样的方法修改tomcat1的index.jsp文件,修改内容和2的一样,只不过内容是 -- 8080 by Tomcat1,接着我们切换到  /tomcat2/conf目录下



编辑server.xml,修改里面的端口(原有基础上+1,利用vim的搜索,/port快速定位)

8080   --> 8081



8009 --> 8010



修改后,保存并退出,接着我们,需要启动一下这两个tomacat服务

切换到tomcat1目录下,执行 ./bin/startup.sh 启动tomcat1   (关闭对应 shutdown.sh )



同理,tomcat2也是这种启动方式,启动后,我们在虚拟机上的测试一下tomcat2的服务(1一样):



如果本地计算机要访问Linux上的这两个tomcat服务,需要在Linux的防火墙的配置文件的IP表里面加上两行内容如下:



开放8080和8081端口,然后我们本地测试一下,8080端口



(2)装完Tomcat之后,我们就要来实现一下Nginx的反向代理了,首先,我们要配置一个域名,我们用EditPlus修改本地(windows)的hosts文件如下:



地址和域名映射关系(只看红线部分,上面几个是区分nginx的虚拟主机的测试)

然后,我们配置一下nginx的conf文件,在/usr/local/nginx目录下,利用EditPlus进行本地修改:

新增内容如下:

upstream tomcats{

server 192.168.145.129:8080;
server 192.168.145.129:8081;

}

server {
listen       80;
server_name  nginx.com.test;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {
proxy_pass   http://tomcats; index  index.html index.htm;
}
}




然后我们保存一下修改后的nginx.conf,随后利用SSH Shell工具,重新加载一下nginx 的配置文件如下:



此时配置已生效,我们在本地浏览器中测试一下,输入请求域名 nginx.com.test,看看响应是不是由两个tomcat实例提供的,:

第一次敲下回车:



第二次敲下回车:



你会发现,每次敲下回车,响应的页面是不一样的,但是有规律,tomcat1一次,tomcat2一次,二者交替着来,如果有多个,那就是1,2,3--->1,2,3-->1,2,3

如果,我们的tomcat1和tomcat2不是在同一台服务器上的,而是在两台服务器上,假设,1的服务器性能比较好,而2的服务器性能比1稍差一点,为了使二者的性能均衡,也就是,好的多贡献点,差的少使用些,我们可以利用nginx的负载均衡中的权重 weight设置1和2被请求的频率(默认 weight = 1  也就是  轮询方式)

如下,只需在upstream块中对应server的后面加一个weight权重值就行



保存后,重新加载nginx配置,然后测试一下是不是此时tomcat1实例被请求的次数要多一些

这里就不放图了,第一次测试,访问nginx.com.test三次,都是1,第四次才是2,说明权重大的确实被访问的比率要高,但不代表,一定是访问3次以后才是tomcat2,也有可能是访问1次以后就是2!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: