• windows+nginx+tomcat实现集群负载均衡(生产环境必读)


    概念理解(原文链接

      集群:多个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上
  • 相关阅读:
    种类并查集——带权并查集——POJ1182;HDU3038
    【并查集之判断连通无环图】
    jmeter响应断言通过,结果树中却显示红色
    jmeter获取登录token
    jmeter查看结果树中响应数据Unicode转换成中文
    jmeter分布式测试
    jmeter连接mysql测试
    jmeter集合点
    jmeter之参数化
    jmeter之断言(3种)
  • 原文地址:https://www.cnblogs.com/yanan7890/p/9494437.html
Copyright © 2020-2023  润新知