Linux下配置nginx-tomcat-redis负载均衡配置

10 篇文章 1 订阅

Linux下配置nginx-tomcat-redis负载均衡配置

概述

性能测试时,
1、单独测试一个tomcat,并发用户为300时,服务响应时间正常,未出现错误;
2、使用默认的nginx配置,并发用户100,tomcat服务器上出现大量(10000+)TIME_WAIT;
分析原因,发现nginx默认使用短连接导致的,开启长连接(keepalive)模式后,并发正常;
记录各项配置如下:

集群环境

应用服务应用版本
测试机Loadrunner11
nginxnginx/1.14.0
redisredis-4.0.11
java1.6.0_32
tomcat6.0.32

Linux服务器配置

配置参数配置值备注
开启对于TCP时间戳的支持net.ipv4.tcp_timestamps=1默认值:1
减少SYN-ACK重传次数net.ipv4.tcp_synack_retries=2默认值:5
减少SYN重传次数net.ipv4.tcp_syn_retries=2默认值:6
减少tcp存活时间net.ipv4.tcp_keepalive_time=300默认值:7200
启用time_wait重用net.ipv4.tcp_tw_reuse=1默认值:0

redis配置

配置参数配置值
Redis版本redis-4.0.11.tar.gz
安装目录“/usr/local/bin/redis-server /usr/local/etc/redis.conf”
端口port 6379
最大内存maxmemory 1gb
最大内存策略maxmemory-policy allkeys-lru
session存储save “”
ip绑定bind 0.0.0.0
保护模式protected-mode no
守护进程daemonize yes
启动$ redis-server /usr/local/etc/redis.conf

nginx配置(nginx.conf)

#user  nobody;
worker_processes  32;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

events {
	use epoll;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush on; #防止网络阻塞        

    keepalive_timeout  60s;

    #gzip  on;
        
	upstream backend{
		least_conn;	
		server 192.168.0.2:8081 weight=1 max_fails=2 fail_timeout=10s;
		server 192.168.0.2:8082 weight=1 max_fails=2 fail_timeout=10s;
		server 192.168.0.2:8083 weight=1 max_fails=2 fail_timeout=10s;
		
		keepalive 100;
	}
	
    server {
        listen       80;
        server_name  192.168.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        	location /test/{			
			proxy_set_header  Host            $host;
			proxy_set_header  X-Real-IP        $remote_addr;
			proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_redirect http://$host http://$host:80;  
			
			proxy_connect_timeout 5s;   #默认值60s, nginx连接到后端服务器的连接超时时间
			proxy_http_version 1.1;
			proxy_set_header Connection "";
			
			proxy_pass http://backend;
        }   
        #location /status{
        #        stub_status on;
        #        access_log off;
                #allow 192.168.0.3;
                #deny all;
        }	
    }
}

添加环境变量

vi /etc/profile

尾行添加

PATH=$PATH:/usr/local/nginx/sbin
export PATH

保存关闭后运行 source /etc/profile 即会加入环境变量

tomcat配置

使用redis保持session同步

context.xml

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="192.168.0.1"
         port="6379" 
         database="0" 
         maxInactiveInterval="1800"/>

server.xml

<Connector port="8081" protocol="HTTP/1.1" 
               redirectPort="8443" proxyPort="8081"    
               connectionTimeout="20000"
			   maxThreads="300" 
			   acceptCount="50"
			   />

测试结果(并发1000)

Lr脚本内部设置的思考时间为9秒:lr_think_time(9);
如下为1000并发用户时的测试结果,平均响应时间约为11秒,且相对处于一个稳定的状态:
这里写图片描述

关于超时问题

追求完美的人,会对上面那红色的46个错误耿耿于怀,详细错误描述如下所示:

Action.c(4): Error -27796: Failed to connect to server “192.168.0.1:80”: [10060] Connection timed out

这个问题困扰了我很久(确切的说截止目前也没有解决);该问题在并发用户数大于300后就一直存在,且错误数量一直维持在20~50范围内,暂且记下此问题,等我对NGINX有深入研究后再来解决。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值