
У меня есть несколько веб-серверов, и для управления кластером я иногда использую скрипт, который автоматически открывает соединения и синхронизирует с ними файлы с помощью скриптов Python. Я столкнулся со странной проблемой и не знаю, как ее исправить.
для воспроизведения тестового случая у вас должен быть удаленный пункт назначения, который не устанавливает соединение немедленно (ни в локальной сети, ни на локальном хосте), и соединение должно работать без запроса пароля (используя файлы ключей)
У меня 16 ПК с Fedora, серверы с Cent OS 5, s120 и s121 — это два моих сервера с IP-адресами, назначенными /etc/hosts
s121 и s120.
это пример команды, которая открывает 9 подключений к s120 + 9 подключений к s121 в одной и той же оболочке одновременно.. И ЭТО РАБОТАЕТ!
gnome-terminal --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab
- e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh
root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" -- tab
-e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh
root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab
-e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh
root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab -e "bash -c \"ssh root@s121;\"" --tab
-e "bash -c \"ssh root@s121;\""
эта команда ПЫТАЕТСЯ открыть 15 соединений на одной и той же оболочке все 15 TO-> s120
gnome-terminal --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab
-e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh
root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\""
--tab - e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash
- c \"ssh
root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\""
--tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c \"ssh root@s120;\"" --tab -e "bash -c
\"ssh root@s120;\""
и он попытается открыть 15 подключений, которые почти сразу же закроются, и только 10 подключений останутся открытыми. эта проблема также происходит в terminal_xfce
(который я предпочитаю, потому что я нашел gnome-terminal немного менее стабильным)
похоже, что более 10 одновременных открытых соединений не допускается,
похоже, что изначально разрешено не более 10 одновременных подключений, но если я открою 10 вкладок и подожду, пока соединения начнут работать, то я смогу открыть еще один терминал с 10 вкладками на том же сервере.
(Я также хочу сказать, что результаты этого теста одинаковы при отключенных брандмауэрах IP TABLES как на клиенте, так и на сервере)
Я также должен сказать, что эта проблема раздражает, особенно при lsyncd
выполнении rsync
синхронизации нескольких назначений в файловой системе на одном сервере, что приводит к неожиданным результатам, поскольку соединения разрываются ОС, тестовый сценарий терминала просто проще воспроизвести, хотя и менее проблематичен в обработке.
решение1
Если все ваши соединения будут использовать скриптовые команды... зачем использовать вкладки gnome-terminal? Вы используете много ресурсов, которые вам на самом деле не нужны, и которые могут способствовать ограничивающим факторам, которые вы испытываете.
Вы сможете получить практически (для своих целей) неограниченное количество подключений, если позволите системе управлять подключениями, а не заставлять вмешиваться gnome-terminal.
for a in $( seq 1 50 ); do
ssh root@s120 my_cool_script &
ssh root@s121 my_cool_script &
done
wait
Это должно создать 100 подключений (50 к s120, 50 к s121) в течение нескольких секунд, все они будут работать.мой_крутой_скрипт'. Пока все, что вы делаете, идет по сценарию, все будет хорошо.
Команда 'wait' заставляет скрипт там ждать завершения всех фоновых заданий, прежде чем продолжить работу. Вам это может не понадобиться/не захотеться.
(плюс гораздо меньше ввода текста...)
решение2
Найдите MaxStartups в /etc/ssh/sshd_config.
Он ограничивает несанкционированные одновременные входы в систему через sshd.
Значение по умолчанию — 10.