У меня есть несколько веб-серверов и для управления кластером, я иногда использую скрипт, который автоматически открывает соединения и синхронизирует файлы с ними, используя скрипты 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 соединений, которые почти сразу 5 вкладок закрываются, и только 10 соединений остаются открытыми. эта проблема также возникает в terminal_xfce (что я предпочитаю, потому что я нашел gnome-терминал немного менее стабильным)

кажется, что более 10 одновременных открывающихся соединений не допускаются,

кажется, что в начале разрешено не более 10 одновременных подключений, но если я открою 10 вкладок и подожду начала подключения, то я могу открыть другой терминал с 10 вкладками к тому же серверу.

(Я также хочу сказать, что результаты этого теста совпадают с отключенными брандмауэрами IP TABLES как на клиенте, так и на серверах)

Я также должен сказать, что эта проблема раздражает, особенно при выполнении lsyncd и rsync то время как синхронизация нескольких назначений в файловой системе на одном и том же сервере приводит к неожиданным результатам, поскольку соединения завершаются ОС, тестовый пример терминала просто проще воспроизвести даже если менее проблематично в обращении.

2 ответа2

0

Если все ваши соединения будут использовать скриптовые команды ... зачем использовать вкладки gnome-terminal? Вы используете много ресурсов, которые вам действительно не нужны, и которые могут способствовать ограничивающим факторам, которые вы испытываете.

Вы должны иметь возможность получать почти (для ваших целей) неограниченное количество соединений, если вы позволите системе обрабатывать соединения вместо того, чтобы заставлять gnome-терминал вмешиваться.

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) в течение нескольких секунд, и все они будут работать с « my_cool_script ». Пока все, что вы делаете, написано в сценарии, все будет хорошо.

Команда wait заставляет скрипт ждать завершения всех фоновых заданий, прежде чем продолжить. Возможно, вам это не нужно / не нужно.

(плюс это гораздо меньше печатать ...)

0

Найдите MaxStartups в /etc /ssh /sshd_config.

  • Это ограничивает несанкционированные одновременные входы в систему с помощью sshd.

  • По умолчанию 10.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .