使用nginx+tomcat实现负载均衡
1.什么是nginx
nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
作用:集群(减轻单台服务器压力),反向代理(不暴露真是的ip地址)
顺便说一下正向代理:正向代理代理的其实是客户端,就是访问服务器的时候,不知道是哪个客户端在访问,vpn就是正向代理,一般客户端和vpn端是在同一个局域网内。
反向代理,nginx和服务器的地址是在同一个局域网内。
2.nginx应用场景
1)、
http服务器。
2)、 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3)、 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
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
http://nginx.org (也可以留言找我来拿...)
2).启动
解压,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹C:\nginx\logs
双击运行之后,会发现屏幕闪一下,这就说明运行成功了,也可以打开任务管理器确认一下是否运行.

3).使用
输入地址:http://localhost 看到这个界面启动成功。
输入地址:http://localhost 看到这个界面启动成功。
访问静态资源!!!

4).关闭
进入到nginx安装目录,cmd利用命令nginx -s stop 关闭,也可以在任务管理器结束进程
进入到nginx安装目录,cmd利用命令nginx -s stop 关闭,也可以在任务管理器结束进程
4.如何使用nginx实现反向代理
反向代理(Reverse Proxy): 是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。
实战:使用nginx实现nginx 同一端口根据不同域名转发到不同端口
1).同时启动两个Tomcat,一个端口为8081,一个为8082,要想同时启动需要修改端口号
如果启动中出现闪退的情况,需要修改一下Tomcat的startup的配置,右击startup,点击编辑,将前两行进行修改,如果没有闪退则忽略此步修改操作. 如果这个不是很明白的话,建议看一下 JVM入门这篇博客 http://mp.blog.youkuaiyun.com/postedit/79170428
SET JAVA_HOME=F:\jdk\jdk1.8.0_60
SET CATALINA_HOME=F:\nginx\Tomcat\tomcat8081
SET CATALINA_HOME=F:\nginx\Tomcat\tomcat8081
为了便于观察到底启动的是那一个Tomcat,我们修改一下tomcat下面conf的server的配置文件下的端口号
然后修改tomcat安装目录下面的wabapps->ROOT->index.html
另一个tomcat和以上操作相同,然后在浏览器启动,查看效果
2).配置本地域名,映射两个端口号,修改Host文件C:\Windows\System32\drivers\etc\hosts
hosts文件:主要是做域名解析用的,比如,我输入一个网址,他首先会在hosts文件里面查找这个域名,如果找到了会映射到相应的配置ip
3).重启nginx,查看效果
4).我们发现,输入域名之后我们需要输入端口号才可以,我们如何不需要输入端口号就能达到相应的效果呢?
我们现在修改一下nginx的配置,两个端口均是如此配置
相应配置我也粘贴出来
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; } }我们在看一下效果,不用输入端口号,我么达到了同样的效果
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
1).配置本地域名,修改Host文件C:\Windows\System32\drivers\etc\hosts 127.0.0.1 www.itmayiedu.com
2).配置nginx的负载均衡有三种方式
使用weight配置负载均衡,weight默认为1,权重越高,处理请求越多。
使用轮训机制
使用ip绑定
输入网址查看效果
节点说明:
在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配置)
如果有任何问题,都可以在下面留言,我们共同讨论.