Слишком много соединений на сервере zookeper - PullRequest
0 голосов
/ 31 декабря 2018

Среда: HDP 2.6.4

Амбари - 2.6.1

3 сервера zookeeper

23.1.35.185 - это IP первого сервера zookeeper

hi all,

В первом сервере zookeeper кажется, что даже после закрытия соединения сzookeeper не закрывается,

, что приводит к достижению максимального количества клиентских подключений с хоста - у нас maxClientCnxns равно 60 в конфигурации zookeeper

В результате, когда приходит новое приложение ипытается создать соединение, но не удается.

Пример, когда Соединения:

echo stat | nc 23.1.35.185 2181 

Latency min/avg/max: 0/71/399

Received: 3031 Sent: 2407

Connections: 67 

Outstanding: 622 

Zxid: 0x130000004d 

Mode: follower 

Node count: 3730

Но через некоторое время, когда соединение достигает ~ 70, мы видим

echo stat | nc 23.1.35.185 2181

Ncat: Connection reset by peer.

ИМы также можем видеть много CLOSE_WAIT

java      58936       zookeeper   60u  IPv6 381963738      0t0  TCP Zookeper_server.sys54.com:eforward->zookeper_server.sys54.com:44983 (CLOSE_WAIT)

Из журнала зоопарка

2018-12-26 02:50:46,382 [myid:1] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@193]
    - Too many connections from /23.1.35.185 - max is 60

В амбари мы также можем видеть

Connection failed: [Errno 104] Connection reset by peer to zookeper_server.sys54.com.:2181

Я должен сказать, что этоне происходит на серверах zookeeper 2 и 3

ПРИМЕЧАНИЕ - если мы увеличим maxClientCnxns до 300, это не помогает, потому что через некоторое время мы получаем больше 300 соединений (CLOSE_WAIT), а затем видим из журнала

2018-12-26 02:50:49,375 [myid:1] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@193] - Too many connections from /23.1.35.187 - max is 300

, так есть ли какой-нибудь намек, почему соединение CLOSE_WAIT?

1 Ответ

0 голосов
/ 01 января 2019

CLOSE_WAIT означает, что локальный конец соединения получил FIN с другого конца, но ОС ожидает, пока программа на локальном конце фактически закроет свое соединение.

Проблема в том, что ваша программа, работающая на локальной машине, не закрывает сокет.Это не проблема настройки TCP.Соединение может (и вполне правильно) оставаться в CLOSE_WAIT вечно, пока программа удерживает соединение открытым.

Как только локальная программа закрывает сокет, ОС может отправить FIN на удаленный конец, который переводит вас вLAST_ACK пока вы ждете ACK FIN.Как только это получено, соединение завершается и удаляется из таблицы соединений (если ваш конец находится в CLOSE_WAIT, вы не попадаете в состояние TIME_WAIT).

Существует свойство уровня ядра дляповторно используйте соединение и сократите время CLOSE_WAIT.

Я предлагаю вам следовать этому руководству http://www.linuxbrigade.com/reduce-time_wait-socket-connections/

Это, вероятно, должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...