Einschränkungen der SSH-Verbindung

3

Ich habe ein Netzwerk von 100 Maschinen, alle mit Ubuntu Linux.

Gibt es eine Begrenzung für die Anzahl der Maschinen, die gleichzeitig an eine einzige Maschine angeschlossen werden können?

Kann ich zum Beispiel 99 meiner Maschinen eine kontinuierliche SSH-Verbindung zur 100. Maschine aufrechterhalten lassen? Kann jeder meiner Computer (jeder der 100) eine ständige SSH-Verbindung zu allen anderen 99 Computern aufrechterhalten?

Wie viel Speicher benötigt eine solche Verbindung?

user74781
quelle

Antworten:

7

Die Anzahl der Gesamtverbindungen ist hauptsächlich durch die Anzahl der Ports, an denen sie eingehen können, und die Leistungsfähigkeit des Systems begrenzt. Es gibt Konfigurationsoptionen (Max_Sessions und Max_Startup), die sich jedoch nur auf die Anzahl der Verbindungen von einer einzelnen IP-Adresse und die Anzahl der gleichzeitig angeforderten Startverbindungen beziehen.

Es ist nicht einfach zu wissen, wie viel Speicher eine Verbindung benötigt, da sie völlig von der Verkehrsmenge abhängig ist. Eine extrem stark genutzte Verbindung kann mehr Ressourcen verwenden als 10.000 Verbindungen, die nichts tun.

Alles in allem ist es fast immer eine bessere Idee, die Verbindungen herzustellen, wenn sie benötigt werden, und geschlossen, wenn sie nicht sind.

Satanicpuppy
quelle
Vielen Dank für Ihre Antwort. Mein Ziel ist es, Daten so schnell wie möglich auf jeden Knoten schreiben zu können. Eröffnung & amp; Das Schließen der Verbindungen würde meine Leistung beeinträchtigen. irgendwelche anderen Ideen, wie man das erreichen kann?
user74781
@user: Wenn Sie gleichzeitig von 100 Verbindungen schreiben, werden Sie sehr schnell auf Probleme stoßen. Wahrscheinlich werden Sie Ihre Bandbreite auslasten, bevor irgendetwas anderes die Möglichkeit hat, zu brechen. Welche Daten müssen in Echtzeit vorliegen?
Satanicpuppy
Danke dir. Ich werde wahrscheinlich Daten von ONE CONNECTION in die anderen 99 schreiben. Die Daten, die ich bekomme, werden in Echtzeit gestreamt. Ich verarbeite es in der Maschine X In-Memory, und Sie möchten den schnellsten Weg finden, um die "Datenstücke" (wenn möglich, parallel) an die anderen 99 Maschinen zu senden (dh, jede Maschine bekommt ihr Stück). Es ist dann an jedem einzelnen Computer, die empfangenen Daten zu verarbeiten und auf seiner lokalen Festplatte zu speichern. macht das Sinn?
user74781
@user: Also siehst du an ausgehend Verbindungen von einer Maschine zu 99 anderen Maschinen oder sprechen wir über 100 Maschinen, die ständig mit 99 anderen Maschinen verbunden sind, die alle mit Echtzeitdaten hämmern? Sie werden wahrscheinlich viel mehr Erfolg haben, wenn alle Computer die Daten in lokalen Gruppen zusammenfassen, anstatt dass jeder Computer eine vollständige Kopie der Daten erhält.
Satanicpuppy
Ja, nehmen wir an, wir sprechen von ausgehenden Verbindungen. Es gibt eine Maschine, die die Daten erhält. es spaltet es in Stücke. Was ist der schnellste Weg, um die "Stücke" an die einzelnen Maschinen zu schicken?
user74781
3

Ich glaube du kannst. Ich habe normalerweise 3 oder so viele auf meiner Home-Box, und in meinem Büro können wir bis zu 10 haben. Es hängt nur davon ab, was Ihr Computer beherrscht.

Es gibt Einstellungen in sshd_config, die Sie möglicherweise ändern müssen. Hier ist ein Link zum Man Seite . Es ist in gefunden /etc/ssh/sshd_config. Der Standardwert ist 10. Sie müssen dies erhöhen.

ich habe das gefunden Ressource das sprach darüber, wie man das Maximum erhöhen kann. Hier eine kleine Erklärung:

  • /proc/sys/net/core/somaxconn - maximale TCP-Verbindungen (SSH verbindet sich über TCP)
  • /proc/sys/net/core/netdev_max_backlog - kein so großer Deal, das ist die maximale Paketwarteschlange

Sie können diese Zahlen einfach bearbeiten, wenn Sie sie erhöhen möchten. Meine Standardeinstellung somaxconn ist 128, also solltest du gut sein.

BEARBEITEN:

Andere Optionen

Verwenden Sie Websockets mit NodeJS.

Damit sollten Sie anfangen. Wenn Sie nicht lernen möchten, wie man Websockets verwendet, senden Sie einfach HTTP-Post-Anforderungen an einen Webserver. Sie haben nicht zu viel Aufwand und Sie können auf diese Weise viele Daten senden. Ich würde mich persönlich für die Websockets entscheiden, weil sie in Echtzeit sind und nicht allzu schwierig einzurichten sind.

beatgammit
quelle
Ja, ich habe auch einen Standard somaxconn von 128. Mein Ziel hier ist, Daten so schnell wie möglich auf jeden der Knoten schreiben / lesen zu können. Haben Sie "bessere" (schnellere) Vorschläge, wie Sie dies erreichen können, als sich durchzuschalten ssh?
user74781
Daten einfach lesen und schreiben? Verwenden Sie rsync für Dateien, verfolgt Änderungen und reduziert den gesamten Netzwerkaufwand. Ich gehe davon aus, dass nodes Sie meinen einzelne Computer. Was genau willst du machen?
beatgammit
Sie können auch einen HTTP-Server (z. B. NodeJS) einrichten und einen einfachen Server einrichten, der Websockets verarbeitet, wenn Sie nur Daten senden möchten. Es gibt praktisch keinen Netzwerk-Overhead und es bleibt offen. Der Nachteil ist, dass Sie etwas programmieren müssen.
beatgammit
@jameson: rsync ist gut zum Senden und Empfangen von Dateien. Mein Ziel ist es hier, Daten auf schnellstem Weg auf einzelne Maschinen (verbunden in einem Netzwerk) schreiben zu können. Meine Quelldaten kommen in den Speicher von machine X. Ich verarbeite es im Speicher und muss es dann speichern. Es sind sehr viele Daten, daher würde ich im Idealfall die Daten im Speicher aufteilen (unter Verwendung einer bestimmten Logik) und sie einfach (dh Teile davon) auf schnellstem Weg an jeden einzelnen Computer senden. Dieser Computer übernimmt das Schreiben von Daten auf die lokale Festplatte.
user74781
Dann würde ich Websockets verwenden. Richten Sie Websockets mit NodeJS oder ähnlichem ein und übertragen Sie die Daten mit jeder beliebigen Logik zu jedem von ihnen. Ich werde ein paar Links zu meiner Antwort posten.
beatgammit