Dimka

Рейтинг
237
Регистрация
07.11.2000

Огромное спасибо за советы.

Еще обнаружил проблему.

При более менее активных дисковых операциях, начинает подвисать nginx. Мне кажется, что процесс nginx блокируется при записи лога (лог нужен).

Логи достигают до 10-15 Гбайт в сутки (отключить не могу, но могу уменьшить на 30%).

Вот так выглядит лог проверки доступности сайта (числа - миллисекунды), если запустить на сервере копирование 10ГБ файла.

[time] All time: Dns Connect Send Wait Receive

[2016-03-13 03:09:18] 179: 0 0 44 45 89

[2016-03-13 03:09:20] 189: 0 0 47 44 96

[2016-03-13 03:09:34] 7252: 0 0 43 7007 200

[2016-03-13 03:09:37] 1970: 0 0 46 1831 91

[2016-03-13 03:09:41] 179: 0 0 44 44 89

[2016-03-13 03:09:51] 7770: 0 0 44 7007 718

[2016-03-13 03:09:54] 180: 0 0 45 44 89

[2016-03-13 03:09:56] 165: 0 0 41 41 81

Тоже копирование, но с ionice -c3

[2016-03-13 03:38:03] 178: 0 0 44 44 88

[2016-03-13 03:38:05] 178: 0 0 44 44 89

[2016-03-13 03:38:15] 4199: 0 0 44 4065 89

[2016-03-13 03:38:17] 178: 0 0 44 44 88

[2016-03-13 03:38:20] 177: 0 0 44 44 88

[2016-03-13 03:38:25] 1437: 0 0 40 1315 81

[2016-03-13 03:38:28] 162: 0 0 40 40 81

Я так понимаю, задержки когда каждый процесс nginx пытается записать лог.

Логи пишутся по 64Кб: access_log ... buffer=64k;

error_log без указания buffer

kovalkov:
Dimka, да, конечно, тариф BS-64-SSD https://fastvps.ru/dedicated#/cheapssd

Гарантированная скорость 1 Гбит/с?

В каком ДЦ будет?

kovalkov, у FastVPS можно арендовать этот сервер?

Intel® Core™ i7-6700 Quad-Core Skylake

Оперативная память: 64 ГБ DDR4

Жёсткие диски: 2 x 250 ГБ SATA 6 Гбит/с SSD

Подключение: 1 Гбит/с порт

Гарантировано: 1 Гбит/с
Место для резервных копий: 100 ГБ

http://ru.hetzner.com/hosting/produkte_rootserver/ex41sssd

netwind:
Раз правил нет - надо отключать.

получается, nf_nat, iptable_nat, а уже потом nf_conntrack_ipv4

nf_nat - получилось отключить, iptable_nat - не дает.

---------- Добавлено 11.03.2016 в 17:38 ----------

esetnod:
У вас nginx сам всё же ходит так интенсивно на бэкэнд

Все запросы (почти) статика, без бакэнда.

---------- Добавлено 11.03.2016 в 17:54 ----------

netwind, как мне кажется, очень верно указал причину - модуль conntrack.

При уменьшении в sysctl net.ipv4.netfilter.ip_conntrack_tcp_timeout****** стало легче.

Было net.netfilter.nf_conntrack_count = 312231, сейчас до 40.000

Забыл спросить.

После уменьшения таймаутов net.ipv4.netfilter.ip_conntrack_tcp_timeout_***** при выводе стат с ip_conntrack и было очень много с [UNREPLIED]:

2416 ESTABLISHED [UNREPLIED]

53289 SYN_SENT [UNREPLIED]

Это нормально?

Хочу сделать это во время минимального наплыва посетителей. А чем лучше тестить? Чем создавать нагрузку? Мне кажется, что ab не потянет.

Может быть проблема больше из-за того, что много уникальных IP коннектится к сайту (до 35-40К IP в минуту)? Или это не имеет значения, кто создает 40к коннектов в минуту: несколько IP или много?

Большое спасибо за ответы и советы.

netwind:
выгрузить последовательно модули, от которых зависит conntrack : получается, nf_nat, iptable_nat, а уже потом nf_conntrack_ipv4

1. ничего важного не теряю без этих модулей?

2. может ли вообще отвалиться сеть при попытке их выгрузки?

iptables-save

*mangle
:PREROUTING ACCEPT [177843126:17635608945]
:INPUT ACCEPT [177843126:17635608945]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [142916802:112534774905]
:POSTROUTING ACCEPT [142916802:112534774905]
COMMIT

*nat
:PREROUTING ACCEPT [25697328:1492668854]
:POSTROUTING ACCEPT [46158:15496482]
:OUTPUT ACCEPT [46158:15496482]
COMMIT


*filter
:INPUT ACCEPT [9278874:990739787]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8898559:6764500732]
:fail2ban-ssh - [0:0]
:fail2ban-ssh-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh-ddos
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-ssh -s 180.XXX.XXX.XXX/32 -j DROP
-A fail2ban-ssh -s 40.XXX.XXX.XXX/32 -j DROP
-A fail2ban-ssh -s 60.XXX.XXX.XXX/32 -j DROP
-A fail2ban-ssh -s 183.XXX.XXX.XXX/32 -j DROP
-A fail2ban-ssh -j RETURN
-A fail2ban-ssh-ddos -j RETURN
COMMIT



---------- Добавлено 08.03.2016 в 10:45 ----------

fail2ban стоит недавно, и до него бывали проблемы. Поставил, т.к. надоели многомегабайтные логи подбора доступа.

iptables -L -n -v (заменил IP XXX)

Chain INPUT (policy ACCEPT 4893K packets, 522M bytes)
pkts bytes target prot opt in out source destination
3895 332K fail2ban-ssh-ddos tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
3895 332K fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 4698K packets, 3581M bytes)
pkts bytes target prot opt in out source destination

Chain fail2ban-ssh (1 references)
pkts bytes target prot opt in out source destination
163 9780 DROP all -- * * 180.XXX.XX.XX 0.0.0.0/0
19 1632 DROP all -- * * 40.XXX.XXX.XX 0.0.0.0/0
0 0 DROP all -- * * 60.XXX.XXX.XX 0.0.0.0/0
51 3060 DROP all -- * * 183.XXX.XXX.XX 0.0.0.0/0
3439 305K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

Chain fail2ban-ssh-ddos (1 references)
pkts bytes target prot opt in out source destination
3895 332K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
netwind:
Там тоже своих таймаутов куча и он как бы сам по себе, потому что призван отслеживать чужие транзитные соединения на линукс-роутерах.
Но я бы пока не пытался эти параметры испортить, если можно просто лимит поднять.

Опустил все таймауты net.ipv4.netfilter.ip_conntrack_tcp_timeout_***** - провисать и выпадать по таймауту стало меньше.

Стал net.netfilter.nf_conntrack_count = 49574 (вместо 312231)

Всего: 761