Verwenden Sie Puppet, um Änderungen an IP-Route und Sysctl vorzunehmen

7

Ich habe zwei Änderungen an ip route& sysctl, die den langsamen Start von TCP deaktivieren. Hier ist, wie ich es mache

ip route show

Notieren Sie sich die Zeile, die mit der Standardeinstellung beginnt.

Nehmen Sie die IP aus der Standardzeile und führen Sie sie aus

sudo ip route change default via $ip_address dev eth0 initcwnd 12 
sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0

Wie kann ich daraus ein Puppenskript erstellen? Eine, die auf vielen Computern des gleichen Typs bereitgestellt werden kann - CentOS 6

Bearbeiten: Kopfgeld hinzugefügt, um ein funktionierendes Beispiel für zu erhalten

sudo ip route change default via $ip_address dev eth0 initcwnd 12 
Quintin Par
quelle

Antworten:

6

Wenn Sie statische IP-Adressen haben, platzieren Sie diese in / sbin / ifup-local

#!/bin/sh

GATEWAY=`ip route| awk '/^def/{print $3}'`
DEFGWDEV=`ip route| awk '/^def/{print $5}'`

if [ "$1" = $DEFGWDEV ]; then
  ip route change default via $GATEWAY dev $DEFGWDEV initcwnd 12
fi
Tarun Reddy
quelle
6

Wenn Sie Ihre Internetadresse über DHCP erhalten (was in Ihrer Frage vorgeschlagen wird), können Sie /etc/dhcp/dhclient-exit-hooksnach der dhclientKonfiguration Ihrer Schnittstelle Shell-Befehle ausführen . Sie haben Zugriff auf eine Reihe von Variablen, die von dhclient bereitgestellt werden, einschließlich $router. Sie können dies verwenden, um Folgendes auszuführen:

ip route change default via $router dev $interface initcwnd 12 

Sie würden dieses Skript mit einer normalen Puppet- fileRessource installieren :

file { '/etc/dhcp/dhclient-exit-hooks':
owner => root,
group => root,
mode => 0755,
source => 'puppet:///.../dhclient-exit-hooks',
}

Und der Dateiinhalt würde wahrscheinlich ungefähr so ​​aussehen:

#!/bin/sh

if [ "$interface" = eth0 ]; then
  ip route change default via ${new_routers%% *} dev $interface initcwnd 12 
fi

Wenn Sie kein DHCP verwenden, können Sie etwas Ähnliches tun. Das normale ifupSkript wird /sbin/ifup-localnach der Konfiguration der Schnittstelle ausgeführt, und Sie können dies verwenden, um den ipBefehl auszuführen . In diesem Fall können Sie die Adresse des Standard-Gateways einfach durch Beschaffung in der Schnittstellenkonfiguration in abrufen /etc/sysconfig/network-scripts/ifcfg-eth0(und Ihre Puppet- fileRessource wird installiert /sbin/ifup-local).

Larsks
quelle
6

Die sysctlSeite wurde in diesem Beitrag behandelt: Setzen Sie die Parameter sysctl.conf mit Puppet .

Das Beispiel von Puppet für das Networking nutzt auch Augeas .

Bearbeiten: Sie arbeiten mit CentOS. Denken Sie also daran, dass Sie diese Routen dauerhaft festlegen müssen. Ist es sicherer, die Änderung in einer Datei vorzunehmen, zu überprüfen und dann die Netzwerkschnittstelle neu zu starten? Dies setzt die /etc/sysconfig/network-scripts/route-ethXVerwendung voraus , da Sie die viaSyntax verwenden. Der ip routeBefehl scheint Ihr Ziel zu sein, da Sie das anfängliche Überlastungsfenster (initcwnd) ändern möchten. Ich würde das ernsthaft in eine andere Option aufteilen, da das Festlegen des Standard-Gateways selbst vom Betriebssystem-Netzwerkskript / Kickstart / Build-Prozess übernommen werden sollte.


Nun zu einer völlig anderen Lösung:

Ich mag Puppet für einige Dinge. Netzwerkkonfigurationen und Systemwerte gehören nicht dazu. Mit EL6-Systemen können Sie das Tuned-Adm-Framework verwenden , um diese Systemänderungen im Handumdrehen auf einfache und konsistente Weise vorzunehmen. Die Server, die ich verwalte, benötigen manchmal mehr als 30 sysctlund sysfsÄnderungen, bevor sie in Produktion gehen. Früher habe ich das manuell verwaltet, dann mit Puppet ... aber mit EL6 habe ich ein optimiertes Profil mit allen erforderlichen Optimierungen und Skripten erstellt, die Profile und ihre Verteilung mit Puppet verwaltet und den tunedDaemon mit Puppet gesteuert .

Verschieben Sie dazu einfach Ihr ipSkript und Ihre sysctlWerte in ein benutzerdefiniertes Profil und gehen Sie von dort aus. Viel sauberer.

ewwhite
quelle
Es ist schwer, das Netzwerk-Bit herauszufinden. Sogar erkundet github.com/AbbyEdwards/puppet-iproute2facts Können Sie mir bei der IP-Route helfen?
Quintin Par
Sie arbeiten mit CentOS. Denken Sie also daran, dass Sie diese Routen dauerhaft machen müssen, oder? Ist der sicherere Ansatz, die Änderung in einer Datei vorzunehmen, zu überprüfen und dann die Netzwerkschnittstelle neu zu starten? Dies setzt die /etc/sysconfig/network-scripts/route-ethXVerwendung voraus .
ewwhite