Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Балансировка с большой на грузкой
- To: nginx-ru@xxxxxxxxx
- Subject: Балансировка с большой на грузкой
- From: "alexander-k" <nginx-forum@xxxxxxxx>
- Date: Tue, 28 Dec 2010 10:19:18 -0500
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To:Date; bh=nHnpRGQHg5LN1BMSi6RI8aK2QWjqVPks2I3bgcn82yo=; b=n1szcmsZJnznsIpjkFySzL66A/cQ0Fhpt+d4EP272xAC2c96mpliwrrFpXYt4RSGMXlezlFQ180ieutUQO0+vnP56W5acVyHN7IbVuX9A277DjxS4CijZSvYyejlP/QY;
Тестирую jboss кластер из двух нод (ноды
на разных машинах, windows xp,
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
--> MaxUserPort = 65000
--> TcpTimedWaitDelay = 30)
На третьей машине Intel Xeon E5335 @ 2.00 GHz с
операционной системой centos установлен
nginx.0.8.53-1.e15 в качестве балансировщика.
На четвёртой машине java1.5.0_22 HttpClient3.1 c
MultiThreadedHttpConnectionManager'ом, который шарится
на "большое" кол-во потоков - от 2 до 10
тысяч.
На каждую jboss ноду задеплоен ear с web
фасетом, который ловит запросы со от
балансировщика, перенаправляет в stateless
бин, который отвечает определённым
образом, понятным для клиента. Конфиг
коннектора из server.xml:
Сразу хочу сказать, что если нагружать
nginx, который работает не в режиме
балансировшика, т.е. у него отсутствует
директива upstream, то ошибок не
наблюдается.. но когда подключаешь
backend..
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
nginx.conf
-----------------------------------------------------------------------------------
worker_processes 10;
worker_priority -10;
worker_rlimit_nofile 100000;
events {
worker_connections 1024;
use epoll;
}
http {
keepalive_timeout 0;
connection_pool_size 4096;
request_pool_size 8k;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
output_buffers 1 32k;
postpone_output 1460;
tcp_nodelay on;
upstream localhost {
server 192.168.2.18:8070;
server 192.168.2.203:8070;
}
server {
listen 8090 backlog=15000;
server_name localhost;
location / {
proxy_pass http://localhost;
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /var/nginx/proxy_temp;
}
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
/etc/sysctl.conf
-----------------------------------------------------------------------------------
fs.file-max = 999999
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_rmem = 4096 16777216 16777216
net.ipv4.tcp_wmem = 4096 16777216 16777216
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_conntrack_max = 1500000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_tw_buckets = 1800000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.core.netdev_max_backlog = 10000
net.ipv4.tcp_keepalive_time = 3600
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 60
net.ipv4.netfilter.ip_conntrack_udp_timeout = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 10
net.ipv4.netfilter.ip_conntrack_generic_timeout = 180
net.ipv4.netfilter.ip_conntrack_tcp_be_liberal = 1
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 15
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 60
net.ipv4.netfilter.ip_conntrack_max = 1500000
net.core.somaxconn = 262144
Хочу заметить, что параметры
приведённые выше, были использованы не
всегда осознанно, но опытным путём
установлены те, которые влияют точно:
server.xml
---
maxThreads, tcpNoDelay="true", backlog
nginx.conf
-----
listen 8090 backlog=15000;
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
sysctl.conf
----
net.core.somaxconn
В чём собственно проблема? Проблема в
том, что когда я включаю на клиенте
например 4000 потоков, т.е. параллельных
сессий, то получаю примерно 400 ошибок на
клиенте "read timed out", что говорит о том, что
клиент не может дождаться на nginx
результата работы backend'а (хотя keepalive_timeout
0) и около 600 ошибок типа "The page is temporarily
unavailable" -не знаю что это такое, может
проблемы с сокетами, может очередь
сообщений на жибосовских томкатах
переполняется, хотя если я увеличиваю
backlog="30000" bufferSize="30000", то ошибок
становится ещё больше.
С апачем было гораздо меньше ошибок.
Уж не знаю чё и делать дальше, может
попробовать подключить к nginx модуль
UpstreamFair и перенести backend на линуксы?
Спасибо
Posted at Nginx Forum:
http://forum.nginx.org/read.php?21,161726,161726#msg-161726
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|