Start presentation
Slide 1: Konfigurationsmanagement mit cfengine
Christopher Huhn
C.Huhn@gsi.de
Slide 2: Hintergrund
- ITIL:
- Configuration Management
- Konfigurationseinheiten (CIs) und -datenbank (CMDB).
- Change Management
- (Management-) Prozesse zur Freigabe und Durchführung von Änderungen.
- Idealerweise gemeinsam implementiert.
- Seit 2 Jahren im GSI-Einsatz (Sarge-Upgrade)
- Ablösung für selbstentwickelte Lösung
- Shell Scripts
- Skalierungsprobleme
Slide 3: Hintergrund
- http://www.iu.hio.no/~mark/ Mark Burgess - One man show
- Professor für Netzwerke und Systemadministration an der Universität Oslo
Systemadministration an der Osloer Physikfakultät
PhD in theoretischer Physik
-
cfengine
- seit 1993
- Version 2 seit 2002
- fortlaufendes Forschungsprojekt
- Open Source
- Plattformübergreifend: UNIX, Windows (Cygwin), MacOS
- Läuft auf > 1000000 Rechnern weltweit
Slide 4: Konzepte
- Die Entropie der Systemkonfiguration nimmt durch Benutzer-Interaktion beständig zu
- cfengine als "Immunsystem" des Rechners
- Sprache für Konfigurationsrichtlinien
- (größtenteils)
deklarativ
, nicht prozedural, idempotent
- beschreibt den Sollzustand eines Systems
- Fokus auf guter Lesbarkeit
- Agent setzt die Richtlinien um
- bearbeitet ausschließlich den Knoten auf dem er läuft
- keine unmittelbare Steuerung durch zentralen Server
- Das System konvergiert zum beschriebenen Sollzustand (Fixpunkt)
Slide 5: Kernfunktionalität
- Interpreter
cfagent
-
/etc/cfengine/cfagent.conf
- Gestartet durch
cfexecd
oder cron
- Zufällige gestreute Wartezeit beim Start
- Stets zwei Durchläufe (Two pass)
- GSI: zweimal stündlich gestartet durch
cfexecd
Beispiel: Verteilung der SSH-Server-Konfiguration mit der Aktion
copy
:
copy:
${configspace}/sshd_config
dest=/etc/ssh/sshd_config
Problem: Änderungen werden nicht sofort aktiv, sondern erst nach Neustart des SSH-Servers
Slide 7: Klassen
Aktionen können
Klassen definieren.
Die Durchführung von Aktionen kann auf bestimmte Klassen beschränkt werden.
Beispiel: SSH-Server nach Änderungen neustarten:
copy:
${configspace}/sshd_config
dest=/etc/ssh/sshd_config
define=ReloadSSH
shellcommands:
ReloadSSH::
"/usr/sbin/invoke-rc.d ssh reload > /dev/null"
Slide 8: Klassen
- Vorgegebene Basisklassen (hard classes):
- Hostname, IP-Adresse:
lxg0815
, 140_181_70_60
- OS:
linux
, debian
, debian_4_0
- Datumswerte:
Friday
, Yr2007
, Hr09
, Min15_20
- ...
- Verknüpfen durch Boolsche Operationen:
- und :
class1.class2::
- oder :
class1|class2::
- nicht :
!class1::
- Gruppierung :
!(class1|class2) = class1.!class2
Beispiele:
-
Yr2007.November.Day27.Hr11.Min30_35::
-
debian_4_0|linux_i686_2_6_18_2_686_bigmem::
Slide 9: Klassen: groups
Im Abschnitt
groups
können neue Klassen definiert werden.
groups:
dns = ( lxdns1 lxdns2 )
batchfarm = ( !HostRange(lxb,000-999) )
Dynamische Klassen:
- Definition nach Booleschem Check:
standalone = ( '/usr/bin/test -w /' )
- Klassendefinition aus Programm-Ausgabe:
control:
AddClasses = ( ExecResult(/gsiroot/sbin/cfe-mainboard) )
Diese Definitionen können rekursiv sein.
Slide 10: Zentralisierung
Problem: Wie kommen die Konfigurationsdateien auf die einzelnen Maschinen:
copy:
any::
${configspace}/sshd_config
dest=/etc/ssh/sshd_config
define=ReloadSSH
server=cfmaster.gsi.de
- Server-Dämon
cfservd
- Beidseitige Authentifizierung mit SSL-Zertifikaten (mutual trust)
Slide 11: Zentralisierung: bootstrapping
-
cfengine
installieren und starten
-
/etc/cfengine/update.conf
holen oder erzeugen.
- Enthält Richtlinien zum Kopieren der cfengine-Konfiguration von Master
- Vor der Anwendung von cfagent.conf.
- "demokratisch" - pull basiertes Update
- GSI:
- FAI installiert
cfengine
und update.conf
- Server holt Konfiguration automatisch aus dem SVN-Repository
- Gleiche Richtlinien auf allen Maschinen
- Klassen steuern, welche Richtlinien wo aktiv werden.
- Monitoring mit
cfshow --last-seen
(-> Nagios)
Slide 12: Aktion: editfiles
Mit
editfiles
ist das Editieren von Dateiinhalten möglich:
editfiles:
{ /etc/ssh/sshd_config
ReplaceFirst ".*X11Forwarding no"
With "X11Forwarding yes"
ReplaceFirst "PasswordAuthentication no"
With "PasswordAuthentication yes"
DefineClasses "RestartSSH"
}
AppendIfNoSuchLine
fügt fehlende Zeilen an.
CommentLinesMatching
kommentiert Zeilen aus, die zum gegebene Muster passen.
EmptyEntireFilePlease
leert die Datei komplett.
DeleteLinesMatching
löscht Zeilen, die auf das gegebene Muster passen.
Slide 13: Aktion: editfiles
Mit
BeginGroup...EndGroup
ist eine Fallunterscheidung und Klammerung möglich:
{ /etc/sudoers
BeginGroupIfNoLineMatching "User_Alias ADMINS=.*"
WarnIfNoLineMatching "# User alias specification"
LocateLineMatching "# User alias specification"
InsertLine "User_Alias ADMINS=christo,karin,schoen,shaller,troth"
EndGroup
}
Möglicherweise der mächtigste Aktionstyp von
cfengine
.
Slide 14: Aktion: packages
Installation von Paketen:
packages:
desktop::
gsi-desktop
version=1
cmp=ge
action=install
GSI:
- Es werden ausschließlich Meta-Pakete installiert
- Automatisch aus den FAI-Paketlisten erzeugt
- Synchronisation zwischen Neuinstallationen und bestehenden Maschinen
Slide 15: Aktion: processes
Kann zur Überwachung von Prozessen eingesetzt werden:
processes:
!reboot::
"cfexecd" restart
"/usr/sbin/invoke-rc.d cfengine2 start > /dev/null"
inform=true
"syslog-ng" restart
"/usr/sbin/invoke-rc.d syslog-ng start > /dev/null"
inform=true
...
!reboot.debian_3_1::
"ntpd" restart
"/usr/sbin/invoke-rc.d ntp-server start > /dev/null"
inform=true
Slide 16: Weitere Aktionen
-
files
: Datei-Besitzer und -Berechtigungen ändern/reparieren,
Prüfsummencheck (tripwire
"für Arme")
-
control
: Variablendefinition, Konfiguration von cfengine
-
disable
: verschiebt Dateien
-
disks
: überwacht Plattenplatz
-
links
: wartet Symlinks
-
tidy
: räumt auf
Weitere Aktionstypen (bei GSI nicht im Einsatz):
-
acl
, binservers
, broadcast
, mountables
, ...
Slide 17: Aktion: filter
Zur Definition von Auswahlkriterien.
Können dann in anderen Aktionen (
copy
,
files
,
processes
,
tidy
) verwendet werden.
filters:
{ no_svn_dirs
NameRegex: ".*/\.svn(/.*)?$"
Result: "!NameRegex"
}
copy:
/src
dest=/dest
r=inf
filter=no_svn_dirs
Slide 18: Anomalie-Erkennung
- Zusätzlicher Dämon
cfenvd
- Überwacht bestimmte Netzwerkports, Anzahl der User, Load, usw.
- Berechnung von Durchschnitt und Standardabweichung
-
cfenvd
lernt die Normalwerte von selbst
- Wöchentliche Periode einbezogen
- In cfengine werden entsprechende Klassen definiert:
-
www_in_high_dev2
-
LoadAvg_low_anomaly
- Außerdem wird die Verteilung der Verbindungen auf Kommunikationspartner untersucht ("Entropy"):
- Alarme können bspw. über
shellcommands
ausgelöst werden:
LoadAvg_high_anomaly::
"/bin/echo Load anomaly on $(host) value $(value_loadavg) \\
average $(average_loadavg) +- $(stddev_loadavg)"
Erweiterung von
cfenvd
- Anlehnung an
rrdtool
- Überwachung beliebiger Messwerte möglich
- Beachtung täglicher, wöchentlicher und jährlicher Perioden möglich
- analoge Klassendefinition in
cfengine
Slide 20: Konkurrenz
- Handarbeit (ad-hoc Administration) - skaliert nicht
- Shell-Skripte
- http://reductivelabs.com/trac/puppet/ Puppet
- "next generation cfengine"
- Operating System Abstraction Layer (OSAL)
- http://trac.mcs.anl.gov/projects/bcfg2/ bcfg2
- "Kongruenz" statt Konvergenz
- Intelligenz größtenteils im zentralen Server, Clients möglichst unselbständig.
- Quattor (CERN)
- Bestandteil von Elfms (Extremely large fabric management system)
- zusammen mit Lemon und Leaf
- Beschreibungssprache PAN
- Konfigurationsdatenbank CDB
Slide 21: Meckerkasten/Wunschliste
- Einstiegshürde
- Syntax gewöhnungsbedürftig
- Bessere Übersichtlicht bei Definition/Management von Klassen
- Bessere Integrationsfähigkeit mit anderen Tools (API)
Slide 22: Fazit/Ausblick
- Die Kernfunktionen von
cfengine
machen das Richtige
- Besondere Stärke ist die Flexibilität des Systems
- Wesentlicher Bestandteil unseres Infrastruktur-Managements
-
cfengine
macht den Betrieb einer Farm dieser Größe und Diversität (Heterogenität) mit der vorhandenen Manpower überhaupt erst möglich.
- Cfengine 3 - Im nächsten Release das Paradies
Referenzen
- Set ALLOWTOPICCHANGE = Christo
- Set ALLOWTOPICVIEW = *
--
Christo - 22 Oct 2007