概念理解(原文链接

  集群:多个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. 如何禁用Firefox,chrome浏览器“不安全密码警告”

    在任何HTTP页面中,一个全新的“不安全密码警告”将会在用户点击表单时直接出现在登陆框的下方,强行保证所有用户都能看到“此链接不安全,你的个人利益将受到损害”等字眼,同时整个页面也会收到损坏的挂锁图标 ...

  2. 2:if 语句

    if 语句 语法形式: 第一种,只有两个分支: if 表达式: something else: something 第二种,有多个分支: if 表达式1: do something 1 elif 表达 ...

  3. VC中BSTR、Char和CString类型的转换

    1.char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::format进行.例如: char chArray[] = "This is ...

  4. oracle vm突然黑屏了

    装完mongodb-compass后,我重启了下虚拟机,发现突然进不到ubuntu系统了,一开起来就黑屏.网上查了下有的说是显卡问题的,有说是内核问题的,但我啥都没干突然间就黑屏了.折腾了一下午没搞定 ...

  5. debian下redis2.8.17安装过程

    下载redis源码包,我下载的是redis2.8.17 解压缩该源码包 tar zxf redis-2.8.17.tar.gz 进入解压缩后的目录 cd redis-2.8.17/ 添加redis用户 ...

  6. Java 配置环境变量教程

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  7. spring使用中ModelAttribute的内容被覆盖

    在前台以get方式向后台提交数据: 后台接收: 后台接收参数的时候,由于user里面也有一个属性为id,后台在接收参数的时候,User里面的id会被重新赋值,这是一个大坑.如果后续继续用User来做操 ...

  8. SPSS-生存分析

    生存分析 定义:一些医学事件所经历的时间:从开始观察到事件发生的时间,不是短期内可以明确判断的.针对这类生存资料的分析方法叫生存分析.生存分析的基本概念1.终点事件终点事件outcome event: ...

  9. intellij idea 搜索功能快捷键

    intellij idea是一款超智能的编译器,因此在信息资源的搜索功能中给我们的用户提供了很大的帮助.同样作为java编译器的eclipse和myeclipse在搜索方面就比intellij ide ...

  10. The CHAR and VARCHAR Types

    [The CHAR and VARCHAR Types] The CHAR and VARCHAR types are declared with a length that indicates th ...