Andreas Korthaus: Server mit 2 Netzwerkkarten anbinden

Hallo!

Hier bei uns im LAN ist es manchmal so, dass es etwas langsam ist, da teilweise mehr als 10 Clients in unserem 100 Mbit Ethernet auf einen Server über einen Switch zugreifen. Der Server ist mit 100 Mbit an den Switch angebunden. Das größte Problem ist vermutlich, das der Server(Linux, Samba...) auch als Fileserver dient, so dass viele große Dateien drauf liegen. Jedenfalls wird dann alles andere tierisch lahm wenn sich jemand gerade ne größere Datenmengen da runter zieht.
Jetzt habe ich mir gedacht, ist es nicht möglich den Server mit 2 Netzwerkkarten und 2 IPs an den Switch anzubinden? Also eine spezielle Leitung für den Fileserver. Ist das möglich (ich meine jetzt nicht dieses link-aggregation, sondern tatsächlich 2 unabhängige Leitungen)? Und bringt das überhaupt was? Das geht ja dann trotzdem über den einen Switch, kann denn ein Switch mehr als 100Mbit weiterreichen? Denn sonst würde es nichts nützen. In diesem Fall könnte man die eine Leitung vielleicht künstlich drosseln, auf 90% oder sowas, geht das irgendwie? Und bevor ich total falsch liege, wie kann ich am besten messen welche Serversoftware wieviel Traffic verursacht(unter Linux)?

Grüße
Andreas

  1. Holladiewaldfee,

    Jetzt habe ich mir gedacht, ist es nicht möglich den Server mit 2 Netzwerkkarten und 2 IPs an den Switch anzubinden? Also eine spezielle Leitung für den Fileserver. Ist das möglich (ich meine jetzt nicht dieses link-aggregation, sondern tatsächlich 2 unabhängige Leitungen)?

    Was spricht dagegen? Du kannst doch zwei Netzwerkkarten einbauen, denen Du dann unterschiedliche IPs zuweist. Anschließend konfigurierst Du die einzelnen Dienste entsprechend, damit sie nur noch Anfragen entgegennehmen, die sich auf eine bestimmte IP beziehen, oder Du setzt einen kleinen Paket-Filter auf, der auf Netzwerkkarte 1 alles durchlässt, was nicht auf den Ports für Samba läuft und auf der zweiten eben nur noch diese Anfragen durchlässt.

    Und bringt das überhaupt was? Das geht ja dann trotzdem über den einen Switch, kann denn ein Switch mehr als 100Mbit weiterreichen? Denn sonst würde es nichts nützen. In diesem Fall könnte man die eine Leitung vielleicht künstlich drosseln, auf 90% oder sowas, geht das irgendwie?

    QoS. Unter Linux gibt's dafür glaube ich CBQ und Wondershaper, und ab Kernel 2.schießmichtot ist es anscheinend schon direkt im Kernel mit implementiert. Da gab's neulich erst einen Thread dazu, such einfach mal nach "cbq" und "wondershaper").

    Ciao,

    Harry

    --
      Hä? Was? Signatur?! Kann man das essen?
    1. Hallo,

      Was spricht dagegen? Du kannst doch zwei Netzwerkkarten einbauen, denen Du dann unterschiedliche IPs zuweist. Anschließend konfigurierst Du die einzelnen Dienste entsprechend, damit sie nur noch Anfragen entgegennehmen, die sich auf eine bestimmte IP beziehen,

      Gute Idee. Bei mir ging's damals nur um einen Fileserver, da viel das weg. Ergänzung an Andreas: Vernünftige Switches haben eine interne Bandbreite, die wesentlich über 100MBit liegt, 1GBit ist relativ üblich, glaube ich mich zu erinnern.

      Henk

      1. Hallo zusammen!

        Was spricht dagegen? Du kannst doch zwei Netzwerkkarten einbauen, denen Du dann unterschiedliche IPs zuweist. Anschließend konfigurierst Du die einzelnen Dienste entsprechend, damit sie nur noch Anfragen entgegennehmen, die sich auf eine bestimmte IP beziehen,

        Gute Idee.

        Hm? Ich dachte es wird immer nur auf eine IP reagiert? Brauche ich dann ein anders Subnetz oder nicht? Dann würde das ganze aber etwas umständlich.
        Ich würde das jetzt ganz spontan so mache, das ich z.B die Anfragen an den Intranet-Webserver einfach an die eine IP sende, genauso IMAP-Server... und die File-Server Anfragen an die 2. IP. Wies muß ich da lokal was machen? IMHO regieren dei Server doch auf beide IPs, oder? Wenn ich an http://192.168.0.1:80 eine Anfrage sende wird - solange hinter de Netzwerkkarte ein Apache der an Port 80 lauscht sitzt auch antworten, wenn die 2. IP 192.168.0.2 wird er auf  http://192.168.0.2:80 genau so reagieren, es sei denn ich schreibe die IP als virtuellen Host oder über eien Paketfilter vor, habe ich das etwa richtig verstanden? Normalerweise reagieren die Server auf "alle" Ips die der Rechner hat, oder nicht? Ich kann mich zumidnest nicht dran erinnern das ich einem Programm mal eine Ethernet-Schnittstelle zuweisen.

        Bei mir ging's damals nur um einen Fileserver, da viel das weg.

        Gbit Ethernet wäre natürlich ne nette Sache, aber das ist zu teuer, auch wenn es billiger geworden ist. Mit geht es weniger um den Fileserver, mehr um den Rest, der unter dem Fileserver leidet.

        Ergänzung an Andreas: Vernünftige Switches haben eine interne Bandbreite, die wesentlich über 100MBit liegt, 1GBit ist relativ üblich, glaube ich mich zu erinnern.

        Habe solche Angaben nur noch nirgends gesehen?! Am bestebn frage ich mal den Hersteller, weiß gerade nicht genau welcher Hersteller da ist.

        Vielen Dank Euch beiden und viele Grüße
        Andreas

        1. Hi!

          Also bei Apache kann man auf jeden Fall in der httpd.conf Datei unter LISTEN = xxx.xxx.xxx.xxx einstellen, auf welche IP der Server reagiert. (mußt mal suchen, ob das nur LISTEN= hieß, oder der Parameter anders war).

          Ich meine auch mich zu erinnern, dass man bei Samba das Netzwerk Device einstellen kann z.B. eth0 oder eth1.

          Howdi
          gülcki

          1. Hallo!

            Ich denke das sollte gehen, wenn jetzt der Switsch noch eine genügend hohe interne Bandbreite aufweist ist wohl alles OK.

            Aber mal weiter gedacht, könnte man mit einem Software oder am besten mit einem Scipt(PERL/BASH) evtl. was schreiben, das wenn eine der beiden Leitungen tot ist alle Anwendungen über die funktionierende Leitung laufen? Also ganz automatisch? Ich stelle mir das so vor:

            Ich sende per cronjob jede Minute auf beiden Leitungen ein ping an den Router, außer dem Server die einzige feste Adresse im LAN. Wenn dies scheitert, wenn ein ping scheitert, wird entsprechend eine Script ausgeführt, welches die Anwendungen auf die funktionierende Leitung schiebt. 2 Fragen:

            1. Wie verwende ich ping über ein spezielles Ethernetinterface? ich schreibe normalerweise einfach ping... aber dann kann ich ja nicht bestimmen über welche Leitug das geht! Oder gibt es was anders als Ping was hierfür besser geeignet ist? Oder eine Abfrage des Status des Interface an sich?

            2. Wie konfiguriere ich die Software am besten, dass ich sie möglichst unkompliziert auf eine Leitung legen kann? Am besten bleibe ich aus den Einstellungen der Software möglichst raus so dass sie auf beiden Leitungen funktioniert. Oder isch schreibe 3 Config-Dateien für eien Paketfilter? Aber da es ja nicht um Sicherheit geht ist das eigentlich nicht notwendig, oder? Nur wie sorge ich bei den Clients dafür, dass die Anfragen an die richtieg IP gehen? Das ist wohl unmöglich, daher bleibt mir nur der umgekehrte Weg, ich ändere ggfs. die IP. zumindest wenn die Leitung für die Übrigen Dineste ausßer Fileserver ausfällt, könnte ich die auf der noch funktionierenen Leitung mit der alten IP-Adresse weiterbetreiben. Dann funktioniert aber vermutlich Samba und deas ganze nicht mehr.Könnte ich für diesen Fall evtl. Scripte bei den Clients hinterlegen das die darauf reagieren könnten, von mir aus manuell?

            Grüße
            Andreas

            1. Moin!

              Ich bin zumindest theoretisch auf eine Unmöglichkeit gestoßen, die dir den Effekt der doppelten Bandbreite vermiesen dürfte.

              Aber mal weiter gedacht, könnte man mit einem Software oder am besten mit einem Scipt(PERL/BASH) evtl. was schreiben, das wenn eine der beiden Leitungen tot ist alle Anwendungen über die funktionierende Leitung laufen? Also ganz automatisch? Ich stelle mir das so vor:

              Ich sende per cronjob jede Minute auf beiden Leitungen ein ping an den Router, außer dem Server die einzige feste Adresse im LAN. Wenn dies scheitert, wenn ein ping scheitert, wird entsprechend eine Script ausgeführt, welches die Anwendungen auf die funktionierende Leitung schiebt. 2 Fragen:

              1. Wie verwende ich ping über ein spezielles Ethernetinterface? ich schreibe normalerweise einfach ping... aber dann kann ich ja nicht bestimmen über welche Leitug das geht! Oder gibt es was anders als Ping was hierfür besser geeignet ist? Oder eine Abfrage des Status des Interface an sich?

              Genau _hier_ liegt das Problem: Dein Server hat eine interne Routingtabelle, die ihm sagt, über welches Interface er Daten senden soll, wenn er gewisse IP-Adressen erreichen will. Das ist vollkommen unabhängig davon, ob er bestimmte Interfaces zum Lauschen benutzt.

              Mit anderen Worten: Wenn dein Webserver auf .0.1 lauscht und dein SMB-Server auf .0.2, und dein Routing sagt, dass alle Pakete an .0.x über .0.1 zu senden sind, wird die zweite Leitung schlicht und ergreifend nur zum Empfang von SMB-Requests genutzt werden, aber nicht zum Versand. Das bedeutet, dass du immer noch den Engpaß der Leitung in Richtung Netzwerk hast.

              Es wäre ja auch zu schön gewesen, wenn man einfach eine zweite Netzwerkkarte ins Gerät bastelt und so mir-nichts-dir-nichts einfach doppelte Bandbreite hätte.

              Und auch eine Trennung nach Empfangsrichtung, die man ja somit hätte, bringt nichts - denn das macht der Switch schon, dass man Fullduplex senden kann.

              Mit anderen Worten: Dein Server benötigt die Kenntnis, dass die zwei Netzwerkkarten als _ein_ Device ins selbe Netz zu betrachten sind. Sowas ist (wohl - ich hab keine praktische Erfahrung) relativ simpel, wenn z.B. der Switch mitspielt und automatisch ein Load-Balancing auf den beiden (oder noch mehr) Leitungen zum Server realisiert. Umgekehrt muß der Server natürlich wissen, dass er in Richtung Netzwerk auf allen Netzwerkkarten senden kann, muß also seinerseits Load-Balancing machen. Ich bin allerdings der Meinung, dass Linux sowas problemlos kann. Guck einfach mal in die Möglichkeiten bei der Kernel-Kompilierung. Und es gibt sicherlich auch ein HOWTO dafür.

              Wenn du Load-Balancing machst, wird einerseits die Higher-Level-Konfiguration (wie z.B. DNS, Aufteilung der Server-Dienste etc) wesentlich einfacher, weil sich im Prinzip zu jetzt nichts ändert (der Server behält die eine IP-Adresse, DNS-Name etc. bleibt gleich), andererseits profitieren alle Benutzer sofort von der höheren Bandbreite, unabhängig vom Dienst, den sie benutzen, weil einfach zwei Leitungen statt einer für alle Serverdienste zur Verfügung stehen.

              Das Problem der Realisierung ist (sofern es noch nicht aufgefallen ist) in diesem Fall der Switch, der solch ein Load Balancing hinkriegen muß. Üblicherweise kann man sowas bei entsprechenden Switches programmieren - es ist IMHO eher unüblich, dass sowas automatisch und mit billigen Switchen funktioniert.

              - Sven Rautenberg

              --
              "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
              1. Holladiewaldfee,

                Genau _hier_ liegt das Problem: Dein Server hat eine interne Routingtabelle, die ihm sagt, über welches Interface er Daten senden soll, wenn er gewisse IP-Adressen erreichen will. Das ist vollkommen unabhängig davon, ob er bestimmte Interfaces zum Lauschen benutzt.

                Hm ... und was wäre, wenn er Samba einfach in ein jail packt (weiß jetzt nicht wie das Linux-Pendant heißt, falls es eins gibt) und den Prozessen im Jail einfach den Zugriff auf die erste Netzwerkkarte verbietet? Dann wäre der Server doch prinzipiell gezwungen, die Daten aus dem Jail über die zweite Leitung zu senden?

                Ciao,

                Harry

                --
                  Hä? Was? Signatur?! Kann man das essen?
              2. Hallo!

                Ich bin zumindest theoretisch auf eine Unmöglichkeit gestoßen, die dir den Effekt der doppelten Bandbreite vermiesen dürfte.

                war eigentlich klar as das nichzt so einfach sein kann, denn das wäre zu schön...

                Genau _hier_ liegt das Problem: Dein Server hat eine interne Routingtabelle, die ihm sagt, über welches Interface er Daten senden soll, wenn er gewisse IP-Adressen erreichen will. Das ist vollkommen unabhängig davon, ob er bestimmte Interfaces zum Lauschen benutzt.

                Also ist das Anwenungsunabhängig und nicht beeinflussbar. Schlecht.

                Und auch eine Trennung nach Empfangsrichtung, die man ja somit hätte, bringt nichts - denn das macht der Switch schon, dass man Fullduplex senden kann.

                Verstehe ich nicht. Fullduplex heißt doch  nur das gleichzeitig über eine Leitung Daten mit 100Mbit gesendet und empfangen werden können, oder? Wieso soll das dann nichts bringen? Der Client entscheidet doch an welche IP das paket geht, der Switch merkt ja von nichts davon das das einer der Rechner 2 IPs hat, für den sind das 2 Rechner.

                Mit anderen Worten: Dein Server benötigt die Kenntnis, dass die zwei Netzwerkkarten als _ein_ Device ins selbe Netz zu betrachten sind. Sowas ist (wohl - ich hab keine praktische Erfahrung) relativ simpel, wenn z.B. der Switch mitspielt und automatisch ein Load-Balancing auf den beiden (oder noch mehr) Leitungen zum Server realisiert.

                Wieso muß der Switch da überhaupt was können? Der Rechner sendet das eien Paket von der einen IP an irgendeien andere, udn das nächste Paket von der 2. IP IP an dieselbe Adresse. Oder kommen die Clients nicht damit klar wenn z.B. eine Dazei in 100 Pakete zerlegt wird und die dann von 2 Adressen kommen?

                Umgekehrt muß der Server natürlich wissen, dass er in Richtung Netzwerk auf allen Netzwerkkarten senden kann, muß also seinerseits Load-Balancing machen. Ich bin allerdings der Meinung, dass Linux sowas problemlos kann. Guck einfach mal in die Möglichkeiten bei der Kernel-Kompilierung. Und es gibt sicherlich auch ein HOWTO dafür.

                Wonach sucht man da am besten, bei Load-Balancing finde ich irgendwie nur Webserver? Ich denke auch das das gehen sollte. Es bringt mir nur nichst da der Switch das nicht kann. Vermutlich ist das das Prinzip der Lonk-Aggregation, das ich vorher schonmal genannt  hatte, da hatte ich mich mal wegen erkundigt, udn dafüpr braucht man halt einen Switch der das unterstützt, und entsprechende Software, damit kannst Du auch mehr als 2 Leitungen zu einer virtuellen Leitung mit einer IP machen. Nur wie geagt hat das mein Switzch nicht. Und bevor man sowas kauft ist es nicht teuerer direkt Gbit Ethernet zu kaufen, hab da was von Cnet gesehen, Lan-Karte und Switch mit 1 Gbit Port und 8 10/100 Mbit Ports zusammen unter 200 EUR. Selbst ein komplettes Gbit LAN ist gar nicht mehr so teuer ;-)

                Wenn du Load-Balancing machst, wird einerseits die Higher-Level-Konfiguration (wie z.B. DNS, Aufteilung der Server-Dienste etc) wesentlich einfacher, weil sich im Prinzip zu jetzt nichts ändert (der Server behält die eine IP-Adresse, DNS-Name etc. bleibt gleich), andererseits profitieren alle Benutzer sofort von der höheren Bandbreite, unabhängig vom Dienst, den sie benutzen, weil einfach zwei Leitungen statt einer für alle Serverdienste zur Verfügung stehen.

                Auf der anderen Seite kann die Leitung aber wieder durch den Fileserver verstopfen. Die echte 2-Leitung Variante hätte den Vorteil, das die übrigen nicht so banbreitenhungrigen Dienste  bei voll ausgelasteter File-Server Leitung nicht beeinträchtig würden. Wobei ich dann natürlich einen großen Teil der Bandbreite ungenutzt lasse...

                Gibt es die Möglichkeit die Bandbreite eines Dienstes zu kontrollieren? So dass ich z.B. SMB-Pakete Kontrolliere, und wenn die 90% der Bandbreite ausmachen das die dann ausghebremst werden? Ist das irgendwie möglich? Ich kann mir eigenrlich nicht vorstellen wie!

                Viele Grüße
                Andreas

                1. Holladiewaldfee,

                  Also ist das Anwenungsunabhängig und nicht beeinflussbar. Schlecht.

                  Ich hab mir grade noch überlegt, was wohl passieren würde, wenn Du die Ports, auf denen die Anwendungen ihre Daten zurücksenden, auch rauszus auf der jeweiligen Netzwerkkarte sperren würdest ...

                  Gibt es die Möglichkeit die Bandbreite eines Dienstes zu kontrollieren? So dass ich z.B. SMB-Pakete Kontrolliere, und wenn die 90% der Bandbreite ausmachen das die dann ausghebremst werden? Ist das irgendwie möglich? Ich kann mir eigenrlich nicht vorstellen wie!

                  Unter FreeBSD:
                  ipfw add pipe 1 all from SERVER_IP PORT to any out via INTERFACE
                  ipfw pipe 1 config bw 50MBit/s

                  Für Linux gibt's wie schon erwähnt ähnliche Implementierungen (CBQ, Wondershaper), die das können.

                  Ciao,

                  Harry

                  --
                    Hä? Was? Signatur?! Kann man das essen?
  2. Hallo,

    ich habe mir das ganze auch vor einiger Zeit mal angesehen, und bin zu dem Schluß gekommen, das es mehr Sinn macht, den Server über Gigabit-Ethernet anzubinden.

    100MBit:
    Es gibt zwar eine Software (für Windows), die nennt sich NICExpress von IPMetrics, diese kann softwaremässig mehrere Netzwerkkarten zusammenfassen, ansonsten gibt es noch Die Hardwarelösungen der Netzwerkkartenhersteller (teuer) Vorteil: Bei Ausfall einer Karte ist nicht gleich die Netzwerkverbindung komplett weg..

    Einfach zwei Karten in den Server zu stopfen, bringt nix, es sei denn, Du bindest darüber zwei Subnetze an. Ansonsten wird der Server immer nur eine nutzen. (Warum, habe ich mittlerweile vergessen, hat mir mal jemand erzählt, der sich damit besser auskannte, als ich).

    1GBit:
    Für viele Switches (z.B. 3COM) gibt es Gigabit-Module, und Gigabit-Netzwerkkarten sind auch nicht mehr so schweineteuer. Als Backup kannst Du ja noch eine 100er Karte im Server lassen, die Du nur im Falle eines Falles aktivierst.

    Gruß Henk