Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )

使用nginx+tomcat实现负载均衡


1.什么是nginx

nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
作用:集群(减轻单台服务器压力),反向代理(不暴露真是的ip地址)

顺便说一下正向代理:正向代理代理的其实是客户端,就是访问服务器的时候,不知道是哪个客户端在访问,v*n就是正向代理,一般客户端和v*n端是在同一个局域网内。

反向代理,nginx和服务器的地址是在同一个局域网内。


2.nginx应用场景

1)、http服务器。
2)、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3)、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
4).正向代理代理客户端,反向代理代理服务器
正向代理:拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~
反向代理:还用借钱的例子,A想向C借钱,然后C借给他了,但是实际上这个钱可能C向B借的~至于钱到底是谁的,A是不知道的~

3.windows环境下安装nginx

1)下载地址:
  http://nginx.org   (也可以留言找我来拿...)
2).启动
  解压,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹C:\nginx\logs

双击运行之后,会发现屏幕闪一下,这就说明运行成功了,也可以打开任务管理器确认一下是否运行.

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
3).使用
  输入地址:http://localhost  看到这个界面启动成功。

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
访问静态资源!!!
Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
4).关闭
  进入到nginx安装目录,cmd利用命令nginx -s stop 关闭,也可以在任务管理器结束进程


4.如何使用nginx实现反向代理

    
反向代理(Reverse Proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。

实战:使用nginx实现nginx 同一端口根据不同域名转发到不同端口
1).同时启动两个Tomcat,一个端口为8081,一个为8082,要想同时启动需要修改端口号
Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
如果启动中出现闪退的情况,需要修改一下Tomcat的startup的配置,右击startup,点击编辑,将前两行进行修改,如果没有闪退则忽略此步修改操作.  如果这个不是很明白的话,建议看一下  JVM入门这篇博客  http://mp.blog.csdn.net/postedit/79170428

SET JAVA_HOME=F:\jdk\jdk1.8.0_60
SET CATALINA_HOME=F:\nginx\Tomcat\tomcat8081

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
为了便于观察到底启动的是那一个Tomcat,我们修改一下tomcat下面conf的server的配置文件下的端口号

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
然后修改tomcat安装目录下面的wabapps->ROOT->index.html

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
另一个tomcat和以上操作相同,然后在浏览器启动,查看效果
Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )

2).配置本地域名,映射两个端口号,修改Host文件C:\Windows\System32\drivers\etc\hosts

hosts文件:主要是做域名解析用的,比如,我输入一个网址,他首先会在hosts文件里面查找这个域名,如果找到了会映射到相应的配置ip

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
3).重启nginx,查看效果

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
4).我们发现,输入域名之后我们需要输入端口号才可以,我们如何不需要输入端口号就能达到相应的效果呢?
我们现在修改一下nginx的配置,两个端口均是如此配置
Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
相应配置我也粘贴出来
server{
        #监听的端口号
        listen   80;
        
        #起的一个域名
        server_name 8081.lizhen.com;

        #编码格式 ,不用动
        #charset koi-8r

        #日志 也不用动
        #access_log logs/host.access.log main;
        
        location /{

        #一旦监听到80端口且域名是8081.lizhen.com配置的这个,直接跳转到这个地址
        proxy_pass http://127.0.0.1:8081;

        #
        index index.html index.htm;
        }
        }
我们在看一下效果,不用输入端口号,我么达到了同样的效果

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )


6.nginx优缺点

占内存小,可以实现高并发连接、处理响应快。
可以实现http服务器、虚拟主机、反向代理、负载均衡。
nginx配置简单
可以不暴露真实服务器IP地址

7.什么是负载均衡

负载均衡 :增加吞吐量、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行

实战:Windows环境下搭建nginx+tomcat负载均衡,我们输入www.itmayiedu.com这个网址均匀分摊到8081和8082端口
记住我们真实环境中nginx、tomcat服务器是分开的。

1).配置本地域名,修改Host文件C:\Windows\System32\drivers\etc\hosts     127.0.0.1  www.itmayiedu.com


2).配置nginx的负载均衡有三种方式
使用weight配置负载均衡,weight默认为1,权重越高,处理请求越多。

使用轮训机制

使用ip绑定

Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )
输入网址查看效果
Nginx+Tomcat实现负载均衡 (一点都不难 ! ! ! )

节点说明:

在http节点里添加:

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

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

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

每次修改nginx配置文件时,都需要重启才能生效.

8.Nginx实现的集群会产生什么样的情况

1.分布式job幂等性问题:使用XXLjob分布式任务调度平台解决

2.回话共享的问题

3.分布式生成全局订单问题夹:

比如我要生成订单id,使用时间戳,这样就很容易重复了,这个可以使用ZK分布式锁来解决。

我们可以提前生成放在redis中,当快使用完的时候在生产一批

9.集群与分布式的区别

集群:为了减轻单台服务器的压力,是多台服务器部署相同的项目。

分布式:是将一个项目分成n多个子项目,完后一个大体项目。(主要为了便于开发解决代码冲突问题),子项目之间通过RPC远程调用。

单点应用---》面向服务架构(SOA)webservice(Http+xml)----》微服务架构(http+json格式传输)springcloud restful(依赖于springboot基础知识点,简化xml配置)


如果有任何问题,都可以在下面留言,我们共同讨论.