概念理解(原文链接

  集群:多个tomcat服务器运行同一个web服务就能称之为集群

  负载均衡:apache按照一定方式将不同的客户端访问分配到不同的tomcat服务器

简单负载均衡实现:

网上参考了好多文章,都写的不全,拿来直接用时存在这样或那样的问题,花了好长时间摸索细致整理了一下希望能帮助像我这样的新手

集群搭建:

tomcat复制改8080端口为8081,8005为8006,8009为8010

添加项目进行访问:

如上图所示证明集群成功

负载均衡实现:@参考博客1@参考博客2、@参考博客3@参考博客4

借助ngnix,下载地址(我用的1.4.7和1.14.0l,两者都能成功其他的没试也不用试):

配置nginx:%nginx%/nginx.conf

测试:输入localhost:81出现欢迎界面

访问上述项目:

如果支持了ipv6下面的ip使用了localhost,

可能会报异常

com.orangefunction.tomcat.redissessions.SessionSerializationMetadata cannot be cast to com.orangefunction.tomcat.redissessions.SessionSerializationMetadata

据说是版本不兼容。最后博主舍弃了redis,因为nginx可以实现同样的效果。具体配置

    upstream naire {
#weight(权重) 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。
#设置由 fail_timeout 定义的时间段内max_fails内该主机是否可用。
#max_fails设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。这里是在30s内尝试2次失败即认为主机不可用!默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。
#server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8080 weight=1 max_fails=10 fail_timeout=30s;
server 127.0.0.1:8081 weight=1 max_fails=10 fail_timeout=30s;
ip_hash;#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
}

上面的ip_hash即可

效率对比:

为了验证负载均衡显著提高了访问速度,博主兴冲冲地进行了压力测试

结果如下:

1000个并发81端口
1000个并发8080端口
 
多次测试发现并没有提高效率反而降低了,猜想应该是nginx分发时占用了资源,项目不存在访问量压力的时候不会体现出来,加大访问量到2000,但出现java.net.SocketException: Connection reset异常,异常数占60%-70%左右,相当可怕。@参考博客给出的几条原因,猜想应是服务器的并发连接数超过了其承载量,服务器将其中一些连接Down掉 。通过这篇@参考博客给出的示例,修改了connector协议为nio,异常数降低至10%-50%,大大增加了并发处理能力,但仍不够。查看了数据库允许最大连接数select @@MAX_CONNECTIONS为32767,配置了数据库连接池最大连接数为1000,仍没有提升。tomcat中jvm配置在测试之前已经做过了,不在优化范围之内
报出的错误大致有以下几种:
java.net.ConnectException: Connection refused: connect
java.net.SocketException: Connection reset
java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed
upstream prematurely closed connection while reading response header from upstream, client: 192.168.1.56, server:  
根据这些异常我是各种百度谷歌,贴吧、博客园、csdn、开源中国、百度知道、QQ群各种求助,然无所获。最后在nginx官方文档上找到了答案,
 
 

Known issues

  • Although several workers can be started, only one of them actually does any work.
  • A worker can handle no more than 1024 simultaneous connections.
  • The UDP proxy functionality is not supported.

Possible future enhancements

  • Running as a service.
  • Using the I/O completion ports as a connection processing method.
  • Using multiple worker threads inside a single worker process.
 
截止我发这篇博客nginxwindows更新到版本nginx 1.15.3.1 Crow还没有解决(亲测了四五个版本)。以后的版本可能会解决吧。
 
最后,劝准备在windows下搭建nginx的,试试就行了,不建议用生产环境。博主优化tomcat后可以支持2000个并发,nginx还停留在1024上

windows+nginx+tomcat实现集群负载均衡(生产环境必读)的更多相关文章

  1. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  2. 转】Nginx+tomcat配置集群负载均衡

    原博文出自于:http://blog.csdn.net/bruce_6/article/details/38228299         感谢! 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食 ...

  3. Nginx+tomcat配置集群负载均衡

    开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的a ...

  4. Apache+Tomcat +mod_proxy集群负载均衡及session

      序言: 在玩Apache+Tomcat +mod_jk集群负载均衡及session的时候发现,还有一种方式可以实现,就是网上各位大牛们说的mod_proxy反向代理. 实在弄的我的知识细胞洋洋.实 ...

  5. Nginx部署tomcat/wildfly集群负载均衡

    1.调度器配置: docker run -p 80:80 --name nginx --restart=always  -v /root/nginx/www/:/usr/share/nginx/htm ...

  6. 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享

    今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...

  7. ngnix apache tomcat集群负载均衡配置

    http://w.gdu.me/wiki/Java/tomcat_cluster.html 参考: Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog. ...

  8. Apache + Tomcat集群 + 负载均衡

    Part I: 取经处: http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html  http://blog ...

  9. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

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

随机推荐

  1. class 方法

    实例对象调用class方法时返回这个实例对象的isa指针,也就是对应的类对象: 类对象调用class方法时返回这个类对象本身. (注:如果想一直获得一个类的类对象,也就是isa指针,可以调用runti ...

  2. javascript:解决两个小数相乘出现无限小数

    两个小数相乘,会出现无限小数:先把小数乘以10或100或1000(小数点后有多少位就乘以多少),再相乘,最后再除以10或100或1000

  3. JSP基本_JSPの構成要素、アクション、ディレクティブ

    1.JSPの構成要素[コア要素] JSP文法のコアとなる要素で.サーブレットソースに変換される. ・宣言: <%! - %> (宣言で指定した変数は.Javaの「フィールド変数」になる.ス ...

  4. C#new出来的结构体内存分配在堆上

    如题,有同事说因为结构体是值类型,所以 new出来的也是分配在栈上的.我的直觉是但凡使用new的东西都在堆上分配内存,除非C#对结构体做了特殊处理. new int[10]这个说明不了什么,因为数组是 ...

  5. 转:探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...

  6. Python调用外部系统命令

    利用Python调用外部系统命令的方法可以提高编码效率.调用外部系统命令完成后可以通过获取命令执行返回结果码.执行的输出结果进行进一步的处理.本文主要描述Python常见的调用外部系统命令的方法,包括 ...

  7. 让一个非窗口组件(non-windowed component)可以接受来自Windows的消息

    为什么要这样做? 有时候我们需要一个非窗口组件(比如一个非继承自TWinContrl的组件)可以接受Windows消息.要接受消息就需要一个窗口句柄,但是非窗口组件却没有句柄.这篇文章将讲述怎么让一个 ...

  8. SqlServer 中 for xml path 相关

    表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...

  9. 如何配置eclipse的安卓SDK下载目录

    首先,打开eclipse,主界面如图 2 点击Windows下的preference 3 然后在出现的对话框中选择“android” 4 然后我们就能看到的主界面,在这里输入android sdk的目 ...

  10. quartz 实例

    第一步:添加jar包 第二步:在spring配置文件中添加 <context:annotation-config/> 第三步:编写定时代码 我们通常做Java后台接口,是让前端访问的,让前 ...