ADMIN Magazin Datenbanken (Vorschau)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
GPT: Partitionsschema Cgroups: Mit Linux Rechner- 389: LDAP und<br />
für Terabyte-Festplatten Ressourcen kontrollieren Active Directory<br />
<strong>ADMIN</strong><br />
Netzwerk & Security<br />
Auf CD:<br />
06 2011<br />
Nov. – Dez.<br />
<strong>Datenbanken</strong><br />
11.10<br />
Server<br />
11.10<br />
Server-Ausgabe<br />
16 zum gleichen Preis!<br />
Seiten mehr Inhalt<br />
Know-how und Tests<br />
Wer ist schneller, MySQL oder PostgreSQL?<br />
NoSQL-<strong>Datenbanken</strong> im Überblick<br />
RAM erklärt<br />
Wie funktionieren<br />
Speicherchips?<br />
Virtualisierung<br />
Grafisches Management<br />
von VMs mit Archipel<br />
High Availability<br />
n iSCSI-HA-Cluster<br />
n Troubleshooting<br />
Groupware<br />
Zarafa in den Univention<br />
Corporate Server integriert<br />
Programmieren<br />
Skripten mit Python<br />
und Ruby<br />
www.admin-magazin.de<br />
D EUR 9,80<br />
A EUR 10,80 - BeNeLux EUR 11,25<br />
CH sfr 19,60 - E / I EUR 12,75<br />
4 196360 509805 06
Kinderstube der Revolution<br />
Editorial<br />
Kindertage der<br />
Revolution<br />
Liebe Leserinnen und Leser,<br />
am Anfang gab es Strom, aber noch kein Netz. Elektrizität musste man exakt<br />
dort produzieren, wo sie verbraucht werden sollte. Und so lieferten viele kleine<br />
Generatoren Strom für elektrifizierte Inseln. Zuerst hauptsächlich für Lampen,<br />
bald aber auch schon für Motoren. Das war ein riesiger Fortschritt: Elektrisches<br />
Licht brauchte im Unterschied zur Gasbeleuchtung keinen Laternenanzünder<br />
mehr, rußte nicht, verursachte nicht so schnell Brände. Elektromotoren konnte<br />
man am Einsatzort platzieren, ihre Energie erhielten sie durch überall verlegbare<br />
Kabel – so sparte man die verlustreiche und anfällige Transmission, mit der man<br />
in der Dampf- und Wasserkraft-Zeit die Energie über gigantische Konstruktionen<br />
aus Riemen und Gestängen leiten musste.<br />
Trotzdem fehlte in den Anfangsjahren der Elektrifizierung, als etwa Westinghouse und Tesla die Weltausstellung<br />
1893 in Chicago mit mehr als 200 000 eigens angefertigten Glühlampen spektakulär illuminierten, noch<br />
das meiste, was uns heute selbstverständlich ist. Es gab keine Steckdosen, Sicherungen oder Stromzähler. Den<br />
Wettlauf mit dem Gleichstrom (Edison) hatte der Wechselstrom erst mit dieser Ausstellung gewonnen, auf der<br />
30 Millionen Menschen das Lichtermeer bewunderten. Auch große Kraftwerke existierten noch nicht.<br />
Die kamen aber bald. Denn es zeigte sich rasch, dass sie Strom sehr viel wirtschaftlicher zu erzeugen vermochten<br />
als einzelne Generatoren. Beispielsweise weil man sie dort errichten konnte, wo Wasserkraft verfügbar<br />
war oder wo sich Kohle fördern ließ. Sie konnten Lastspitzen besser abfedern und eine höhere Versorgungssicherheit<br />
garantieren. Auch verfügten sie über die nötige Kapazität, um ganze Städte zu versorgen. So setzten<br />
sie sich dank ihrer wirtschaftlichen Überlegenheit durch, und mit ihnen entstand in allen Industrieländern das<br />
Wechselstromnetz.<br />
Eine ähnliche Situation erleben wir heute: Wir rechnen noch in Inseln, wissen aber schon, dass riesige zentralisierte<br />
Data Center viel wirtschaftlicher wären. Die nennen wir Cloud und bauen ihnen gerade eine Infrastruktur,<br />
über die ihre Leistungen überall abrufbar werden. Die Steckdosen und Sicherungen werden eben erfunden, aber<br />
erste Vorzeigeprojekte lassen sich schon bestaunen. Genau wie zu Beginn des Siegeszugs der Elektrifizierung<br />
fehlen noch Standards – die Netzspannung ist europaweit auch erst seit 1987 normiert. Genau wie damals sind<br />
wir uns bewusst, dass wir am Anfang einer Revolution stehen. Aber wie zum Ende des 19. Jahrhunderts können<br />
wir die Folgen noch nicht gänzlich überblicken. Wir wissen nur: Sie werden gravierend sein. Auch und gerade für<br />
Administratoren.<br />
@ leserbriefe@admin-magazin.de<br />
www.facebook.com/adminmagazin www.twitter.com/admagz<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
3
SErvice<br />
<strong>ADMIN</strong><br />
Netzwerk & Security<br />
Inhalt<br />
06/2011<br />
Welche freie Datenbank ist<br />
schneller? MySQL oder PostgreSQL?<br />
Die Antwort auf S. 40.<br />
48NoSQL<br />
Der neue Trend bei<br />
<strong>Datenbanken</strong> fürs Web<br />
im ausführlichen Grundlagenartikel.<br />
Login<br />
Netzwerk<br />
Schwerpunkt: <strong>Datenbanken</strong><br />
8 Branchen-News<br />
Neues von Firmen und Projekten.<br />
16 Vorgelesen<br />
Bücher über PostgreSQL und Virtualbox.<br />
18 Admin-Story<br />
Tagebuch eines IT-Nomaden.<br />
22 Leserbriefe<br />
Kommentare und Meinungen.<br />
28 Hyper-V-Netz optimieren<br />
Netzwerkoptimierung bei Microsofts<br />
Virtualisierungsplattform.<br />
34 LDAP und Active Directory<br />
Ein virtuelles Directory mit dem Fedora<br />
389 Directory Server aufsetzen.<br />
40 PostgreSQL vs. MySQL<br />
Benchmarks zeigen, wie<br />
viel geschicktes Tuning<br />
der Open-Source-<strong>Datenbanken</strong><br />
bringt.<br />
48 NoSQL<br />
Technische Grundlagen, Klassifikation<br />
und ein Überblick über freie NoSQL-<br />
<strong>Datenbanken</strong>.<br />
24 Think Twice<br />
Open Source: doppelte Arbeit oder<br />
Wahlfreiheit?<br />
26 Interview<br />
Nagios-Gründer Ethan<br />
Galstad über das<br />
eigene Projekt und die<br />
Konkurrenz.<br />
Service<br />
3 Editorial<br />
4 Inhalt<br />
6 Heft-CD<br />
130 Impressum und <strong>Vorschau</strong><br />
Test<br />
58 Windows Server 8<br />
Eine <strong>Vorschau</strong> auf die kommende<br />
Version des Windows-Servers.<br />
62 Archipel<br />
Virtualisierungsmanagement mit<br />
grafischer Oberfläche.<br />
4 Ausgabe 06-2011 Admin www.admin-magazin.de
Inhalt<br />
Service<br />
90Cgroups<br />
Ressourcenkontrolle<br />
unter Linux<br />
auf der Basis von Prozessen, Benutzern,<br />
Gruppen und so weiter.<br />
122Python<br />
Ein gut gefüllter<br />
Werkzeugkasten<br />
für alle Skriptaufgaben.<br />
114RAM<br />
Funktion und Typen<br />
von Speicherbausteinen<br />
im Detail erklärt.<br />
Security<br />
68 LXC<br />
Prozesse eingesperrt: Container-<br />
Virtualisierung mit LXC mit Ubuntu<br />
10.04.<br />
70 Überwiegend heiter?<br />
Überlegungen zur Sicherheit beim<br />
Cloud-Computing.<br />
Basics<br />
109 GPT-Partitionen<br />
Terabyte-Festplatten partitionieren.<br />
114 RAM demystified<br />
Wie funktionieren Speicherbausteine?<br />
118 Windows-Tuning<br />
Mit freien Tools die Performance messen.<br />
Programmieren<br />
122 Python<br />
Einführung in die Skriptsprache und<br />
eine Kurzvorstellung nützlicher Module.<br />
126 RVM<br />
Mehrere Ruby-<br />
Versionen gleichzeitig<br />
verwalten.<br />
Know-how<br />
72 Performance-Simulation<br />
Was wäre wenn? Mathematische<br />
Lastsimulation mit Perl.<br />
90 Cgroups<br />
Feingranulare Ressourcenkontrolle<br />
mit Linux.<br />
102 High-Availability-Serie, Teil 5<br />
Troubleshooting beim hochverfügbaren<br />
Cluster.<br />
84 High-Availability-Serie, Teil 4<br />
Hochverfügbares iSCSI-Storage.<br />
94 Zarafa mit Univention<br />
Die Groupware in den Univention<br />
Corporate Server integrieren.<br />
Mehr Infos auf Seite 6<br />
11.10<br />
Oneiric Ocelot<br />
11.10<br />
Server<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
5
SErvice<br />
Heft-CD<br />
Heft-CD<br />
Auf dem beiliegenden Datenträger finden Sie die Server-Ausgabe<br />
der neuesten Ubuntu-Version 11.10 „Oneiric Ocelot“:<br />
◗ 64-Bit-Version für AMD 64 und Intel EM 64 T.<br />
◗ Linux-Kernel 3.0.<br />
◗ Virtualisierung mit KVM und Xen (Preview).<br />
◗ Cloud-Support durch Open Stack und die Ubuntu-Entwicklung<br />
Juju.<br />
◗ Viele Verbesserungen für Ext4, Btrfs, TCP u.v.m.<br />
Legen Sie einfach die CD ins das Laufwerk ein und starten<br />
Sie den Rechner. Möglicherweise müssen Sie noch im BIOS<br />
die richtige Boot-Reihenfolge einstellen, damit das CD/<br />
DVD-Laufwerk vor der Festplatte an die Reihe kommt. n<br />
CD kaputt?<br />
Wir schicken Ihnen kostenlos<br />
eine Ersatz-CD zu, E-Mail genügt:<br />
info@admin-magazin.de<br />
Info<br />
[1] Ubuntu 11.10 Release Notes:<br />
[http://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes]<br />
[2] Cloud-Technologie in Ubuntu:<br />
[http://cloud.ubuntu.com]<br />
6 Ausgabe 06-2011 Admin www.admin-magazin.de
100%<br />
SLA<br />
Private Cloud<br />
Lösungen<br />
Erstellen Sie Ihr virtuelles<br />
Datacenter in Sekundenschnelle<br />
Einrichtungsgebühr<br />
595 €<br />
GESCHENKT<br />
Erwecken Sie Ihre Projekte zum Leben, indem<br />
Sie virtuelle Maschinen und Ressourcen hinzufügen<br />
und passen Sie diese Infrastruktur in Echtzeit an<br />
eine auf Ihre Bedürfnisse erweiterbare Infrastruktur<br />
▪<br />
inklusive VMware ® Funktionen zur sicheren und direkten<br />
▪<br />
Verwaltung Ihrer Ressourcen<br />
100% Verfügbarkeit: OVH verpflichtet sich, Sie ab<br />
der ersten Sekunde Nichtverfügbarkeit zu entschädigen<br />
Ab<br />
509, 90 €<br />
inkl. MwSt./<br />
Monat<br />
Berechnen Sie Ihre Kosten und bestellen Sie direkt auf<br />
unserer Website www.ovh.de/pcc oder kontaktieren Sie unsere<br />
Berater unter der 0049 (0) 681 906 730<br />
Sie finden unseren<br />
Prospekt in dieser<br />
Ausgabe<br />
Neue Zertifizierung<br />
Europas Webhoster Nr. 1<br />
Quelle NetCraft – Juni 2011<br />
Domains | E-Mails | Hosting | VPS | Server | Private Cloud | Cloud | SMS | Telefonie<br />
OVH.DE
Login<br />
News<br />
+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />
Neue Software und Produkte<br />
Branchen-News<br />
Meego ist tot – es lebe Tizen<br />
Die Linux Foundation hat eine neue Mobilplattform namens<br />
Tizen angekündigt, die Meego ablöst. Intel und Samsung sind<br />
die Hauptsponsoren des Linux-basierten Betriebssystems für<br />
mobile Geräte. Tizen widmet sich vornehmlich Apps, die auf<br />
HTML 5 basieren. Zudem will sich Tizen an die beim Mobile<br />
World Congress im Frühjahr gegründete Wholesale Applications<br />
Community (WAC) und deren Plattformvorgaben halten. Deshalb,<br />
so Imad Sousou, Director von Intels Open Source Technology<br />
Center an die Meego-Community, sei es nicht sinnvoll,<br />
Meego weiterzuentwickeln. Tizen solle auch nicht nur eine<br />
Web-Runtime für ein existierendes Linux-System wie Meego<br />
sein, sondern mehr, so Sousou. Die Integration innerhalb der<br />
Linux Foundation bleibe aber ungefähr gleich. Es gäbe wie bei<br />
Meego ein Steuerungsgremium, es käme die gewohnte Infrastruktur<br />
zum Einsatz, und Tizen [https://www.tizen.org] sei Open<br />
Source, schreibt Sousou in seinem Beitrag. In den nächsten<br />
Monaten werde man den Meego-Nutzern und Entwicklern beim<br />
Übergang zu Tizen unter die Arme greifen. Eine erste Tizen-<br />
Version sei im ersten Quartal 2012 zu erwarten, heißt es vom<br />
zuständigen Intel-Mann.<br />
Intel selbst betont in einer Mitteilung die Geräteunabhängigkeit<br />
der geplanten Plattform, die auf den Stärken von Meego und<br />
Limo aufbaue. Beim Tizen-Projekt selbst ist von Meego nicht die<br />
Rede. Smartphones, Tablets, Netbooks, In-Vehicle Infotainment<br />
nebst TV-Geräten sind dort als Zielplattformen genannt. Das<br />
von Intel und Nokia initiierte Meego hat damit einen kurzen<br />
und erfolglosen Lebenszyklus hinter sich. Entsprechend enttäuscht<br />
sind die Entwicklerstimmen beim Meego-Projekt.<br />
Schuppentier: Shuttleworth tauft Ubuntu 12.04<br />
DZUG wird Python Software Verband<br />
Zur Tradition von Ubuntu-Releases gehört die Benennung der Version durch<br />
Ubuntu-Gründer und ‐Finanzier Mark Shuttleworth. Für die 12.04, die nächste<br />
Version mit Long Term Support (LTS), hat Shuttleworth in seinem Blog den Precise<br />
Pangolin ausgewählt. Die Idee zum präzisen Pangolin, einem Schuppentier,<br />
das sich von Ameisen und Termiten ernährt, kam Mark Shuttleworth bei einer<br />
Tour durch die Kalahari, bei der er ein Pangolin verfolgte.<br />
Wie Shuttleworth in seinem Blog [http://www.markshuttleworth.com/archives/784]<br />
schreibt, sei das Pangolin passend, weil es „präzise“ jeden Ameisenhügel<br />
ansteuert und weil seine Schuppen ein Wunder an Detailreichtum und damit<br />
schon ein Fashion Statement seien. Letzteres bezieht Shuttleworth auf<br />
die hauseigene Desktopumgebung Unity, deren Design bisher aber nicht auf<br />
ungeteilte Zustimmung gestoßen ist. Nicht zuletzt kann sich das Pangolin<br />
hervorragend schützen und so auch den Angriffen von Löwen standhalten.<br />
Diese Eigenschaften seien für Ubuntu LTS ebenfalls zutreffend, weshalb er<br />
die Alternativen Perspicacious Panda, Predatory Panther, Peccable Peccary,<br />
Pawky Python, Perfidious Puku und Porangi Packhorse verworfen habe.<br />
Die Codenamen<br />
der Ubuntu-Releases<br />
folgen dem Alphabet,<br />
die nächste<br />
Version bekommt<br />
ein Wappentier mit<br />
„Q“. Gerade eben<br />
erschien Ubuntu<br />
11.10 mit dem Namen<br />
Oneiric Ocelot.<br />
Precise Pangolin<br />
ist für April<br />
Namenspatron von Ubuntu 12.04 LTS: das Schuppentier, hier in einer<br />
Abbildung von Hubert Ludwig, Schul-Naturgeschichte 1891.<br />
2012 anvisiert.<br />
Die deutschsprachige Zope User Group (DZUG<br />
e.V.) öffnet sich für vielfältige Python-Projekte<br />
und ändert ihren Namen zu „Python Software<br />
Verband“. Das hat die Mitgliederversammlung<br />
einstimmig auf der ersten Deutschen Python-<br />
Konferenz [http://de.pycon.org/2011/home] beschlossen,<br />
die vom 4. bis 9. Oktober in Leipzig stattfand.<br />
Der Verband möchte die Interessen von Python-<br />
Anwendern in Deutschland, Österreich und der<br />
deutschsprachigen Schweiz vertreten. Dabei<br />
verstehe er sich als Dienstleister der vielgestaltigen<br />
Community, teilt der erste stellvertretende<br />
Vorsitzende Jan Ulrich Hasecke der Redaktion<br />
mit: Die Organisation unterstützt Anwendergruppen<br />
bei Veranstaltungen und bietet ihnen<br />
eine technische Infrastruktur.<br />
Daneben soll der Verband der Python-Community<br />
als Marketingabteilung für die Programmiersprache<br />
und ihre Anwendungen dienen.<br />
Schließlich will die Vereinigung auch Lobbyarbeit<br />
für den Python-Einsatz und Open- Source-<br />
Software im Allgemeinen leisten und gegen Softwarepatente<br />
eintreten.<br />
Die Umbenennung muss noch ins Vereinsregister<br />
eingetragen werden, als neue Domain ist<br />
[http://python-verband.de] in Vorbereitung. In der<br />
Zwischenzeit gibt es weitere Informationen auf<br />
der DZUG-Website [http://www.dzug.org].<br />
8 Ausgabe 06-2011 Admin<br />
www.admin-magazin.de
n immer auf http://www.admin-magazin.de<br />
Datenbank-Appliance von Oracle<br />
Ab sofort ist eine neue Datenbank-Appliance von Oracle verfügbar,<br />
die vor allem für kleinere und mittlere Unternehmen eine<br />
günstige Alternative sein will.<br />
Die Appliance besteht aus zwei geclusterten SunFire-Servern<br />
unter Oracle Linux, auf denen eine vorinstallierte Oracle-<br />
Datenbank 11g Release 2 läuft. Auch Storage und redundante<br />
Netzwerkverbindungen sind bereits integriert und von zentraler<br />
Stelle aus administrierbar. Die Leistungsfähigkeit des Clusters<br />
lässt sich steigenden Bedürfnissen dadurch anpassen, dass per<br />
Software sukzessive zwei bis 24 Cores freigeschaltet werden<br />
können. Ein einzelner Serverknoten verfügt dabei über eine<br />
6-Kern-Xeon-CPU X5675. Der Hauptspeicher ist bis 192 GByte<br />
ausbaubar, der Plattenplatz kann maximal 12 TByte umfassen<br />
(dreifach gespiegelt, 4 TByte nutzbar). Die Appliance soll sich<br />
für OLTP-Workloads und Data Warehouses eignen.<br />
IBM baut Smart Cloud aus<br />
Bis Ende kommenden Jahres will IBM 200 Millionen Nutzer<br />
dabei unterstützen, ihre Kernanwendungen in die neue IBM<br />
SmartCloud zu verlagern.<br />
Dazu baut IBM seine Offerten stark aus. Zu den erweiterten<br />
Angeboten zählen unternehmensweit einsetzbare Platform-asa-Service-Lösungen,<br />
Starter Kits für einen schnelleren Einsatz<br />
privater Clouds, neue industriespezifische Cloud Services sowie<br />
eine erhebliche Ausweitung des IBM SmartCloud-Ökosystems<br />
für Cloud-Partner.<br />
IBM reagiert damit auch auf die Ergebnisse eigener Studien,<br />
denen zufolge sich in den nächsten drei Jahren die Zahl der<br />
Firmen, die mehr als ein Cloud-Projekt eingeführt haben, auf<br />
66 Prozent verdoppeln soll. Nach Meinung der im Rahmen der<br />
Studie Befragten bestünden zwar noch große Herausforderungen<br />
auf Gebieten wie Sicherheit, Zuverlässigkeit, Standards<br />
und Kontrolle, dennoch erwarten 40 Prozent bis zum Jahr 2015<br />
„substanzielle Veränderungen“.<br />
Deutscher Speichermarkt wächst<br />
Der deutsche Markt für Massenspeicher wird dieses Jahr um 2,5<br />
Prozent zulegen. Das erwartet der Branchenverband BITKOM.<br />
Auch für das nächste Jahr werden noch 5 Prozent Wachstum<br />
prognostiziert. Motor der guten Entwicklung ist der Trend zu<br />
immer größeren Datenmengen (Big Data). Beispiele reichen von<br />
der automatischen Erfassung von RFID-Lesern in der Produktion<br />
und Logistik bis zur Digitalisierung von Bildern, Musik und<br />
Videos in HD oder 3D. Laut IDC verdoppelt sich dadurch das<br />
Datenvolumen weltweit etwa alle 18 Monate. Diese Daten landen<br />
schließlich auf Diskarrays und Tape Libraries und kurbeln<br />
daher deren Umsatz entsprechend an. „Die rasant wachsenden<br />
Datenmengen und der Nachholbedarf an Investitionen in IT-<br />
Infrastruktur sorgen für ein anhaltendes Wachstum im Storage-<br />
Markt“, sagte BITKOM-Vizepräsident Volker Smid.<br />
www.admin-magazin.de<br />
Virtuelle Server<br />
Top-Performance zum Tiefpreis!<br />
• bis zu 3 CPU-Kerne<br />
• bis zu 8 GB RAM<br />
• bis zu 95 GB Festplatte<br />
• RAID-10-Datensicherheit<br />
• 5.000 GB Traffic inklusive<br />
• SSL-Zertifikat inklusive<br />
• Root-Zugriff per SSH<br />
• 100 % Backup-Speicher<br />
• 99,9 % garantierte Verfügbarkeit<br />
• 30 Tage Geld-zurück-Garantie<br />
• auch als Managed Server erhältlich<br />
• viele 64-Bit-Betriebssysteme nach Wahl<br />
6 Monate<br />
kostenlos<br />
danach ab 12,99 €*<br />
Jetzt kostenlos informieren unter:<br />
080 0 638 2587<br />
www.netclusive.de/linux<br />
* Aktion „6 Monate kostenlos“ gilt bis 31.12.2011. Nach 6 Monaten regulärer monatlicher Grundpreis:<br />
VPS L 12,99 €, VPS XL 16,99 €, VPS XXL 29,99 €. Die Mindestvertragslaufzeit beträgt wahlweise 12 Monate<br />
(Aktion 6 Monate kostenlos entfällt) oder 24 Monate (6 Monate kostenlos). Abrechnung vierteljährlich. Einmalige<br />
Einrichtungsgebühr 9,99 €. Alle Preise inkl. MwSt. Preisänderungen und Irrtümer vorbehalten.
Login<br />
News<br />
+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />
Wikipedia Italien bangt um Unabhängigkeit<br />
Die Betreiber der Wikipedia Italien fürchten<br />
um die weitere Existenz der freien<br />
Online-Enzyklopädie. Das italienische<br />
Parlament berät über ein Gesetz, das<br />
Websites eine Korrektur innerhalb von<br />
48 Stunden vorschreibt, wenn Persönlichkeitsrechte<br />
verletzt werden.<br />
Dass diese Vorgabe ohne richterliche<br />
Begutachtung eines entsprechenden<br />
Vorwurfs umgesetzt<br />
werden soll, hält die Wikipedia in<br />
Italien für eine Erschütterung der<br />
Grundsätze einer unabhängigen<br />
und freien Wissensdatenbank. Es<br />
genüge, so schreibt die Wikipedia<br />
[http://it.wikipedia.org/wiki/Wikipedia:<br />
Comunicato_4_ottobre_2011/de], dass<br />
ein Betroffener diese Forderung<br />
an die Websitebetreiber reiche.<br />
Dass davon in Italien alle Websites<br />
betroffen wären, und damit auch<br />
jedes Blog ohne weitere Diskussion die<br />
geforderte Korrektur umsetzen müsste,<br />
halten die italienischen Wikipedianer für<br />
nicht hinnehmbar und sehen darin einen<br />
schwerwiegenden Eingriff in ihre Freiheit<br />
und Unabhängigkeit.<br />
Offener Brief statt Inhalte – Italiens Wikipedia sieht Existenz bedroht.<br />
Beim fraglichen Gesetzesentwurf handelt<br />
es sich laut Wikipedia um den Paragraph<br />
29 des sogenannten „DDL intercettazioni“,<br />
was mit Abhörmaßnahmen übersetzt<br />
wird.<br />
Eine Wikipedia, wie es sie derzeit in Italien<br />
gäbe, sei damit nicht mehr denkbar.<br />
Im Brief heißt es: „Die sich aus<br />
Paragraph 29 ergebende Verpflichtung,<br />
die Korrektur ohne<br />
Recht auf Diskussion und Überprüfung<br />
der Inhalte veröffentlichen<br />
zu müssen, würde zu einer<br />
inakzeptablen Beschneidung der<br />
Freiheit und Unabhängigkeit der<br />
Wikipedia führen, zur Beschädigung<br />
der Prinzipien, auf denen<br />
Wikipedia steht, ja letztlich zum<br />
Ende des Projektes, wie wir es<br />
bis heute kennen.“<br />
Cloud-Zuwachs bei der Linux Foundation<br />
Drei namhafte Open-Source-Firmen – Nebula, Eucalyptus und<br />
Virtual Bridges – sind der Linux Foundation beigetreten. Damit<br />
stärkt die Linux Foundation vor allem ihre Kompetenz in Sachen<br />
Cloud-Computing. Das neue Mitglied Nebula entwickelt eine<br />
Linux-basierte Hardware-Appliance für große Private Clouds.<br />
Eucalyptus bietet ebenfalls unter Linux eine Infrastructure-asa-Service-Lösung.<br />
Der Firmenchef und frühere MySQL AB-CEO<br />
Marten Mickos ist überzeugt: Linux- und Open-Source-Hypervisors<br />
sind die wichtigsten Bausteine von Clouds. Virtual Bridges<br />
schließlich beschäftigt sich mit Desktop-Virtualisierung.<br />
Mozillas Rückblick und Ausblick<br />
Die Mozilla Foundation hat einen Jahresbericht für 2010 samt<br />
einem Ausblick veröffentlicht.<br />
Der im Web in vielen Sprachen verfügbare Bericht hält Rückschau<br />
auf das vergangene Jahr und formuliert dabei Ziele für<br />
die Zukunft von Mozillas Produkten wie etwa Firefox. Neben<br />
dem Desktop soll der Browser in Zukunft auf möglichst vielen<br />
Mobilgeräten laufen, schreibt das Projekt. Firefox Mobile für<br />
Android sei ein erster Schritt in diese Richtung.<br />
Mozilla hat mit der Mozilla Foundation und allen Tochtergesellschaften<br />
im Jahr 2010 Einnahmen von 123 Millionen US-Dollar<br />
erzielt, was ein Plus von rund 18 Prozent gegenüber 2009 darstelle,<br />
heißt es in den Erläuterungen zum Jahresbericht [http://<br />
www.mozilla.org/de/foundation/annualreport/2010/faq/]. Der Löwenanteil<br />
davon komme von den im Browser aufrufbaren Suchfunktionen,<br />
also von Suchmaschinenbetreibern wie Google.<br />
Als weitere Meilensteine des Jahres 2010 nennt der Bericht die<br />
raschere Versionsabfolge sowie die Privacy-Funktion „Do Not<br />
Track“, daneben Community-Aktivitäten in der Arabischen<br />
Welt, Afrika und Indonesien.<br />
Der Bericht schließt mit einer Video-Botschaft der Vorsitzenden<br />
Mitchell Baker. Sie warnt vor der Protokollierung, Regulierung<br />
und wirtschaftlichen Verwertung der Web-Nutzer und wirbt<br />
dafür, das Web offen zu halten.<br />
Mozillas Jahresbericht ist auf den Seiten der Stiftung in deutscher<br />
Sprache zu finden. Die enthaltenen Web-Videos sind<br />
allerdings auf Englisch.<br />
Setzt auf Veränderung und Hoffnung: die Mozilla-Vorsitzende Mitchell Baker in<br />
einem recht emotionalen Video-Ausblick auf die kommenden Jahre<br />
10 Ausgabe 06-2011 Admin<br />
www.admin-magazin.de
n immer auf http://www.admin-magazin.de<br />
Microsoft stiftet Cloud-Preis<br />
Microsoft lobt einen neuen „Cloud 4 Society Award“ aus, der<br />
speziell Startups zugute kommen soll, die die Potenziale von<br />
Cloud-Computing für die Gesellschaft erschließen.<br />
Teilnehmen können junge Unternehmen, die mit ihrer Dienstleistung<br />
oder ihrem Produkt maximal drei Jahre am Markt<br />
sind und die Cloud-Lösung auf Basis von Windows Azure<br />
entwickelt haben. Eine Fachjury bewertet eingereichte Projekte<br />
anhand von Kriterien wie Grad der Innovation und Nutzen für<br />
die Gesellschaft in den fünf Kategorien Bildung & Forschung,<br />
Gesundheit & Umwelt, eGovernment, eCommerce sowie Social<br />
& Entertainment. Fünf Finalisten präsentieren ihre Projekte<br />
im Rahmen des Microsoft-Messe-Auftritts auf der CeBIT 2012<br />
in Hannover. Aus ihren Reihen wird dann der Gewinner des<br />
„Cloud 4 Society Awards“ ermittelt und auf der CeBIT ausgezeichnet.<br />
Ihm winkt ein Preisgeld von 20 000 Euro.<br />
TM<br />
MobyDick<br />
D i e Z u k u n f t der Telefonie<br />
Mit der MobyDick Telefonanlage haben Sie alle Fäden selbst in<br />
der Hand. Außerdem verbinden Sie die Features modernster<br />
Telefonie mit den Vorteilen von Voice over IP.<br />
Die Kommunikationslösung für Ihr<br />
Unternehmen<br />
Open-Source-Repository Berlios schließt<br />
Das vor rund zehn Jahren vom Fraunhofer-Institut für Offene<br />
Kommunikationssysteme (Fokus) entwickelte Projekt Berlin<br />
Open Source kurz Berlios stellt zum Jahresende den Betrieb ein,<br />
heißt es in einer Mitteilung auf der Webseite.<br />
Gefördert wurde das Projekt Berlios durch das Bundesministerium<br />
für Wirtschaft und Technologie und einige Geldgeber<br />
aus der Industrie. Der Betreiber Fraunhofer Fokus nennt als<br />
Kennzahlen, dass 2011 rund 4800 Projekte gehostet würden,<br />
Berlios rund 50 000 registrierte Nutzern zähle sowie über 2,6<br />
Millionen Downloads pro Monat verzeichne. Nun fehlt dem<br />
Projekt die Anschlussfinanzierung, die Suche nach Sponsoren<br />
sei ergebnislos verlaufen. Entwickler sollen ihre Projekte auf<br />
andere Repositories umziehen, ein Leitfaden auf der Webseite<br />
[http://developer.berlios.de] hilft dabei.<br />
HP und Ubuntu kooperieren bei Public Cloud<br />
Bei der Open-Stack-Konferenz in Boston hat Canonical-<br />
Geschäftsführerin Jane Silber im Oktober eine Zusammenarbeit<br />
mit Hewlett-Packard bei Public-Cloud-Angeboten angekündigt.<br />
HP hat sich demnach für Ubuntu als Basis für die Open-<br />
Stack-Plattform entschieden und will Angebote für Entwickler,<br />
ISVs und Firmen schnüren. Ubuntu, so wird Jane Silber im<br />
Canonical-Blog zitiert, soll bei HPs Public-Cloud-Services als<br />
Host- und Gastsystem zum Einsatz kommen. Derzeit sind die<br />
Kooperationspartner mit dem Testen einer Betaversion befasst,<br />
was allerdings nicht öffentlich geschieht. Herauskommen soll<br />
dann eine skalierbare und sichere Lösung für Unternehmen<br />
aller Größen.<br />
Beide Partner setzten auf Open Source, so Jane Silber, und<br />
beide engagieren sich in der Open-Stack-Community. Die inzwischen<br />
bei Open Stack versammelten 117 Mitglieder stellten<br />
ein Schwergewicht in der künftigen Entwicklung des Cloud<br />
Computing dar, urteilt die Geschäftsführerin.<br />
www.admin-magazin.de<br />
Unified Communications:<br />
Telefon<br />
Video<br />
VoiceMail<br />
Präsenzmanager<br />
Instantmessaging<br />
FaxEmail Gateway<br />
PrintFax Gateway<br />
Conferencing<br />
Mehr Informationen finden Sie unter:<br />
http://www.pascom.net<br />
http://community.pascom.net<br />
NEU<br />
Kostenlose<br />
Community<br />
Version<br />
erhältlich<br />
pascom<br />
Netzwerktechnik GmbH & Co. KG<br />
Berger Straße 42<br />
94469 Deggendorf<br />
Tel.: +49 991 27006 - 0
Login<br />
News<br />
© Nielsen<br />
Android geht in den USA an die Spitze<br />
Der Marktforscher Nielsen hat bei<br />
seiner Smartphone-Erhebung im<br />
August in den USA einen Anteil<br />
von 43 Prozent für das Betriebssystem<br />
Android gemessen. Auf die<br />
vergangenen drei Monate gesehen<br />
sieht der Marktanteil für Android<br />
noch besser aus: 56 Prozent der<br />
Smartphone-Käufer haben in diesem<br />
Zeitraum auf Android-Handys<br />
US-Markt der Smartphone-Systeme im August und<br />
über drei Monate hinweg betrachtet.<br />
gesetzt. Apple liegt mit 28 Prozent<br />
auf Rang zwei, sowohl in der<br />
August-Umfrage [http://blog.nielsen.<br />
com/nielsenwire/online_mobile/in‐usmarket‐new‐smartphone‐buyers‐increasingly‐embracing‐android/]<br />
als auch<br />
bei den Käufern im Dreimonatszeitraum.<br />
RIMs Blackberry liegt<br />
im August bei 18 Prozent, verliert<br />
aber bei den Anschaffungen in den<br />
vergangenen drei Monaten<br />
extrem und verzeichnet dort<br />
nur noch 9 Prozent.<br />
Der Smartphone-Markt legt<br />
in den USA insgesamt gegenüber<br />
herkömmlichen<br />
Handys zu. 43 Prozent der<br />
Mobilfunkkunden in den<br />
USA hatten im August ein<br />
Smartphone. In den vergangenen<br />
drei Monaten haben<br />
sich demgegenüber 56<br />
Prozent der Käufer für ein<br />
Smartphone entschieden.<br />
Heimkehr des Linux-Kernels<br />
Linus Torvalds hat sein offizielles Git-Repository auf<br />
Kernel.org wieder in Betrieb genommen. Aus Anlass<br />
des Release Candidate 9 für die kommende Linux-<br />
Version 3.1 hat der Kernel-Chef sein Repository unter<br />
der alten Adresse auf Git.kernel.org aktualisiert. Gleichzeitig<br />
erfuhr auch das in der Zwischenzeit verwendete<br />
Github-Konto ein Update.<br />
Der Release Candidate bringt laut Torvalds nur kleine<br />
Verbesserungen: Fixes gab es beispielsweise im DRM-<br />
Code für Radeon- und i915-Grafikchips, für Netzwerktreiber<br />
sowie für das verteilte Dateisystem Ceph. Auch<br />
der Sparc-Port erfuhr kleine Änderungen.<br />
Daneben besitzt Linus nun einen stärkeren GPG-Schlüssel,<br />
der bereits von mehr Parteien unterschrieben ist,<br />
als es der alte je war. Damit nimmt er an der Sicherheitsstruktur<br />
für Kernel.org teil, die H. Peter Anvin<br />
und die anderen Admins nach dem Server-Einbruch<br />
aufbauen. Wer den neuen Schlüssel importiert, kann<br />
mit dem Kommando „git verify-tag“ die Signatur der<br />
getaggten Kernel-Releases prüfen.<br />
Die Bezugsquelle und den Fingerprint seines neuen<br />
Schlüssels nennt Torvalds in der entsprechenden Mitteilung<br />
an die Kernel-Mailingliste [https://lkml.org/lkml/<br />
2011/10/4/451].<br />
SmartOS verbindet Open Solaris und KVM<br />
Die Firma Joyent hat das Betriebssystem SmartOS freigegeben,<br />
das auf Open Solaris und der Linux-Virtualisierungslösung<br />
KVM basiert. Als Code-Basis diente den Entwicklern der vom<br />
Storage-Hersteller Nexenta initiierte Open-Solaris-Fork Illumos.<br />
Darauf haben sie den Linux-Hypervisor KVM portiert, der als<br />
leistungsfähige Virtualisierungstechnologie seit einiger Zeit etablierten<br />
Lösungen wie Xen und VMware Konkurrenz macht.<br />
Beispielsweise basiert auch Red Hats „Enterprise Virtualization“<br />
auf KVM. SmartOS richtet sich an jeden Anwender, der einen<br />
Server betreiben möchte, und wird laut FAQ von Joyent bereits<br />
produktiv im eigenen Datacenter eingesetzt.<br />
Einer der maßgeblichen Entwickler hinter SmartOS ist Bryan<br />
Cantrill, der früher bei Sun an Solaris arbeitete, aber nach der<br />
Übernahme durch Oracle das Unternehmen verließ. Er sieht großes<br />
Potenzial darin, Schlüsseltechnologien wie ZFS und DTrace<br />
von Solaris und KVM von Linux in einem fortschrittlichen Betriebssystem<br />
zusammenzubringen. Diese Rolle soll nun Smart OS<br />
übernehmen, das unter der CDDL lizenziert ist. In einem Blog-<br />
Eintrag berichtet er von den Erfahrungen, die sein Team bei der<br />
Portierung von KVM gemacht hat. Im Joyent-Blog [http://smartos.<br />
org/blog/] sind einige Hinweise zu den Downloads sowie farbige<br />
Grafiken über den bisherigen Zuspruch zu finden.<br />
VMware Workstation 8 erschienen<br />
Seit September 2011 ist Version 8 von VMware Workstation verfügbar,<br />
die nach Angaben des Herstellers 50 neue Funktionen<br />
enthält. Ein neues Feature erlaubt Anwendern von Workstation<br />
8 beispielsweise, ihre VMs per Drag-and-Drop in VMware<br />
vSphere zu verschieben. Die GUI wurde um einfachere Menüs,<br />
Live-Miniaturansichten, verbesserte Einstellungsbildschirme<br />
und eine neue VM-Bibliothek erweitert, die nach Vorstellung<br />
von VMware eine „persönliche Cloud“ des Anwenders realisieren<br />
sollen. Ein neues Sharing-Feature erlaubt es, virtuelle Maschinen<br />
mit anderen Anwendern zu teilen, um beispielsweise<br />
Teamarbeit zu ermöglichen. Neu ist auch die Unterstützung<br />
von HD Audio mit 7.1 Surround Sound, USB 3 und Bluetooth-<br />
Geräten und bis zu 64 GByte RAM.<br />
VMware-Manager Chris Young kommentierte das Update mit<br />
einem Seitenhieb auf das Desktop-Virtualisierungsprodukt von<br />
Oracle: „Unser Team versteht die Bedürfnisse der Nutzer und<br />
hat in Workstation 8 bedeutende Verbesserungen vorgenommen,<br />
die es einfacher machen, über die „Virtual Box“ hinauszukommen.“<br />
VMware Workstation 8 ist ab sofort zu einem Preis von 199<br />
US-Dollar verfügbar. VMware Workstation 6.x und 7.x sind<br />
weiterhin für 99 US-Dollar zu haben.<br />
12 Ausgabe 06-2011 Admin<br />
www.admin-magazin.de
News<br />
Login<br />
Univention prämiert Abschlussarbeiten<br />
Wie schon in den letzten Jahren sucht der Linux-Distributor Univention auch 2012 wieder<br />
Abschlussarbeiten, die sich mit Open Source auseinandersetzen. In diesem Jahr winkt<br />
zusätzlich eine Sonderprämie in Höhe von 1000 Euro für eine Arbeit zum Thema „Cloud“.<br />
Das mögliche thematische Spektrum reiche dabei von „Zielgruppen-orientierten Untersuchung<br />
nützlicher Open-Source-Komponenten oder Anwendungen für Cloud-Anbieter über<br />
betriebswirtschaftliche und juristische Analysen bis hin zu Software-Entwicklungen“.<br />
Wer seine Abschlussarbeit einreichen möchte, kann sie bis zum 15. Februar 2012 per<br />
E-Mail an [absolventenpreis@univention.de]<br />
schicken. Der Absolventenpreis solle die<br />
„Verbreitung von Open Source Software<br />
im professionellen Umfeld und die Entwicklung<br />
von innovativen Ideen für freie<br />
und quelloffene Anwendungen vorantreiben“,<br />
sei aber interdisziplinär orientiert.<br />
Eine Expertenjury, zu der auch Linux-<br />
<strong>Magazin</strong>-Chefredakteur Jan Kleinert zählt,<br />
entscheidet über die innovativsten und<br />
besten Arbeiten. Die Preisverleihung findet<br />
2012 auf dem Linuxtag in Berlin statt.<br />
Weitere Informationen zu den Teilnahmebedingungen<br />
finden sich unter [http://www. „Eine Cloud-basierte Software-Plattform für den<br />
Preisträger 2011: Andreas Wolke mit seiner Diplomarbeit<br />
absolventenpreis.de].<br />
Betrieb horizontal skalierbarer Web-Anwendungen“.<br />
Neue RAIDs von Starline<br />
Der Hersteller Starline hat zwei neue<br />
Diskarrays einer neuen Generation<br />
seiner easyRAID-Systeme vorgestellt.<br />
Unter der Bezeichnung ERP12<br />
beziehungsweise ERP16 sind zwei<br />
neue Modelle erhältlich, die bis zu<br />
3 TByte großen Platten in 6 GBit/<br />
s-SAS/SAT-Technologie aufnehmen<br />
können. Die Arrays unterstützen Festplattenverschlüsselung<br />
sowie RAID-6<br />
und verfügen über Snapshot- und Rollback-Funktionen.<br />
Eine spezielle Host-<br />
Software erlaubt zudem dynamisches<br />
I/O-Load-Balancing.<br />
Beide Arrays können mit 3,5-, 2,5-Zoll-<br />
Festplatten und SSDs auch gemischt<br />
bestückt werden. Die Platten können<br />
im laufenden Betrieb getauscht werden,<br />
die Netzteile sind redundant,<br />
der Controller nur einfach vorhanden.<br />
Die Preise liegen zwischen 3300<br />
und 4500 Euro (ohne Platten).<br />
1. Lernen Sie!<br />
Ja, „training-on-the-job“, oft praktiziert, aber nicht<br />
überzeugend. Denn die Kollegen haben nie Zeit<br />
für echte Erklärungen, außerdem werden „Neue“<br />
sofort von dem vereinnahmt, was im Unternehmen<br />
schon seit Ewigkeiten tradiert wird. Warum gibt's<br />
seit 2000 Jahren Schulen und Universitäten?<br />
„LERNEN“ ist eine vollwertige Tätigkeit, auf die<br />
man sich konzentrieren muß, die man nicht 'mal<br />
eben so nebenbei tun kann, und die immer auch<br />
eine Prise „Erneuerung“ beinhalten sollte!<br />
2. Ineffiziente Arbeit nicht akzeptieren!<br />
Je spezialisierter Sie arbeiten, desto weniger<br />
echte, fachliche Kollegen haben Sie in Ihrem eigenen<br />
Unternehmen. Wir stellen deshalb Gruppen<br />
zusammen, in denen Sie neben hilfsbereiten<br />
Kollegen mit ähnlichen Kenntnissen an IHREM<br />
Projekt arbeiten. Und ständig ist ein fachlicher Berater<br />
anwesend.<br />
„Guided Coworking“ nennen wir das, und es<br />
könnte DIE Lösung für so manches Projekt sein,<br />
das in Ihrer Firma „hakt“.<br />
3. Hintergrund<br />
Wer den riesigen OpenSource-Baukasten schnell<br />
beherrschen muß, geht zu einer unserer über 100<br />
Schulungen. Wer das bereits kann, aber schneller<br />
mit seinen Projekten vorankommen will, der<br />
kommt mit seiner Arbeit zum Guided Coworking.<br />
Wir sind eine der erfolgreichsten Schulungseinrichtungen<br />
im gesamten Bereich „OpenSource“<br />
- sowohl für Admins, als auch für Entwickler.<br />
Siehe www.linuxhotel.de
1&1 WEBHOSTING<br />
INKLUSIVE: CLICK<br />
Bei 1&1 treffen über 20 Jahre Webhosting-Erfahrung auf modernste Technik in deutschen Hochleistungs-<br />
Rechenzentren. Mehr als 1.000 IT-Profis entwickeln unsere hochwertigen Lösungen permanent weiter.<br />
Die 1&1 WebHosting-Pakete bieten alles, was Sie für Ihren professionellen Internetauftritt brauchen:<br />
Ausgabe 08/11<br />
✓ 65 kostenlos installierbare<br />
Click & Build Applikationen<br />
inklusive Software- und Sicherheits-Updates für Ihre Apps<br />
✓ Marken-Design-Software<br />
z. B. Adobe Dreamweaver ® , NetObjects Fusion ® 1&1 Edition<br />
✓ Doppelte Sicherheit<br />
paralleles Hosting Ihrer Website in zwei Hightech-<br />
Rechenzentren an verschiedenen Orten<br />
✓ 24h-Profi-Hotline<br />
und kostenloser E-Mail-Support.<br />
&<br />
1&1 DUAL HOSTING<br />
*<br />
* 1&1 Dual Perfect, 6 Monate 0,– €/Monat, danach 9,99 €/Monat. 1&1 Perfect Shop 6 Monate 0,– €/Monat, danach 19,99 €/Monat. 1&1 Dynamic Cloud Server - Basis Konfiguration: 3 Monate 0,– €/Monat,<br />
danach 39,99 €/Monat. Bei erweiterter Konfi guration ändert sich der Preis/Monat entsprechend der Systemerweiterung. 1&1 Click & Build Apps für Dynamic Cloud-Server nicht verfügbar.
& BUILD APPS!<br />
WEBSITE: 1&1 DUAL<br />
PERFECT<br />
■ 6 DOMAINS INKLUSIVE<br />
■ 5 GB Webspace<br />
■ UNLIMITED Traffic<br />
■ 20 FTP-Accounts<br />
■ 10 MySQL-<strong>Datenbanken</strong> (je 1 GB)<br />
■ UNLIMITED Click & Build Apps<br />
(Auswahl aus 65 Applikationen)<br />
6 MONATE FÜR<br />
1&1 PERFECT<br />
SHOP<br />
■ 1.000 ARTIKEL<br />
■ 100 Warengruppen<br />
■ Marketing-Tools<br />
■ PayPal<br />
■ eBay-Tool<br />
■ UNLIMITED Click & Build Apps<br />
(Auswahl aus 65 Applikationen)<br />
6 MONATE FÜR<br />
1&1 DYNAMIC CLOUD<br />
SERVER<br />
■ NEU: Bis zu 6 CPU, bis zu 24 GB<br />
Arbeitsspeicher und bis zu<br />
800 GB Festplattenspeicher<br />
jederzeit nach Bedarf einstellbar.<br />
■ NEU: Management und Monitoring<br />
Ihrer Server Dienste im Browser<br />
oder per Mobile-App<br />
3 MONATE AB<br />
danach<br />
9,99 €/Monat*<br />
0,–€/Monat*<br />
€/Monat*<br />
0,–danach<br />
19,99 €/Monat*<br />
€/Monat*<br />
0,–danach<br />
39,99 €/Monat*<br />
.de<br />
nur 0,29 € /Monat*<br />
.info<br />
nur 0,29 € /Monat*<br />
.com, .net,<br />
.org, .eu, .at<br />
nur 0,99 € /Monat*<br />
0 26 02 / 96 91 0800 / 100 668<br />
www.1und1.info<br />
.de und .info Domain 1 Jahr 0,29 €/Monat, .com, .net, .org, .eu, .at Domain 1 Jahr 0,99 €/Monat, danach .de 0,49 €/Monat, .com, .net, .org, .eu 1,49 €/Monat, .at 1,99 €/Monat, .info 1,99 €/Monat.<br />
Einmalige Einrichtungsgebühr 9,60 € (1&1 Dynamic Cloud Server 39,– €, Domains ohne Einrichtungsgebühr), 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt. Software wird zum Download bereitgestellt.
Login<br />
Bücher<br />
Bücher über PostgreSQL und Virtualbox<br />
Vorgelesen<br />
Zwei zweite Auflagen aktualisieren bewährte Ratgeber. Der erste beschäftigt<br />
sich mit der neuesten Version der PostgreSQL-Datenbank, der zweite<br />
bringt dem Leser die Virtualisierungsplattform Virtualbox näher.<br />
Jens-Christoph Brendel, Oliver Frommel<br />
Umfassende Dokumentation und zugleich<br />
tägliche Referenz, das will die<br />
neue, zweite Auflage von „PostgreSQL-<br />
Administration“ sein, die der bekannte<br />
PostgreSQL-Entwickler Peter Eisentraut<br />
und sein Kollege, der Datenbank-Consultant<br />
Bernd Helmle jetzt bei O’Reilly<br />
herausgegeben haben. Und man kann<br />
vorwegnehmen: Das Ziel wird erreicht.<br />
Kleine Abstriche muss man sicherlich<br />
in Punkto Vollständigkeit machen – gut<br />
370 Buchseiten reichen nicht, um ein<br />
so komplexes Produkt lückenlos abzuhandeln.<br />
So widmen sich die Autoren<br />
etwa beim Thema Tuning vorrangig der<br />
SQL-Optimierung, was auch sicher das<br />
effektivste Beschleunigungsverfahren ist<br />
– wenn man es denn anwenden kann.<br />
Wo aber eine Anwendung die Abfragen<br />
erzeugt, die der Anwender nicht beeinflussen<br />
kann, da blieben auf Datenbankseite<br />
immer noch zahlreiche Stellschrauben<br />
in Gestalt von beeinflussbaren und<br />
geschwindigkeitsrelevanten Datenbankparametern,<br />
auf die das Buch jedoch nur<br />
am Rande eingeht.<br />
Nichtsdestotrotz behandelt es bei jedem<br />
Thema die wichtigsten Aspekte und folgt<br />
in seinem Aufbau grob einer Art Datenbank-Lifecycle.<br />
Der beginnt bei Installation<br />
und Konfiguration, setzt sich bei<br />
Wartung und Datensicherung fort, führt<br />
weiter zum Monitoring, der Fehlerbehebung,<br />
der Sicherheit und schließlich zum<br />
schon erwähnten Performance-Tuning.<br />
Kapitel 9 – Replikation und Hochverfügbarkeit<br />
– profitiert am meisten von der<br />
Neuauflage, behandelt es doch jetzt die<br />
seit dem neuesten PostgreSQL-Release<br />
9.0 eingebauten Replikationsmöglichkeiten<br />
(Hot Standby). Daneben werden ausführlich<br />
die Produkte Slony-I und Pgpool-<br />
II vorgestellt, dazu der Connection Pool<br />
PgBouncer und der Datenbank-Proxy PL/<br />
Proxy. Das letzte Kapitel gibt Hinweise<br />
zur Hardwareauswahl für einen performanten<br />
und sicheren Datenbankserver.<br />
In allen Kapiteln gelingt es den Autoren,<br />
die teils komplizierten Sachverhalte leicht<br />
verständlich, gut lesbar und anhand zahlreicher<br />
Beispiele darzustellen. Alles in<br />
allem ein für PostgreSQL-Anwender sehr<br />
empfehlenswertes Buch.<br />
Virtualbox<br />
Regelmäßig aktualisiert die Firma Oracle<br />
seit der Übernahme von Sun ihr Virtualisierungsprodukt<br />
Virtualbox, das als freie<br />
Software wie auch als kommerzielles<br />
Produkt mit einigen Zusatz-Features zur<br />
Verfügung steht. Um mit der Entwicklung<br />
Schritt zu halten, hat der Galileo-Verlag<br />
sein Buch zu Virtualbox nun auf Version<br />
4 der Software aktualisiert.<br />
Schwerpunkt des auf den Praxiseinsatz<br />
ausgerichteten Werkes ist die Desktopvirtualisierung<br />
mit Virtualbox. Vom Betrieb<br />
auf Servern rät der Autor Dirk Becker<br />
eher ab, da das Programm seiner Meinung<br />
nach die entsprechenden Eigenschaften<br />
nicht besitze – auch wenn er in<br />
jüngerer Zeit hinzugekommene Server-<br />
Features am Rande erwähnt.<br />
Auf den ersten 60 Seiten beschreibt der<br />
Autor kursorisch die Geschichte und den<br />
Aufbau von Computern und geht dann<br />
auf die Entwicklung von Emulation und<br />
Virtualisierung bis zum aktuellen Stand<br />
der Technik ein. Ausführlich beschreibt<br />
er die Installation von Virtualbox auf<br />
unterschiedlichen Linux-Distributionen<br />
sowie auf Windows.<br />
Die Installation und Konfiguration von<br />
Gastsystemen nimmt den größten Teil<br />
des Buches ein, wobei Becker die meisten<br />
Schritte sowohl in der Virtualbox-GUI als<br />
auch auf der Kommandozeile unter Windows<br />
und Linux demonstriert. Themen<br />
wie Grafik-Beschleunigung und Audio-<br />
Unterstützung führt er am Beispiel eines<br />
Windows-7-Gasts vor. Fortgeschrittene<br />
Features wie Sicherungspunkte, Management<br />
von Image-Dateien sowie Migration<br />
und Support sind wiederum für Anwender<br />
aller Betriebssysteme von Interesse,<br />
wenn auch das letzte Thema auf nur gut<br />
zehn Seiten Platz finden muss.<br />
Unterm Strich ist das Buch eine gute<br />
Einführung in die Desktop-Virtualisierung<br />
mit Virtualbox, insbesondere für<br />
Endanwender. Erfahrene Administratoren<br />
werden dem Buch jedoch wenig überraschende<br />
Informationen entnehmen, insbesondere,<br />
wenn sie Virtualbox auf dem<br />
Server einsetzen wollen. (ofr) n<br />
PostgreSQL-Administration<br />
PostgreSQL-Administration<br />
Peter Eisentraut, Bernd Helmle<br />
O’Reilly 2011<br />
2. Auflage<br />
372 Seiten<br />
34,90 Euro<br />
ISBN: 978-3-89721-661-7<br />
Virtualbox<br />
Virtualbox<br />
Dirk Becker<br />
Galileo Computing 2011<br />
2., aktualisierte Auflage<br />
327 Seiten<br />
29,90 Euro<br />
ISBN 978-3-8362-1778-1<br />
16 Ausgabe 06-2011 Admin www.admin-magazin.de
„Kennen Sie<br />
unser Thomas<br />
Krenn Wiki?“<br />
Schauen Sie doch mal in unserem Thomas Krenn Wiki vorbei.<br />
Hier finden Sie die neuesten Beiträge zu DDR-SDRAM und vieles mehr!<br />
Werner Fischer,<br />
Technical Specialist<br />
MEHR ALS NUR EIN WIKI<br />
• IT Know-how der Server-Experten<br />
• Konkrete Problemlösungen<br />
• Über 700 Artikel und Hintergrundinfos<br />
zu Servertechnologien<br />
• Installations- und Konfigurationsanleitungen<br />
Beiträge unserer Experten unter:<br />
www.thomas-krenn.com/tk_wiki<br />
Thomas Krenn steht für Server made in Germany. Wir<br />
assemblieren und liefern europaweit innerhalb von 24<br />
Stunden. Unter www.thomas-krenn.com können Sie<br />
Ihre Server individuell konfi gurieren.<br />
Unsere Experten sind rund um die Uhr für Sie unter<br />
+49 (0) 8551 9150-0 erreichbar<br />
(CH: +49 (0) 848207970, AT +43 (0) 7282 20797-3600)<br />
Made in Germany!<br />
Verkauf erfolgt ausschließlich an Gewerbetreibende, Firmen, Freiberufler (Ärzte, Rechtsanwälte etc.), staatliche Institutionen und Behörden. Druckfehler, Irrtümer und Änderungen in Preis und Ausstattung vorbehalten.<br />
Unsere Versandkosten richten sich nach Gewicht und Versandart. Genaue Preisangaben finden Sie unter: www.thomas-krenn.com/versandkosten. Thomas-Krenn.AG, Speltenbach-Steinäcker 1, D-94078 Freyung
Login<br />
Admin-Story<br />
Aus dem Tagebuch eines IT-Nomaden<br />
Aufzucht<br />
Große Systemlandschaften mithilfe von Cobbler und Spacewalk verwalten<br />
– für viele Admins heute eine Selbstverständlichkeit. Was aber, wenn eine<br />
solche Landschaft gerade erst im Aufbau ist? Dass hier nicht immer eine<br />
Menge Handarbeit notwendig ist, zeigt mein Tagebuch-Bericht in diesem<br />
Monat. Thorsten Scherf<br />
© Pellocks, Fotolia<br />
Das erste Meeting mit dem Kunden ist<br />
gerade vorbei, und er sieht zufrieden<br />
aus, aber doch nicht völlig überzeugt.<br />
Vielleicht denkt er: „Kann der Kerl mit<br />
dem roten Hut das wirklich halten, was<br />
er da eben so vollmundig versprochen<br />
hat? Schließlich geht es nicht nur um<br />
eine Handvoll, sondern um mehrere<br />
Hundert Systeme. Wie will der denn in<br />
der kurzen Zeit alle Rechner installieren,<br />
konfigurieren und mit unserer Software<br />
versorgen?“<br />
Listing 1: Systemeinstellungen<br />
01 # cobbler system add ‐‐name=foo<br />
‐‐profile=ksprofile‐devel‐rhel6 \<br />
02 ‐‐hostname=foo.bar.de ‐‐macaddress=00:40:26:CA:10:DD<br />
\<br />
03 ‐‐kopts="stage=test app=www" ‐‐ksmeta="stage=test<br />
app=www"<br />
04 # cobbler system edit ‐‐name=foo ‐‐interface=eth0<br />
‐‐mac=00:40:26:CA:10:DD \<br />
05 ‐‐ip=192.168.0.1 ‐‐subnet=255.255.255.0<br />
‐‐gateway=192.168.0.254 ‐‐static=1 \<br />
06 ‐‐netboot‐enabled=Y<br />
Zugegeben, die Anzahl der Maschinen<br />
ist für den zur Verfügung stehenden<br />
Zeitraum schon enorm, aber mithilfe des<br />
Cobbler-XMLRPC-API sollte das Anlegen<br />
der vielen System-Profile in der Cobbler-Datenbank<br />
kein großes Problem<br />
darstellen. Dank intensiver Gespräche<br />
mit dem Kunden weiß<br />
ich nun auch, welche Art von<br />
Systemen er hat und wie diese<br />
zu konfigurieren sind. Das<br />
lässt sich eigentlich alles recht<br />
leicht über eine passende Struktur<br />
und ein ausgefeiltes Kickstart-<br />
Profil im Spacewalk-Server lösen.<br />
Zu dem Thema gibt es einen Artikel<br />
im <strong>ADMIN</strong>-<strong>Magazin</strong> [1]. Also stellen die<br />
vielen Cobbler-Systemeinträge wirklich<br />
die größte Hürde dar. Zur Erinnerung:<br />
Mithilfe dieser Systemeinträge ist Cobbler<br />
in der Lage, für jedes System eine individuelle<br />
PXE-Konfigurationsdatei zu generieren.<br />
Dank sogenannter Snippets, die<br />
später im Kickstart-Profil zum Einsatz<br />
kommen, ist die Individualisierung eines<br />
Systems bereits zu einem sehr frühen<br />
Zeitpunkt möglich. Dies gilt beispielsweise<br />
für das zu installierende Betriebssystem,<br />
die Netzwerkkonfiguration und,<br />
dank beliebiger Variablen, die sich als<br />
Kernel-Argumente in Cobbler definieren<br />
lassen, für eigentlich jede nur denkbare<br />
Konfigurationseinstellung.<br />
Mit ein bisschen Script-Foo kommen diese<br />
Variablen dann während der Installation<br />
zum Einsatz und passen das System den<br />
eigenen Wünschen an. Ist ein solcher<br />
Eintrag für einen Rechner erst einmal<br />
erzeugt, ist der eigentlich nur noch zu<br />
starten, um eine vollkommen automatisierte<br />
Installation mittels PXE anzustoßen.<br />
Die Aufgabe besteht jetzt darin,<br />
diese Einträge erst einmal in die Cobbler-<br />
Datenbank aufzunehmen. Ein klassischer<br />
Aufruf hierfür sieht beispielsweise wie in<br />
Listing 1 aus.<br />
Alles kein Problem, wenn es sich nur um<br />
ein paar Maschinen handelt, die notwendigen<br />
Befehle sind schnell ausgeführt.<br />
Was aber, wenn der Kunde gerne 1000<br />
Maschinen installiert haben möchte?<br />
1000 Einträge von Hand eingeben? Keine<br />
angenehme Aufgabe. Ein Shell-Skript?<br />
Klingt schon ganz gut, aber es geht noch<br />
besser.<br />
Cobbler bietet neben dem manuellen<br />
Anlegen dieser Systemeinträge die<br />
Möglichkeit, diese Aufgabe mittels einer<br />
Python- oder XMLRPC-API zu automatisieren.<br />
Welche der beiden Schnittstellen<br />
man wählt, ist Geschmackssache.<br />
Wegen einiger negativer Erlebnisse mit<br />
der Python-API entscheide ich mich für<br />
XMLRPC. XMLRPC ((Extensible Markup<br />
Language Remote Procedure Call) ist vereinfacht<br />
ausgedrückt ein standardisierter<br />
Weg für Computerprogramme, sich über<br />
ein Netzwerk auszutauschen und Daten<br />
zu versenden und zu empfangen. Welche<br />
Daten zu übertragen sind, das legen<br />
verschiedene Methodenaufrufe fest. Über<br />
das HTTP-Protokoll gelangen die Daten<br />
dann – in XML-Form – an den anfragenden<br />
Client. Praktisch jede moderne<br />
Sprache bietet heute ein XML-Interface<br />
an. Hier kommt der Einfachheit halber<br />
Python zum Einsatz.<br />
Einen ersten Einstieg zeigt Listing 2.<br />
Neben dem obligatorischen Importieren<br />
der »xmlrpclib«, erzeugt der Aufruf in<br />
Zeile 2 ein Objekt zum Verbinden mit<br />
dem Cobbler-Server. Zeile 3 erzeugt ein<br />
18 Ausgabe 06-2011 Admin www.admin-magazin.de
Admin-Story<br />
Login<br />
passendes Token zum Login. Mit diesem<br />
Token erhalten alle Spacewalk-Benutzer<br />
automatisch Zugang zum Cobbler-Server.<br />
Hierfür ist jedoch noch eine Anpassung<br />
in »/etc/cobbler/settings« notwendig.<br />
Dort ist die Anweisung »redhat_management_permissive«<br />
auf 1 zu setzen. Zeile<br />
4 gibt alle vorhandenen System-Einträge<br />
aus.<br />
Listing 3 zeigt ein etwas umfangreicheres<br />
Beispiel. Hier gehe ich davon aus,<br />
dass die Systeme mit allen notwendigen<br />
Informationen wie beispielsweise IP-,<br />
MAC-Adresse, Gateway und so weiter in<br />
einer CSV-Datei aufgeführt sind. Diese<br />
CSV-Datei schnappt sich das Python-<br />
Script, steckt die einzelnen System-<br />
Eigenschaften in ein Dictionary, ordnet<br />
den einzelnen Dictionary-Keys den passenden<br />
Wert zu und übergibt schließlich<br />
alles an Cobbler. Das Ergebnis ist das<br />
gleiche wie bei dem manuellen Aufruf<br />
Listing 3: Systeminformationen<br />
von Cobbler weiter oben. Mithilfe der<br />
XMLRPC-API ist es ein Leichtes, die<br />
ganze Systemlandschaft im Cobbler abzubilden.<br />
Die notwendigen Systemkonfigurationsdateien<br />
für den PXE-Server<br />
erzeugt Cobbler dabei automatisch.<br />
Nach ein paar Tests und manuellen Anpassungen<br />
an den Kickstart-Dateien,<br />
auf die Cobbler in den Systemeinträgen<br />
verweist, sind alle Systeme schließlich<br />
im Handumdrehen installiert. Und das<br />
Beste daran ist: Cobbler ist freie Software,<br />
die unter der GPL-Lizenz allen<br />
zur Verfügung steht. Nach dem ganzen<br />
Gerede über Cobbler [2] habe ich<br />
nun doch glatt Appetit b ekommen.<br />
Da ich mich dazu auch noch gerade in<br />
den USA aufhalte, versuche ich nun also<br />
erstmal ein Restaurant zu finden, in dem<br />
es diese leckeren Teigkrusten mit Früchten<br />
gibt, die wie die nützliche Software<br />
heißen. Bis bald. (ofr)<br />
n<br />
Infos<br />
[1] Thorsten Scherf, Linux-Systeme mit Spacewalk<br />
verwalten, <strong>ADMIN</strong> 04/2010, S. 74<br />
[2] Cobbler-Rezept:<br />
[http:// www. usa‐kulinarisch. de/ rezept/<br />
cobbler‐grundrezept/]<br />
Der Autor<br />
Thorsten Scherf arbeitet als Senior Consultant<br />
für Red Hat EMEA. Er ist oft als Vortragender<br />
auf Konferenzen anzutreffen. Wenn ihm neben<br />
der Arbeit und Familie noch Zeit bleibt, nimmt<br />
er gerne an Marathonläufen teil.<br />
Listing 2: Basics<br />
01 from xmlrpclib import *<br />
02 conn = Server("http://spacewalk.tuxgeek.de/cobbler_<br />
api")<br />
03 token = conn.login(user, password)<br />
04 print server.get_systems()<br />
01 import os<br />
02 import sys<br />
03 from xmlrpclib import *<br />
04 <br />
05 conn = Server("http://spacewalk.tuxgeek.de/cobbler_api")<br />
06 token = conn.login(user, password)<br />
07 <br />
08 cblr_systems = '/root/cobbler.csv'<br />
09 <br />
10 if os.access(cblr_systems, os.F_OK):<br />
11 print "Reading system configuration file %s" % cblr_systems<br />
12 print<br />
13 else:<br />
14 print "The system configuration file %s does not exist,<br />
aborting." % cblr_systems<br />
15 print<br />
16 sys.exit(1)<br />
17 <br />
18 column_header = [ "name","os","eth0‐mac","stage","app","gateway",<br />
"eth0‐ip","eth0‐mask","eth1‐mac","eth1‐ip","eth1‐mask" ]<br />
19 system_dict = {}<br />
20 <br />
21 f = open(cblr_systems, "r")<br />
22 for line in f:<br />
23 if line.startswith("#"):<br />
24 continue<br />
25 system_prop = line.split(",")<br />
26 print "‐‐> Checking if system %s already exists:" % system_<br />
prop[0]<br />
27 for i,header in enumerate(column_header):<br />
28 system_dict[header] = system_prop[i]<br />
29 <br />
30 system_name=system_dict["name"]<br />
31 dnsname = system_dict["name"] + ".tuxgeek.de"<br />
32 ksprofile = "ksprofile‐devel‐" + system_dict["os"]<br />
33 <br />
34 try:<br />
35 sys_id = conn.get_system_handle(system_name, token)<br />
36 except Fault, reason:<br />
37 if reason.faultCode == 1:<br />
38 print "+ System doesn't exist, will create it now"<br />
39 pass<br />
40 else:<br />
41 print "* System already exists ‐ skipping "<br />
42 print<br />
43 continue<br />
44 <br />
45 sys_id = conn.new_system(token)<br />
46 conn.modify_system(sys_id, 'name', system_dict["name"], token)<br />
47 conn.modify_system(sys_id, 'hostname', dnsname, token)<br />
48 conn.modify_system(sys_id, 'gateway', system_dict["gateway"],<br />
token)<br />
49 conn.modify_system(sys_id, 'profile', ksprofile, token)<br />
50 conn.modify_system(sys_id, 'netboot_enabled', True, token)<br />
51 conn.modify_system(sys_id, 'kopts', { "stage" : system_<br />
dict["stage"], "app" : system_dict["app"] }, token)<br />
52 conn.modify_system(sys_id, 'kopts_post', { "stage" : system_<br />
dict["stage"], "app" : system_dict["app"] }, token)<br />
53 conn.modify_system(sys_id, 'modify_interface', {<br />
54 "macaddress‐eth0" : system_dict["eth0‐mac"],<br />
55 "ipaddress‐eth0" : system_dict["eth0‐ip"],<br />
56 "static‐eth0" : True,<br />
57 "staticroutes‐eth0" : system_dict["eth0‐routes"] }, token)<br />
58 conn.modify_system(sys_id, 'modify_interface', {<br />
59 "macaddress‐eth1" : system_dict["eth1‐mac"],<br />
60 "ipaddress‐eth1" : system_dict["eth1‐ip"],<br />
61 "static‐eth1" : True,<br />
62 "staticroutes‐eth1" : system_dict["eth1‐routes"] }, token)<br />
63 conn.save_system(sys_id, token)<br />
64 print "+ System created"<br />
65 print<br />
66 f.close()<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
19
Admin-Story<br />
Login<br />
passendes Token zum Login. Mit diesem<br />
Token erhalten alle Spacewalk-Benutzer<br />
automatisch Zugang zum Cobbler-Server.<br />
Hierfür ist jedoch noch eine Anpassung<br />
in »/etc/cobbler/settings« notwendig.<br />
Dort ist die Anweisung »redhat_management_permissive«<br />
auf 1 zu setzen. Zeile<br />
4 gibt alle vorhandenen System-Einträge<br />
aus.<br />
Listing 3 zeigt ein etwas umfangreicheres<br />
Beispiel. Hier gehe ich davon aus,<br />
dass die Systeme mit allen notwendigen<br />
Informationen wie beispielsweise IP-,<br />
MAC-Adresse, Gateway und so weiter in<br />
einer CSV-Datei aufgeführt sind. Diese<br />
CSV-Datei schnappt sich das Python-<br />
Script, steckt die einzelnen System-<br />
Eigenschaften in ein Dictionary, ordnet<br />
den einzelnen Dictionary-Keys den passenden<br />
Wert zu und übergibt schließlich<br />
alles an Cobbler. Das Ergebnis ist das<br />
gleiche wie bei dem manuellen Aufruf<br />
Listing 3: Systeminformationen<br />
von Cobbler weiter oben. Mithilfe der<br />
XMLRPC-API ist es ein Leichtes, die<br />
ganze Systemlandschaft im Cobbler abzubilden.<br />
Die notwendigen Systemkonfigurationsdateien<br />
für den PXE-Server<br />
erzeugt Cobbler dabei automatisch.<br />
Nach ein paar Tests und manuellen Anpassungen<br />
an den Kickstart-Dateien,<br />
auf die Cobbler in den Systemeinträgen<br />
verweist, sind alle Systeme schließlich<br />
im Handumdrehen installiert. Und das<br />
Beste daran ist: Cobbler ist freie Software,<br />
die unter der GPL-Lizenz allen<br />
zur Verfügung steht. Nach dem ganzen<br />
Gerede über Cobbler [2] habe ich<br />
nun doch glatt Appetit b ekommen.<br />
Da ich mich dazu auch noch gerade in<br />
den USA aufhalte, versuche ich nun also<br />
erstmal ein Restaurant zu finden, in dem<br />
es diese leckeren Teigkrusten mit Früchten<br />
gibt, die wie die nützliche Software<br />
heißen. Bis bald. (ofr)<br />
n<br />
Infos<br />
[1] Thorsten Scherf, Linux-Systeme mit Spacewalk<br />
verwalten, <strong>ADMIN</strong> 04/2010, S. 74<br />
[2] Cobbler-Rezept:<br />
[http:// www. usa‐kulinarisch. de/ rezept/<br />
cobbler‐grundrezept/]<br />
Der Autor<br />
Thorsten Scherf arbeitet als Senior Consultant<br />
für Red Hat EMEA. Er ist oft als Vortragender<br />
auf Konferenzen anzutreffen. Wenn ihm neben<br />
der Arbeit und Familie noch Zeit bleibt, nimmt<br />
er gerne an Marathonläufen teil.<br />
Listing 2: Basics<br />
01 from xmlrpclib import *<br />
02 conn = Server("http://spacewalk.tuxgeek.de/cobbler_<br />
api")<br />
03 token = conn.login(user, password)<br />
04 print server.get_systems()<br />
01 import os<br />
02 import sys<br />
03 from xmlrpclib import *<br />
04 <br />
05 conn = Server("http://spacewalk.tuxgeek.de/cobbler_api")<br />
06 token = conn.login(user, password)<br />
07 <br />
08 cblr_systems = '/root/cobbler.csv'<br />
09 <br />
10 if os.access(cblr_systems, os.F_OK):<br />
11 print "Reading system configuration file %s" % cblr_systems<br />
12 print<br />
13 else:<br />
14 print "The system configuration file %s does not exist,<br />
aborting." % cblr_systems<br />
15 print<br />
16 sys.exit(1)<br />
17 <br />
18 column_header = [ "name","os","eth0‐mac","stage","app","gateway",<br />
"eth0‐ip","eth0‐mask","eth1‐mac","eth1‐ip","eth1‐mask" ]<br />
19 system_dict = {}<br />
20 <br />
21 f = open(cblr_systems, "r")<br />
22 for line in f:<br />
23 if line.startswith("#"):<br />
24 continue<br />
25 system_prop = line.split(",")<br />
26 print "‐‐> Checking if system %s already exists:" % system_<br />
prop[0]<br />
27 for i,header in enumerate(column_header):<br />
28 system_dict[header] = system_prop[i]<br />
29 <br />
30 system_name=system_dict["name"]<br />
31 dnsname = system_dict["name"] + ".tuxgeek.de"<br />
32 ksprofile = "ksprofile‐devel‐" + system_dict["os"]<br />
33 <br />
34 try:<br />
35 sys_id = conn.get_system_handle(system_name, token)<br />
36 except Fault, reason:<br />
37 if reason.faultCode == 1:<br />
38 print "+ System doesn't exist, will create it now"<br />
39 pass<br />
40 else:<br />
41 print "* System already exists ‐ skipping "<br />
42 print<br />
43 continue<br />
44 <br />
45 sys_id = conn.new_system(token)<br />
46 conn.modify_system(sys_id, 'name', system_dict["name"], token)<br />
47 conn.modify_system(sys_id, 'hostname', dnsname, token)<br />
48 conn.modify_system(sys_id, 'gateway', system_dict["gateway"],<br />
token)<br />
49 conn.modify_system(sys_id, 'profile', ksprofile, token)<br />
50 conn.modify_system(sys_id, 'netboot_enabled', True, token)<br />
51 conn.modify_system(sys_id, 'kopts', { "stage" : system_<br />
dict["stage"], "app" : system_dict["app"] }, token)<br />
52 conn.modify_system(sys_id, 'kopts_post', { "stage" : system_<br />
dict["stage"], "app" : system_dict["app"] }, token)<br />
53 conn.modify_system(sys_id, 'modify_interface', {<br />
54 "macaddress‐eth0" : system_dict["eth0‐mac"],<br />
55 "ipaddress‐eth0" : system_dict["eth0‐ip"],<br />
56 "static‐eth0" : True,<br />
57 "staticroutes‐eth0" : system_dict["eth0‐routes"] }, token)<br />
58 conn.modify_system(sys_id, 'modify_interface', {<br />
59 "macaddress‐eth1" : system_dict["eth1‐mac"],<br />
60 "ipaddress‐eth1" : system_dict["eth1‐ip"],<br />
61 "static‐eth1" : True,<br />
62 "staticroutes‐eth1" : system_dict["eth1‐routes"] }, token)<br />
63 conn.save_system(sys_id, token)<br />
64 print "+ System created"<br />
65 print<br />
66 f.close()<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
19
Admin-Story<br />
Login<br />
passendes Token zum Login. Mit diesem<br />
Token erhalten alle Spacewalk-Benutzer<br />
automatisch Zugang zum Cobbler-Server.<br />
Hierfür ist jedoch noch eine Anpassung<br />
in »/etc/cobbler/settings« notwendig.<br />
Dort ist die Anweisung »redhat_management_permissive«<br />
auf 1 zu setzen. Zeile<br />
4 gibt alle vorhandenen System-Einträge<br />
aus.<br />
Listing 3 zeigt ein etwas umfangreicheres<br />
Beispiel. Hier gehe ich davon aus,<br />
dass die Systeme mit allen notwendigen<br />
Informationen wie beispielsweise IP-,<br />
MAC-Adresse, Gateway und so weiter in<br />
einer CSV-Datei aufgeführt sind. Diese<br />
CSV-Datei schnappt sich das Python-<br />
Script, steckt die einzelnen System-<br />
Eigenschaften in ein Dictionary, ordnet<br />
den einzelnen Dictionary-Keys den passenden<br />
Wert zu und übergibt schließlich<br />
alles an Cobbler. Das Ergebnis ist das<br />
gleiche wie bei dem manuellen Aufruf<br />
Listing 3: Systeminformationen<br />
von Cobbler weiter oben. Mithilfe der<br />
XMLRPC-API ist es ein Leichtes, die<br />
ganze Systemlandschaft im Cobbler abzubilden.<br />
Die notwendigen Systemkonfigurationsdateien<br />
für den PXE-Server<br />
erzeugt Cobbler dabei automatisch.<br />
Nach ein paar Tests und manuellen Anpassungen<br />
an den Kickstart-Dateien,<br />
auf die Cobbler in den Systemeinträgen<br />
verweist, sind alle Systeme schließlich<br />
im Handumdrehen installiert. Und das<br />
Beste daran ist: Cobbler ist freie Software,<br />
die unter der GPL-Lizenz allen<br />
zur Verfügung steht. Nach dem ganzen<br />
Gerede über Cobbler [2] habe ich<br />
nun doch glatt Appetit b ekommen.<br />
Da ich mich dazu auch noch gerade in<br />
den USA aufhalte, versuche ich nun also<br />
erstmal ein Restaurant zu finden, in dem<br />
es diese leckeren Teigkrusten mit Früchten<br />
gibt, die wie die nützliche Software<br />
heißen. Bis bald. (ofr)<br />
n<br />
Infos<br />
[1] Thorsten Scherf, Linux-Systeme mit Spacewalk<br />
verwalten, <strong>ADMIN</strong> 04/2010, S. 74<br />
[2] Cobbler-Rezept:<br />
[http:// www. usa‐kulinarisch. de/ rezept/<br />
cobbler‐grundrezept/]<br />
Der Autor<br />
Thorsten Scherf arbeitet als Senior Consultant<br />
für Red Hat EMEA. Er ist oft als Vortragender<br />
auf Konferenzen anzutreffen. Wenn ihm neben<br />
der Arbeit und Familie noch Zeit bleibt, nimmt<br />
er gerne an Marathonläufen teil.<br />
Listing 2: Basics<br />
01 from xmlrpclib import *<br />
02 conn = Server("http://spacewalk.tuxgeek.de/cobbler_<br />
api")<br />
03 token = conn.login(user, password)<br />
04 print server.get_systems()<br />
01 import os<br />
02 import sys<br />
03 from xmlrpclib import *<br />
04 <br />
05 conn = Server("http://spacewalk.tuxgeek.de/cobbler_api")<br />
06 token = conn.login(user, password)<br />
07 <br />
08 cblr_systems = '/root/cobbler.csv'<br />
09 <br />
10 if os.access(cblr_systems, os.F_OK):<br />
11 print "Reading system configuration file %s" % cblr_systems<br />
12 print<br />
13 else:<br />
14 print "The system configuration file %s does not exist,<br />
aborting." % cblr_systems<br />
15 print<br />
16 sys.exit(1)<br />
17 <br />
18 column_header = [ "name","os","eth0‐mac","stage","app","gateway",<br />
"eth0‐ip","eth0‐mask","eth1‐mac","eth1‐ip","eth1‐mask" ]<br />
19 system_dict = {}<br />
20 <br />
21 f = open(cblr_systems, "r")<br />
22 for line in f:<br />
23 if line.startswith("#"):<br />
24 continue<br />
25 system_prop = line.split(",")<br />
26 print "‐‐> Checking if system %s already exists:" % system_<br />
prop[0]<br />
27 for i,header in enumerate(column_header):<br />
28 system_dict[header] = system_prop[i]<br />
29 <br />
30 system_name=system_dict["name"]<br />
31 dnsname = system_dict["name"] + ".tuxgeek.de"<br />
32 ksprofile = "ksprofile‐devel‐" + system_dict["os"]<br />
33 <br />
34 try:<br />
35 sys_id = conn.get_system_handle(system_name, token)<br />
36 except Fault, reason:<br />
37 if reason.faultCode == 1:<br />
38 print "+ System doesn't exist, will create it now"<br />
39 pass<br />
40 else:<br />
41 print "* System already exists ‐ skipping "<br />
42 print<br />
43 continue<br />
44 <br />
45 sys_id = conn.new_system(token)<br />
46 conn.modify_system(sys_id, 'name', system_dict["name"], token)<br />
47 conn.modify_system(sys_id, 'hostname', dnsname, token)<br />
48 conn.modify_system(sys_id, 'gateway', system_dict["gateway"],<br />
token)<br />
49 conn.modify_system(sys_id, 'profile', ksprofile, token)<br />
50 conn.modify_system(sys_id, 'netboot_enabled', True, token)<br />
51 conn.modify_system(sys_id, 'kopts', { "stage" : system_<br />
dict["stage"], "app" : system_dict["app"] }, token)<br />
52 conn.modify_system(sys_id, 'kopts_post', { "stage" : system_<br />
dict["stage"], "app" : system_dict["app"] }, token)<br />
53 conn.modify_system(sys_id, 'modify_interface', {<br />
54 "macaddress‐eth0" : system_dict["eth0‐mac"],<br />
55 "ipaddress‐eth0" : system_dict["eth0‐ip"],<br />
56 "static‐eth0" : True,<br />
57 "staticroutes‐eth0" : system_dict["eth0‐routes"] }, token)<br />
58 conn.modify_system(sys_id, 'modify_interface', {<br />
59 "macaddress‐eth1" : system_dict["eth1‐mac"],<br />
60 "ipaddress‐eth1" : system_dict["eth1‐ip"],<br />
61 "static‐eth1" : True,<br />
62 "staticroutes‐eth1" : system_dict["eth1‐routes"] }, token)<br />
63 conn.save_system(sys_id, token)<br />
64 print "+ System created"<br />
65 print<br />
66 f.close()<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
19
Login<br />
Leserbriefe<br />
Leser-Feedback<br />
Leserbriefe<br />
Haben Sie Anregungen, Kritik oder Kommentare? Dann schreiben Sie<br />
an [leserbriefe@admin‐magazin.de]. Die Redaktion behält es sich vor, die<br />
zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge<br />
mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.<br />
alexwhite, 123RF<br />
Office 365 vs. Google Apps<br />
05/2011, S. 126: Eine Office Suite als<br />
Webapp ist nicht nur für die Zusammenarbeit<br />
eine feine Sache. Man kann<br />
auf diesem Wege auch sehr elegant die<br />
Querelen um inkompatible Dateiformate<br />
umgehen. Mit den Google Apps<br />
klappt das ganz hervorragend und zwar<br />
zwischen allen Plattformen. Es kann einem<br />
egal sein, welches System die anderen<br />
verwenden. In diesem Punkt hat<br />
der Artikel leider keine Klarheit gebracht.<br />
Selbst wenn Office 365 zum Beispiel<br />
auch im Firefox-Browser läuft, heißt es<br />
noch lange nicht, dass es auch in Firefox<br />
unter Linux läuft (zum Beispiel werben<br />
Maxdome Player oder Silverlight damit,<br />
Firefox zu unterstützen, tun dies aber<br />
nicht unter Linux).<br />
Es wurde zwar erwähnt, dass Desktop<br />
Sharing und Telefonie nur unter Windows<br />
funktionieren, aber generell kann<br />
man aus dem Vergleich nicht ableiten,<br />
welche Office Suite besser geeignet ist,<br />
um die Zusammenarbeit zwischen Anwendern<br />
zu erleichtern, die Windows-,<br />
Linux- und Mac-OS-Clients gemischt verwenden.<br />
Martin Runge (per E-Mail)<br />
Sie haben recht, wir werden versuchen,<br />
in Zukunft bei ähnlichen Fällen darauf<br />
mehr zu achten. (Oliver Frommel)<br />
PAC<br />
03/2011, S. 48: Im Artikel beschreiben<br />
Sie die Möglichkeit, dass PAC lokal die<br />
Admin-Passwörter der verwalteten Server<br />
speichern kann, um diese dann bei Bedarf<br />
Für Kommentare und Anregungen können Sie mit der Redaktion auch über die Facebook-Seite in Kontakt<br />
treten, die Sie unter [http://www.facebook.com/adminmagazin] finden.<br />
an Sudo weiterzugeben. Offensichtlich<br />
erfolgt diese lokale Speicherung ohne besonderen<br />
Schutz, denn ein Zugriff muss<br />
nicht vorher über ein Master-Passwort<br />
oder Ähnliches freigeschaltet werden. Sie<br />
liegen also im Zweifelsfall auch jedem<br />
Angreifer offen.<br />
Die deutlich sicherere Lösung wäre,<br />
auf den beteiligten Servern in »/ etc/<br />
sudoers« eine Zeile wie »%admin<br />
ALL=NOPASSWD: /usr/bin/apt‐get<br />
update« einzutragen. Sudo fragt dann<br />
für genau dieses eine Kommando gar<br />
nicht erst nach einem Passwort, und das<br />
Sicherheitsrisiko der lokalen Speicherung<br />
desselben entfällt vollständig.<br />
Bernd Strößenreuther (per E-Mail)<br />
Netzwerk-Bonding<br />
05/2011, S. 30: Zum Ende des Artikels<br />
„Netzwerk-Bonding mit Linux“ wird kurz<br />
Bezug auf OpenBSD und Carp genommen.<br />
Hier hätte man vielleicht noch erwähnen<br />
können, dass mit »pfsync« neben<br />
„active/stand-by“ auch „active-active<br />
stateful“ möglich ist. Was eine Downtime<br />
und die Wahrscheinlichkeit eines<br />
Paketverlusts doch ordentlich minimiert.<br />
Siehe dazu die folgenden Links:<br />
n [http://www.undeadly.<br />
org/cgi?action=article&<br />
sid=20090619100514]<br />
n [http://www.kernel‐panic.it/<br />
openbsd/carp/carp4.html#carp‐4.<br />
2.2]<br />
n [http://www.openbsd.org/papers/<br />
pfsync_v5.pdf]<br />
Bernd Kohler (per E-Mail)<br />
@ leserbriefe@admin-magazin.de<br />
www.facebook.com/adminmagazin www.twitter.com/admagz<br />
22 Ausgabe 06-2011 Admin www.admin-magazin.de
NUR 3,56€ *<br />
pro vServer in der Customer Cloud<br />
NEU: AB 10. NOVEMBER 2011<br />
Endlich mit der Cloud<br />
mal richtig sparen!<br />
Die Private Cloud, die sich jedes Unternehmen leisten kann. Sparen Sie Ressourcen,<br />
Manpower und Budget: Ab 15,45 €* pro Monat können Sie sich Ihre eigene Virtual- Core®<br />
Customer Cloud ins Unternehmen holen und Ihre IT-Kapazitäten durch Virtualisierung so<br />
flexibel wie noch nie gestalten.<br />
6 Monate kostenlos testen unter www.virtual-core.de<br />
* Preise inkl. MwSt.<br />
Virtual-Core® ist eine eingetragene Marke der Firma KAMP Netzwerkdienste GmbH – www.kamp.de
Login<br />
Think Twice<br />
Effizienz versus Stabilität beim Software-Entwickeln<br />
Vom Segen<br />
der Doppelarbeit<br />
Sind die zahlreichen Nagios-Ableger redundanter Software-Ballast und der Ausweis fehlender Effizienz in der<br />
Open-Source-Entwicklung – oder im Gegenteil das Symptom einer gesunden Vielfalt? Jens-Christoph Brendel<br />
Alles begann damit, dass wir uns wieder<br />
einmal Monitoring-Software angesehen<br />
haben. Zabbix, OpenNMS, natürlich Nagios,<br />
aber auch seine vielen Ableger. Gut<br />
ein Dutzend Projekte und Produkte haben<br />
wir allein in der Sparte Nagios-Nachfahren<br />
und Abkömmlinge gezählt. Lösungen,<br />
die hauptsächlich das freie Nagios<br />
und andere Open-Source-Komponenten<br />
integ rieren wie Groundworks oder Open<br />
IT-Cockpit, solche<br />
© arogant, 123RF<br />
lation, eine Art von Maschine. Der Preis<br />
dieser Effizienz ist allerdings Anfälligkeit<br />
– denn ohne Schädlingsbekämpfung<br />
verwandelte sich leicht die ganze Kultur<br />
in das Schlaraffenland eines Ungeziefers<br />
oder Pilzes oder in Windbruch oder dürres<br />
Ödland. Die Geschichte ist voll von<br />
solchen Katastophen von der großen Hungersnot<br />
infolge der irischen Kartoffelfäule<br />
um die Mitte des 19. Jahrhunderts bis zu<br />
40 Prozent Ertragsverlusten durch Pflanzenkrankheiten<br />
in Entwicklungsländern<br />
heute. Ein Gegenspieler der Effizienz ist<br />
die Diversität. Die Artenvielfalt markiert<br />
zugleich den Gegenpol zur Verletzlichkeit<br />
der Monokultur. Ein Biotop aus lauter<br />
unterschiedlichen Arten wäre sehr stabil,<br />
denn was hier den einen gefährdet, ließe<br />
den Nächsten kalt, und viele Mitspieler<br />
könnten sich gegenseitig ersetzen. Dafür<br />
müsste man es viel differenzierter bewirtschaften.<br />
Wollte man der Stabilität wegen<br />
die Verschiedenheit aber auf die Spitze<br />
treiben, dann verwandelte sich auch dieser<br />
Vor- in einen Nachteil: Die Widerstandskraft<br />
würde mit Stagnation erkauft,<br />
denn wo im Extremfall nur noch wenige<br />
Individuen pro Art existierten, da wäre<br />
Fortpflanzung wegen der zu geringen<br />
Populationsdichte kaum mehr möglich.<br />
Aus diesem Grund maximiert die Natur<br />
weder die Effizienz noch die Diversität,<br />
sondern strebt nach einem Gleichgewicht<br />
beider Faktoren. So vielfältig wie möglich,<br />
ohne dass es zu einem Stillstand<br />
kommt, so effizient wie es geht, ohne zu<br />
leicht verwundbar zu sein.<br />
Dieser Gedanke lässt sich übertragen:<br />
Eine vielfältige Software-Landschaft bietet<br />
Alternativen für mancherlei Ansprüche<br />
und wirkt einem Vendor Lock-In entdie<br />
mehr eigenen Code einbringen wie<br />
Centreon und wieder andere, die nur die<br />
Architektur übernehmen, um auf dieser<br />
Grundlage völlig neue Software zu entwickeln,<br />
wie zum Beispiel Shinken.<br />
Angesichts der Menge drängt sich allerdings<br />
eine Frage geradezu auf: Sind das<br />
nicht viel zu viele Anläufe auf dasselbe<br />
Ziel? Ist das nicht reine Ressourcenvergeudung?<br />
Wo könnten die Entwickler<br />
stehen, wenn sie an einem Strang zögen,<br />
statt jeweils ihr eigenes Süppchen zu kochen?<br />
Kurz: Kann das effizient sein? Das<br />
Nein muss einem auf der Zunge liegen.<br />
Denn das Rad ein Dutzend Mal zu erfinden<br />
führt zwangsläufig zu Dubletten<br />
und Überschneidungen.<br />
Doch ist Effizienz hier überhaupt<br />
der richtige Maßstab?<br />
Auf Anhieb übersetzt man<br />
effizient mit wirtschaftlich,<br />
und dann scheint außer<br />
Frage zu stehen, dass<br />
damit eine Grundvoraussetzung<br />
bezeichnet<br />
ist. Doch könnte das<br />
nicht vorschnell gefolgert<br />
sein? Manchmal<br />
erhellt eine Analogie zu<br />
scheinbar fernliegenden<br />
Bereichen die Zusammenhänge.<br />
Hier zum Beispiel<br />
ein Blick auf natürliche<br />
Ökosysteme.<br />
Effizient – zumindest aus der<br />
Sicht des menschlichen Nutzers<br />
– sind etwa Monokulturen.<br />
Alle Pflanzen lassen sich dort über<br />
einen Kamm scheren, sei es bei Aussaat<br />
oder Ernte, beim Düngen oder bei der Bewässerung:<br />
Es reicht jeweils eine Kalku-<br />
C<br />
M<br />
Y<br />
CM<br />
MY<br />
CY<br />
CMY<br />
K<br />
24 Ausgabe 06-2011 Admin www.admin-magazin.de
Think Twice<br />
Login<br />
getD_043_<strong>Magazin</strong>e_Ad_3.ai 1 6/22/11 9:22 PM<br />
letter, News, Mailinglisten, FAQ, Howtos,<br />
Foren, Chats, Blogs, Dependancen<br />
in sozialen Netzen und so weiter). Der<br />
Umfang ist unterschiedlich – sehr ausgeprägt<br />
ist der Service für Kunden etwa bei<br />
Centreon oder OP5, etwas zurückhaltender<br />
gerieren sich Neteye oder Open<br />
IT-Cockpit – aber allen kann man das<br />
Bemühen attestieren, eine lebendige<br />
Community zu entwickeln.<br />
Nagios und seine Nachfahren scheinen<br />
also ein vielfältiges und stabiles Biotop<br />
zu bilden, das etlichen Akteuren eine<br />
Nische bietet, in der sie ihr Auskommen<br />
finden. Darin tummeln sich sowohl Projekte,<br />
die in erster Linie von kommerziellen<br />
Interessen geleitet werden, als auch<br />
solche, die den Open-Source- Gedanken<br />
hochhalten und mehr oder weniger vom<br />
Idealismus ihrer Entwickler leben. Was<br />
funktioniert, hat recht. Es fände sich<br />
wohl auch nur schwer eine Rechtfertigung<br />
für eine Effizienzpolizei. Zumal das<br />
Biotop ja insoweit sogar auch effizient<br />
ist, als überall dasselbe Funktionsprinzip<br />
und Architekturmodell<br />
zum Einsatz kommt und<br />
die für die Flexibilität einer<br />
Nagios-Lösung so entscheidenden<br />
Plugins sehr oft<br />
ohne Änderungen nachnutzbar<br />
sind.<br />
Das Rad ist übrigens<br />
im wirklichen Leben<br />
tatsächlich mehrfach<br />
erfunden worden. In<br />
Mesopotamien und der<br />
Induskultur, dem Alpenvorland,<br />
im Nordkaukasus,<br />
in Südpolen stößt<br />
man unabhängig voneinander<br />
um die Mitte des<br />
4. Jahrtausends vor Christus<br />
auf erste Räder und Karren.<br />
Trotzdem handelt es sich dabei<br />
um eine der größten technischen<br />
Errungenschaften des Menschen<br />
überhaupt.<br />
n<br />
IT-Admin? Computerfreak? Technikfan?<br />
Dann schau rein bei getDigital.de, dem Shop mit Gadgets,<br />
T-Shirts und Geschenken für Geeks und alle Computerfans!<br />
USB Gadgets<br />
USB Stressball<br />
=C23,90<br />
Drücken lässt<br />
den Bildschirm<br />
schrumpfen!<br />
USB Webcam Raketenwerfer<br />
Mit Webcam<br />
und fernsteuerbar<br />
per<br />
Skype!<br />
=C59,95<br />
Tools für Nerds T-Shirts für Admins Vorteilsgutschein<br />
USB Batterien<br />
ab<br />
=C16,95<br />
Batterien sind am USB-Anschluss<br />
aufladbar.<br />
Anyloader<br />
Lädt Handy und<br />
Co. mit<br />
Solarstrom.<br />
=C34,95<br />
=C= 34<br />
Turning it off and on again<br />
No.<br />
Alternativ<br />
geht<br />
natürlich<br />
auch diese<br />
Antwort.<br />
ab<br />
=C14,90<br />
Die<br />
Standardantwort<br />
im Support<br />
ab<br />
=C15,90<br />
RFID Schutzhülle<br />
=C4,95<br />
Mit dem Gutscheincode<br />
ITAM_TKKNRQ<br />
gibt es für Leser des IT-Admin-<br />
<strong>Magazin</strong>s eine RFID Schutzhülle<br />
kostenlos zur Bestellung dazu!<br />
gegen. Gäbe es aber nur noch Programm-<br />
Unikate, explodierten die Wartungs- und<br />
Schulungskosten, gäbe es keinen Erfahrungsaustausch<br />
zwischen den Anwendern<br />
mehr, lohnte es für Dritte kaum,<br />
Erweiterungen zu programmieren, müssten<br />
jedoch andererseits die Software-<br />
Preise in extreme Höhen schnellen. Aus<br />
dieser Perspektive sollte man also eher<br />
fragen: Markieren ein Dutzend Nagios-<br />
Ableger eine gesunde Balance?<br />
Sie scheinen zumindest überwiegend ihre<br />
Nischen gefunden zu haben. Alle haben<br />
Kunden, die meisten erreichen sie auch<br />
über Partner, für die sie extra Programme<br />
auflegen. Schon potenzielle Kunden<br />
können mit einer Ausnahme überall kostenlose<br />
Demoversionen herunterladen,<br />
manchmal auch vorinstallierte Demos<br />
via Internet ausprobieren. Mehr als die<br />
Hälfte der Anbieter von Nagios-Nachfahren<br />
offerieren Trainings, alle auf die eine<br />
oder andere Weise Support und zusätzliche<br />
Informationen (Referenzen, Newswww.getdigital.de
Login<br />
Interview<br />
Interview mit Nagios-Chefentwickler Ethan Galstad<br />
Industriestandard<br />
fürs Monitoring<br />
Ende September fand im amerikanischen Saint Paul die erste Nagios World Conference, ausgerichtet von Nagios-<br />
Erfinder und ‐Entwickler Ethan Galstad, statt. Er konnte mehr als 150 Teilnehmer aus aller Welt begrüßen und<br />
fand am Rande der Konferenz Zeit für ein Gespräch mit dem <strong>ADMIN</strong>-<strong>Magazin</strong>. Christian Mies<br />
Galstad präsentierte in seiner Keynote<br />
Neuerungen zu Nagios im Open-Sourceund<br />
kommerziellen Bereich, hauptsächlich<br />
Erweiterungen bestehender Community-Projekte<br />
wie Nagios Core Configuration<br />
Management (NCCM), ein neues auf<br />
PHP basierendes Webinterface oder ein<br />
Addon für das Business Process<br />
Monitoring. Die Rede war auch<br />
von Entwicklungsarbeiten an<br />
einem neuen Nagios-4-Kern,<br />
aber Termine konnten dazu<br />
nicht genannt werden. Daneben<br />
will sich Galstads Firma<br />
Nagios Ltd. künftig verstärkt<br />
um Supportangebote auch für<br />
die kostennlose Version bemühen.<br />
Im Einzelnen antwortete<br />
Ethan Galstad:<br />
Welche neuen Features werden<br />
gegenwärtig für Nagios<br />
XI und Nagios entwickelt?<br />
Galstad : Unser Team hat im<br />
vergangenen Jahr viele neue<br />
Entwicklungen veröffentlicht,<br />
und in den nächsten Monaten<br />
kommen noch einige hinzu. Da<br />
ist zuerst die Nagios V-Shell,<br />
eine neue PHP-GUI für Nagios,<br />
die ohne CGIs auskommt. Mithilfe<br />
von Ajax kann sie Daten<br />
auf dem Bildschirm live updaten,<br />
sie bietet Paging und einige Features<br />
mehr. Erst kürzlich haben wir zudem die<br />
Unterstützung für eine Lokalisierung hinzugefügt,<br />
die Nagios für Anwender in der<br />
ganzen Welt bessser handhabbar macht.<br />
Seit ihrem Erscheinen gehört die V-Shell<br />
zu den populärsten Nagios-Downloads.<br />
Dann gibt es da unser neues Business<br />
Process Intelligence-Addon, das es einfach<br />
macht, Geschäftsprozesse mit Nagios<br />
zu überwachen. BPI offeriert fortgeschrittene<br />
Möglichkeiten für eine Gruppierung,<br />
erweiterbare Prozess-Bäume<br />
und eine einfache Konfiguration.<br />
Der Nagios Core Config Manager (CCM)<br />
ist ein neues Konfigurations-Frontend,<br />
das wir auf der Grundlage der Erfahrungen<br />
mit Nagios XI entwickelt haben.<br />
Das Projekt begann als Überarbeitung<br />
von NagiosQL, hat sich aber inzwischen<br />
ausgeweitet und bietet Features, nach<br />
denen viele Kunden lange suchten. Das<br />
Projekt durchläuft im Moment eine eingeschränkte<br />
Beta-Phase mit einigen Kunden,<br />
sollte aber Ende des Jahres für alle<br />
verfügbar sein.<br />
In den nächsten zwei Monaten wird außerdem<br />
ein neues Release der NDOUtils<br />
erscheinen, das asynchrone<br />
(nicht blockierende) Schreiboperationen<br />
auf das Datenbank-Backend<br />
erlaubt. Zudem<br />
werden weitere Performanceverbesserungen<br />
– besonders<br />
für <strong>Datenbanken</strong> in großen<br />
Umgebungen – Eingang in die<br />
Codebasis finden.<br />
NRDP ist eine neu entwickelte<br />
Lösung für das Versenden und<br />
Verarbeiten passiver Checks.<br />
Es wurde als Ersatz für NSCA<br />
entwickelt und transportiert<br />
seine Daten im XML-Format<br />
via HTTP, was seinen Einsatz<br />
in Umgebungen erleichtert, die<br />
mit Firewalls gesichert sind.<br />
Perl- und PHP-Clients machen<br />
es leicht, NRDP für verteiltes<br />
Monitoring und die Integration<br />
von Alarmen externer Applikationen<br />
in Nagios einzusetzen.<br />
Nagios Mobile ist ein neues<br />
Frontend, dessen Veröffentlichung<br />
für November geplant<br />
ist. Es soll es für den Admin einfacher<br />
machen, Alarme an jedem Ort zu managen,<br />
an dem er sich gerade befindet.<br />
Zu den neuesten Erweiterungen für Nagios<br />
XI zählen neue Visualisierungs-Tools<br />
wie Heatmaps und Alertstreams, fortgeschrittene<br />
Reports und Exportmöglichkei-<br />
26 Ausgabe 06-2011 Admin www.admin-magazin.de
ten dafür, bessere Optionen für verteiltes<br />
Monitoring, Performanceverbesserungen,<br />
eine LDAP-Integration und mehr. Außerdem<br />
wurden neue Wizards entwickelt,<br />
die es einfacher machen, eine Überwachung<br />
von Active Directory, Exchange,<br />
SQL Server, Oracle oder DB2 zu konfigurieren.<br />
Wir beobachten weiter, dass eine wachsende<br />
Anzahl von Kunden von Nagios<br />
Core oder anderen Monitoringlösungen<br />
zu Nagios XI migriert, was ein gesteigertes<br />
Interesse an noch mehr neuen<br />
Features weckt. So planen wir für kommende<br />
Versionen zeitgesteuerte Reports,<br />
weitere APIs und eine weiter verbesserte<br />
Skalierbarkeit.<br />
Außerdem arbeiten wir an einer API,<br />
die es externen Applikationen möglich<br />
machen soll, Kommandos an Nagios XI<br />
oder Nagios Core zu schicken, an einen<br />
SNMP Trap Manager und an „Nagios<br />
Montage“, einen einfach verwendbaren,<br />
paketierten Nagios Core mit den populärsten<br />
Addons.<br />
Das alles ist nur ein kleiner Ausschnitt<br />
aus der Nagios-Entwicklung der letzten<br />
Zeit. Allein im Jahr 2011 wurden über<br />
600 verschiedene Addons, Plugins und<br />
Projekte veröffentlicht.<br />
Was denken Sie über Shinken, Icinga<br />
und andere Forks?<br />
Galstad : Es gibt mehrere Dutzend Reimplementierungen<br />
in verschiedenen<br />
Sprachen – einige kommerziell, andere<br />
Open Source. Einige werden derzeit weiterentwickelt,<br />
aber viele sind aufgrund<br />
der mangelnden Nachhaltigkeit ihrer<br />
Communities wieder eingestellt worden.<br />
Sourceforge ist die Heimat Tausender<br />
Projekte, die nach kurzer Zeit wieder<br />
aufgegeben wurden.<br />
Soweit ich sehe, befindet sich Shinken<br />
noch in einer sehr frühen Entwicklungsphase<br />
und ist wahrscheinlich zu jung,<br />
um für Produktivumgebungen infrage zu<br />
kommen. Bugs im Python-Code werden<br />
seine Entwickler wohl noch einige Zeit<br />
beschäftigen, während Bedenken wegen<br />
der Skalierbarkeit das Projekt womöglich<br />
von großen Umgebungen fernhalten<br />
werden.<br />
Icinga hat einige Fortschritte an verschiedenen<br />
Fronten erzielt, aber es hat<br />
viel weniger Addons und eine viel kleinere<br />
Community als Nagios. Zusätzlich<br />
scheint das Entwicklungsteam in den<br />
letzten zwei Jahren eine hohe Fluktuation<br />
gehabt zu haben, was es fraglich<br />
macht, ob es auf lange Sicht die nötige<br />
Beständigkeit erreicht.<br />
Wenn Entwickler ein Projekt starten,<br />
denken sie selten daran, wie es viele<br />
Jahre überstehen kann. In den letzten<br />
13 Jahren Nagios-Entwicklung habe ich<br />
zahlreiche Herausforderungen kommen<br />
sehen und überstanden, die andere längst<br />
dazu gebracht hätten, ihr Projekt aufzugeben.<br />
Was zeichnet Nagios gegenüber diesen<br />
Forks aus?<br />
Galstad : Organisationen vertrauen Nagios<br />
wegen seiner Flexibilität, langen<br />
Geschichte, der weltweiten Community<br />
und der Fülle freier Addons. Deshalb gab<br />
es mehr als drei Millionen neuer Nagios-<br />
Installationen in den letzten 12 Monaten<br />
weltweit. Deshalb ist Nagios heute der<br />
wahre Industriestandard für das Monitoring.<br />
Firmen ist es wichtig, sich für eine Lösung<br />
zu entscheiden, die sich auf eine lange<br />
Geschichte und eine aktive Community<br />
stützen kann.<br />
Nagios hat eine sehr viel größere Community<br />
als andere Projekte, was Firmen<br />
mehr Unterstützung, eine bessere<br />
Dokumentation und mehr Addons verspricht,<br />
wenn sie sich entschließen, Nagios<br />
zu verwenden. Tausende Addons<br />
wurden bereits für Nagios entwickelt.<br />
Die meisten finden sich auf dem Web-<br />
Portal Nagios Exchange [1]. Seit 2009<br />
wurden etwa 1500 neue Projekte abgeschlossen,<br />
darunter rund 600 allein im<br />
Jahr 2011. Dahinter steht ein gewaltiger<br />
Entwicklungsaufwand. Andere Projekte<br />
kommen in dieser Beziehung nicht<br />
einmal in die Nähe.<br />
n<br />
Der Autor<br />
Christian Mies arbeitet als Senior Consultant<br />
und Projektleiter für den Nagios-Spezialisten<br />
it-novum. Er beschäftigt sich neben Nagios auch<br />
mit Open IT-Cockpit, Prince2 oder ITIL v3 und<br />
betreibt in seiner Freizeit engagiert Ausdauersport.<br />
Infos<br />
[1] Nagios Exchange:<br />
[http:// exchange. nagios. org]<br />
stark · schnell · innovativ<br />
www.admin-magazin.de
Netzwerk<br />
Hyper-V<br />
© Kitch Bain, 123RF<br />
Hyper-V-Netzwerkeinstellungen optimieren<br />
Flusskontrolle<br />
Bei Leistungsproblemen von virtuellen Servern unter Hyper-V liegt der<br />
Flaschenhals oft im Netzwerkzugriff. Mit dem passenden Know-how können<br />
Administratoren Optimierungen vornehmen, die die virtuellen Netzwerkverbindungen<br />
deutlich beschleunigen. Thomas Joos<br />
Die Version 3.0 von Hyper-V in Windows<br />
Server 8 bietet zahlreiche Verbesserungen<br />
im Netzwerkbereich, die zu höherer Performance<br />
verhelfen. Beispiele dafür sind<br />
der direkte Zugriff von virtuellen Maschinen<br />
auf Hardwarefunktionen der Netzwerkkarte<br />
oder eine bessere Steuerung<br />
und Konfiguration von Netzwerkverbindungen.<br />
Aber auch in der aktuellen Version<br />
Hyper-V 2.0 in Windows Server 2008<br />
R2 lassen sich Optimierungen durchführen,<br />
die Netzwerkverbindungen von virtuellen<br />
Servern deutlich beschleunigen.<br />
Funktionsweise von Hyper-<br />
V-Netzwerken<br />
Damit virtuelle Server in Hyper-V-Netzwerken<br />
auf das physische Netzwerk zugreifen<br />
können, muss es eine Verbindung<br />
zwischen dem virtuellen Server und der<br />
physischen Netzwerkkarte des Hyper-V-<br />
Hosts geben. Diese Verbindung bildet der<br />
Hypervisor über einen virtuellen Netzwerkswitch<br />
ab. Da sich die verschiedenen<br />
virtuellen Server auf dem Hyper-<br />
V-Host die physischen Netzwerkkarten<br />
teilen müssen, kann es hier durchaus<br />
zu Konflikten und Ressourcenengpässen<br />
kommen. Die Verwaltung der Netzwerke<br />
findet im Hyper-V-Manager über den Manager<br />
für virtuelle Netzwerke statt (Abbildung<br />
1). Hier können Sie drei Arten<br />
von virtuellen Netzwerken erstellen:<br />
n Externe virtuelle Netzwerke: Diese<br />
Netzwerke erlauben eine Kommunikation<br />
der virtuellen Server untereinander<br />
und mit dem Rest des<br />
Netzwerks. Bei diesen Verbindungen<br />
sind die physischen Netzwerkkarten<br />
eingebunden. Die Verbindung erfolgt<br />
über einen virtuellen Switch, die den<br />
Hyper-V-Host und die virtuellen Server,<br />
welche die Verbindung nutzen,<br />
mit dem Netzwerk verbinden. Sie können<br />
im Hyper-V-Manager immer nur<br />
ein externes Netzwerk pro verfügbarer<br />
Netzwerkkarte erstellen. Interne virtuelle<br />
Netzwerke können Sie allerdings<br />
beliebig oft anlegen, da diese nicht mit<br />
einer Netzwerkkarte verbunden sind,<br />
sondern nur der internen Kommunikation<br />
dienen.<br />
n Interne virtuelle Netzwerke: Diese<br />
Netzwerke erlauben lediglich die Kommunikation<br />
der virtuellen Server untereinander<br />
und mit dem physischen<br />
Host, auf dem sie installiert sind. Die<br />
Server können nicht mit dem Rest des<br />
Netzwerks kommunizieren.<br />
n Private virtuelle Netzwerke: Diese<br />
Netzwerke erlauben lediglich eine<br />
Kommunikation zwischen den virtuellen<br />
Servern auf dem Host. Die Kommunikation<br />
mit dem Host selbst ist<br />
nicht möglich.<br />
Sie sollten daher genau planen, welchen<br />
Typ eines virtuellen Netzwerks die<br />
einzelnen virtuellen Server benötigen.<br />
Nicht immer sind externe Netzwerke<br />
notwendig.<br />
Grundsätzlich ist es empfehlenswert, einen<br />
Netzwerkadapter auf jedem Hyper-<br />
V-Host für die Verwaltung des Servers zu<br />
verwenden, also nicht in die Hyper-V-<br />
Konfiguration einzubinden. Sonst kann<br />
28 Ausgabe 06-2011 Admin www.admin-magazin.de
Hyper-V<br />
Netzwerk<br />
den physischen<br />
Netzwerkkarten<br />
zu externen Netzwerken<br />
zusammenfassen<br />
und<br />
den gewünschten<br />
Servern zuweisen.<br />
Grundlage für eine<br />
schnelle Netzwerkkommunikation<br />
ist<br />
also zunächst die<br />
optimale Planung<br />
für den Einsatz der<br />
physischen Netzwerkkarten.<br />
Während Sie auf<br />
dem Hyper-V-<br />
Host die generelle<br />
Struktur der Netzwerke<br />
konfigurie-<br />
Abbildung 1: Verwalten von Netzwerken im Hyper-V-Manager.<br />
ren, legen Sie in<br />
es sein, dass bei starker Belastung der<br />
den Einstellungen<br />
Netzwerkverbindung, zum Beispiel beim der einzelnen virtuellen Server fest, welche<br />
Art von virtuellen Netzwerkkarten<br />
Kopieren von Patches oder neuen Anwendungen<br />
auf den Servern, die Leistung Sie für den Server verwenden wollen.<br />
einiger virtueller Server einbrechen kann. Klicken Sie auf »Hardware hinzufügen«<br />
Sie sollten also generell den Netzwerkverkehr<br />
des Hyper-V-Hosts selbst vom vern, haben Sie die Möglichkeit, ver-<br />
in den Einstellungen von virtuellen Ser-<br />
Netzwerkverkehr der virtuellen Maschinen<br />
trennen.<br />
(Abbildung 2). Der Typ »Netzwerkkarte«<br />
schiedene Netzwerkkarten zu integrieren<br />
verwendet die Verbindung zwischen Hypervisor<br />
und der physischen Netzwerk-<br />
Auch für NAS und iSCSI<br />
karte. Dieser Typ kann Netzwerkdaten<br />
Diese Vorgehensweise ist auch bei der sehr schnell senden und empfangen. Die<br />
Anbindung von Netzwerkspeicher, zum Kommunikation erfolgt über einen internen<br />
Treiber in den virtuellen Maschinen,<br />
Beispiel NAS oder iSCSI, empfehlenswert.<br />
Auch hier sollten Sie für jede Verbindung<br />
eine eigene Netzwerkkarte auf stellen. Daher sollten Sie darauf achten,<br />
die die Integrationsdienste zur Verfügung<br />
dem Hyper-V-Host zur Verfügung stellen, innerhalb der virtuellen Server die Integrationsdienste<br />
aktiv zu halten bezie-<br />
die nur für den Datenverkehr zum Datenspeicher<br />
verwendet wird. Das heißt, hungsweise zu installieren.<br />
schon außerhalb von Hyper-V können Der Typ »Ältere Netzwerkkarte« ist nur<br />
Sie eine deutliche Leistungssteigerung sinnvoll, wenn Sie spezielle Server virtualisieren,<br />
die nicht den neuen Typ<br />
erreichen, wenn Sie dedizierte Netzwerkkarten<br />
einsetzen.<br />
verwenden können. Beispiel dafür sind<br />
Diese Optimierung können Sie auch auf Server, die über das Netzwerk booten<br />
die virtuellen Hyper-V-Server ausdehnen. sollen, etwa mit PXE. Ist der Typ »Netz-<br />
Analysieren Sie, welche virtuellen Server<br />
die meiste Netzwerkbandbreite verbrauchen<br />
und stellen Sie solchen Servern eigene<br />
Netzwerkkarten über virtuelle externe<br />
Netzwerke zur Verfügung. Server,<br />
die nur wenig Netzwerkbandbreite benötigen,<br />
können Sie mit mehreren virtuellen<br />
Netzwerken zusammenfassen. Eine<br />
solche Zusammenfassung erreichen Sie<br />
sehr einfach, indem Sie die entsprechen- Abbildung 2: Netzwerkkarten zu Servern hinzufügen.<br />
werkkarte« für solche Server nicht geeignet,<br />
verwenden Sie stattdessen Ȁltere<br />
Netzwerkkarte«. Bei diesem Typ emuliert<br />
Hyper-V einen Intel-21140-basierten<br />
PCI-Fast-Ethernet-Adapter. Dieser Adapter<br />
funktioniert auch ohne installierten<br />
Treiber, bietet aber nicht die hohe Geschwindigkeit<br />
des virtuellen Switches<br />
zwischen Hypervisor und physischer<br />
Netzwerkkarte. Für die Emulation muss<br />
der Prozessor des Hyper-V-Hosts eigens<br />
Rechenzeit aufwenden.<br />
Netzwerkkarte übernimmt<br />
Windows Server 2008 R2 unterstützt<br />
TCP Chimney Offload. Bei dieser Technik<br />
lassen sich Berechnungen für den Netzwerkverkehr<br />
vom Prozessor zu den Netzwerkkarten<br />
delegieren, was die Leistung<br />
des Rechners für Anwendungen und im<br />
Netzwerk erheblich beschleunigen kann.<br />
Diese Funktion nutzt auch Hyper-V in<br />
Windows Server 2008 R2. Damit diese<br />
Technik ihre optimale Wirkung entfaltet,<br />
müssen Sie sicherstellen, dass der<br />
Hyper-V-Host und die einzelnen virtuellen<br />
Maschinen für TCP Chimney Offload<br />
konfiguriert sind. Die Einstellungen<br />
dazu nehmen Sie in den Eigenschaften<br />
der Netzwerkverbindungen auf dem Host<br />
und den virtuellen Servern vor, sowie<br />
direkt im Betriebssystem in der Befehlszeile<br />
auf Host und virtuellen Servern.<br />
Geben Sie auf dem Hyper-V-Host und den<br />
virtuellen Servern, in denen Sie die Funktion<br />
nutzen wollen, den Befehl »netsh<br />
int tcp set global chimney=enabled«<br />
ein. Um die Funktion zu deaktivieren,<br />
verwenden Sie »netsh int tcp set global<br />
Abbildung 3: Aktivieren von TCP Chimney Offload für<br />
Netzwerkkarten.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
29
Netzwerk<br />
Hyper-V<br />
Abbildung 4: Verwaltung der virtuellen MAC-<br />
Adressen in Hyper-V.<br />
chimney=disabled«. Um sich generell die<br />
Einstellungen anzeigen zu lassen, geben<br />
Sie »netsh int tcp show global« ein. Auf<br />
der Befehlszeile sehen Sie über »netstat<br />
‐t«, ob die Abladung funktioniert.<br />
Rufen Sie anschließend im Geräte-Manager<br />
der virtuellen Server und des Hosts<br />
die Eigenschaften der Netzwerkkarte auf,<br />
für die Sie die Funktion aktivieren wollen.<br />
Wechseln Sie auf die Registerkarte<br />
»Erweitert« und suchen Sie nach der<br />
Funktion »TCP‐Prüfsummenabladung«.<br />
Stellen Sie sicher, dass »Rx & Tx‐aktiviert«<br />
eingestellt ist (Abbildung 3).<br />
Hyper-V im Cluster:<br />
MAC-Adressen<br />
Extrem wichtig sind die Einstellungen für<br />
virtuelle MAC-Adressen in den Einstellungen<br />
der virtuellen Netzwerkkarten.<br />
Hier müssen Sie für die Livemigration,<br />
beim Betrieb von Hyper-V im Cluster und<br />
vor allem bei der Aktivierung des Betriebssystems<br />
auf jeden Fall Einstellungen<br />
vornehmen, da Sie ansonsten ständig die<br />
Server neu aktivieren müssen. Außerdem<br />
spielen diese Einstellungen in NLB-Clustern<br />
mit Exchange Server 2010 und auch<br />
für Sharepoint Server 2010 eine wichtige<br />
Rolle, da die Kommunikation auch hier<br />
von MAC-Adressen abhängt.<br />
Verschieben Sie einen virtuellen Server<br />
mit aktivierten dynamischen MAC-<br />
Adressen im Cluster auf einen anderen<br />
Host, ändert sich dessen MAC-Adresse<br />
beim nächsten Start. Im MSDN-Beitrag<br />
auf der Seite [1] finden Sie dazu umfangreiche<br />
Informationen. Jeder Hyper-<br />
V-Host verfügt über einen eigenen Pool<br />
dynamischer MAC-Adressen. Welche<br />
Adressen der Pool umfasst, sehen Sie im<br />
Hyper-V-Manager über den Manager für<br />
virtuelle Netzwerke im Bereich »MAC‐Adressbereich«<br />
(Abbildung 4). Wenn sich<br />
die MAC-Adresse eines virtuellen Servers<br />
ändert, kann es sein, dass Sie das Betriebssystem<br />
neu aktivieren müssen oder<br />
ein virtueller NLB-Cluster nicht mehr<br />
funktioniert. Microsoft beschreibt diesen<br />
Fehler auf der Webseite [2] genauer. Aus<br />
diesem Grund ist es sehr empfehlenswert,<br />
die statische Zuordnung von MAC-Adressen<br />
für virtuelle Server zu aktivieren.<br />
Sie finden diese Einstellung im Bereich<br />
»Netzwerkkarte« der einzelnen virtuellen<br />
Server im Hyper-V-Manager.<br />
In diesen Einstellungen können Sie auch<br />
das Spoofing für Netzwerkkarten steuern.<br />
Hyper-V kann genau unterscheiden,<br />
welche Netzwerkdaten zu den einzelnen<br />
Servern gesendet werden sollen und verwendet<br />
dazu die MAC-Adresse des virtuellen<br />
Servers. Das heißt, virtuelle Server<br />
empfangen nur die Daten, die für ihre<br />
MAC-Adresse gedacht sind.<br />
Netzwerke und<br />
Live-Migration<br />
Wer einen Hyper-V-Cluster betreibt, sollte<br />
auch dafür dedizierte Netzwerkverbindungen<br />
verwenden, vor allem bei der<br />
Live-Migration in Windows Server 2008<br />
R2. Bei der Live-Migration lassen sich<br />
virtuelle Computer von einem Host auf<br />
einen anderen übertragen, ohne dass<br />
Benutzer Daten verlieren oder von den<br />
Servern getrennt werden. Die Server sind<br />
während der Übertragung zwischen den<br />
Cluster-Knoten weiterhin aktiv.<br />
Der Start einer Livemigration kann entweder<br />
über die Clusterkonsole erfolgen, per<br />
Skript (auch Powershell) oder über den<br />
System Center Virtual Machine Manager<br />
(SCVMM) 2008 R2. Während des ganzen<br />
folgenden Ablaufs läuft die VM uneingeschränkt<br />
weiter, und Anwender können<br />
ungestört mit dem virtuellen Server arbeiten.<br />
Der Ablauf dabei ist Folgender:<br />
n Beim Start baut der Quellserver eine<br />
Verbindung zum Zielserver auf.<br />
n Anschließend überträgt der Quellserver<br />
die Konfiguration der virtuellen<br />
Maschine auf den Zielserver.<br />
n Der Zielserver erstellt auf Basis dieser<br />
leeren Konfiguration eine neue VM,<br />
die der zu verschiebenden VM entspricht.<br />
n Nun überträgt der Quellserver die einzelnen<br />
Seiten des Arbeitsspeichers zur<br />
Ziel-VM mit einer Standardgröße von<br />
etwa 4 KByte. Je schneller das Netzwerk,<br />
desto schneller wird der Inhalt<br />
des Arbeitsspeichers übertragen.<br />
n Als Nächstes übernimmt der Zielserver<br />
die virtuellen Festplatten des<br />
Quellservers für die zu übertragende<br />
virtuelle Maschine.<br />
n Anschließend setzt der Zielserver die<br />
virtuelle Maschine online.<br />
n Zum Schluss wird der virtuelle Hyper-<br />
V-Switch informiert, dass Netzwerkverkehr<br />
jetzt zur MAC-Adresse des<br />
Zielservers gesendet werden soll.<br />
Damit die Übertragung funktioniert,<br />
müssen die Hostsysteme in einem gemeinsamen<br />
Cluster zusammengeschaltet<br />
sein. Die Leistung der Netzwerkkarte<br />
spielt dabei ebenfalls eine große Rolle.<br />
Aus diesem Grund sind dedizierte Karten<br />
hier besonders wichtig. Die Übertragung<br />
ohne Cluster oder zwischen verschiedenen<br />
Clustern funktioniert nicht. Die<br />
VHD-Dateien müssen außerdem auf dem<br />
gleichen gemeinsamen Datenträger (CSV)<br />
liegen. Mit Hyper-V 3.0 in Windows 8<br />
Server führt Microsoft Hyper-V-Replica<br />
ein. Bei dieser Funktion können Hyper-<br />
V-Hosts virtuelle Server asynchron replizieren,<br />
ohne in einem Cluster laufen zu<br />
müssen. Auch hier sollten Sie dedizierte<br />
Netzwerkkarten verwenden.<br />
Der große Unterschied zur Schnellmigration<br />
in Hyper-V 1.0 (Windows<br />
Server 2008) besteht darin, dass die<br />
Maschinen während der Übertragung<br />
durch Livemigration aktiv bleiben und<br />
auch der Arbeitsspeicherinhalt zwischen<br />
den Servern übertragen wird. Bei der<br />
Schnellmigration deaktiviert Hyper-V die<br />
Maschinen erst. Windows Server 2008<br />
R2 beherrscht neben der Livemigration<br />
auch weiterhin die Schnellmigration. Basis<br />
der Technik ist ein Cluster mit Windows<br />
Server 2008 R2. Daher können Sie<br />
entweder die Enterprise-Edition und die<br />
Datacenter-Edition von Windows Server<br />
2008 R2 verwenden oder den kostenlosen<br />
Microsoft Hyper-V-Server 2008 R2.<br />
Ein Cluster mit Windows Server 2008<br />
R2 lässt sich so konfigurieren, dass die<br />
Cluster-Knoten den Netzwerkverkehr<br />
zwischen den Knoten und zu den gemeinsamen<br />
Datenträgern priorisieren.<br />
Für einen schnellen Überblick, welche<br />
Netzwerkeinstellungen der Cluster zur<br />
Kommunikation mit dem Cluster Shared<br />
Volume (CSV) nutzt, starten Sie eine<br />
Powershell-Sitzung auf dem Server und<br />
30 Ausgabe 06-2011 Admin www.admin-magazin.de
Hyper-V<br />
Netzwerk<br />
Abbildung 5: Konfigurieren der VLAN-Anbindung.<br />
rufen das Cmdlet »Get‐ClusterNetwork«<br />
auf. Allerdings funktioniert das Cmdlet<br />
erst dann, wenn Sie die Befehle zur Clusterverwaltung<br />
mit dem Befehl »Add‐Module<br />
FailoverClusters« in die Powershell<br />
integrieren. Sie sehen auch in der Verwaltungskonsole<br />
des Clusters, welche Netzwerke<br />
vorhanden sind und vom Server<br />
genutzt werden können.<br />
Hyper-V Network<br />
Command Line<br />
Mit dem kostenlosen Tool NVSPBIND [3]<br />
können Administratoren, die Hyper-V auf<br />
einem Core-Server betreiben, die einzelnen<br />
Bindungen für Netzwerkprotokolle<br />
auf den Netzwerkkarten der Hyper-V-Server<br />
verwalten. Das Tool stammt von den<br />
Hyper-V-Entwicklern und funktioniert<br />
auf Core-Servern und für Hyper-V-Server<br />
2008 sowie Hyper-V Server 2008 R2. Mit<br />
NVSPSCRUB [4] können Sie alle Hyper-<br />
V-Netzwerke und Verbindungen löschen.<br />
Vor allem beim Betrieb von Hyper-V auf<br />
Core-Servern ist das Tool hilfreich, wenn<br />
der Hyper-V-Manager nicht zur Verfügung<br />
steht. Folgende Optionen stehen für<br />
»nvspscrub« zur Verfügung:<br />
n /? zeigt die Hilfe an.<br />
n /v löscht deaktivierte virtuelle Netzwerke.<br />
n /p löscht Einstellungen der virtuellen<br />
Netzwerke.<br />
n /n löscht ein spezielles Netzwerk.<br />
Virtuelle LANs (VLAN)<br />
und Hyper-V<br />
Hyper-V im Windows Server 2008 R2<br />
unterstützt auch die Verwendung von<br />
VLANs. Bei solchen Netzwerken lassen<br />
sich Datenströme voneinander trennen,<br />
um die Sicherheit und die Leistung zu<br />
erhöhen. Die Technik muss aber direkt<br />
im Netzwerk integriert sein. Switches<br />
und Netzwerkkarten müssen zudem die<br />
Funktion unterstützen. Dadurch lässt<br />
sich zum Beispiel der Netzwerkverkehr<br />
für die Verwaltung des Servers vom Netz-<br />
werkverkehr der virtuellen Server trennen.<br />
Damit die Anbindung funktioniert,<br />
müssen Sie in den physischen Netzwerkkarten<br />
der Hyper-V-Hosts in den erweiterten<br />
Einstellungen der Netzwerkkarte<br />
festlegen, zu welcher VLAN-ID die Karte<br />
gehören soll.<br />
Anschließend starten Sie im Hyper-V-<br />
Manager den Manager für virtuelle Netzwerke<br />
und wählen die Netzwerkverbindung<br />
aus, die Sie an das VLAN anbinden<br />
wollen. Auch hier geben Sie die entsprechende<br />
VLAN-ID vor (Abbildung 5).<br />
Dazu müssen Sie aber zunächst die Option<br />
»Identifizierung virtueller LANs«<br />
für das Verwaltungsbetriebssystem aktivieren.<br />
Nachdem Sie die ID angegeben<br />
haben, fließt der Datenverkehr von dieser<br />
Verbindung über die entsprechende<br />
ID. Auch interne Netzwerke in Hyper-V<br />
unterstützen die VLAN-Konfiguration.<br />
Zusätzlich lassen sich auch virtuelle<br />
Server an VLANs binden. Dazu müssen<br />
Sie in den Einstellungen der virtuellen<br />
Server über die Eigenschaften der virtuellen<br />
Netzwerkkarten<br />
ebenfalls die VLAN-ID<br />
angeben.<br />
Wollen Sie, dass ein<br />
virtueller Server mit<br />
mehreren VLANs kommunizieren<br />
kann, fügen<br />
Sie dem Server einfach<br />
mehrere virtuelle<br />
Netzwerkkarten hinzu<br />
und konfigurieren das<br />
entsprechende VLAN.<br />
Durch diese durchgehende<br />
Unterstützung<br />
von VLANs können<br />
Sie bei entsprechend<br />
kompatiblen Switches<br />
zum Beispiel Testumgebungen<br />
aufbauen<br />
oder Hyper-V-Hosts<br />
logisch voneinander<br />
trennen, auch wenn<br />
diese im selben Netzwerk<br />
konfiguriert sind.<br />
(ofr/cth)<br />
n<br />
Infos<br />
[1] Hyper-V and Dynamic<br />
MAC Address <br />
Regeneration: <br />
[http://blogs.msdn.<br />
com/b/virtual_pc_guy/archive/2010/05/14/hyper‐v‐and‐dynamic‐mac‐address‐regeneration.aspx]<br />
[2] Windows Server 2008 Hyper-V virtual<br />
machines generate a Stop error when NLB<br />
is configured or when the NLB cluster does<br />
not converge as expected: <br />
[http://support.microsoft.com/kb/953828/<br />
en‐us]<br />
[3] NVSPBIND: <br />
[http://blogs.technet.com/b/virtualization/<br />
archive/2010/01/26/hyper_2d00_v‐network<br />
‐command‐line‐tool‐nvspbind‐now‐availabl<br />
e‐externally.aspx]<br />
[4] NVSPSCRUB: <br />
[http://code.msdn.microsoft.com/<br />
nvspscrub]<br />
Der Autor<br />
Thomas Joos ist freiberuflicher IT-Consultant<br />
und seit über 20 Jahren in der IT tätig. Neben<br />
seinen Projekten schreibt er praxisnahe Fachbücher<br />
und Fachartikel rund um Windows und<br />
andere Microsoft-Themen. Online trifft man ihn<br />
unter [http://thomasjoos.spaces.live.com].<br />
CouchDB<br />
Das Praxisbuch<br />
304 S., 2011, 34,90 €<br />
» www.GalileoComputing.de/2462<br />
Admin-Know-how<br />
Linux Hochverfügbarkeit<br />
454 S., 2011, 49,90 €<br />
» www.GalileoComputing.de/1999<br />
MySQL<br />
aktuell zur Version 5.5 und 5.6<br />
750 S., 2011, mit DVD, 49,90 €<br />
» www.GalileoComputing.de/2533<br />
www.GalileoComputing.de<br />
Linux-Server<br />
Bestseller!<br />
815 S., 2011, 49,90 €<br />
» www.GalileoComputing.de/2205<br />
www.admin-magazin.de<br />
Wissen, wie’s geht.
Netzwerk<br />
LDAP und AD<br />
© Paul Cowan, 123RF<br />
Ein virtuelles Directory mit dem Fedora 389 Directory Server aufsetzen<br />
Auf der Liste<br />
Wie man Linux mithilfe des Fedora 389 Servers in mehrere Active-Directory-Domänen integriert und dabei<br />
Chaining und Pass-Through-Authentication nutzt. Alex Davies, Alessandro Orsaria<br />
Geht es nur um eine einfache Betriebssystemumgebung,<br />
ist es relativ leicht,<br />
ein Identity-Management-System aufzusetzen.<br />
Kommen aber mehrere Betriebssysteme<br />
ins Spiel, werden die Dinge sehr<br />
schnell komplizierter. Dieser Artikel zeigt,<br />
wie man Linux-Clients in eine Umgebung<br />
mit mehreren Domänen des Active Directory<br />
(AD) integriert.<br />
Das Problem kennt verschiedene Lösungen<br />
(siehe dazu den Kasten „Identity-<br />
Management-Lösungen“), von denen<br />
sich der vorliegende Beitrag auf den Fedora<br />
389 Directory Server (389 DS) konzentriert.<br />
Das ist ein hoch skalierbarer<br />
LDAP-Server mit vielen fortgeschrittenen<br />
Features einschließlich Multi-Master-<br />
Replikation, Synchronisierung von Usern<br />
und Gruppen mit dem Active Directory<br />
und der Fähigkeit, andere LDAP-Verzeichnisse<br />
zu virtualisieren.<br />
mit den voneinander verschiedenen Namens-Kontexten<br />
»dc=foo, dc=example,<br />
dc=local« beziehungsweise »dc=bar,<br />
dc=example, dc=local«. Das Ziel ist,<br />
SSH-User zu authentifizieren, deren Benutzername<br />
und Passwort in den Active<br />
Directory-Servern gespeichert sind.<br />
Um die User-Einträge der beiden AD-Server<br />
in einem einzigen Repository zusammenzuführen<br />
(was für die meisten Linux-<br />
Clients Voraussetzung einer erfolgreichen<br />
Suche ist), benutzen wir den Fedora 389<br />
Directory Server. Obwohl es für den 389<br />
DS ein Plugin zum Synchronisieren von<br />
Usern aus einem AD gibt, wollen wir<br />
hier einen anderen Weg verfolgen und<br />
die Chaining sowie die Pass-Through-<br />
Authentication nutzen. Das eröffnet uns<br />
C<br />
M<br />
Y<br />
CM<br />
MY<br />
CY<br />
CMY<br />
K<br />
Architektur<br />
Abbildung 1 gibt einen Überblick über<br />
die Architektur, um die es in diesem<br />
Beitrag geht. Wie man sieht, sind zwei<br />
Windows-Domänen-Controller im Spiel<br />
Abbildung 1: Das hier behandelte Setup besteht aus einem Linux-Client, dem 389 Directory Server und zwei<br />
Active-Directory-Instanzen.<br />
34 Ausgabe 06-2011 Admin www.admin-magazin.de
LDAP und AD<br />
Netzwerk<br />
die Möglichkeit, ein virtuelles Directory<br />
zu erzeugen, das als Proxy zwischen<br />
LDAP-Clients und mehreren LDAP-Servern<br />
agiert. Der Proxy zeigt damit eine<br />
vereinheitlichte Ansicht aller Einträge, so<br />
als würden sie aus einem einzigen LDAP-<br />
Server stammen. Der Directory Server<br />
leitet an ihn gerichtete Anfragen an den<br />
richtigen LDAP/AD-Server weiter, ohne<br />
dass etwas zu synchronisieren wäre.<br />
Diese Herangehensweise hat einige Vorteile<br />
verglichen mit Windows Sync, beispielsweise<br />
eine geringere Komplexität.<br />
Im Interesse einer größtmöglichen Flexibilität<br />
speichert das hier besprochene<br />
Setup alle User-Einträge (Name, UID,<br />
Shell und so weiter) im Active Directory<br />
und bildet Autorisierungsgruppen im 389<br />
DS. Die Konfiguration wurde mit RHEL 5<br />
und Windows Server 2003 R2 getestet,<br />
sollte prinzipiell aber auch mit anderen<br />
aktuellen Linuxdistributionen funktionieren.<br />
Wem Begriffe wie Suffix, Distinguished<br />
Name oder Attribute wenig sagen,<br />
Abbildung 2: Das Identity-Management für Unix<br />
installieren.<br />
der sollte sich zunächst etwas mit der<br />
Funktionsweise von LDAP beschäftigen.<br />
Der Kasten „LDAP-Primer“ ist vielleicht<br />
ein Ausgangspunkt, für tiefer gehende<br />
Erklärungen empfiehlt sich etwa [1].<br />
AD und Unix-Attribute<br />
Der erste Schritt besteht darin, Microsofts<br />
Active Directory Server zu ertüchtigen,<br />
UNIX UIDs und GIDs, Home Directories<br />
Abbildung 3: Unix-Attribute für einen Benutzer im<br />
Active Directory konfigurieren.<br />
und so weiter zu speichern. Auf einem<br />
Active Directory Server unter Windows<br />
2003 R2 kann man dafür die Identity<br />
Management Unit für Unix installieren,<br />
die es auch für Windows 2008 gibt. Die<br />
Installation des Pakets ist einfach: In der<br />
SCHEDULE OUT NOW!<br />
This years conference topics:<br />
- Mobile computing and communications<br />
- IPv6 (yes, again!)<br />
- Security management and IT governance<br />
- Cloud computing and virtualisation<br />
- Security intelligence<br />
- Topics that have a high impact on IT security<br />
- Design flaws ("defective by design")<br />
WORKSHOPS<br />
CONFERENCE<br />
TH<br />
TH<br />
NOV 15 -16<br />
TH<br />
TH<br />
NOV 17 -18<br />
IN-DEPTH SECURITY
Netzwerk<br />
LDAP und AD<br />
Abbildung 4: Einloggen beim 389 Directory Server<br />
als Directory Manager.<br />
Systemsteuerung klickt man auf »Programme«<br />
»Programme und Funktionen«<br />
»Windows‐Funktionen aktivieren« und<br />
selektiert dort »Identity Management for<br />
Unix« (Abbildung 2). Um das Erzeugen<br />
einer NIS-Domäne braucht sich der Admin<br />
dabei glücklicherweise keine Gedanken<br />
machen.<br />
Nach der Installation ist das LDAP-<br />
Schema, das die AD-Struktur abbildet,<br />
erweitert. Um die Auswirkungen dieses<br />
Schritts zu sehen, editiert man einen<br />
Benutzer, den man auf einer Linux-<br />
Maschine authentifizieren will. Der Dialog<br />
sollte nun einen neuen Tab »Unix‐Attribute«<br />
haben (Abbildung 3).<br />
Den 389 DS installieren<br />
Im Web zirkulieren einige sehr gute Artikel<br />
über die Konfiguration des 389 Directory<br />
Server, aber der beste Startpunkt ist<br />
die Dokumentation des Red Hat Director<br />
Servers [2]. Tatsächlich ist nämlich der<br />
389 DS die Code-Basis für dieses Produkt.<br />
Wer keine Zeit hat, sich durch den umfangreichen<br />
Admin-Guide zu graben, der<br />
ungefähr den Umfang des Telefonbuchs<br />
von Manhatten hat, der findet einige<br />
nützliche How-tos in der Fedora-Dokumentation<br />
[3].<br />
Als Voraussetzung für die Installation muss<br />
entweder das Open JDK 1.6.0 oder Sun<br />
JDK 1.6.0 aufgespielt sein. An das Open<br />
JDK gelangt man einfach via »yum install<br />
Listing 1: »pta.ldif«<br />
01 dn: cn=Pass Through Authentication,cn=plugins,cn=co<br />
jsvs‐2.6.0‐openjdk«.<br />
Benutzt man<br />
mehr als eine<br />
JDK-Version, muss<br />
man zuvor via »alternatives<br />
‐‐config<br />
java« eine passende<br />
einstellen.<br />
Danach installiert<br />
man ebenfalls mit<br />
»yum« das Paket<br />
»389‐ds« nebst allen<br />
Paketen, von<br />
denen es abhängt.<br />
Wenn dieses Paket<br />
kein Bestandteil Directory Manager.<br />
der gerade verwendeten<br />
Linux-Distribution sein sollte,<br />
dasnn hilft zuverlässig das Yum-Repositiory<br />
EPEL weiter (Extra Packages for<br />
Enterprise Linux). Wer das benötigt, installiert<br />
zunächst »epel‐release‐5.3.noarch.<br />
rpm«.<br />
Ist der Directory-Server installiert,<br />
lässt man abschließend das Skript<br />
»setup‐ds‐admin.pl« laufen, das ihn<br />
konfiguriert. Dabei kann eine Warnmeldung<br />
wegen der Anzahl verfügbarer<br />
Filedeskriptoren auftauchen oder eine<br />
Empfehlung, die TCP-Keepalive-Zeit zu<br />
verringern. Diese Warnungen kann man<br />
aber zumindest in einer Testumgebung<br />
ignorieren, ohne dass das irgendwelche<br />
Folgen hätte. Muss man diese Parameter<br />
aber doch anpassen, findet man Näheres<br />
dazu in [5].<br />
Das Skript »setup‐ds‐admin.pl« stellt einige<br />
Fragen, aber in den meisten Fällen<br />
kann man die Default-Antwort bestätigen.<br />
Als Minimum sollte man den<br />
Root-Suffix einstellen, im Beispiel ist es<br />
»dc=example, dc=local«.<br />
Nach der Konfiguration laufen zwei Services:<br />
ein Directory Server (der LDAP-Server)<br />
und ein Administrationsserver, der<br />
sich der Systemeinstellungen annimmt<br />
und eine Reihe Web-Applikationen bereitstellt,<br />
darunter ein Organigramm und<br />
ein Telefonbuch. An diesem Punkt sollte<br />
dafür gesorgt werden, dass diese administrativen<br />
Dienste beim Booten starten:<br />
Abbildung 5: So verbindet man sich mit dem aktuellen Verzeichnis als Benutzer<br />
lässt. Dieser Client ist auch unter Windows<br />
installierbar.<br />
Chaining konfigurieren<br />
Nachdem nun der Directory Server läuft,<br />
muss er dafür konfiguriert werden, LDAP-<br />
Anfragen für »dc=foo, dc=example,<br />
dc=local« beziehungsweise »dc=bar,<br />
dc=example, dc=local« an den jeweils<br />
richtigen AD-Domänen-Controller weiterzuleiten<br />
(Chaining). Dazu öffnet man<br />
einen der frisch installierten 389-Clients<br />
(der auf dem LDAP-Server aber auch auf<br />
einer anderen Maschine laufen kann)<br />
und verbindet sich mit dem Benutzernamen<br />
»cn = Directory Manager« auf Port<br />
9830 wie in Abbildung 4. Danach sollte<br />
sich die Management Konsole öffnen.<br />
Dann selektiert man den Directory Server<br />
im linken Panel wie in Abbildung 5<br />
zu sehen und klickt auf »Open«. Nach<br />
einem Rechtsklick auf den Root-Suffix<br />
»dc=example, dc=local« wählt man<br />
unterhalb des Tab »Configuration« anschließend<br />
»New Root Sub‐Suffix« aus.<br />
In dem Dialog der daraufhin erscheint,<br />
deselektiert man die Checkbox und erzeugt<br />
einen Suffix mit demselben Distinguished<br />
Name wie die AD-Domäne<br />
(Abbildung 6).<br />
nfig<br />
02 nsslapd‐pluginEnabled: on<br />
03 nsslapd‐pluginarg0: ldap://10.1.1.10/<br />
dc=foo,dc=example,dc=local<br />
04 nsslapd‐pluginarg1: ldap://10.2.1.10/<br />
dc=bar,dc=example,dc=local<br />
chkconfig dirsrv on<br />
chkconfig dirsrv‐admin on<br />
Für die Verwaltung des neuen LDAP-Servers<br />
gibt es eine Java-GUI, die sich mit<br />
dem Kommando »389‐console« starten<br />
Abbildung 6: Einen neuen Root-Sub-Suffix erzeugen.<br />
36 Ausgabe 06-2011 Admin www.admin-magazin.de
LDAP und AD<br />
Netzwerk<br />
Abbildung 7: Einen Datenbank-Link ins Active Directory anlegen.<br />
Danach klappt man den neuen Suffix<br />
durch einen weiteren Rechtsklick auf und<br />
wählt »New Database Link«. Der Datenbank-Link<br />
braucht einen Namen und<br />
die IP-Adresse des entfernten Windows-<br />
Controllers. Das Active Directory erlaubt<br />
anonymen Benutzern normalerweise<br />
keinen Lesezugriff, weswegen für jeden<br />
Benutzer, der das Recht zum Suchen haben<br />
soll, Benutzername und Passwort<br />
einzugeben sind. In einer Produktivumgebung<br />
sollte man unbedingt TLS verwenden,<br />
um diese Eingaben zu schützen.<br />
Aus Umfangsgründen verzichten wir auf<br />
eine Darstellung der TLS-Option, sodass<br />
Abbildung 7 die Simple-Bind-Option in<br />
einer Testumgebung zeigt.<br />
Im nächsten Schritt müssen ein paar<br />
Konfigurationsparameter angepasst werden,<br />
damit das Chaining funktioniert.<br />
Dazu öffnet man das Directory-Tab,<br />
klappt die Items »config«, »plugins« und<br />
»chaining‐database« auf und doppelklickt<br />
dann auf den Namen der mit dem AD<br />
verbundenen Datenbank.<br />
Darauf kann man die Option<br />
»nsProxiedAuthorization« in »off«<br />
ändern. Damit weiß der 389 DS, dass er<br />
die Autorisierung via Proxy abschalten<br />
soll und alle Binds für die Verkettung so<br />
ausführen soll, wie auf den vorangegangenen<br />
Screens konfiguriert.<br />
Nun stoppt man den 389 DS mit »service<br />
dirsrv stop«. Jetzt lässt sich die Datei<br />
»/etc/dirsrv/slapd‐*dse.ldif« editieren. In<br />
ihr sucht man nach einer Sektion, die mit<br />
der folgenden Zeile<br />
beginnt:<br />
dn: cn=chaining<br />
database, cn=plugins,U<br />
cn=config<br />
In dieser Sektion<br />
löscht man alle Zeilen,<br />
die »nstransmittedcontrols«<br />
enthalten.<br />
Das schaltet ein<br />
paar potenziell problematische<br />
Controls<br />
ab. Danach sichert<br />
man das File und<br />
startet den Directory<br />
Server neu: »service<br />
dirsrv start«. An diesem<br />
Punkt sollte man<br />
den lokalen 389 DS<br />
nach Usern im AD<br />
fragen können, beispielsweise so:<br />
ldapsearch ‐x ‐b U<br />
dc=example,dc=local U<br />
"(uid=alexd)"<br />
Damit auch die Benutzer in das Resultat<br />
der Anfrage eingeschlossen werden, die<br />
im zweiten Domain Controller gespeichert<br />
sind, wiederholt man einfach den<br />
Prozess und kreiert einen weiteren Sub-<br />
Suffix und einen neuen Datenbank-Link.<br />
Dabei muss man daran denken, dass<br />
auch der zweite Domain Controller über<br />
einen Account verfügen muss, zu dem<br />
Listing 2: »/etc/ldap.conf«<br />
01 scope sub<br />
02 ldap_version 3<br />
03<br />
04 # Do not follow referrals.<br />
05 # Following referrals will send you to all<br />
domains in a AD<br />
06 # forest, which will often take a very long<br />
time for no benefit<br />
07 referrals no<br />
08<br />
09 # Filter for only users/groups with Unix<br />
attributes<br />
10 # (this makes a huge performance difference)<br />
11 nss_base_passwd dc=example,dc=local?sub?&(uidN<br />
umber=*)<br />
12 nss_base_group dc=example,dc=local?sub?&(gidNu<br />
mber=*)<br />
13 nss_initgroups_ignoreusers root,ldap,dbus,xfs,h<br />
aldaemon,nscd,nocpulse<br />
14<br />
15 # If not soft, the machine may hang on boot and<br />
all sorts<br />
man sich verbinden kann, und dass auch<br />
dort das Management für Unix installiert<br />
sein muss.<br />
Ein Problem kann beim Zusammenfügen<br />
der beiden AD-Domänen in ein virtuelles<br />
Directory auftauchen: Unix-Attribute wie<br />
etwa UIDs können in Konflikt geraten.<br />
Das kann man verhindern, indem man<br />
verschiedenen AD-Domänen verschiedene<br />
Bereiche von UIDs zuweist, was<br />
sich erzwingen lässt.<br />
Ein anderes mögliches Problem ist, dass<br />
das Active Directory Resultate in Form<br />
von Seiten zu je 1000 Objekten zurückgibt,<br />
wogegen das Chaining-Plugin des<br />
389 DS das Seitenkonzept nicht kennt.<br />
Das heißt: Sobald es mehr als 1000 User<br />
mit Unix-Attributen im Active Directory<br />
gibt, erhält man auf Suchanfragen nur<br />
noch Teilergebnisse zurück. Dieses Problem<br />
lässt sich beheben, indem man die<br />
»MaxPageSize« im Active Directory heraufsetzt,<br />
wie das in der Microsoft Knowledge<br />
Base beschrieben ist [7].<br />
Konfigurieren der Pass-<br />
Through-Authentifizierung<br />
Bis hierhin wurde erläutert, wie man<br />
User und Gruppen aus mehreren Active<br />
Directory Servern unter Verwendung<br />
Listing 3: »/etc/nsswitch.conf«<br />
01 passwd: files ldap<br />
02 group: files ldap<br />
16 # of other horrid things if it cant talk to a<br />
LDAP server<br />
17 bind_policy soft<br />
18<br />
19 uri ldap://10.0.1.10:389/<br />
20<br />
21 # Base DN to start search<br />
22 base dc=example,dc=local<br />
23<br />
24 # Active Directory mappings<br />
25 nss_schema rfc2307bis<br />
26 nss_map_objectclass posixAccount<br />
organizationalPerson<br />
27 nss_map_attribute homeDirectory<br />
unixHomeDirectory<br />
28 nss_initgroups backlink<br />
29<br />
30 # At the cost of excessive repetition, use<br />
StartTLS or LDAP<br />
31 # over SSL in a production environment<br />
32 ssl no<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
37
Netzwerk<br />
LDAP und AD<br />
des 389 DS abfragt. Der nächste Schritt<br />
besteht darin, den 389 DS so zu konfigurieren,<br />
dass er Anfragen nach Entries,<br />
die sich nicht in seiner lokalen Datenbank<br />
finden, an den passenden Windows-<br />
Domänen-Controller weiterleitet. Für<br />
diesen Zweck kann das Pass-Through-<br />
Authentication-Plugin (PTA) verwendet<br />
werden, das sehr leicht zu konfigurieren<br />
ist.<br />
Zuerst erzeugt man LDIF-File mit demselben<br />
Inhalt wie »pta.ldif«, so wie es<br />
Listing 1 zeigt (LDIF ist ein Standardformat<br />
für Verzeichniseinträge). Dann führt<br />
man das folgende Kommando aus, um<br />
die Konfigurationsänderungen auf den<br />
389 DS anzuwenden:<br />
LDAP-Primer<br />
Das Lightweight Directory Access Protocol<br />
(LDAP) ist ein offenes Protokoll für die Speicherung,<br />
den Zugriff und die Aktualisierung von<br />
Verzeichnisinformationen. Ein Verzeichnis ist<br />
dabei eine spezielle Art von Datenbank. die für<br />
Leseoperationen optimiert ist. LDAP definiert<br />
das Format der Messages, die Client und Server<br />
austauschen (search, modify, delete, und so<br />
weiter)<br />
Verzeichnisse (Directories) enthalten Einträge<br />
(Entries), die ihrerseits ein oder mehrere<br />
Attribute haben. Abhängig von der Objektklasse<br />
können die Attribute zwingend nötig oder<br />
optional sein. Jedes Attribut hat einen Typ, der<br />
bestimmt, welche Werte das Attribut annehmen<br />
kann. Verzeichnisse sind in einer baumartigen<br />
Struktur organisiert. Die Basis bildet ihr Distinguished<br />
Name (DN), der sich aus relativen DNs<br />
(RDNs) zusammensetzt.<br />
Listing 4: »/etc/pam.d/system‐auth‐ac«<br />
01 # This file is auto‐generated.<br />
02 # But modified by Alex<br />
03 # User changes will be destroyed the next time<br />
authconfig is run.<br />
04 # So please dont :p<br />
05 auth required pam_env.so<br />
06 auth sufficient pam_unix.so nullok<br />
try_first_pass<br />
07 auth requisite pam_succeed_if.so uid<br />
>= 500 quiet<br />
08 auth sufficient pam_ldap.so use_<br />
first_pass<br />
09 auth required pam_deny.so<br />
10<br />
11 account required pam_unix.so broken_<br />
shadow<br />
12 account sufficient pam_succeed_if.so uid<br />
< 500 quiet<br />
13 account [default=bad success=ok user_<br />
ldapmodify ‐x ‐D "cn=Directory Manager" U<br />
‐W ‐f pta.ldif<br />
Danach startet man den Directory Server<br />
neu; »service dirsrv restart«. Damit kann<br />
der 389 DS Anfragen nach den »foo«- und<br />
»bar«-Suffixen an den richtigen Windows<br />
Active Directory Server weiterleiten,<br />
so wie es in der »pta.ldif« definiert ist.<br />
Auch hier lassen wir der Kürze wegen<br />
die TLS-Verschlüsselung weg, legen sie<br />
aber jedem für Produktivumgebungen<br />
ans Herz.<br />
Alles zusammenfügen<br />
Ein Beispiel: »cn=Alex, ou=IT, dc=example,<br />
dc=com« ist der DN eines Eintrags, der einen<br />
Benutzer namens Alex repräsentiert, der zu einer<br />
Organisationseinheit IT gehört und in einem<br />
Directory mit dem Root-Suffix »dc=example,<br />
dc=com« gespeichert ist. Dieser Eintrag könnte<br />
vom Typ Person sein, der noch andere optionale<br />
oder verbindliche Felder enthält wie den Familiennamen<br />
oder auch die Telefonnummer. Er<br />
könnte außerdem zu einer bestimmten Klasse<br />
von Objekten gehören, zum Beispiel der Klasse<br />
»posixAccount«, die ihrerseits noch andere<br />
Attribute definiert, etwa UID und GID oder<br />
»loginShell«.<br />
LDAP-Verzeichnisse lassen sich für die Verwaltung<br />
von Benutzeraccounts in einem zentralen<br />
Repository nutzen und haben in dieser Funktion<br />
andere zentralisierte Repositories wie zum Beispiel<br />
NIS verdrängt.<br />
unknown=ignore] pam_ldap.so<br />
14 account required pam_permit.so<br />
15<br />
16 password requisite pam_cracklib.so try_<br />
first_pass retry=3<br />
17 password sufficient pam_unix.so md5<br />
shadow nullok try_first_pass use_authtok<br />
18 password required pam_deny.so<br />
19<br />
20 # Create home directory<br />
21 session optional pam_mkhomedir.so<br />
skel=/etc/skel/ umask=0077<br />
22 session optional pam_keyinit.so revoke<br />
23 session required pam_limits.so<br />
24 session [success=1 default=ignore] pam_<br />
succeed_if.so service in crond quiet use_uid<br />
25 session required pam_unix.so<br />
26 session optional pam_ldap.so<br />
Ist soweit alles am Platz, kann man die<br />
Linux-Clients konfigurieren. Zuerst vergewissert<br />
man sich, dass die Packages<br />
»nss_ldap« und »pam_ldap« installiert<br />
sind. Danach ändert man die Datei<br />
»/etc/ldap.conf« so wie in Listing 2 gezeigt.<br />
Dieses File enthält die URI des 389<br />
DS, mit der sich der Client verbindet,<br />
den Base Distinguished Name und einige<br />
andere Parameter,<br />
Um den Linux-Clients beizubringen, dass<br />
sie den 389 DS für die Abfrage von Benutzer-<br />
und Gruppeninformationen nutzen,<br />
ändert man »/etc/nsswitch.conf« so wie<br />
in Listing 3. Wenn alles geklappt hat<br />
sollte das Kommando »getent passwd«<br />
eine vollständige Liste der lokalen und<br />
AD-User liefern.<br />
Im folgenden Schritt kann man die Linux<br />
Clients so einstellen, dass sie den 389 DS<br />
außerdem für die Authentifizierung benutzen.<br />
Dafür ist das PAM-LDAP- Modul<br />
zuständig, das auf den meisten von Red<br />
Hat abstammenden Distributionen die<br />
Datei »system‐auth‐ac« als Konfigurationsinterface<br />
zu den Service-Daemons<br />
nutzt. Listing 4 zeigt ein Beispiel dieser<br />
Datei, die außerdem das Modul »pam_<br />
mkhomedir« nutzt, das bei einem Login<br />
automatisch ein Homedirectory erzeugt,<br />
sollte es fehlen. Jetzt sollte ein Login<br />
mit dem Linux-Client möglich sein, wenn<br />
man dafür einen Account verwendet, der<br />
in einem der beiden Active Directories<br />
gespeichert ist.<br />
Als optionalen Schritt könnte man jetzt<br />
noch den NSCD-Daemon konfigurieren,<br />
der die Performance verbessert, indem<br />
er User und Gruppen cachet. NSCD lässt<br />
sich wie folgt einschalten und starten:<br />
chkconfig nscd on<br />
service nscd start<br />
Von Authentifizierung zu<br />
Autorisierung<br />
Bis hierhin haben wir beschrieben, wie<br />
sich der 389 DS nutzen lässt, um Benutzerinformationen<br />
aus verschiedenen<br />
Active Directories zu extrahieren und Anfragen<br />
an den richtigen AD-Server weiterzuleiten.<br />
Diese Konfiguration ist nützlich,<br />
wenn sich alle User an allen Servern anmelden<br />
dürfen, aber das ist selten der<br />
Fall. Typischerweise dürfen sich einige<br />
Benutzer nur an bestimmten Maschinen<br />
einloggen und deshalb braucht es einen<br />
Mechanismus, um festzustellen, welche<br />
38 Ausgabe 06-2011 Admin www.admin-magazin.de
LDAP und AD<br />
Netzwerk<br />
Benutzer für welche Server autorisiert<br />
sind. Um das zu erreichen bietet »pam_<br />
access« einen einfachen Weg, um eine<br />
Zugriffssteuerung einzurichten. Für jeden<br />
Linux-Client gilt es festzulegen, welcher<br />
Benutzer auf ihn zugreifen darf. Im 389<br />
DS sind dann entsprechende Gruppen<br />
einzurichten, auf die das PAM-Modul<br />
zugreift. Sie lassen sich entweder über<br />
die grafische Oberfläche oder die Kommandozeile<br />
anlegen. Listing 5 zeigt das<br />
Beispiel eines LDIF-Files, das ein Gruppenobjekt<br />
beschreibt, dessen Mitglieder<br />
durch das Attribut »uniqueMember«<br />
identifiziert werden. Sobald das File »linuxadmin.ldif«<br />
existiert, erzeugt das folgende<br />
Kommando einen neuen Eintrag<br />
für ein Gruppenobjekt auf dem 389 DS:<br />
ldapmodify ‐x ‐D "cn=Directory Manager" U<br />
‐W ‐f linuxadmins.ldiff<br />
Nun kann man festlegen, welche Benutzer<br />
und Gruppen sich an welcher<br />
Maschine anmelden dürfen. Sie hinterlegt<br />
man dabei im File »/etc/security/<br />
access.conf« (Auszug in Listing 6). Die<br />
ersten beiden Zeilen erlauben es »root«<br />
und »joe«, sich vom lokalen System und<br />
überall her einzuloggen. Die dritte Zeile<br />
gestattet es der Gruppe »LinuxAdmins«<br />
auf den Server »server1.example.local«<br />
aus dem Netz 10.1.1.0/24 zuzugreifen.<br />
Die vierte Zeile verbietet alle anderen<br />
Zugriffe.<br />
Der letzte Schritt besteht darin, PAM so<br />
zu konfigurieren, dass es »access.conf«<br />
verwendet. Das geht einfach, indem<br />
man die folgende Zeile in »/etc/pam.d/<br />
systen‐auth‐ac« ergänzt:<br />
account required pam‐access.so<br />
Zugabe Failover<br />
Was aber, wenn einer der Windows-Domänen-Controller<br />
ausfällt? Glücklicherweise<br />
ist es sehr einfach, das System<br />
ausfallsicher zu machen. Dazu braucht<br />
es zuerst einen weiteren 389 Directory<br />
Server mit identischer Konfiguration. Auf<br />
ihm schaltet man die Replikation ein und<br />
synchronisiert so alle lokalen Objekte.<br />
Zusätzlich müssen die Chaining- und<br />
Pass-Through-Plugins so konfiguriert<br />
werden, dass sie mehrere AD-Server im<br />
Zuge eines Failovers unterstützen. Das<br />
geht wie Abbildung 7 zeigt, indem die<br />
IP-Adresse eines zweiten AD-Servers unter<br />
»Failover Servers« eingetragen wird.<br />
Auch das Pass-Through-Plugin unterstützt<br />
mehrere Authentication-Server als<br />
mit Leerzeichen separierte Liste.<br />
Schließlich lassen sich die Linux-Clients<br />
so konfigurieren, dass sie ihre Benutzer<br />
und Gruppen von einem anderen 389 DS<br />
empfangen, sollte der erste ausgefallen<br />
sein. Dazu spezifiziert man eine alternative<br />
URI in der »/etc/ldap.conf«.<br />
Fazit<br />
Die Integration einer Identity-Management-Lösung<br />
mit Linux- und Windowskomponenten<br />
ist ein einigermaßen störrisches<br />
Biest. Dieser Artikel stellte aber einen<br />
erfolgversprechenden Ansatz für ein<br />
solches Projekt vor. So hilft er hoffentlich,<br />
die Infrastruktur einer in ein Active Directory<br />
integrierten Linux-Authentifikation<br />
einfach zu halten. (jcb)<br />
n<br />
Infos<br />
[1] Gerald Carter: LDAP System Administration;<br />
O’Reilly, 2003<br />
[2] Red Hat Directory Server Documentation:<br />
[http:// www. redhat. com/ docs/ manuals/<br />
dir‐server]<br />
[3] Fedora 389 DS Documentation:<br />
[http:// directory. fedoraproject. org/ wiki/<br />
Documentation]<br />
[4] EPEL: [http:// download. fedora. redhat. com/<br />
pub/ epel/ 5]<br />
Identity-Management-Lösungen<br />
Typischerweise benutzen Linux-Clients das NSS-<br />
LDAP-Modul, um von LDAP-Servern Informationen<br />
über Benutzer und Gruppen abzufragen.<br />
Dieses Modul bietet allerdings keinerlei Möglichkeiten,<br />
um mehrere LDAP-Server zu kontaktieren<br />
und die zusammengefassten Ergebnisse<br />
zurück an den Client zu übermitteln. Für diese<br />
Aufgabe gibt es stattdessen drei erfolgversprechende<br />
Lösungsansätze: Replikation, virtuelle<br />
Directories und spezielle Clients.<br />
Viele Directory Server, darunter OpenLDAP, 389<br />
DS oder das Oracle Internet Directory haben eingebaute<br />
Features für eine Synchronisation von<br />
Einträgen aus einem Active Directory. Obwohl<br />
die Replikation von User- und Gruppenobjekten<br />
in der Regel gut funktioniert, hat sie doch einige<br />
Beschränkungen. So lässt sich nur eine<br />
kleine Untermenge der Attribute replizieren.<br />
Besonders die Synchronisation von Passwörtern<br />
aus dem AD kann mühsam sein, speziell in<br />
[5] Fedora 389 DS Performance Tuning:<br />
[http:// directory. fedoraproject. org/ wiki/<br />
Performance_Tuning]<br />
[6] Fedora 389 DS Download page:<br />
[http:// directory. fedoraproject. org/ wiki/<br />
Download]<br />
[7] How to view and set LDAP policy<br />
in Active Directory:<br />
[http:// support. microsoft. com/ kb/ 315071]<br />
[8] Likewise Open:<br />
[http:// www. likewiseopen. org]<br />
Die Autoren<br />
Alex Davies und Alessandro Orsaria arbeiten<br />
beide bei PartyGaming, einer großen Online-<br />
Spielefirma, als IT Infrastruktur-Architekt<br />
beziehungsweise ‐Manager in London und in<br />
Gibraltar.<br />
Listing 5: »linuxadmins.ldif«<br />
01 dn: cn=LinuxAdmins,ou=Groups,dc=example,dc=local<br />
02 gidNumber: 500<br />
03 objectClass: top<br />
04 objectClass: groupOfUniqueNames<br />
05 objectClass: posixgroup<br />
06 cn: LinuxAdmins<br />
07 uniqueMember: CN=Alessandro Orsaria,CN=Users,DC=bar,D<br />
C=example,DC=local<br />
08 uniqueMember: CN=Alex SQ. Davies,CN=Users,DC=foo,DC=e<br />
xample,DC=local<br />
Listing 6: »/etc/security/access.conf«<br />
01 + : root : LOCAL<br />
02 + : joe : ALL<br />
03 + : LinuxAdmins@server1.example.local : 10.1.1.0/24<br />
04 ‐ : ALL : ALL<br />
großen Umgebungen. Als eine Alternative bietet<br />
sich immer die Umleitung der Authentification<br />
Requests via SASL oder LDAP Binds an, wie in<br />
diesem Beitrag beschrieben.<br />
Wo die Replikation nicht möglich oder angezeigt<br />
ist, kommen virtuelle Directories infrage, die als<br />
Proxies ein zentralisiertes Repository bilden.<br />
Der 389 DS bietet zwar einige Ansätze für virtuelle<br />
Directories, doch fehlen ihm fortgeschrittenere<br />
Features wie das Attribut-Mapping.<br />
Schließlich enthalten spezielle Clients Samba/<br />
Winbind, um Windows-Controller zusammenzuschließen.<br />
Dazu gehören Softwareprodukte wie Likewise<br />
Enterprise, das es auch in einer freien Open-<br />
Source-Version gibt [8]. Likewise hat den<br />
zusätzlichen Vorteil, dass es die AD Gruppen-<br />
Policen integriert, um Identity-Management-<br />
Aspekte von Linux, Windows und Mac zu<br />
kontrollieren.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
39
<strong>Datenbanken</strong><br />
DB-Duell<br />
© dimaberkut, 123RF<br />
PostgreSQL oder MySQL: Wer skaliert besser?<br />
Das Datenbankduell<br />
Die Konkurrenz von MySQL und PostgreSQL ist so alt wie die <strong>Datenbanken</strong> selbst und kennt keinen endgültigen<br />
Sieger. Nichtsdestotrotz ist das Kräftemessen immer wieder reizvoll und aufschlussreich. Das <strong>ADMIN</strong>-<strong>Magazin</strong><br />
arrangierte deshalb jetzt ein Duell, das es so noch nicht gab. Jens-Christoph Brendel<br />
Um beim großen Datenbankduell MySQL<br />
versus PostgreSQL einerseits für maximale<br />
Fairness und andererseits dafür zu<br />
sorgen, dass die Zweikämpfer wirklich<br />
alle Register ziehen und sich in Bestform<br />
messen können, hat sich die <strong>ADMIN</strong>-<br />
Redaktion mit erfahrenen Sekundanten<br />
verstärkt. Jeder Beistand steuerte für<br />
„seine“ Datenbank die besten Insider-<br />
Tuning-Tipps bei. Im Fall von MySQL<br />
half dankenswerterweise Oli Sennhauser,<br />
früherer Senior Database Consultant für<br />
MySQL bei Sun und heute als selbstständiger<br />
und neutraler MySQL-Berater mit<br />
der eigenen Firma FromDual unterwegs.<br />
Bei PostgreSQL unterstützte die Redaktion<br />
Susanne Ebrecht, PostgreSQL-Entwicklerin<br />
und unter anderem Mitbegründerin<br />
der europäischen PostgreSQL User<br />
Group. Heute ist sie beim PostgreSQL-<br />
Spezialisten 2ndQuadrant unter Vertrag.<br />
Mithilfe dieser beiden Datenbankprofis<br />
sollte sich erweisen, was jeder der Kontrahenten<br />
im untersuchten konkreten<br />
Fall zu leisten vermag. Ein endgültiges<br />
Ergebnis war von vornherein nicht zu<br />
erwarten, denn mit anderen Parametern –<br />
etwa einem anderen Workload oder einer<br />
anderen Datenbankgröße – würden sich<br />
wahrscheinlich andere Resultate ergeben.<br />
Deshalb ging es auch nicht vordergründig<br />
um Sieg oder Niederlage, sondern vor allem<br />
um den Weg zum Ziel: Was muss ich<br />
messen? An welchen Stellschrauben kann<br />
ich drehen? Welchen Effekt hat welche<br />
Maßnahme? Welche Leistungssteigerung<br />
lassen die beiden <strong>Datenbanken</strong> relativ zu<br />
ihrer Default-Konfiguration zu? Wer profitiert<br />
besser von schneller Hardware?<br />
Schließlich bleibt anzumerken, dass<br />
Geschwindigkeit nicht das einzige Kriterium<br />
sein kann, wenn man zwischen<br />
den beiden <strong>Datenbanken</strong> zu wählen hat.<br />
Da geht es außerdem häufig um Applikationen,<br />
die die Datenbank unterstützen<br />
können soll, um die Administrierbarkeit<br />
und eventuell bereits vorhandenes Knowhow<br />
der einen oder anderen Sorte, um<br />
Ausfallsicherheit und damit um solche<br />
Dinge wie Clustering und Replikation,<br />
um Supportfragen oder Migrationsmöglichkeiten<br />
und manches mehr, das leicht<br />
wichtiger sein kann als ein paar Prozente<br />
mehr Performance. Nichtsdestotrotz ist<br />
die Performance ein nicht unwichtiger<br />
Faktor in der Gesamtschau.<br />
Zu guter Letzt: Das SQL in den Prozeduren<br />
des Benchmarks ist als gegeben<br />
hinzunehmen – in der Praxis und mit<br />
dem nötigen Know-how läge aber gerade<br />
dort das größte Tuning-Potenzial, denn<br />
was durch ungünstig gestaltete Abfragen<br />
oder ein mangelndes Datenbank-Design<br />
an Geschwindigkeit verloren geht, das<br />
lässt sich kaum durch trickreich konfigurierte<br />
Einstellungen wieder aufholen.<br />
Der Benchmark<br />
Für den Datenbankvergleich verwendete<br />
das <strong>ADMIN</strong>-<strong>Magazin</strong> den Benchmark<br />
DBT-2 [1], der ursprünglich einmal von<br />
den Open Source Development Labs entwickelt<br />
wurde (von dem er heute aber<br />
leider nicht mehr gepflegt wird). Der<br />
Vorzug dieses Benchmarks ist, dass er<br />
nicht nur einen relativ komplexen und<br />
vielfältig konfigurierbaren OLTP-Workload<br />
erzeugt, sondern darüber hinaus<br />
auf eine anerkannte Methodik zurückgreift.<br />
Er benutzt nämlich dasselbe Sys-<br />
40 Ausgabe 06-2011 Admin www.admin-magazin.de
DB-Duell<br />
<strong>Datenbanken</strong><br />
tem wie der Industriestandard TPC-C,<br />
dem er nachempfunden ist. Zwar sind die<br />
resultierenden TPC-C- und DBT-2-Werte<br />
nicht direkt vergleichbar, doch prinzipiell<br />
absolvieren die <strong>Datenbanken</strong> in beiden<br />
Fällen dasselbe Prozedere.<br />
Die Installation des Benchmarks hält allerdings<br />
ein paar Fallstricke in Gestalt<br />
kleinerer Fehler bereit: Da ist mal die<br />
Syntax in SQL-Skripten nicht korrekt, mal<br />
steht die Bourne-Shell in der Shebang-<br />
Line, wo es die Bash sein müsste, mal<br />
finden sich fest verdrahtete Pfade in den<br />
Skripten, die ins Nirgendwo weisen und<br />
so weiter. Alles nichts, was ein einigermaßen<br />
geübter Admin nicht fixen könnte,<br />
aber es kostet Zeit. Einzelne Fehler soll<br />
allerdings eine spätere Version bereinigen.<br />
Die Redaktion hatte vor einiger Zeit<br />
sogar versucht, die ehemaligen Entwickler<br />
wieder für ihr verwaistes Projekt zu<br />
interessieren – ohne Erfolg.<br />
Wenn der Benchmark läuft, simuliert er<br />
eine Großhandelsanwendung, bei der<br />
eine Anzahl Mitarbeiter an Terminals<br />
Transaktionen auslösen, die Bestellungen,<br />
Auslieferungen, die Zahlungsabwicklung,<br />
die Überwachung der Bestellabwicklung<br />
und die Überwachung des<br />
Lagerbestands umfassen. Diese Transaktionen<br />
werden in einem festgelegten Mix<br />
in der Datenbank gestartet, am häufigsten<br />
„New Order“ gefolgt von „Payment“,<br />
„Order Status“, „Delivery“ und „Stock<br />
Level“. Die zentrale Messgröße sind die<br />
neuen Bestellungen pro Minute, die das<br />
Datenbanksystem bewältigen kann.<br />
Die Umgebung, in der sich das alles<br />
abspielt, besteht aus Warehouses. Zu<br />
jedem Warehouse gehören 10 Districts.<br />
Jeder District hat 3000 Kunden. Jedes<br />
Warehouse verwaltet 100000 Artikel.<br />
Jede zehnte Bestellung muss an ein anderes<br />
Warehouse abgegeben werden, weil<br />
nicht immer alle Artikel am Lager sind.<br />
Pro Warehouse starten per Default zehn<br />
Terminalprozesse.<br />
Alle Transaktionen des Benchmarks sind<br />
als Stored Procedures in der Datenbank<br />
hinterlegt. Den Benchmark steuern zur<br />
Laufzeit zwei Software -Komponenten:<br />
Zuerst öffnet ein Client eine vorzugebende<br />
Anzahl Datenbankverbindungen,<br />
was während einer Einschwingphase<br />
abgewartet wird. Danach löst ein Driver<br />
über den Client die Transaktionen aus,<br />
wobei er entweder eine Think Time zwi-<br />
Abbildung 1: Tuningeffekte verschiedener Setups bei MySQL (Erläuterungen im Text).<br />
schen zwei Transaktionen einbaut oder<br />
nicht.<br />
Der Benchmark ist in weiten Grenzen<br />
konfigurierbar. Insbesondere kann man<br />
einstellen<br />
n die Anzahl Warehouses (der zentrale<br />
Skalierungsfaktor) (-w)<br />
n die Anzahl paralleler Datenbankverbindungen<br />
(-c)<br />
n die Laufzeit (-d)<br />
n ob eine Think Time verwendet werden<br />
soll oder nicht (-n)<br />
Bei den hier diskutierten Ergebnissen<br />
haben wir immer auf die Think Time<br />
verzichtet, weil andernfalls die Belastungsgrenze<br />
erst bei einer hohen Anzahl<br />
Warehouses erreicht würde, was aber<br />
gleichzeitig eine ebenfalls hohe Anzahl<br />
Terminalprozesse mit sich brächte. Dabei<br />
würde die Konkurrenz dieser Terminal-<br />
Threads mit einem übermäßigen Gewicht<br />
in das Ergebnis eingehen.<br />
Alle hier wiedergegebenen Messwerte<br />
sind Mittelwerte, die Ausreißer nivellieren.<br />
Das <strong>ADMIN</strong>-<strong>Magazin</strong> hat jeweils<br />
mindestens drei Durchläufe pro Setup<br />
gemessen, manchmal auch wesentlich<br />
mehr. Die Tester versuchten, jede Datenbank<br />
nacheinander durch eine Reihe von<br />
Tuningmaßnahmen zu beschleunigen. Erfolglose<br />
Versuche übergeht dieser Beitrag,<br />
der im Folgenden nur die Datenbankoptionen<br />
vorstellt, die zu einer signifikanten<br />
Geschwindigkeitssteigerung geführt<br />
haben oder die zumindest unter anderen<br />
Umständen sicher einen positiven Effekt<br />
gehabt hätten. Die Performanceverbesserungen<br />
machen sich normalerweise an<br />
mindestens drei Mess-Serien fest, bei der<br />
die Tester die Last ohne Think Time von<br />
1 bis 20 Warehouses ansteigen ließen und<br />
nach der Einschwingphase zum Aufbau<br />
der Datenbankverbindungen den Lasttest<br />
jeweils fünf Minuten laufen ließen.<br />
Start mit MySQL<br />
Die grobe Marschrichtung für das Tuning<br />
muss bei beiden <strong>Datenbanken</strong> sicher<br />
lauten: Plattenzugriffe einsparen. Davon<br />
produziert der Benchmark reichlich, und<br />
sie sind jeweils um Größenordnungen<br />
langsamer als die Hauptspeicheroperationen,<br />
mit denen sie sich substituieren<br />
lassen. Beide <strong>Datenbanken</strong> bieten eine<br />
Vielzahl von Stellschrauben an, unter<br />
MySQL liefert beispielsweise »SHOW<br />
GLOBAL VARIABLES;« einen Überblick.<br />
Die Liste ist lang, doch keine Angst: Für<br />
das Tuning sind nur eine Handvoll Parameter<br />
wirklich interessant.<br />
Um einen Ausgangswert als Vergleichspunkt<br />
zu bestimmen, maß die Redaktion<br />
zuerst die Performance mit der Konfiguration,<br />
die jeweils die Paketinstallation<br />
der Datenbank mitbrachte. Danach<br />
visierte sie im Fall von MySQL verschiedene<br />
Stoßrichtungen an.<br />
Zuerst das Parameter-Tuning als die kostengünstigste<br />
Variante, weil dafür nur Datenbankeinstellungen<br />
zu ändern sind und<br />
nichts neu zu installieren ist. Zweitens<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
41
<strong>Datenbanken</strong><br />
DB-Duell<br />
Abbildung 2: Beide <strong>Datenbanken</strong> – maximal getunt – mit und ohne SSD als Massenspeicher für die Datenfiles.<br />
Die Werte bei Verwendung einer SSD sind noch einmal wenigstens doppelt so hoch.<br />
sollte aber auch eine aktuellere MySQL-<br />
Version getestet werden, als sie das Repository<br />
des verwendeten Ubuntu LTS 10.04<br />
zu bieten hat. Theoretisch wären drittens<br />
auch MySQL-Ableger wie MariaDB, der<br />
Percona-Server oder Drizzle einen Versuch<br />
wert gewesen, allerdings können<br />
sich hier in der Praxis leicht höhere Hürden<br />
ergeben, etwa in Form zusätzlicher<br />
Kosten oder weil damit der für MySQL<br />
eingekaufte Support verloren ginge. Diesen<br />
Weg hat die Redaktion deswegen<br />
nicht weiter verfolgt.<br />
Zudem zwang der Aufwand zu einer Beschränkung.<br />
Allein für beide <strong>Datenbanken</strong><br />
zusammen startete der Benchmark<br />
an die 2000 Mal. Dabei lief er im Mittel<br />
zwischen sieben und acht Minuten,<br />
macht insgesamt um die 250 Stunden<br />
oder mehr als zehn Tage rund um die<br />
Uhr. Viertens – und das haben wir wieder<br />
praktisch getestet – wollten wir wissen,<br />
was es ausmacht, die zunächst eingesetzte<br />
Festplatte gegen eine schnelle SSD<br />
zu tauschen.<br />
Alle Messungen unternahmen wir auf<br />
ein und derselben Hardware, einem Dell<br />
PowerEdge T110 mit zwei Intel Dual-Core<br />
Prozessoren i3 530, die mit 2,93 GHz<br />
getaktet wurden. Der Server war mit 8<br />
GByte RAM ausgestattet. Als Massenspeicher<br />
diente eine interne 300-GByte-<br />
Platte von Western Digital beziehungsweise<br />
eine Intel SSD der 320er-Serie (160<br />
GByte), auf die wir versuchsweise die<br />
Data Directories der <strong>Datenbanken</strong> verleg-<br />
ten. Das System war zum Messzeitpunkt<br />
ausschließlich mit den Benchmarks beschäftigt.<br />
Tuning, konkret<br />
Die erste Aktion im Falle von MySQL war<br />
der Umstieg von dem schon leicht angestaubten<br />
5.1.41 (Abbildung 1, Kurve A)<br />
aus dem Ubuntu-Repository auf die aktuelle<br />
Version 5.5.15 (Abbildung 1, Kurve<br />
B). Die jüngere Datenbank war aus dem<br />
Stand und mit der Standard-Konfiguration<br />
gut doppelt so schnell, was auch daran<br />
liegt, dass hier einige Parameter von<br />
vornherein großzügiger eingestellt waren<br />
als beim alten MySQL. Mit Tuning lässt<br />
sich zwar auch die alte Version merklich<br />
beschleunigen, die neuere behält aber<br />
die Nase vorn, weswegen alle folgenden<br />
Benchmarks mit der jüngeren Datenbank<br />
absolviert wurden. Gelegentliche<br />
Upgrades lohnen bei MySQL nach diesen<br />
Zahlen sicherlich.<br />
Im zweiten Schritt stand eine Vergrößerung<br />
des Innodb-Bufferpools an. Gehandelt<br />
wird für den zugehörigen Parameter<br />
»innodb_buffer_pool_size« ein Richtwert<br />
von 80 Prozent des vorhandenen RAM<br />
oder – wenn man viel RAM zur Verfügung<br />
hat und die Datenbank kleiner ist<br />
– so viel RAM, wie es dem Wert Datenbankgröße<br />
plus 10 Prozent entspricht.<br />
Die alte Datenbankversion sieht allerdings<br />
per Default nur mickrige 8 MByte<br />
vor, die neuere immerhin 128 MByte.<br />
Wichtig ist auf jeden Fall, ausreichend<br />
Speicher übrig zu behalten, um sowohl<br />
die Bedürfnisse des Betriebssystems (Page<br />
Tables, Socket Buffers, etc.) als auch die<br />
anderer MySQL-Konsumenten (Query<br />
Cache, temporäre Tabellen, Threads,<br />
Key Buffer und so weiter) befriedigen zu<br />
können. Der Testserver verfügte über 8<br />
GByte RAM, die Benchmark-Datenbank<br />
war initial um die 4 GByte groß, also<br />
erwiesen sich 5 GByte für den Innodb-<br />
Bufferpool als gute Wahl. Sie brachte<br />
prompt einen Leistungssprung um 88<br />
Prozent (Abbildung 1, Kurve C) gegenüber<br />
der ungetuneten Konfiguration des<br />
neueren MySQL.<br />
Die dritte Maßnahme betraf das Innodb-<br />
Logfile. Will man dessen Größe ändern,<br />
ist es übrigens wichtig, bei heruntergefahrener<br />
Datenbank die alten Logs zu<br />
löschen – sonst passen sie anschließend<br />
nicht zur neu konfigurierten Größe, und<br />
MySQL verweigert den Start. Hat man sie<br />
dagegen entfernt, legt sie die Datenbank<br />
beim Booten mit den neuen Proportionen<br />
wieder an.<br />
Außerdem ist zu bedenken, dass ein stark<br />
vergrößertes Logfile das Wiederanlaufen<br />
nach einem Crash deutlich ausbremsen<br />
kann, weil die Datenbank zunächst das<br />
gesamte Log nach Transaktionen durchsucht,<br />
die nur im Speicher ausgeführt<br />
wurden, es aber noch nicht auf die Platte<br />
geschafft haben. Die Dauer dieser sogenannten<br />
Redo-Phase ist proportional<br />
zur Größe des Logs, hängt aber ansonsten<br />
von so vielen weiteren Faktoren ab,<br />
dass man Werte für eine konkrete Datenbank<br />
am besten experimentell ermittelt.<br />
Schließlich gibt es eine weitere Obergrenze:<br />
Die Größe aller Logfiles zusammen<br />
muss unter 4 GByte bleiben. Alle<br />
diese Erwägungen einbeziehend fiel die<br />
Wahl auf ein 1 GByte großes Innodb-Log.<br />
Der Erfolg war ein Leistungszuwachs von<br />
weiteren 52 Prozent (Abbildung 1, Kurve<br />
D) gegenüber der Vorversion der Konfiguration.<br />
Die vierte Tuning-Maßnahme führt in einen<br />
Grenzbereich, denn sie tangiert die<br />
Sicherheit der Datenbank. Per Default ist<br />
der Parameter »flush_log_at_trx_commit«<br />
auf »1« eingestellt, was bedeutet, dass<br />
MySQL das Transaction-Log jedesmal auf<br />
die Platte schreibt, wenn eine Transaktion<br />
committet wird. Damit kann keine<br />
Transaktion verloren gehen, ganz egal,<br />
42 Ausgabe 06-2011 Admin www.admin-magazin.de
DB-Duell<br />
<strong>Datenbanken</strong><br />
ob MySQL oder das Betriebssystem abstürzt.<br />
Für OLTP-Workloads mit vielen<br />
Schreiboperationen auf den Massenspeicher<br />
kann das aber eine Bremse sein, die<br />
sich lösen lässt, wenn man den Parameter<br />
ändert. Setzt man ihn auf »0« schaltet<br />
man den Log-Flush nach Commit ganz<br />
ab, setzt man ihn auf »2«, wandern die<br />
Log-Daten zwar ebenfalls nicht sofort auf<br />
die Platte, aber immerhin in den Cache<br />
des Betriebssystems. Damit überlebt die<br />
Transaktion einen Datenbank-Crash,<br />
ginge aber bei einem Betriebssystemabsturz<br />
verloren. Wir haben uns für diesen<br />
letzteren Fall als Kompromiss entschieden,<br />
das ergab gegenüber der Vorgänger-<br />
Konfiguration noch einmal mehr als eine<br />
Verdoppelung der Performance (Abbildung<br />
1, Kurve E).<br />
Der fünfte Schritt dreht sich um den Parameter<br />
»innodb_buffer_pool_instances«,<br />
mit dessen Hilfe sich der Buffer Pool in<br />
separate Regionen unterteilen lässt, was<br />
wiederum die Bearbeitung konkurrierender<br />
Lese- und Schreiboperationen<br />
begünstigt. Für den Wert von »innodb_<br />
buffer_pool_instances« liest man verschiedene<br />
Empfehlungen. Unser Experte<br />
empfahl, ihn auf die Anzahl Cores zu<br />
setzen. Eine andere Empfehlung, »(innodb_buffer_pool_size<br />
in GB + number<br />
of CPUs)/2«, wäre im vorliegenden Fall<br />
ungefähr auf dasselbe hinausgelaufen<br />
und auch den Hinweis von MySQL selbst,<br />
jeder Teil des Bufferpools solle minimal<br />
1 GByte betragen, erfüllt die gewählte<br />
Einstellung nach der Anzahl Cores. Das<br />
Ganze brachte wiederum eine deutliche<br />
Steigerung (Abbildung 1, Kurve F).<br />
Diese Kurve fällt – wie prinzipiell alle anderen<br />
– mit steigender Anzahl Warehouses<br />
wieder deutlich ab, weil am oberen<br />
Ende unseres Belastungsspektrums mit<br />
bis zu 200 Threads mehr parallele Aktionen<br />
ausgeführt werden als der maximalen<br />
Performance zuträglich sind.<br />
Sicher nicht zufällig fällt das Maximum<br />
der meisten Leistungskurven in einen Bereich,<br />
in dem 30 bis 60 Terminal-Threads<br />
zeitgleich laufen.<br />
Aus einer anderen Welt scheinen erwartungsgemäß<br />
die Resultate, die sich einstellen,<br />
wenn man das Data Directory<br />
auf eine SSD (Abbildung 2) verlegt. In<br />
der Spitze schnellen sie bis fast an die 20<br />
000 New Orders pro Minute hoch, also<br />
noch einmal mehr als doppelt so viel, wie<br />
mit allen bisherigen Tuningmaßnahmen<br />
zusammen maximal zu erzielen war. Das<br />
liegt einfach daran, dass hier mit der<br />
Festplatte die langsamste Komponente<br />
eliminiert wurde. Unter dem Strich bleibt<br />
bis hierhin zu vermerken: Das aktuelle<br />
MySQL ließ sich in der Spitze auf ungefähr<br />
die zehnfache Leistung der ungetuneten<br />
älteren Version beschleunigen, die<br />
wir als Baseline vermessen hatten. Mit<br />
einer SSD ergeben sich mehr als 20fach<br />
höhere Leistungswerte.<br />
PostgreSQL im Rennen<br />
Weiter ging es mit PostgreSQL. Auch hier<br />
haben wir zunächst die Version vermessen,<br />
die das Ubuntu-Repository mitbringt,<br />
das war das Release 8.4.8 (Abbildung<br />
4 Kurve A). Schon der Fairness halber<br />
wechselten wir dann aber auch hier zum<br />
derzeit aktuellen PostgreSQL 9.1.0 (Abbildung<br />
4, Kurve B). Diese Version war<br />
zwar nicht sehr viel schneller als der Vorgänger,<br />
gewann aber aus dem Stand den<br />
Wettbewerb der Default-Konfigurationen.<br />
Das ältere Postgres ist mit den Standard-<br />
Einstellungen ungefähr so schnell wie<br />
das ungetunete neuere MySQL, aber das<br />
neueste PostgreSQL mit Standardkonfiguration<br />
kann noch einmal leicht zulegen<br />
und diese Konkurrenz für sich entscheiden<br />
(Abbildung 3).<br />
Der Grund dafür dürfte sein, dass PostgreSQL<br />
beim Initialisieren der Datenbank<br />
während der Installation aktiv überprüft,<br />
auf welche Werte einige Parameter gesetzt<br />
werden können, ohne dass sie in<br />
Konflikt mit dem Betriebssystem geraten.<br />
MySQL spart sich diesen Check und verwendet<br />
in seiner Default-Konfiguration<br />
stattdessen so kleine Werte, dass ein Konflikt<br />
unwahrscheinlich ist. Dadurch ist es<br />
ohne Anpassung aber auch langsamer,<br />
weil es den vorhandenen Spielraum nicht<br />
ausnutzt. Zudem kann PostgreSQL unter<br />
Umständen einen weiteren kleinen Vorteil<br />
ausspielen: Seine Stored Procedures<br />
für den Benchmark sind kompilierte C-<br />
Programme, wogegen MySQL für denselben<br />
Zweck SQL-Skripte verwenden muss,<br />
die der Server interpretiert. Allerdings ist<br />
der Unterschied nicht sehr groß, und das<br />
Ergebnis sagt auch noch nichts über die<br />
Steigerungsfähigkeit im Laufe des folgenden<br />
Tunings – es bleibt also spannend.<br />
PostgreSQL beschleunigen<br />
Die nächste Maßnahme beim Postgres-Tuning<br />
sollte gar nicht direkt der Datenbank<br />
gelten, sondern dem Betriebssystem. Weil<br />
PostgreSQL auf den Read-Ahead-Buffer<br />
des Betriebssystems baut, kann es sich<br />
lohnen, den zu vergrößern – per Default<br />
setzt ihn Ubuntu nur auf den niedrigen<br />
Abbildung 3: Wettbewerb der Default-Konfigurationen verschiedener Datenbank-Versionen. Das erst wenige<br />
Wochen alte PostgreSQL 9.1 hat hier die Nase vorn. MySQL liegt in der aktuellsten Version ungefähr auf dem<br />
Niveau des älteren Postgres.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
43
<strong>Datenbanken</strong><br />
DB-Duell<br />
Abbildung 4: Diverse PostgreSQL-Setups im Vergleich (Erläuterungen im Text).<br />
Wert »256«. Früher bewerkstelligte man<br />
diese Änderung mit »hdparm«, aber der<br />
Kernel 2.6 bringt jetzt ein eigenes Kommando<br />
dafür mit »blockdev ‐‐setra 4096<br />
/dev/sda« (Device und Anzahl Blöcke<br />
sind Beispielwerte). Allerdings überwiegen<br />
bei dem Workload des hier verwendeten<br />
Benchmarks Schreiboperationen,<br />
sodass sich nach der Anpassung kein<br />
merklich positiver Effekt einstellte. Wo<br />
die Verhältnisse andere sind, sollte man<br />
das fragliche Kommando in »rc.local«<br />
oder einem anderen Init-Skript unterbringen,<br />
sonst ist die Einstellung beim<br />
nächsten Booten futsch.<br />
Auch die folgende Maßnahme hängt engt<br />
mit Linux zusammen. Will man nämlich<br />
der Datenbank mehr Shared Memory zukommen<br />
lassen (hauptsächlich in Form<br />
von Shared Buffers), dann darf dessen<br />
Menge nicht das im Betriebssystem definierte<br />
Limit überschreiten – andernfalls<br />
würde die Datenbank nicht starten, weil<br />
sie dann versucht, mehr Speicher zu allozieren,<br />
als sie erhalten kann. Einer Faustregel<br />
zufolge sollte man ein Viertel des<br />
RAMs für die Shared Buffers reservieren,<br />
im vorliegenden Fall also 2 GByte. Dafür<br />
kann man so vorgehen:<br />
n Zunächst editiert man »/etc/sysctl.<br />
conf« und ergänzt dort die Zeilen<br />
»kernel.shmmax = 4190150656« und<br />
»kernel.shmall = 10229896«.<br />
n Danach kann man diese Einstellungen<br />
per »sysctl ‐p« laden (und müsste das<br />
ebenfalls nach jedem Booten tun).<br />
Der Betriebssystem-Parameter »SHM-<br />
MAX« ist auf genau vier GByte eingestellt.<br />
n Jetzt kann man in der »postgresql.<br />
conf« kongruente Puffergrößen für<br />
Caches konfigurieren: »max_connection<br />
= 25« und »shared_buffers =<br />
2GB« (vorher: 32 MByte). Damit PostgreSQL<br />
weiß, wie viel Cache es vom<br />
Betriebssystem erwarten kann, setzt<br />
man schließlich noch den Wert von<br />
»effective_cache_size« auf »RAM minus<br />
Shared Buffers«, im vorliegenden<br />
Fall »effective_cache_size = 6GB«.<br />
Ein wenig zur Verwunderung der Tester<br />
hatte diese Maßnahme allerdings ebenfalls<br />
keinen deutlichen Einfluß auf die<br />
Postgres-Performance (Abbildung 4,<br />
Kurve C). Zwar nutzt die Datenbank den<br />
Cache mit einer ordentlichen Trefferquote<br />
(94 Prozent), doch spielt er wahrscheinlich<br />
wegen der überwiegenden Schreiboperationen<br />
keine entscheidende Rolle.<br />
Dafür fiel auf, dass PostgreSQL offenbar<br />
sensibler auf die im Zuge der<br />
Benchmarks steigende Datenbankgröße<br />
reagiert. Ein Leistungsabfall mit längerer<br />
Testdauer war auch bei MySQL zu beobachten<br />
– PostgreSQL aber produzierte<br />
mit einer jungfräulichen Datenbank regelmäßig<br />
Ausreißer mit deutlich erhöhten<br />
Transaktionszahlen, die sich aber bereits<br />
nach einigen Dutzend Testläufen, in deren<br />
Verlauf sich die Datenbank vergrößerte,<br />
wieder auf den vorigen Mittelwert<br />
einpendelten.<br />
Aus diesen Grund haben wir MySQL<br />
einmal nach rund 700 Durchläufen und<br />
PostgreSQL mehrmals nach je rund 350<br />
Durchläufen komplett resettet und die<br />
Testdatenbank neu aufgesetzt. Nach jeder<br />
Serie wäre eine solche Aktion aber<br />
wegen des damit verbundenen Aufwands<br />
undurchführbar und mit Blick auf die<br />
Verhältnisse in der Praxis auch unrealistisch<br />
gewesen.<br />
Der nächste Tuning-Versuch galt noch<br />
einmal der Speicherverwaltung. Über<br />
die Variable »work_mem« lässt sich die<br />
Menge an Memory konfigurieren, die<br />
für interne Sortieroperationen und Hash-<br />
Tabellen zur Verfügung stehen soll. Der<br />
Default beträgt ein Megabyte, die Tester<br />
erhöhten den Wert auf 24 MByte. Via<br />
»maintanance_work_mem« lässt sich außerdem<br />
vorherbestimmen, wie viel Speicher<br />
maximal für Operationen wie »VA-<br />
CUUM«, »CREATE INDEX« oder »ALTER<br />
TABLE ADD FOREIGN KEY« verfügbar<br />
ist. Der Defaultwert beläuft sich hier auf<br />
16 MByte, für die Benchmarks wurde er<br />
auf 512 MByte gesteigert. Die Effekte der<br />
beiden Maßnahmen verloren sich allerdings<br />
wieder im statistischen Rauschen<br />
(Abbildung 4, Kurve D).<br />
Log-Tuning<br />
Nun versuchte das Benchmark-Team,<br />
den Hebel beim Logging anzusetzen.<br />
An einem sogenannten Checkpoint garantiert<br />
PostgreSQL, dass alle Heap- und<br />
Index-Datendateien auf den neuesten<br />
Stand gebracht und alle geänderten Speicherseiten<br />
auf die Festplatte geschrieben<br />
worden sind. Nach einem Crash würde<br />
die Recovery-Prozedur einen solchen<br />
Checkpoint suchen, von dem sie weiß,<br />
dass alle Operationen, die vorher stattgefunden<br />
haben, auf der Festplatte gelandet<br />
sind. Wie oft der Background Writer-Prozess<br />
diese Checkpoints auslöst, ist einstellbar.<br />
Eine Methode ist, die Anzahl der<br />
jeweils 16 MByte großen Log-Segmente<br />
(»checkpoint_segments«) vorzugeben,<br />
nach denen jeweils ein Checkpoint geschrieben<br />
werden muss. Voreingestellt<br />
sind drei. Dieser Wert ist besonders bei<br />
vielen Schreiboperationen sehr klein.<br />
Deshalb wurde er jetzt auf 32 gesetzt,<br />
was zwar möglicherweise die Zeit für ein<br />
Crash Recovery erhöht, aber etliche der<br />
I/O-intensiven Checkpoints einspart.<br />
Diese Maßnahme hatte einen deutlichen<br />
Erfolg: Die Performance steigerte sich um<br />
44 Ausgabe 06-2011 Admin www.admin-magazin.de
DB-Duell<br />
<strong>Datenbanken</strong><br />
bis zu 100 Prozent (Abbildung 4, Kurve<br />
E). Spätere Versuche ergaben, dass noch<br />
höhere Werte für »checkpoint_segments«<br />
hier keine nennenswerte Verbesserung<br />
bringen.<br />
In dieselbe Richtung ist ein weiterer<br />
Schritt möglich, der allerdings – ganz<br />
ähnlich wie zuvor bei MySQL – auf Kosten<br />
der Sicherheit geht. Stellt man nämlich<br />
die Option »synchronous_commit«<br />
(Default) ab, dann wartet der Datenbankserver<br />
nicht mehr darauf, dass die Write<br />
Ahead-Logs (WAL) tatsächlich auf der<br />
Festplatte gelandet sind, bevor er eine<br />
Erfolgsmeldung an den Client weitergibt.<br />
Das geht schneller, es können im Fall<br />
eines Crashs dabei aber einzelne Transaktionen<br />
verloren gehen. Es gibt durchaus<br />
Fälle, in denen man das für eine höhere<br />
Performance ohne große Bauchschmerzen<br />
in Kauf nehmen kann. Auf eine<br />
Finanztransaktion trifft das sicher nicht<br />
zu, auf ein Forum-Posting eher. Man<br />
muss also wissen, was man tut.<br />
Wir haben – schon allein aus Gründen<br />
der Chancengleichheit – aber auch diese<br />
Tuningvariante gestestet. Das Resultat:<br />
Mit asynchronem Commit ist die Bremse<br />
endgültig gelöst, und die Menge der erreichbaren<br />
Transaktionen klettert mit<br />
über 15 000 pro Minute in den Bereich,<br />
den auch MySQL maximal erreichte<br />
( Abbildung 4, Kurve F).<br />
Fazit<br />
PostgreSQL hatte den besseren Start, tat<br />
sich dann aber etwas schwer, noch zuzulegen.<br />
MySQL begann mit der schlechteren<br />
Default-Konfiguration, konnte sich<br />
dann aber kontinuierlich Schritt um<br />
Schritt steigern. Besonders beim Caching<br />
erschloss es noch Reserven, die es bei<br />
PostgreSQL wahrscheinlich deshalb nicht<br />
mehr gab, weil es von Anfang an näher<br />
am Optimum war. Nachdem möglichst<br />
viele Plattenzugriffe durch Operationen<br />
im RAM ersetzt waren, profitierten beide<br />
<strong>Datenbanken</strong> stark von einer Verminderung<br />
des unvermeidlichen Overheads<br />
durch das Transaction Logging. In der<br />
besten Einstellung, die wir finden konnten,<br />
und für die jeweils ein Kompromiss<br />
mit Blick auf die Datensicherheit nötig<br />
war, lagen die beiden Kontrahenten aber<br />
am Ende wieder ziemlich gleich auf.<br />
Einen noch größeren Boost verschaffte<br />
beiden <strong>Datenbanken</strong> der Umstieg auf<br />
SSD. Mit der besten Konfiguration und<br />
einer SSD als Massenspeicher verdoppelte<br />
sich die Anzahl Transaktionen zum<br />
Schluss noch einmal. Wieder begegneten<br />
sich die Kontrahenten auf Augenhöhe,<br />
allerdings schwanken die Werte von PostgreSQL<br />
etwas stärker und fallen auch<br />
etwas schneller ab. (jcb)<br />
n<br />
Infos<br />
[1] DBT2:<br />
[http:// sourceforge. net/ apps/ mediawiki/<br />
osdldbt/ index. php? title=Main_Page]<br />
Für Leser des <strong>ADMIN</strong>-<strong>Magazin</strong>s: Gutschein<br />
für 2 Networking-Kompendien gratis.<br />
Einfach unter http://www.SearchNetworking.de/Registrierung anmelden<br />
und den Aktionscode „admin“ verwenden.<br />
Sie gehen keine Verpflichtungen ein und bekommen die zwei Ausgaben automatisch zugeschickt:<br />
• Highspeed-Networking<br />
• Routing & Switching in konvergenten Umgebungen<br />
Der Gutschein ist bis zum 9. Dezember 2011 gültig.<br />
NEU!<br />
Jetzt Gutschein einlösen:<br />
www.SearchNetworking.de/<br />
Kompendium
<strong>Datenbanken</strong><br />
NoSQL<br />
hypermania2, 123RF<br />
NoSQL-<strong>Datenbanken</strong> – Technologie und Projekte<br />
NoSQL<br />
Mit der Datenexplosion des Web-2.0-Zeitalters ist in den letzten Jahren<br />
eine ganze Klasse neuartiger Datensilos aufgetaucht, die sogenannten<br />
NoSQL-<strong>Datenbanken</strong>. Der Autor des weltweit ersten NoSQL-Buches stellt in<br />
diesem Beitrag die neue Technologie vor und hilft, in der Praxis die richtige<br />
Auswahl zu treffen. Stefan Edlich<br />
<strong>Datenbanken</strong> gibt es seit Ende der 60erund<br />
der 70er-Jahre. Schon bevor Edgar<br />
F. Codd das relationale Datenmodell einführte,<br />
kannte man anders strukturierte<br />
Datenbankmodelle. 1979 entwickelte<br />
etwa Ken Thompson eine Hash-orientierte<br />
Datenbank, und in den 90er-Jahren<br />
erschienen mit Lotus, BerkeleyDB oder<br />
GT.M viele weitere <strong>Datenbanken</strong>. Danach<br />
setzte sich in den 80er- und 90er-Jahren<br />
allerdings das relationale Modell aus gutem<br />
Grund durch. Dafür sprachen neben<br />
dem konsistenten mathematischen<br />
Modell einige weitere Gründe: Es gab<br />
überwiegend statische Daten, die meisten<br />
Anwendungen liefen auf einem Server,<br />
und es war von Vorteil, mit Normalisierung<br />
Plattenplatz zu sparen.<br />
Im Web-2.0-Zeitalter gibt es viele Anwendungsbereiche,<br />
in denen die oben<br />
genannten Gründe nicht mehr gelten.<br />
Zum einen sind die Daten inzwischen<br />
kaum mehr statisch. Analysen zufolge<br />
sind über 90 Prozent aller Daten im Web<br />
ständigen Änderungen unterworfen und<br />
eher unstrukturiert. Zum anderen haben<br />
Web‐2.0-Firmen wie Google, Yahoo,<br />
Facebook, LinkedIn, Digg oder MySpace<br />
so viele Daten, dass sie sich nicht mehr<br />
auf einem Server hosten und verarbeiten<br />
lassen. Und schließlich muss man heutzutage<br />
kaum mehr Plattenplatz sparen.<br />
Was heißt NoSQL?<br />
Der Wegfall von Argumenten für das relationale<br />
Modell hat daher der Konkurrenz<br />
wieder mehr Raum gegeben und die Verbreitung<br />
von NoSQL-<strong>Datenbanken</strong> gefördert.<br />
Doch was genau ist damit gemeint?<br />
Ein Definitionsversuch findet sich auf<br />
[2]. Danach sind NoSQL-<strong>Datenbanken</strong>:<br />
Nicht-relational: Wie bereits oben erwähnt,<br />
ist die Nicht-Relationalität eher<br />
ein Kriterium für eine NoSQL Datenbank<br />
als die fehlende Verwendung von SQL.<br />
Entscheidend ist hier, dass die Datenbank<br />
ein ganz anders Datenmodell umsetzt,<br />
beispielsweise Dokumentenstrukturen<br />
(wie JSON) oder Graphenstrukturen.<br />
Verteilt und horizontal skalierbar:<br />
NoSQL-<strong>Datenbanken</strong> sind in der Regel<br />
auf eine einfache horizontale Skalierung<br />
ausgelegt (Scale-Out), siehe Abbildung<br />
1. Mit minimalem Aufwand und ohne<br />
Verlust der Erreichbarkeit lässt sich dabei<br />
weitere handelsübliche Hardware in das<br />
Datenbanksystem einfügen. Im Gegensatz<br />
dazu wurde in den 80er- und 90er-<br />
Jahren meist vertikal skaliert, das heißt,<br />
der Server aufgerüstet.<br />
Open Source: Die meisten NoSQL-<strong>Datenbanken</strong><br />
sind Open Source. Dies kann eine<br />
Kostenersparnis bedeuten, muss es aber<br />
natürlich nicht zwingend.<br />
Web-Scale und schemafrei: NoSQL-<br />
Datenbanksysteme sind für den skalierbaren<br />
Einsatz im Web prädestiniert.<br />
Gründe dafür sind die Datenmenge und<br />
ihre flüchtige Struktur: Webdaten ändern<br />
ihre Struktur häufig. Gleichzeitig ist eine<br />
Downtime wegen »ALTER TABLE« aber<br />
nicht immer akzeptabel.<br />
48 Ausgabe 06-2011 Admin www.admin-magazin.de
NoSQL<br />
<strong>Datenbanken</strong><br />
Einfache Replikation: Wenn <strong>Datenbanken</strong><br />
auf eine Scale-Out-Architektur ausgerichtet<br />
sind, dann ist Replikation ein<br />
wichtiger Faktor. Und meistens ist das<br />
ebenfalls ein Kernelement von NoSQL-<br />
<strong>Datenbanken</strong>. Replikation in NoSQL-<br />
Systemen wie CouchDB oder Riak lässt<br />
sich deshalb mit nur einer Anweisung<br />
auf der Kommandozeile oder lediglich<br />
mit einer Konfigurationseinstellung bewerkstelligen.<br />
Im Gegensatz dazu merkt<br />
man bei vielen relationalen <strong>Datenbanken</strong>,<br />
dass das Datenmodell im Vordergrund<br />
steht und Möglichkeiten für die<br />
Skalierung und Replikation erst später<br />
hinzugefügt wurden und komplizierter<br />
zu handhaben sind.<br />
Einfache API: In relationalen Systemen<br />
ist SQL eine Schnittstelle mit vielen Vorund<br />
Nachteilen. NoSQL-Systeme gehen<br />
hier oft ganz andere Wege und bieten unterschiedliche<br />
Schnittstellen und Abfragemodelle<br />
an. Sehr viele NoSQL-<strong>Datenbanken</strong><br />
offerieren etwa REST-Schnittstellen,<br />
bei denen die Datenbank komplett via<br />
Web-Anfragen verwaltet wird. Des Weiteren<br />
gibt es oft Datenbankschnittstellen<br />
wie Apache Thrift [3] für alle Programmiersprachen<br />
und auch oft native Abfragen,<br />
die LINQ ähneln [4].<br />
Schwächere Transaktionsanforderungen:<br />
Was für Banken wichtig ist – nämlich<br />
ACID-Transaktionen – ist für viele<br />
Webanwendungen verzichtbar. Facebook-<br />
oder Twitter-Einträge müssen nicht<br />
transaktionsfest sein. Viele dieser Daten<br />
sind auch unzusammenhängend, müssen<br />
also auch nicht mit kostspieligen Join-<br />
Operatoren durchsucht werden. Wenn<br />
aber ACID und Join-Abfragen einen<br />
anderen Stellenwert haben, kann man<br />
ganz andere Datenbanksysteme bauen,<br />
die besser skalieren. In der Regel gelten<br />
für NoSQL-Systeme viele dieser Kriterien.<br />
Abbildung 1: Scale-Up versus Scale-Out – während man früher zumeist größere Server anschaffen musste,<br />
sobald man an die Leistungsgrenze kam, erlauben heutige, horizontal skalierbare Architekturen einfach das<br />
Hinzufügen weiterer Commodity-Hardware.<br />
Es müssen jedoch nicht zwingend alle<br />
Kriterien erfüllt sein. Die Community<br />
übersetzt NoSQL mittlerweile als „Not<br />
Only SQL“ und verweist damit auch auf<br />
das Recht, über andere Lösungen als relationale<br />
<strong>Datenbanken</strong> nachzudenken.<br />
Klassifikation<br />
Welche Klassen von NoSQL-<strong>Datenbanken</strong><br />
gibt es nun? Man unterscheidet – wie in<br />
Abbildung 3 (mittlere Schicht) dargestellt<br />
– meistens vier Gruppen (stores<br />
steht hier für Datenbank):<br />
n Wide Column Stores: NoSQL-DBs mit<br />
tabellenartigen Datenstrukturen für<br />
extreme Datenmengen.<br />
n Document Stores: NoSQL-DBs, die interpretierbare<br />
Dokumente definierter<br />
Struktur (wie JSON) speichern.<br />
n Key/Value Stores: NoSQL-DBs, die<br />
Hash-Strukturen, also beliebig viele<br />
Abbildung 2: Sowohl in der Zugriffsschicht wie auf der Ebene der Datenmodelle wie auch im Speichermodell<br />
ergeben sich Unterschiede zwischen den vier Hauptgruppen der NoSQL- und relationalen <strong>Datenbanken</strong>.<br />
Key/Value-Paare speichern.<br />
n Graph Databases: <strong>Datenbanken</strong>, die<br />
Graphenstrukturen speichern.<br />
Es gibt noch viele weitere Datenbankarten<br />
wie XML- oder Objekt-, Grid- oder<br />
Multi-Value-<strong>Datenbanken</strong>, die man unter<br />
Umständen auch dem NoSQL-Bereich zurechnen<br />
kann. Jedoch stehen die NoSQL-<br />
<strong>Datenbanken</strong> der oben genannten vier<br />
Gruppen im Hauptfokus der NoSQL-<br />
Bewegung.<br />
Zusammenfassend ergeben sich – in<br />
Bezug auf den Vergleich mit relationalen<br />
<strong>Datenbanken</strong> – Unterschiede in drei<br />
Ebenen, die Abbildung 2 darstellt. Zugriff<br />
auf die NoSQL-Datenbank erhält<br />
man meistens über ein REST-Protokoll,<br />
das erwähnte Thrift, ein einfaches Get/<br />
Put für Hashes oder über die unzähligen<br />
Sprachanbindungen. Auf der Schicht<br />
des Datenmodells gibt es (Wide) Column<br />
Families, eindeutig definiert parsierbare<br />
Dokumente, Key/Value-Strukturen<br />
(Hashes) und Graphenstrukturen.<br />
Interessant ist aber auch, dass einige <strong>Datenbanken</strong><br />
auch im Speichermodell ungewöhnliche<br />
Wege gehen. Zwar speichern<br />
die meisten Programme immer noch auf<br />
Platte, daneben aber gibt es viele RAMund<br />
RAM-Hybrid Lösungen. Programme<br />
wie Scalaris oder Hazelcast setzen vollständig<br />
auf RAM und sorgen für transparente<br />
Replikation. Nach Argumentation<br />
dieser Programme ist repliziertes RAM<br />
nicht unsicherer als das Schreiben auf die<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
49
<strong>Datenbanken</strong><br />
NoSQL<br />
es von sehr vielen NoSQL-<strong>Datenbanken</strong><br />
als Operation angeboten. Vorteil ist weiterhin,<br />
dass die Map- und Reduce-Funktionen<br />
in jeder Programmiersprache formuliert<br />
werden können. Die Forschung<br />
arbeitet derzeit fieberhaft an weiteren<br />
Modellen, die Vorteile beider Welten<br />
– extreme Parallelisierbarkeit und die<br />
Mächtigkeit relationaler Abfragen – zu<br />
integrieren versucht.<br />
Abbildung 3: Arbeitsweise des Map/Reduce-Verfahrens, das sich eignet, um rechenintensive Prozesse zu<br />
parallelisieren.<br />
Platte. Andere NoSQL-<strong>Datenbanken</strong> wie<br />
MongoDB oder Redis setzen auf eine Hybridlösung.<br />
Auch hier sollten alle Daten<br />
(oder mit Virtual Memory mindestens als<br />
Schlüssel) in den RAM passen, sie werden<br />
in konfigurierbaren Zeitintervallen<br />
mit der Festplatte synchronisiert. Dies<br />
hat extreme Performancevorteile, ist aber<br />
vielleicht nicht hundertprozentig ausfallsicher.<br />
Als letzte Variante erlauben viele<br />
NoSQL-<strong>Datenbanken</strong> die Definition einer<br />
beliebigen Speicher-Engine. Sogar auch<br />
relationale <strong>Datenbanken</strong> lassen sich oft<br />
als Unterbau einsetzen.<br />
Abschließend bleibt anzumerken, dass<br />
viele der NoSQL-<strong>Datenbanken</strong> von Web-<br />
2.0-Firmen selbst entwickelt wurden, die<br />
sie dann häufig als Open Source freigaben.<br />
So geschehen bei Yahoo, das Hadoop<br />
erschaffen hat, oder beim Akamai Team,<br />
das Riak entwickelte.<br />
NoSQL kann nicht ordentlich ohne etwas<br />
theoretischen Hintergrund verstanden<br />
werden. Dabei gibt es ganz grob fünf<br />
Konzepte, auf denen verteilte NoSQL-<br />
Systeme aufbauen. Sie können hier nur<br />
kurz angesprochen werden, weiterführende<br />
Literatur wie [1] hilft dabei, diese<br />
Themen zu vertiefen.<br />
Map/Reduce<br />
Um sehr große Datenmengen effizient bearbeiten<br />
zu können, hat Google das Map/<br />
Reduce-Verfahren entwickelt und 2004<br />
vorgestellt [5]. Mittlerweile ist es paten-<br />
tiert. Die Grundlagen dieses Verfahrens<br />
waren allerdings schon seit vielen Jahrzehnten<br />
in der funktionalen Programmierung<br />
geläufig.<br />
Kernidee dieses Verfahrens ist, Daten zu<br />
segmentieren und dann von sehr vielen<br />
Prozessen bearbeiten zu lassen (Abbildung<br />
3). Das läuft im Wesentlichen auf<br />
das Sammeln und gegebenenfalls Transformieren<br />
und Verdichten der Daten heraus,<br />
so wie man eine Ameisen- oder<br />
Bienenarmee beauftragen würde. Die<br />
Daten werden dazu typischerweise in 16<br />
bis 64 MByte große Blöcke zerlegt. Ein<br />
Master-Prozess weist dann den Worker-<br />
Prozessen zuerst eine Map-Aufgabe zu.<br />
Dabei müssen die Key/Value-Paare der<br />
Daten analysiert und gesammelt werden.<br />
Die Ergebnisse<br />
werden dann<br />
weiteren Workern<br />
übergeben, die das<br />
Reduce ausführen<br />
und die Daten verdichten.<br />
Dieses Verfahren<br />
ist hochparallelisierbar<br />
und gut für<br />
Aufgaben geeignet<br />
wie verteiltes Suchen,<br />
das Zählen<br />
von URL-Zugriffe<br />
und Web-Verlinkungen,<br />
Indexe<br />
erstellen und so<br />
weiter. Daher wird gleichzeitig realisierbar.<br />
CAP<br />
Als einer der ersten hat Amazon mit dem<br />
Dynamo-System aufgezeigt und darüber<br />
publiziert [6], wie man extrem große<br />
Datenmengen so verwaltet, dass die<br />
zugrunde liegenden Systeme hochverfügbar<br />
sind. Da Amazon viele Dutzend<br />
Millionen Anwender gleichzeitig bedienen<br />
muss, ist Hochverfügbarkeit ein<br />
wichtiges Thema. Dabei darf der Ausfall<br />
von Rechnerknoten keine negativen Auswirkungen<br />
haben (Partition Tolerance).<br />
Andere Knoten müssen einspringen können,<br />
und das System muss immer reagieren.<br />
Firmen wie Google, Yahoo oder<br />
Amazon verlieren sehr viele Millionen<br />
Dollar in jeder Minute Downtime. Wenn<br />
man auf Availability und Partition Toleranz<br />
setzt, zeigt es sich jedoch, dass<br />
man keine hundertprozentige Konsistenz<br />
aufrechterhalten kann, da Knoten Zeit<br />
brauchen, um zu replizieren. Man gibt<br />
daher ACID-Transaktionalität zugunsten<br />
des BASE-Modells (Basically Available,<br />
Soft State, Eventually Consistent) auf.<br />
Eventual Consistency bedeutet, dass es<br />
möglich sein kann, dass Knoten zum Bei-<br />
Abbildung 4: Das CAP-Theorem – nur zwei der drei Bedingungen sind jeweils<br />
50 Ausgabe 06-2011 Admin www.admin-magazin.de
NoSQL<br />
<strong>Datenbanken</strong><br />
Abbildung 5: Consistent Hashing Ring: Jedes Datenbankobjekt hat eine<br />
eindeutige Position im Ring und kann auf andere Nodes replizieren.<br />
spiel für wenige Zehntelsekunden einen<br />
unterschiedlichen Stand haben und ein<br />
Client in seltenen Fällen einen älteren<br />
Zustand „sieht“. Dies ist bei sicherheitskritischen<br />
Systemen wie Bankanwendungen<br />
inakzeptabel. Bei Web-2.0-Systemen<br />
wie Social Networks ist es jedoch absolut<br />
kein Problem. Ob ein Tweet oder eine<br />
Gefällt-mir-Bekundung sofort oder eine<br />
Sekunde später sichtbar wird, interessiert<br />
nicht wirklich.<br />
Wie in Abbildung 4 gezeigt, bilden die<br />
drei Punkte Availability, Consistency und<br />
Partition Tolerance das CAP-Theorem-<br />
Dreieck, für das Eric Brewer schon im<br />
Jahre 2000 gezeigt hat, dass nur zwei<br />
dieser drei Ziele gleichzeitig erreichbar<br />
sind.<br />
Consistent Hashing ist eine Methode,<br />
die es erlaubt, eine Gruppe von Rechnerknoten<br />
(Nodes) mit besonders geringem<br />
Aufwand zu verkleinern oder zu<br />
vergrößern. Eine Veränderung hat dann<br />
nämlich meistens nur Auswirkungen auf<br />
Nachbarknoten, wogegen bei konventionellen<br />
Verfahren häufig so gut wie alle<br />
Knoten betroffen sind. Dazu baut man<br />
einen Ring (Abbildung 5) wie folgt auf:<br />
Alle Elemente der Datenbank werden<br />
mit einem geeigneten Hashverfahren wie<br />
MD5 auf einen Adressraum abgebildet,<br />
beispielsweise von 0 bis 2^160. Dieser<br />
Adressraum wird dann auf Rechnerknoten<br />
aufgeteilt. Bei Bedarf können die<br />
Rechnerknoten wieder virtuelle Nodes<br />
enthalten. Jedes Datenbankobjekt be-<br />
kommt nun eine<br />
eindeutige Position<br />
im Ring. Jeder<br />
Node kann<br />
nun auf N weitere<br />
Nodes replizieren<br />
und so für weitere<br />
Sicherheit sorgen.<br />
Dieses System ist<br />
dann einfach rekonfigurierbar.<br />
Multi Version<br />
Concurrency<br />
Control (MVCC):<br />
Dieses Verfahren<br />
sei anhand einer<br />
Analogie zur<br />
Versionskontrolle<br />
veranschaulicht.<br />
Viele Versionskontrollsysteme<br />
in den<br />
90er-Jahren arbeiteten mit Locks (pessimistische<br />
Sperrverfahren). Zwei Softwareentwickler<br />
konnten nicht gleichzeitig<br />
dieselbe Datei editieren. Einer musste<br />
warten, bis der Lock aufgelöst war. Es hat<br />
sich jedoch gezeigt, dass dieses Verfahren<br />
bei vielen Entwicklern (in hochgradig<br />
verteilten und parallelen Systemen) nicht<br />
immer praktikabel ist. Daher setzen Subversion<br />
und besonders moderne Systeme<br />
wie Git und Mercurial darauf, nicht zu<br />
sperren, sondern stattdessen mit Versionen<br />
zu arbeiten (optimistische Sperrverfahren).<br />
Oftmals ist es nämlich viel<br />
leichter, sehr seltene Konflikte zu lösen,<br />
als ständig in Locks hängenzubleiben.<br />
Das Gleiche gilt ganz allgemein für parallel<br />
schreibende Systeme, die den gleichen<br />
Datenbestand bearbeiten möchten.<br />
Verwendet man wie bei MVCC einfach<br />
nummerierte Versionen, dann kann es<br />
zwar sein, dass Prozesse ältere Versionen<br />
erhalten oder dass zwei Transaktionen<br />
zwei verschiedene Versionen des<br />
gleichen Objektes schreiben, aber das<br />
Objekt ist nicht mehr gesperrt. Nach anfänglicher<br />
Zurückhaltung der Industrie<br />
ist dieses Verfahren nicht nur bei NoSQL-<br />
<strong>Datenbanken</strong>, sondern auch in allen bedeutenden<br />
relationalen <strong>Datenbanken</strong><br />
und sogar in Programmiersprachen wie<br />
Clojure implementiert [8].<br />
Vector Clocks sind ein wichtiges Mittel<br />
in verteilten Systemen, um zeitliche Zusammenhänge<br />
zu erkennen. Oftmals können<br />
oder möchten sich Systeme nicht auf<br />
reale Uhren wie Unix Epoch-Zeitstempel<br />
verlassen. In diesem Fall werden einfach<br />
eindeutige Identifier (IDs wie beispielsweise<br />
eine Prozess ID) zusammen mit einem<br />
persönlichen Counter versendet, die<br />
eine Nachricht eindeutig auszeichnen.<br />
Mit dieser Menge an IDs und Zeitstempeln<br />
liefert der Vektor die Möglichkeit,<br />
Ereignisse wie das Schreiben in eine Datenbank<br />
zeitlich zu ordnen. Viel wichtiger<br />
ist es aber zu erkennen, dass das<br />
Schreiben eines Wertes X die Ursache<br />
eines anderen Ereignisses ist. Dies ermöglicht<br />
es Clients, selbst zu entscheiden,<br />
welche Version eines Objektes jetzt<br />
die beste oder aktuellste ist [9]. Wer<br />
dagegen eine Einigung aller Teilnehmer<br />
erreichen möchte, muss unter Umständen<br />
auf komplexere Protokolle wie Paxos<br />
zurückgreifen [10].<br />
Wide Column Stores oder auch Column<br />
Families fühlen sich ein bisschen wie<br />
eine Mischung aus relationalen Tabellen<br />
und Excel-Sheets an. Kennzeichnend ist,<br />
dass die unterste Ebene meistens Schlüssel<br />
und Werte speichert, ähnlich einer<br />
Tabelle. Eine beliebige Anzahl dieser<br />
Schlüssel-Wert-Paare lassen sich dann<br />
meist in einer Column Family zusammenfassen,<br />
die wiederum selbst einen<br />
Schlüssel repräsentiert. Auf oberster<br />
Ebene steht dann meistens noch eine<br />
Domain oder ein Keyspace zur Verfügung.<br />
Der Aufbau ist also meistens der:<br />
Keyspace x ColumnFamily x (Key ‐> Value*)<br />
Die bekanntesten Vertreter, die alle auf<br />
die Verarbeitung extrem großer Datenmengen<br />
ausgelegt sind, heißen:<br />
n Hadoop / HBase (Hypertable, Cloudera)<br />
n Cassandra<br />
n Amazon SimpleDB<br />
Hadoop/HBase ist das Pendant zu<br />
Googles BigTable und wurde von Yahoo<br />
initiiert. Dabei ist Hadoop das komplette<br />
Apache-Projekt mit vielen Unterprojekten.<br />
HBase definiert nun das spaltenorientierte<br />
Datenbanksystem als mehrdimensionales<br />
assoziatives Array auf der<br />
Hadoop-Infrastruktur wie dem Hadoop<br />
Filesystem (HDFS). Der Zugriff erfolgt<br />
über Java, REST und Thrift.<br />
Hypertable ist im Gegensatz zu Hadoop/<br />
HBase (Java) in C++ geschrieben. Dadurch<br />
ist es deutlich schneller und ressourcenschonender<br />
als Hadoop. Es wird<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
51
<strong>Datenbanken</strong><br />
NoSQL<br />
Cassandra ist einfach skalierbar, Replikation,<br />
Konsistenz und Latenzzeit der<br />
Antworten sind leicht konfigurierbar. Einen<br />
Single Point of Failure gibt es nicht.<br />
Allerdings ist es bisher nicht möglich,<br />
das Schema im laufenden Betrieb zu<br />
ändern.<br />
Dokumenten-<strong>Datenbanken</strong><br />
Abbildung 6: Das Datenmodell von Cassandra: Schlüssel verweisen auf weitere Schlüssel-Wert-Paare innerhalb<br />
von Column Families und Keyspaces.<br />
zum Beispiel bei Baidu eingesetzt, dem<br />
Konkurrenten der Google-Suchmaschine<br />
in China. Für Hadoop und Hypertable<br />
gibt es viele solcher Beispiele für wirklich<br />
extrem große Installationen. Cloudera<br />
bietet Services und Werkzeuge rund um<br />
Hadoop an.<br />
Die <strong>Datenbanken</strong> dieser Gruppe bieten<br />
einfachste Skalierung durch Hinzufügen<br />
eines Region-Servers mit handelsüblicher<br />
Hardware. Sie verfügen über eine starke<br />
Community und lassen sich leicht aufsetzen,<br />
das Optimieren und Warten ist<br />
allerdings komplex. Die Replikation funktioniert<br />
nur auf Filesystem-Ebene.<br />
Amazon SimpleDB: Dieser Datenbank-<br />
Dienst ist Teil der der Amazon Web Services<br />
(AWS), in die er sich nahtlos in<br />
eingliedert. Da es sich um einen proprietären<br />
Cloud-Service handelt (SaaS), ist<br />
SimpleDB nicht lokal installierbar. Als<br />
Cloud Service zahlt man ähnlich wie bei<br />
EC2 jeweils Gebühren für Übertragung,<br />
Anfragen und Speicher. Der Zugriff erfolgt<br />
via REST, SOAP, Java, C#, Perl, PHP,<br />
Javascript oder über das HTTP-Protokoll.<br />
Angenehm ist, dass die Datenbank automatisch<br />
skaliert. Dabei ist es möglich, auf<br />
etwas Konsistenz zugunsten der Performance<br />
zu verzichten. Das Datenmodell<br />
ist ähnlich dem obigen allgemeinen:<br />
Domains x Items x Attributes, Values.<br />
Dabei können dynamisch beliebige viele<br />
neue Attribute angelegt werden.<br />
Cassandra: Die NoSQL Datenbank Cassandra<br />
entstammt Facebook. Google Big-<br />
Table war hier zwar ebenfalls Vorbild,<br />
das Datenmodell ist aber eher hybrid, da<br />
ein festes Schema erweitert werden kann.<br />
Die API ist komplett auf Thrift ausgelegt.<br />
Cassandra ist komplett in Java geschrieben<br />
und dennoch relativ schnell. Ziel war<br />
es auch hier, den Cassandra-Ring sehr<br />
leicht dynamisch erweitern zu können.<br />
Das Datenmodell Abbildung 6 anhand<br />
eines einfachen Beispiels.<br />
Die Daten in Cassandra bestehen aus<br />
beliebig vielen Keyspaces. Darin sind beliebig<br />
viele Column Families enthalten.<br />
Beide müssen leider in einer XML-Datei<br />
bekannt gemacht werden. Danach folgen<br />
beliebig viele Zeilen, die links durch<br />
einen Key („GUI“, „Controller“ und so<br />
weiter) identifiziert werden und als Hash<br />
dann auf beliebig viele Werte verweisen.<br />
Cassandra erlaubt dabei sogar mit Super<br />
Columns eine weitere Schachtelungstiefe,<br />
in der eine Liste statt eines Values angegeben<br />
werden kann. Eine Einfügeoperation<br />
erfolgt dann beispielsweise in Ruby<br />
ganz einfach mit:<br />
# Der Keyspace<br />
siemens = Cassandra.new("Siemens")<br />
gui = {"dev1" => "Jim", "dev2" => "Tom"}<br />
siemens.insert(:Development, "GUI", gui)<br />
Mit Dokumenten-<strong>Datenbanken</strong> verbinden<br />
sich nicht selten Missverständnisse. Es<br />
geht nicht darum, beliebige Dokumente<br />
wie in einem CRM-System zu verwalten<br />
oder ein Dateisystem nachzubilden.<br />
Was NoSQL-<strong>Datenbanken</strong> stattdessen<br />
auszeichnet, ist der Umstand, dass die<br />
Schemaverantwortung nicht mehr bei<br />
der Datenbank liegt, sondern beim Dokument<br />
und damit beim Entwickler. Dies<br />
ist die eigentliche Revolution. Jeder ist<br />
von relationalen <strong>Datenbanken</strong> gewohnt,<br />
in der Datenbank ein sauberes aber starres<br />
Schema zu definieren. Jetzt hingegen<br />
muss nur noch das Dokumentenformat<br />
festgelegt werden und eindeutig<br />
interpretierbar sein. Dabei überwiegt als<br />
Dateiformat in der Praxis JSON [11]. Es<br />
ermöglicht eine einfachere Notation als<br />
XML und bietet verschachtelte Objekte<br />
an, die aus Arrays, Strings, Zahlen oder<br />
booleschen Werten bestehen können.<br />
Tatsächlich gibt es nur zwei relevante<br />
Document Stores in der NoSQL-Szene:<br />
CouchDB und MongoDB.<br />
CouchDB ist eine echte Web-2.0-Datenbank<br />
und wurde von Damien Katz,<br />
einem ehemaligen Chefentwickler bei<br />
Lotus Notes, gestartet. CouchDB ist zudem<br />
ein Toplevel-Apache-Projekt und<br />
in Erlang geschrieben. Mit am interessantesten<br />
ist die REST-API. Zugriff ist<br />
daher auch über Javascript und fast alle<br />
Sprachen möglich. Alle CRUD-Operationen<br />
sind REST-Operationen, was das<br />
weiter unten folgende Beispiel zeigt. Die<br />
Objekte werden nach einem definierten<br />
Intervall via MVCC gespeichert und sind<br />
damit – im Gegensatz zu manch anderer<br />
Datenbank – nach dem entsprechenden<br />
»fsync« dauerhaft. Die vom Anwender<br />
angelegten Dokumente werden in B-Bäumen<br />
gesichert und mit einer ID und einer<br />
Revi sionsnummer versehen. CouchDB erlaubt<br />
es, mit Map/Reduce via Javascript<br />
Anfragen zu erstellen und diese als Views<br />
zu materialisieren.<br />
Eine der Stärken von CouchDB ist die<br />
Replikation. Über das Web-Interface oder<br />
mit einer HTTP-Anfrage lassen sich zwei<br />
52 Ausgabe 06-2011 Admin www.admin-magazin.de
NoSQL<br />
<strong>Datenbanken</strong><br />
<strong>Datenbanken</strong> synchronisieren oder replizieren.<br />
Damit eignet sich CouchDB ideal<br />
für Offline-Arbeiten und mobile Anwendungen,<br />
wo viele <strong>Datenbanken</strong> synchronisiert<br />
werden müssen. Skalieren lässt<br />
sich CouchDB mit dem Drittanbietertool<br />
Couch Lounge, welches verteiltes Partitionieren/Clustering<br />
im Consistent Hashing<br />
Ring ermöglicht. Mittels Oversharding<br />
kann jede Shard-Partition selbst wieder<br />
durch eine Lounge ersetzt werden, um so<br />
eine fraktale Skalierung zu erreichen.<br />
Dank des einfachen Zugriffs via REST<br />
und Javascript, ermöglicht CouchDB Architekturen,<br />
die ohne Middleware auskommen.<br />
Es kommt sogar noch besser:<br />
Da CouchDB selbst einen Webserver<br />
und den Browser Futon mitbringt (Abbildung<br />
7), ist es möglich, die gesamte<br />
Anwendung als Javascript in der Datenbank<br />
selbst abzulegen (sogenannte<br />
CouchApps) und sie dynamisch zu verändern.<br />
Dies geschieht derzeit bei vielen<br />
Projekten im Web, wo viele Anwender<br />
CouchDB selbst dynamisch und evolutionär<br />
verbessern.<br />
Eine CouchDB-Anfrage, die ein Dokument<br />
anlegt, lässt sich ganz einfach in<br />
der Konsole starten:<br />
curl ‐X PUT http://127.0.0.1:5984/persons/ U<br />
2974a6283c85e98237405f3542ca1344 ‐d U<br />
'{"name":"mahatma gandhi","job":"guru"}'<br />
In der Anfrage ist daher mit »persons«<br />
die Dokumentenklasse und das konkrete<br />
Dokument mit einer ID enthalten.<br />
CouchDB bietet die einfachste Master-<br />
Slave- und Master-Master-Replikation<br />
und eignet sich sehr gut für Webanwendungen.<br />
MongoDB<br />
MongoDB wird federführend von der<br />
Firma 10gen entwickelt. Einer der Chefs<br />
von 10gen ist ehemaliger CTO von<br />
DoubleClick. MongoDB wurde entwickelt,<br />
um die konkreten Anforderungen<br />
eines Web-Unternehmens zu befriedigen.<br />
MongoDB nimmt ebenfalls Daten im Format<br />
JSON an, verwendet für Austausch<br />
und Speicherung aber das Binärformat<br />
BSON. Der Zugriff erfolgt über APIs in<br />
fast allen gängigen Sprachen.<br />
Das primäre Ziel bei MongoDB war Performance.<br />
Dies wird nicht nur durch das<br />
Binärformat, sondern auch durch Me-<br />
Abbildung 7: Die CouchDB-Oberfläche mit dem eingebauten Webbrowser Futon.<br />
mory Mapped Files erreicht. Außerdem<br />
ist MongoDB in C++ geschrieben und<br />
erlaubt Zugriff über alle Programmiersprachen.<br />
Die große Stärke von MongoDB<br />
ist die Indexierung und die Anfrage-API.<br />
MongoDB ist besonders performant, erlaubt<br />
reichhaltige und dynamische Abfragen.<br />
Ein kleiner Nachteil ist, dass es<br />
teilweise keine Transaktionssicherheit<br />
bietet.<br />
Key/Value-<strong>Datenbanken</strong><br />
Warum sind Key/Value-<strong>Datenbanken</strong> in<br />
letzter Zeit so populär geworden? Das<br />
liegt im Wesentlichen daran, das Key/<br />
Value-<strong>Datenbanken</strong> der Schlüssel zu erfolgreicher<br />
Skalierung sind. Das ist bei<br />
anderen Datenmodellen wie Graph-<strong>Datenbanken</strong><br />
oder normalisierten relationalen<br />
Daten dagegen einfach problematischer,<br />
da deren Elemente stärker miteinander<br />
verknüpft sind oder traversiert<br />
werden müssen.<br />
Spätestens seit dem Amazon Dynamo<br />
schossen Key/Value-<strong>Datenbanken</strong> wie<br />
Pilze aus dem Boden. Allein auf [1] sind<br />
einige Dutzend gelistet. Die erfolgreichsten<br />
sind: Riak, Redis, Membase, Tokyo,<br />
Voldemort und vielleicht kann man auch<br />
den Azure Table Storage von Microsoft<br />
dazu zählen. Hier seien nur kurz Riak<br />
und Redis vorgestellt.<br />
Riak entstammt einem Entwicklerteam<br />
(Team Basho) um die Suchmaschine<br />
Akamai. Das Datenmodell bei Riak entspricht<br />
der Form<br />
Bucket x Key x Document<br />
Im Document Feld können JSON-Daten<br />
oder sonstige beliebige Daten stehen. Da<br />
Riak JSON interpretieren und durchsuchen<br />
kann, ist RIAK eigentlich eine interessante<br />
Dokumentendatenbank. Die<br />
Entwickler sind jedoch bescheiden und<br />
ordnen sich in die Kategorie Key/Value<br />
ein. Riak selbst ist in Erlang und C geschrieben<br />
und folgt dem BASE-Modell<br />
(eventually consistent). Als Schnittstelle<br />
bietet Riak ebenfalls REST und die Sprachen<br />
Erlang, Javascript, Java, PHP und<br />
Ruby an. Realisiert wird ein klassischer<br />
Consistent Hashing Ring mit bis zu 2^160<br />
Elementen. Vorbild war auch hier wieder<br />
Amazon Dynamo. Für die Persistenz können<br />
beliebige Provider konfiguriert werden,<br />
auch relationale <strong>Datenbanken</strong>. In<br />
Riak kann durch eine einfache Konfiguration<br />
die Anzahl der Replikate im System,<br />
der erfolgreichen Lesebestätigungen und<br />
der erfolgreichen Schreibbestätigungen<br />
definiert werden. Damit lassen sich die<br />
System-Durability und das Antwortverhalten<br />
genau steuern.<br />
Der Zugriff via REST erfolgt über die<br />
URL »http://bucket/key«. Genauso können<br />
Abfragen hier über eine Art URL<br />
OpenSource Training Ralf Spenneberg<br />
Schulungen direkt vom Autor<br />
Firewall Lösungen mit Linux<br />
5 Tage 14.11. 18.11.2011<br />
OpenLDAP und Kerberos<br />
5 Tage 27.11. 01.12.2011<br />
Snort IDS/IPS Technology<br />
4 Tage 06.12. 09.12.2011<br />
Sichere Mailserver Lösungen mit Postfix<br />
5 Tage 12.12. 16.12.2011<br />
Linux System Administration / LPIC1<br />
5 Tage 09.01. 13.01.2012<br />
Hacking Webapplications<br />
4 Tage 17.01. 20.01.2012<br />
Monitoring mit Nagios & Co.<br />
5 Tage 23.01. 27.01.2012<br />
Sourcefire 3D<br />
4 Tage 23.01. 26.01.2012<br />
Linux Netzwerk Administration / LPIC2<br />
5 Tage 30.01. 03.02.2012<br />
Freie Distributionswahl:<br />
Opensuse, Fedora, Debian Squeeze,<br />
CentOS oder Ubuntu LTS<br />
Ergonomische Arbeitsplätze<br />
Umfangreiche Schulungsunterlagen mit<br />
Übungen<br />
Am Bahnhof 35<br />
48565 Steinfurt<br />
Tel.: 02552 638755<br />
Fax: 02552 638757<br />
Weitere Informationen unter www.ost.de<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
53
<strong>Datenbanken</strong><br />
NoSQL<br />
Abbildung 8: Der eingebaute Redis Performance Test zeigt hier auf einer virtuellen Maschine schon<br />
erstaunliche 34000 Operationen pro Sekunde.<br />
Pattern Matching durchgeführt werden.<br />
Hochinteressant an Riak ist die Fähigkeit,<br />
Links in JSON-Dokumente einbauen zu<br />
können:<br />
links: [<br />
[Bucket1, Key2, Linkname3]<br />
[Bucket10, Key42, Linkname77]<br />
...<br />
Dies gibt Riak schon fast die Mächtigkeit<br />
einer Graph-Datenbank, weil ein Link-<br />
Walking möglich wird, das teilweise<br />
sogar kostenintensive Join-Operationen<br />
spart.<br />
Riak offeriert einfachste Skalierbarkeit,<br />
Konfigurierbarkeit und Replikation (mit<br />
Hinted-Handoff-Selbstreparatur) sowie<br />
als ein besonders mächtiges Feature das<br />
Link-Walking über Links in Dokumenten.<br />
Nachteilig ist, dass bis jetzt noch keine<br />
Literatur zu Riak existiert.<br />
Redis startete als One-Man-Entwicklung<br />
eines cleveren Italieners (Salvatore San<br />
Fillipo), die mittlerweile von VMware eingekauft<br />
wurde. Redis ist komplett in ANSI<br />
C geschrieben. Der Sourcecode erstreckt<br />
sich über nur wenige Dutzend Dateien.<br />
Der Datenzugriff ist über alle gängigen<br />
Programmiersprachen möglich.<br />
Redis zeichnet sich besonders durch<br />
seine Performance aus. Zusammen mit<br />
OrientDB ist Redis vielleicht die schnellste<br />
Datenbank. Redis hält alle Daten im RAM<br />
Listing 1: Schreiben unter Redis<br />
01 $ rc RPUSH mylist Dollar // (Dollar)<br />
02 $ rc LPUSH mylist Euro // (Dollar, Euro)<br />
03 $ rc RPUSH mylist Audi // (Dollar, Euro, Yen)<br />
04 $ rc LRANGE mylist 0 ‐1 // Abfrage liefert (Dollar,<br />
Euro, Yen)<br />
des Servers und schreibt konfigurierbar<br />
auf die Platte. Via Virtual Memory kann<br />
es bei Speicherknappheit auch nur die<br />
Schlüssel im RAM halten. Values werden<br />
dann gegebenenfalls nachgeladen.<br />
Schnell bedeutet, dass auf normaler<br />
Hardware leicht über 100 000 Operationen<br />
pro Sekunde zu erreichen sind.<br />
Die Values bei Redis können (wahlweise<br />
sortierte) Listen und Sets sein. Operationen<br />
lassen sich als Transaktionen gruppieren.<br />
Seit Version 2.0 sind sogar Publish/Subscribe-Operationen<br />
verfügbar.<br />
Redis auf einem frischen UNIX-System<br />
aufzusetzen, zu kompilieren, zu starten<br />
und Werte zu speichern, kostet weniger<br />
als eine Minute, was im Gegensatz zu einer<br />
typischen Oracle-Installation einfach<br />
mehr Spaß bedeutet.<br />
Hochgeschwindigkeit<br />
Redis ist damit der ideale Data-Structure-<br />
Server für Massendaten oder Log-Daten.<br />
Insbesondere in der Spieleindustrie ist<br />
Redis beliebt, wo etwa viele Writes in<br />
Hochgeschwindigkeit und wenige Reads<br />
auf einem Server nötig sind. Redis skaliert<br />
leider noch nicht nativ. Dieses Feature ist<br />
aber in Arbeit. Dennoch implementiert<br />
Redis eine sehr einfache aber leistungsfähige<br />
Replikation, mit der beliebige Shards<br />
aufgebaut oder die Read-Befehle auf beliebig<br />
viele andere Maschinen verteilt<br />
werden können.<br />
In Abbildung 8 ist der eingebaute Redis<br />
Benchmark zu sehen. Ausgeführt auf einem<br />
VMware-Image von Ubuntu 9 unter<br />
Windows sind allein hier schon 34.270<br />
Operationen pro Sekunde möglich. Auf<br />
einem nativen Unix-System (Redis kompiliert<br />
bisher nur unter Unix) ist dagegen<br />
ein Vielfaches dieser Performance – für<br />
alle Redis-Datenstrukturen – möglich.<br />
Das Listing 1 zeigt, wie mit der mitgelieferten<br />
Shell Werte geschrieben werden<br />
können. In diesem Fall eine Liste. Abfragen<br />
über die Programmiersprache sind<br />
ähnlich einfach.<br />
Es gibt kaum <strong>Datenbanken</strong>, die schneller<br />
sind als Redis, was auch für die Inbetriebnahme<br />
gilt. Alle Daten (zumindest<br />
die Schlüssel) müssen ins RAM passen.<br />
Automatische Skalierung ist noch nicht<br />
eingebaut, aber angekündigt.<br />
Graphendatenbanken<br />
Graphendatenbanken gehören zu den am<br />
schnellsten wachsenden Bereichen der<br />
NoSQL-Welt. Dies ist nicht weiter verwunderlich,<br />
da ein bedeutender Teil des<br />
Web 2.0 eine Graphenstruktur hat. Nicht<br />
nur das Web selbst ist ein Graph, auch<br />
viele Anwendungen im Web benötigen<br />
graphenähnliche Daten und passende<br />
Algorithmen. Das betrifft zum Beispiel<br />
Social-Web-Dienste (wer ist wessen<br />
Freund, alias Facebook oder Xing) das<br />
Semantic Web, GIS (Geoinformationssysteme)<br />
und Location Based Services.<br />
Gerade der letzte Bereich spielt eine<br />
große Rolle für Graphendatenbanken.<br />
Die Anforderungen an Mehrschichten-<br />
Graphenabfragen werden immer größer.<br />
So müssen beispielsweise alle Ebenen<br />
für Landkarten, Freunde und Points of<br />
Interest miteinander verknüpft werden,<br />
wenn mobile Anwender mit Smartphones<br />
entsprechende Anfragen stellen.<br />
Interessant ist dabei, dass die Graphentheorie<br />
(zum Beispiel mit Dijkstra 1959)<br />
schon relativ alt ist. Um so erstaunlicher<br />
ist es, dass es allgemeine und leistungsfähige<br />
Graphendatenbanken noch nicht<br />
allzu lange gibt. So hat sich erst in den<br />
letzten Jahren das Modell des Property-<br />
Graphen ganz vorne positioniert. Bei<br />
einem Property-Graphen [12] können<br />
sowohl Kanten als auch Knoten mit beliebigen<br />
Attributen (ähnlich eines Objektes)<br />
versehen werden. Dieses mächtige<br />
Datenmodell erlaubt auch die einfache<br />
Abbildung von komplexen gerichteten<br />
und gewichteten Graphen.<br />
Während man vor fünf oder zehn Jahren<br />
noch lange nach entsprechenden Daten-<br />
54 Ausgabe 06-2011 Admin www.admin-magazin.de
NoSQL<br />
<strong>Datenbanken</strong><br />
banken suchen musste und oft nur wenige<br />
Speziallösungen gefunden hat, gibt<br />
es seit einigen Jahren gut ein Dutzend<br />
dieser <strong>Datenbanken</strong>, die an dieser Stelle<br />
aufgelistet sein sollen: Neo4j, sones,<br />
InfoGrid, DEX, HyperGraphDB, Infinite-<br />
Graph, OrientDB, FlockDB, Google Pregel,<br />
Apache Hama / Hamburg, VertexDB<br />
und Filament. Viele dieser Projekte wie<br />
das deutsche sones, Infinite Graph oder<br />
OrientDB sind relativ neu, aber vielversprechend.<br />
Schnell gefunden<br />
Vorteil der Graphendatenbanken ist,<br />
dass Links, das heißt die Verbindungen<br />
zwischen den Kanten, schnell gefunden<br />
und traversiert werden können. Links<br />
sind hier sozusagen First Class Citizens.<br />
Leider wird in der Industrie oft ein Graphenmodell<br />
in eine relationale Datenbank<br />
gepresst, was fatale Auswirkungen<br />
hat. Das Traversieren und Suchen wird<br />
extrem ineffizient. Graphendatenbanken<br />
sind hier um ein Vielfaches schneller.<br />
Leider ist die Suche in extrem großen<br />
Graphdatenbeständen generell problematisch<br />
und eine Skalierung von großen<br />
Graphendatenbanken auch nicht einfach.<br />
Ein Grund dafür ist, dass das Sharding,<br />
das heißt die Aufteilung des Datenbestandes<br />
des Graphen auf mehrere Server nicht<br />
ohne große Nachteile möglich ist.<br />
Neo4j: An dieser Stelle soll ein System<br />
ausführlicher erwähnt werden: Bei Neo4j<br />
handelt es sich um eine der ältesten Propeller-Graph-<strong>Datenbanken</strong>,<br />
die seit 2003<br />
in Produktion und seit 2007 auch als<br />
Open-Source-Version verfügbar ist. Neo4j<br />
implementiert einen ACID-Datenzugriff<br />
und ist im Wesentlichen auf Performance<br />
getrimmt. Es ist in Java implementiert<br />
und läuft nur auf einer JVM. Nebenbei<br />
können auch Indexsysteme wie Lucene<br />
& Solar angebunden werden.<br />
Neo4j ist als Jar-File verfügbar und<br />
kann daher leicht in das Maven- oder<br />
andere Buildsysteme integriert werden.<br />
Neben einer REST-Schnittstelle gibt es<br />
Anbindungen für fast alle bekannten Programmiersprachen.<br />
Dennoch ist Java die<br />
Haussprache von Neo4j. Listing 2 zeigt<br />
das Erstellen oder Updaten der Property<br />
eines Knotens in Java.<br />
Interessant ist auch, dass Neo4j einige<br />
neue Standards für die Suche in Graphen<br />
implementiert. Auch hier wirkt Neo4j intensiv<br />
an der Standardisierung [13] von<br />
Sprachen und Konzepten wie Tinkerpop<br />
Gremlin, Pipes, Traversern oder Rexter<br />
mit. Bewertung: Neo4j ist industrieerprobt<br />
und liegt in Enterprise-Versionen<br />
wie als Open Source vor. Es existieren<br />
Anbindungen für sehr viele Sprachen.<br />
Das Skalieren der Datenbank oder Sharden<br />
des Datenbestandes ist nicht leicht<br />
möglich (das gilt allerdings für alle Graphendatenbanken).<br />
Sones stammt aus einer deutschen Softwareschmiede<br />
und ist auf den .NET-<br />
Markt spezialisiert. Dennoch liegt eine<br />
REST-Schnittstelle vor. Interessant ist dabei,<br />
dass ein eigenes Filesystem genutzt<br />
werden kann, welches die Datenbank<br />
sehr schnell macht. Ausgefeilte Versionierungsfähigkeiten,<br />
Binärdatenmanagement<br />
und Cloud-Fähigkeit (auf Basis von<br />
Amazon S3 oder MS Azure) zeichnen die<br />
Datenbank aus.<br />
OrientDB entstammt zwar aus der Feder<br />
eines einzigen cleveren Entwicklers namens<br />
Luca Garulli, jedoch ist diese Datenbank<br />
aus zwei Gründen nicht minder<br />
interessant: Die Datenbank war zuerst<br />
eine Key/Value-Datenbank und kann als<br />
solche genutzt werden. Danach wurde<br />
die Fähigkeit, Dokumente zu verwalten<br />
integriert. Und schließlich wurden Eigenschaften<br />
einer Graphendatenbank hinzugefügt.<br />
Dies macht OrientDB zu einer<br />
sehr universell einsetzbaren Datenbank.<br />
OrientDB ist extrem schnell und braucht<br />
den Benchmark mit anderen berühmten<br />
Turbo-NoSQL-<strong>Datenbanken</strong> wie MongoDB<br />
oder Redis nicht zu fürchten.<br />
<strong>Datenbanken</strong> bewerten<br />
Leider sind die Alternativen zu den relationalen<br />
Platzhirschen (Oracle, MySQL)<br />
viel zu wenig bekannt. Andere als relationale<br />
Modelle werden auch in Universitäten<br />
kaum gelehrt. Weiterhin gibt<br />
es kaum Richtlinien, wie man die beste<br />
Datenbank findet. In [1] wurde daher<br />
erstmals versucht, einen Leitfaden oder<br />
eine Checkliste zu erstellen, die dabei<br />
hilft, die beste Datenbank für den Einsatzzweck<br />
zu finden. Die wichtigsten<br />
Kernelemente sind daher funktionale und<br />
nicht-funktionale Anforderungen:<br />
Datenanalyse: Jedes Projekt muss zunächst<br />
die Daten untersuchen. Es gibt<br />
eine Vielzahl von Datenarten wie Domain-,<br />
Log-, Event-, Message-, kritische,<br />
Business-, Meta-, temporäre, Session-,<br />
geographische Daten. Viele davon passen<br />
perfekt in relationale <strong>Datenbanken</strong>.<br />
Andere – wie Session- oder Logdaten –<br />
sind meist viel besser in NoSQL-<strong>Datenbanken</strong><br />
aufgehoben. Meistens geht mit<br />
dieser Analyse die Frage nach dem besten<br />
Daten- und Speichermodell einher (relational,<br />
spalten-, dokumenten- graphen-,<br />
objektorientiert und so weiter). Hier sind<br />
Formate, Datentypen und Agilität wichtig.<br />
Aber auch solche Fragen: Wie wird in<br />
den Daten navigiert? Welche Datenmenge<br />
gilt es zu beherrschen? Wie komplex sind<br />
die Daten?<br />
Transaktionsmodell: Durch die klassischen<br />
relationalen Systeme wird der<br />
Bereich der ACID Transaktionen seit<br />
Langem bestens abgedeckt. Wie vorher<br />
erläutert, gibt es aber viele Anwendungsfelder,<br />
bei denen ein BASE-Modell genauso<br />
gut funktioniert. Hier ist eventuell<br />
eine NoSQL Datenbank besser. Nicht die<br />
ACID-Anforderungen zu erfüllen, eröffnet<br />
(siehe CAP-Teil) andere Möglichkeiten.<br />
Aber natürlich kann es zwischen<br />
ACID und BASE auch andere Transaktionsmodelle<br />
geben, und eine eigene CAP-<br />
Abwägung ist immer wichtig.<br />
Performance: Hier ist eine der ersten<br />
Entscheidungen, ob Scale-Up langfristig<br />
möglich oder ein Scale-Out wirklich nötig<br />
ist. Danach gilt es Datendurchsatz,<br />
Antwortverhalten und Latenzzeitanforderungen<br />
festzulegen.<br />
Anfrageanforderungen: Die Anforderungen<br />
des Projektes geben Aufschluss<br />
darüber, wie intensiv und tief überhaupt<br />
in den Daten gesucht werden muss. Sind<br />
lediglich Schlüssel abzufragen, ist sicher<br />
eine Key/Value-Datenbank besser. Wird<br />
intensiv an Knoten entlang nach Ele-<br />
Listing 2: Neo4j: Knoten erstellen<br />
01 Transaction tx = graphdb.beginTx();<br />
02 try{<br />
03 Node node1 = graphdb.createNode();<br />
04 node1.setProperty("Name","Vitali Klitschko");<br />
05 Node node2 = graphdb.createNode();<br />
06 tx.success();<br />
07 } catch (Exception e) {<br />
08 tx.failure();<br />
09 } finally {<br />
10 tx.finish();<br />
11 }<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
55
<strong>Datenbanken</strong><br />
NoSQL<br />
menten gesucht, ist gegebenenfalls eine<br />
Graphendatenbank besser. Für OLAP und<br />
Business-Analyse sind SQL oder LINQ<br />
unverzichtbar.<br />
Und schließlich legt die Architektur der<br />
Anwendung auch schon einiges fest (mobil,<br />
Peer-to-Peer, lokal, verteilt und so<br />
weiter). Soll etwa auch mobil und offline<br />
gearbeitet werden können, dann ist<br />
beispielsweise CouchDB die erste Wahl.<br />
Oftmals gibt es Datenzugriffsmuster, wie<br />
zum Beispiel ein häufige Writes und nur<br />
wenig Read-Operationen. Auch diese<br />
weisen oftmals in die Richtung einer Datenbankklasse.<br />
Daneben gibt es natürlich auch viele<br />
nicht-fachliche Kriterien:<br />
n Replikation<br />
n Refactoring Bedarf<br />
n Support / Bedienung<br />
n Entwickler-Qualifikation<br />
n Unternehmensvorgaben<br />
n Security<br />
n Vereinheitlichung der Software<br />
n Backup / Recovery / Crash Resistance<br />
n Lizenzkosten / Open Source / Community<br />
Erfahrungen im NoSQL-<br />
Zeitalter<br />
Die Praxiserfahrung zeigt, dass eine qualifizierte<br />
Analyse bei der Suche nach der<br />
besten Datenbank sehr selten stattfindet.<br />
Es herrschen meistens Unternehmensvorgaben<br />
oder noch häufiger Bauchentscheidungen<br />
vor. Leider kann dies Fehler<br />
zur Folge haben, die später viel Geld<br />
kosten.<br />
Die hier konkret vorgestellten NoSQL-<br />
<strong>Datenbanken</strong> zeigen, dass NoSQL-Systeme<br />
in vielen Nischenbereichen ideal<br />
sind. Agile Daten, hohe Availability, Offline-Arbeit,<br />
Performance und Graphendaten<br />
sind nur einige wenige Beispiele, wo<br />
NoSQL-<strong>Datenbanken</strong> Vorteile bringen.<br />
Aber natürlich gilt es, immer die Gesamtheit<br />
der Anforderungen zu analysieren<br />
und abzuwägen.<br />
Aus diesem Vorteil in Nischenbereichen<br />
folgt natürlich, dass NoSQL-<strong>Datenbanken</strong><br />
relationale <strong>Datenbanken</strong> niemals ersetzen<br />
werden. Die Situation ist hier ähnlich<br />
wie bei Programmiersprachen. Genauso<br />
wie sich mit dem Web 2.0 der Raum der<br />
Anforderungen erweitert, erweitert sich<br />
auch die Zahl der verfügbaren Datenbanksysteme.<br />
Eine direkte Migration von relationalen<br />
Systemen auf NoSQL-Systeme ist meistens<br />
nicht so leicht, da viel Anwendungslogik<br />
umgeschrieben werden muss. So<br />
müssen zum Beispiel eventuell Abfragen<br />
umgeschrieben werden, und die Transformation<br />
des Datenmodells ist generell<br />
mit Reibungsverlusten verbunden. Selbst<br />
Firmen wie Twitter haben den Umstellungsaufwand<br />
deshalb gescheut und die<br />
Migration nach NoSQL erst einmal nach<br />
hinten geschoben. Auf NoSQL zu setzen,<br />
lohnt daher oftmals eher bei neuen<br />
Projekten.<br />
Nicht ohne Probleme<br />
Probleme mit NoSQL-<strong>Datenbanken</strong> lauern<br />
oft da, wo mit dieser jungen Datenbankgeneration<br />
noch keine Erfahrungen<br />
vorliegen. So hatte die Firma Foursquare<br />
kürzlich eine Downtime durch die<br />
NoSQL-Datenbank MongoDB Probleme<br />
[14]. Im Einsatz waren zwei große Amazon<br />
EC2-Instanzen mit je 66 GByte RAM.<br />
Jedoch wuchs der Speicherbedarf (MongoDB<br />
nutzt hier Memory Mapped Files<br />
im RAM) bei einer Instanz auf über 66<br />
GByte und bei der anderen auf 50 GByte.<br />
Dies konnte nicht einfach repariert werden,<br />
wäre aber durch Überwachung und<br />
Hinzufügen einer neuen EC2 Instanz<br />
leicht vermeidbar gewesen.<br />
Abschließend soll an dieser Stelle auf<br />
zwei Trends hingewiesen werden, die<br />
auch die NoSQL-Datenbankwelt beeinflussen:<br />
n Oft hat ein Unternehmen hohe Persistenzanforderungen.<br />
In Zukunft<br />
werden diese immer öfter mit mehreren<br />
<strong>Datenbanken</strong> gelöst. Es gibt<br />
schon viele praktische Beispiele zum<br />
hervorragenden Zusammenspiel der<br />
relationalen Welt mit NoSQL. Auch<br />
gibt es schon einige Hybridlösungen<br />
wie etwa HadoopDB. Hier sollte man<br />
nicht voreilig mit dem Argument der<br />
Maintenance-Kosten den Aufbau einer<br />
Multi-DB-Umgebung verhindern.<br />
n Mit der Geschwindigkeit, mit der<br />
Cloud-Lösungen und Virtualisierung<br />
weiter voranschreiten, wird auch das<br />
Datenbank-Hosting zunehmen. Künftig<br />
wird es auf Cloud-Umgebungen<br />
wie Amazon AWS oder Rackspace<br />
viele Dutzende von gehosteten Datenbanklösungen<br />
geben. Hier ist bereits<br />
von DaaS (Database as a Service) die<br />
Rede. Die Kunst dabei wird zukünftig<br />
immer mehr darin bestehen, für die<br />
Menge der Anforderungen die richtige<br />
Mischung an DaaS-Lösungen zu<br />
finden. (ofr)<br />
n<br />
Infos<br />
[1] Stefan Edlich, Achim Friedland, Jens<br />
Hampe, Benjamin Brauer, „Einstieg in die<br />
Welt nichtrelationaler Web 2.0 <strong>Datenbanken</strong>“,<br />
2010, Hanser Verlag<br />
[2] NoSQL-Website:<br />
[http:// nosql‐database. org]<br />
[3] Apache Thrift:<br />
[http:// incubator. apache. org/ thrift]<br />
[4] LINQ: [http:// de. wikipedia. org/ wiki/ LINQ]<br />
[5] Map/Reduce-Technik:<br />
[http:// labs. google. com/ papers/<br />
mapreduce. html]<br />
[6] Amazon’s Dynamo Technology:<br />
[http:// www. allthingsdistributed. com/<br />
2007/ 10/ amazons_dynamo. html]<br />
[7] Eventually Consistent:<br />
[http:// queue. acm. org/ detail. cfm?<br />
id=1466448]<br />
[8] MVCC:<br />
[http:// en. wikipedia. org/ wiki/<br />
Multiversion_concurrency_control]<br />
[9] Vector Clocks:<br />
[http:// blog. basho. com/ 2010/ 01/ 29/<br />
why‐vector‐clocksare‐easy]<br />
[10] Paxos Family of Consensus Protocols:<br />
[http:// sites. google. com/ site/ brturn2/<br />
paxosfamily]<br />
[11] JSON: [http:// json. org]<br />
[12] Graphen: [http:// arxiv. org/ abs/ 1006. 2361]<br />
[13] Tinkerpop: [http:// www. tinkerpop. com]<br />
[14] Probleme beim Sharding:<br />
[http:// highscalability. com/ blog/ 2010/ 10/<br />
15/ troubles‐with‐sharding‐what‐can‐we‐le<br />
arn‐from‐the‐foursquare. html]<br />
Der Autor<br />
Prof. Dr.-Ing. Stefan Edlich ist Professor für<br />
Softwaretechnik und <strong>Datenbanken</strong> an der Beuth<br />
Hochschule für Technik in Berlin. Er startete die<br />
International Conference on Object Databases<br />
(ICOODB). Neben vielen Veröffentlichungen ist<br />
er Autor von zehn IT-Fachbüchern, darunter dem<br />
ersten Fachbuch der Welt zum Thema NoSQL-<strong>Datenbanken</strong>.<br />
Zudem betreibt er das NoSQL-Archiv<br />
[nosql‐database. org] und führt Veranstaltungen<br />
zum Thema NoSQL durch.<br />
56 Ausgabe 06-2011 Admin www.admin-magazin.de
Bla Bla Bla gibt´s bei uns nicht:<br />
Business - Telefonie der outbox AG.<br />
Telefonie ist die Grundlage Ihres Unternehmens.<br />
Ohne sie läuft nichts!<br />
Deshalb konzentriert sich die outbox AG auf das<br />
Wichtigste: Ein funktionierendes Telefonnetz,<br />
praxiserprobte Produkt - Module und einen technisch<br />
versierten Kundensupport.<br />
Überzeugen Sie sich jetzt von unserem<br />
Know - How aus mehr als sieben<br />
Jahren Telefonnetzbetrieb –<br />
Exklusiv für Geschäftskunden.<br />
Auch auf<br />
SIP - Basis und<br />
für Reseller<br />
Infos und Beratung: 0800 / 66 474 640<br />
www.outbox.de/admin
Test<br />
Windows Server 8<br />
neftali77, 123RF<br />
Neuerungen in Windows Server 8<br />
Gekachelt<br />
Auf der hauseigenen Build-Konferenz im kalifornischen Anaheim hat Microsoft die Desktop- und die Server-<br />
Varianten des kommenden Betriebssystems Windows 8 vorgestellt. Schwerpunkt der kommenden Server-Version<br />
sind Cloud-Computing und Virtualisierung. Thomas Joos<br />
Gleichzeitig mit der Desktop-Ausgabe<br />
von Windows 8 arbeitet Microsoft auch<br />
an der neuen Serverversion, die der<br />
Nachfolger von Windows Server 2008 R2<br />
SP1 werden soll. Auch wenn derzeit vor<br />
allem Neuigkeiten des Clients im Vordergrund<br />
stehen, ist mit der Server-Version<br />
ein interessantes Produkt in der Pipeline,<br />
welches zahlreiche Neuerungen bringt.<br />
Viele Neuerungen liegen noch im Dunkeln,<br />
einiges hat Microsoft aber schon<br />
offenbart. MSDN-Abonnenten können<br />
sich die Developer Preview von Windows<br />
Server 8 schon ansehen.<br />
Hyper-V 3.0<br />
In Windows 8 Server integriert Microsoft<br />
die neue Version 3.0 von Hyper-V. Eine<br />
der wichtigsten Neuerungen des Systems<br />
ist die Replikation von virtuellen Maschinen<br />
zwischen verschiedenen Hosts un-<br />
ter dem Namen „Hyper-V-Replica“. Dazu<br />
müssen die Hosts nicht unbedingt Teil<br />
eines Clusters sein, sondern nur in einem<br />
gemeinsamen Netzwerk laufen. Die Replikation<br />
erfolgt asynchron im laufenden<br />
Betrieb. Sie kann zeitgesteuert starten<br />
oder vom Administrator manuell über<br />
einen Assistenten oder die Powershell<br />
angestoßen werden.<br />
Hyper-V 3.0 unterstützt Festplatten – die<br />
jetzt als VHDX-Datei eingebunden sind<br />
– mit bis zu 16 TByte und kann virtuellen<br />
Maschinen mehr als 16 CPU-Kerne<br />
zuweisen. Auch im Bereich der Netzwerkgeschwindigkeit<br />
soll der neue Server<br />
deutlich optimiert sein, und Hyper-V-<br />
Maschinen können direkt auf Funktionen<br />
der Netzwerkkarten zugreifen, ohne den<br />
Umweg über den Host gehen zu müssen.<br />
Hyper-V-Hosts können zukünftig 2<br />
TByte RAM nutzen und 160 CPUs verwalten.<br />
Virtuelle Maschinen beherrschen<br />
in Windows Server 8 bis zu 512 GByte<br />
Arbeitsspeicher. Hyper-V-Cluster unterstützen<br />
in Windows Server 8 mindestens<br />
63 Knoten und bis zu 4000 virtuelle Maschinen.<br />
Virtuelle Maschinen lassen sich<br />
in Hyper-V-Clustern priorisieren und mit<br />
der Live-Migration lassen sich im laufenden<br />
Betrieb mehrere Server auf einmal<br />
zwischen Clusterknoten verschieben.<br />
Fällt ein Knoten aus, verschiebt Hyper-<br />
V 3.0 die virtuellen Maschinen mit der<br />
höchsten Priorität zuerst.<br />
Sieht man sich die Änderungen in Windows<br />
Server 8 an, fällt auf, dass sich die<br />
meisten um die Leistungsverbesserung<br />
in Bereich der Virtualisierung kümmern.<br />
Hyper-V-Hosts lassen sich in Windows<br />
Server 8, inklusive aller virtuellen Maschinen<br />
in einen Energiesparmodus versetzen<br />
und daraus auch wieder aufwecken.<br />
Unternehmen, in denen nachts die<br />
Server nicht unbedingt laufen müssen,<br />
58 Ausgabe 06-2011 Admin www.admin-magazin.de
können auf diesem Weg durch Virtualisierung<br />
deutlich Energie sparen, ohne die<br />
Benutzer zu beeinträchtigen.<br />
Microsoft will VMware mit dem neuen<br />
Server das Leben schwermachen. Der<br />
Vorteil von Windows Server 8 liegt darin,<br />
dass viele Technologien, zum Beispiel<br />
die Replikation virtueller Server, kostenlos<br />
in den Server integriert sind. Beim<br />
Konkurrenten VMware müssen Unternehmen<br />
für solche Funktionen tief in die<br />
Tasche greifen.<br />
Um einen Cluster für Hyper-V aufzubauen,<br />
ist in Windows Server 8 nicht<br />
zwingend ein SAN notwendig. Die virtuellen<br />
Maschinen lassen sich auch auf<br />
einem Dateiserver ablegen. Dazu hat<br />
Microsoft das Server-Message-Block-Protokoll<br />
(SMB) in der Version 2.2 deutlich<br />
verbessert. Dieses erlaubt mehrere parallele<br />
und deutlich schnellere Zugriffe von<br />
Daten über das Netzwerk.<br />
Mehr Power im Netzwerk<br />
und im Speicher<br />
Windows Server 8 kann Netzwerkkarten<br />
ohne speziellen Treiber als sogenanntes<br />
Team zusammenfassen. Die Karten<br />
müssen dafür nicht einmal vom gleichen<br />
Hersteller oder Typ sein, auch wenn das<br />
nach wie vor der bessere Weg ist. Die<br />
kommende Server-Version erlaubt im<br />
Netzwerk eine Zusammenfassung verschiedener<br />
DHCP-Server, ohne einen<br />
Cluster bilden zu müssen.<br />
Mit der neuen Version von Direct Access,<br />
also der Anbindung von Clients über das<br />
Internet ohne VPN-Verbindung, können<br />
Unternehmen Windows-7-Clients, aber<br />
auch Windows-8-Clients mit IPv4 anbinden.<br />
In Windows Server 2008 R2 ist die<br />
Anbindung nur über IPv6 möglich, auch<br />
wenn sich die Verbindungen in IPv4 tunneln<br />
lassen, was die Einrichtung unnötig<br />
kompliziert.<br />
Ebenfalls neu ist die Möglichkeit, virtuelle<br />
Fibrechannel-Adapter zu verwenden<br />
und Speicherplatz im SAN als Speicher-<br />
Pool zur Verfügung zu stellen. Auch andere<br />
Datenträger lassen sich in Windows<br />
Server 8 zu Pools zusammenfassen, was<br />
die Verwaltung deutlich erleichtert. In<br />
solchen Pools lassen sich physische Datenträger<br />
zusammenfassen und auch<br />
hochverfügbar betreiben. Das Betriebssystem<br />
kann solche Pools als einzelne<br />
Festplatte mit einer Größe von bis zu 64<br />
TByte darstellen.<br />
Schnellere Platten-Checks<br />
Festplatten kann der neue Server im laufenden<br />
Betrieb auf Fehler überprüfen.<br />
Dazu hat Microsoft das bekannte Chkdsk<br />
verbessert. Liegt ein Fehler vor, muss der<br />
Datenträger für die Reparatur, also der<br />
Deaktivierung der defekten Sektoren,<br />
offline genommen werden. Das geht in<br />
Windows Server 8 aber deutlich schneller<br />
als in Vorgängerversionen.<br />
Die neue Technik Data Deduplication in<br />
Windows Server 8 verhindert das doppelte<br />
Speichern identischer Daten. Vor allem<br />
Hyper-V-Hosts mit virtuellen Servern<br />
können hier deutlich an Speicherplatz<br />
Sie haben Ihre<br />
IT im Griff.<br />
In Zukunft auch<br />
ohne Überstunden?<br />
NETHINKS unterstützt Sie<br />
als zertifizierter deutscher<br />
OpenNMS-Partner mit:<br />
a Support<br />
a Schulung<br />
a Neukonzeptionen<br />
a Systemoptimierungen<br />
Sprechen Sie uns an!<br />
www.NETHINKS.com<br />
OpenNMS User Conference:<br />
10.05. – 11.05.2012<br />
Abbildung 1: Der neue Server-Manager in Windows Server 8.<br />
www.admin-magazin.de<br />
NETHINKS GmbH | Bahnhofstr. 16 | 36037 Fulda<br />
T +49 661 25000-0 | info@NETHINKS.com
Test<br />
Windows Server 8<br />
einsparen. NTFS in Windows Server 8<br />
wurde dazu deutlich aufgebohrt, ist aber<br />
immer noch das Dateisystem der Wahl.<br />
Verwaltung mit Powershell<br />
oder Befehlszeile<br />
Der Server-Manager in Windows Server<br />
8 kann mehrere Server auf einmal verwalten,<br />
was in Windows Server 2008 R2 nur<br />
eingeschränkt und in Windows Server<br />
2003/2008 überhaupt nicht funktioniert.<br />
Hier verwendet Microsoft ebenfalls die<br />
neue Metro-GUI, was für Administratoren<br />
eine gewisse Umgewöhnung mit sich<br />
bringt (Abbildung 1).<br />
Über den neuen Server-Manager lassen<br />
sich auch Rollen und Features auf<br />
Remoteservern installieren, was vor allem<br />
bei der Verwaltung des bevorzugten GUIlosen<br />
Core-Modus von Windows Server 8<br />
die Arbeit von Administratoren erleichtert.<br />
Der neue Server-Manager soll mehr<br />
als nur ein temporäres Werkzeug sein,<br />
das Administratoren zur Installation und<br />
Einrichtung verwenden, sondern auch<br />
der Diagnose dienen. Dazu kann das<br />
Tool Server zusammenfassen und auch<br />
Fehler auf Servern, die in den Ereignisanzeigen<br />
vorliegen, gruppiert anzeigen.<br />
Auf diesem Weg sehen Administratoren<br />
dann zum Beispiel Fehler gruppiert nach<br />
Dateiserver, Webserver oder Exchange.<br />
Die Befehlszeile gibt es auch in Windows<br />
Server 8 weiterhin. Zusätzlich<br />
enthält der Server – wie übrigens auch<br />
die Client-Version von Windows 8 – die<br />
neue Version 3.0 der Powershell. Bei<br />
der Installation von Windows 8 Server<br />
bevorzugt Microsoft den Core-Modus<br />
und die Verwaltung in Befehlszeile und<br />
Powershell. Dieser Installationsmodus ist<br />
in der neuen Version der offizielle von<br />
Microsoft empfohlene Weg zur Installation.<br />
In Windows Server 2008 R2 ist der<br />
Core-Modus zwar auch verfügbar, aber<br />
derzeit nur wenig im Einsatz. Das soll<br />
sich in der neuen Version ändern. Es gibt<br />
aber weiterhin die grafische Oberfläche<br />
und auch die bekannten Verwaltungswerkzeuge.<br />
In der neuen Version ist es<br />
möglich, die Core-Version direkt auf eine<br />
Installation mit grafischer Benutzeroberfläche<br />
zu erweitern. In Windows Server<br />
2008 R2 ist das nicht möglich.<br />
Um die PowerShell-Befehle schneller zu<br />
lernen, zeigen die grafischen Oberflächen<br />
in Windows Server 8, zum Beispiel der<br />
Server-Manager, die ausgeführten Aktionen<br />
auch als Powershell-Befehl an. Diese<br />
lassen sich einfach kopieren und auch in<br />
die Powershell integrieren. Diese unterstützt<br />
zur Verwaltung alle verfügbaren<br />
Serverrollen, auch Hyper-V. Generell lassen<br />
sich Core-Server deutlich einfacher<br />
und effektiver über das Netzwerk verwalten<br />
als in Windows Server 2008 R2.<br />
Mehr Sicherheit und<br />
Verschlüsselung<br />
Die Verwaltung der Berechtigungen im<br />
neuen Server ändern sich ebenfalls. Mit<br />
der dynamischen Zugriffskontrolle können<br />
Administratoren die Berechtigungen<br />
für den Zugriff auf Dateien, Ordner und<br />
sogar SharePoint-Bibliotheken einfacher<br />
steuern. Dazu lassen sich Dateien mit<br />
Metadaten versorgen, die nur bestimmten<br />
Anwendern, zum Beispiel allen Anwendern<br />
einer Abteilung oder der Geschäftsführung,<br />
den Zugriff erlauben,<br />
unabhängig in welchem Verzeichnis oder<br />
welcher Freigabe die Daten gespeichert<br />
sind. Das Ganze funktioniert lückenlos<br />
auch beim Verschieben von Dateien in<br />
Sharepoint-Bibliotheken.<br />
Zusätzlich lässt sich über diesen Weg<br />
auch festlegen, von welchen Geräten aus<br />
Anwender auf die Daten zugreifen dürfen.<br />
Unsichere PCs, Heim-Arbeitsplätze,<br />
Computer in Internetcafés oder Smartphones<br />
lassen sich so aussperren. Bitlocker-Laufwerksverschlüsselung<br />
kann in<br />
Windows Server 8 auch Clustervolumes<br />
sichern. Das ist dann sinnvoll, wenn bestimmte<br />
Daten nicht im lokalen Netzwerk<br />
gespeichert sind, sondern bei einem<br />
Cloudanbieter liegen.<br />
Remotedesktop<br />
Mit RemoteFX lassen sich Anwendungen<br />
auf Remotedesktop-Servern (ehemals<br />
Terminalservern), genauso betreiben wie<br />
lokal installierte Anwendungen. In Windows<br />
Server 8 verbessert Microsoft das<br />
Protokoll noch einmal. Auf diesem Weg<br />
lassen sich auf Tablets zum Beispiel Anwendungen<br />
bedienen wie lokal installierte<br />
Programme, obwohl sie auf einem<br />
Remotedesktop-Server laufen. Auch leistungsschwache<br />
Geräte können so Multimedia-Anwendungen<br />
laufen lassen, der<br />
Server bereitet die Daten auf und schickt<br />
sie dann zum Client. Die Aufbereitung<br />
der Daten verbessert Microsoft in der<br />
neuen Version von RemoteFX dazu deutlich.<br />
Auch RDP-Verbindungen zwischen<br />
Windows-8-Clients nutzen RemoteFX, in<br />
Windows Server 2008 R2 SP1 ist diese<br />
Funktion nur Servern vorbehalten. Verbessert<br />
hat Microsoft dazu auch den<br />
neuen Remotedesktop-Client. Er verwaltet<br />
jetzt alle konfigurierten Verbindungen<br />
auf einem PC übersichtlich, ganz ohne<br />
Zusatzwerkzeuge.<br />
Keine ARM-Unterstützung<br />
Auch wenn es einige Gerüchte dazu im<br />
Internet gibt, wird Windows Server 8 laut<br />
Bill Laing, dem Vice President für Server,<br />
keine ARM-Prozessoren unterstützen.<br />
Diese stehen aktuell nur als 32-Bit-Version<br />
zur Verfügung. Windows Server 8<br />
wird allerdings ausschließlich als 64-Bit-<br />
Version auf den Markt kommen, wie der<br />
Vorgänger Windows Server 2008 R2. Der<br />
Windows-8-Client wird dagegen auch auf<br />
ARM-Prozessoren laufen.<br />
Fazit<br />
Viele der neuen Fähigkeiten von Windows<br />
Server 8 sind schon bekannt, alle<br />
Funktionen sind derzeit allerdings noch<br />
nicht offengelegt. Was schon klar ist:<br />
Microsoft will mit dem neuen Server vor<br />
allem in Cloud-Umgebungen und bei der<br />
Virtualisierung punkten. Hier bietet die<br />
neue Version zahlreiche neue Features,<br />
die sogar kostenlos zur Verfügung stehen.<br />
Ob sich eine Aktualisierung auf die neue<br />
Version lohnt, lässt sich erst mit einer<br />
endgültigen Version oder zumindest dem<br />
Release-Kandidaten beurteilen. (ofr) n<br />
Infos<br />
[1] Windows Server 8: [http:// www. microsoft.<br />
com/ en‐us/ server‐cloud/ windows‐server/<br />
v8. aspx]<br />
Der Autor<br />
Thomas Joos ist freiberuflicher IT-Consultant<br />
und seit über 20 Jahren in der IT tätig. Neben<br />
seinen Projekten schreibt er praxisnahe Fachbücher<br />
und Fachartikel rund um Windows und<br />
andere Microsoft-Themen. Online trifft man ihn<br />
unter [http:// thomasjoos. spaces. live. com].<br />
60 Ausgabe 06-2011 Admin www.admin-magazin.de
Open Source goes<br />
Präsentieren auch Sie sich auf der größten Sonderausstellung<br />
der CeBIT 2012 zum Thema Linux und freie Software –<br />
hervorragend platziert in Halle 2!<br />
Kleine und mittlere Unternehmen treffen hier auf hochrangige Entscheider.<br />
Nirgendwo sonst finden Sie eine bessere Business-Umgebung für Ihre<br />
Open-Source-Lösungen.<br />
Ein rundum perfekter Messeauftritt ‒<br />
maximaler Erfolg mit minimalem Aufwand:<br />
• individuelle Standgrößen ab 4 m²<br />
• Alles-inklusive-Service (Standbau, Catering, Konferenzräume, u.v.m.)<br />
• direkte Ansprache zahlreicher Neukunden<br />
• ausgewählte Fachvorträge und Keynotes im Open Source Forum<br />
• Kontakt zur internationalen Open Source Community<br />
Jetzt anmelden!<br />
www.open-source-park.de<br />
oder 0 26 1 - 20 16 902<br />
In Kooperation mit:<br />
Veranstalter:<br />
pluspol.de<br />
Marketing Kommunikation Internet
Test<br />
Archipel<br />
Management virtueller Server mit Archipel<br />
Rettungsinsel<br />
Archipel hilft dem Administrator, Virtualisierungs-Umgebungen auf Basis von KVM, Open VZ, VMware, Xen,<br />
Virtualbox oder LXC in einem einzigen GUI zu verwalten. <strong>ADMIN</strong> testet die Beta-Version 3, die einen ersten<br />
eindruck vom zentralen Virtualisierungs-Management der Zukunft verschafft. Thomas Drilling<br />
Der Umfang an Virtualisierungs-Technologien<br />
hat anno 2011 ein beträchtliches<br />
Ausmaß angenommen. Lässt man die<br />
kommerziellen Akteure im Cloud-Business<br />
von VMware, Citrix und Red Hat<br />
mit ihren integrierten oder proprietären<br />
Verwaltungslösungen außen vor, besteht<br />
immer noch reichlich Bedarf, die nicht<br />
minder interessanten Betriebssystem-,<br />
Para- und Hardware-Virtualisierer LXC,<br />
Open VZ, VMware, Xen, Virtualbox und<br />
KVM unter eine gemeinsame Verwaltungsoberfläche<br />
zu bringen, woran Libvirt<br />
[1] einen maßgeblichen Anteil hat.<br />
Das mit Spannung erwartete Archipel [2]<br />
von Antoine Mercadal basiert auf Libvirt<br />
und dem XMPP-Protokoll. Archipel unterstützt<br />
alle Virtualisierungstechnologien,<br />
für die Libvirt entsprechende Treiber bereithält.<br />
Aktuell sind das KVM/Qemu,<br />
Xen, Linux Containers (LXC), Open VZ,<br />
User Mode Linux (UML), VMware GSX/<br />
ESX, VMware Workstation/Player, Microsoft<br />
Hyper-V und seit einiger Zeit auch<br />
Virtualbox. Damit steht Archipel auch in<br />
Konkurrenz zu Red Hats Virtual Machine<br />
Manager (VMM) [3] und verschiedenen<br />
anderen GUIs für KVM/Qemu [4].<br />
Red Hats eigene Enterprise-Virtualisierung<br />
(RHEV) basiert zwar ebenfalls auf<br />
KVM, enttäuschte Admins aber bis einschließlich<br />
der Version 2.2 dadurch, dass<br />
eine Administration unter Linux kaum<br />
sinnvoll möglich war, weil Red Hat auf<br />
Microsofts Management-Konsole setzt.<br />
Sogar der Einsatz des hauseigenen Virt-<br />
Managers scheitert am Einsatz zwar<br />
leistungsfähiger aber leider vollkommen<br />
neuer Technologien wie Spice. Immerhin<br />
verspricht die neue Version 3 mit integriertem<br />
Virtualization Manager als Java-<br />
Anwendung Besserung.<br />
Vielfältig<br />
Wer jedoch seine Virtualisierungs-<br />
Infrastruktur mit KVM, Xen oder VMware<br />
ESX/GSX betreibt oder ausschließlich Betriebssystem-Virtualisierung<br />
(Ressource<br />
Container) betreibt, dem steht mit Archipel<br />
in Kürze ein leistungsfähiges Werkzeug<br />
zur Verfügung. Ähnlich integrative<br />
Ansätze verfolgen die von <strong>ADMIN</strong> bereits<br />
vorgestellten Virtualisierungslösungen<br />
von Univention [5] und Proxmox [6].<br />
Archipel befindet sich noch in einem frühen<br />
Entwicklungsstadium. Die aktuelle<br />
Beta-Version 3.2 von Archipel [7] vom<br />
Juli 2011 dient als Grundlage des Tests im<br />
Rahmen einer kleinen Installation.<br />
Archipel bietet eine Weboberfläche zum<br />
Verwalten virtueller Maschinen und verwendet<br />
zur Kommunikation das XMPP-<br />
Protokoll und zum Verwalten virtuelle<br />
Maschinen die Libvirt. Damit ist Archipel<br />
in der Lage, heterogene Landschaften von<br />
virtuellen Maschinen zentral zu verwalten<br />
und zu überwachen, im Wortlaut der<br />
Archipel-Entwickler zu „orchestrieren“.<br />
Archipel bereitet unter anderem die aktuellen<br />
Betriebsparameter der einzelnen<br />
VMs in Echtzeit grafisch auf. Libvirt ist<br />
eine freie C-Bibliothek, die über ein eigenes<br />
API eine einheitliche Schnittstelle<br />
zum Verwalten verschiedener Virtualisierungslösungen<br />
zur Verfügung stellt und<br />
zu deren Unterstützung eigene Treiber<br />
für KVM, Virtualbox, VMware, Xen, LXC,<br />
Open VZ und so weiter mitbringt.<br />
Die Bibliothek fungiert mit ihrer API<br />
als Abstraktionsschicht zwischen Virtualisierungssoftware<br />
und Management-<br />
Werkzeugen. XMPP dürfte vielen Admins<br />
unter der Bezeichnung Jabber bekannt<br />
© arquiplay77, Fotolia<br />
62 Ausgabe 06-2011 Admin www.admin-magazin.de
Archipel<br />
Test<br />
Abbildung 1: Die physische Archipel-Infrastruktur<br />
besteht aus dem oder den Archipel-Agenten, die auf<br />
dem jeweiligen Hypervisor laufen, einem zentralen<br />
XMPP-Server (Jabber), sowie einem Webserver, der<br />
die GUI für die anfragenden Browser-Clients zur<br />
Verfügung stellt.<br />
sein und versteht sich als „erweiterbares<br />
Nachrichten- und Anwesenheitsprotokoll“.<br />
XMPP hält sich an den XML-<br />
Standard und kommt primär für Instant<br />
Messaging zum Einsatz, es gibt aber verschiedene<br />
XMPP-Erweiterungen. Jabber<br />
wird seit 1999 von Peter Saint-Andre entwickelt.<br />
Mit der Verabschiedung als IETF-<br />
Standard im Jahr 2004 wurde Jabber offiziell<br />
in XMPP (Extensible Messaging and<br />
Presence Protocol) umbenannt.<br />
Die grafische Benutzeroberfläche von<br />
Archipel basiert auf dem Capuccino-<br />
Javascript-Framework [8], mit dem die<br />
Entwickler versuchen, das Look-and-Feel<br />
von Mac OS im Browser nachzubilden.<br />
Zur grafischen Fernsteuerung der virtuellen<br />
Maschinen dient auch bei Archipel<br />
das VNC-Framework, allerdings verzichtet<br />
Archipel vollständig auf Flash und<br />
Java und setzt am Webclient durchgängig<br />
auf Javascript. Außerdem ist Archipel<br />
modular aufgebaut und soll sich künftig<br />
auch durch ein SDK erweitern lassen.<br />
Die aktuelle Beta-Version 3.2 steht unter<br />
[7] zum Download zur Verfügung.<br />
Wer es noch aktueller mag, kann sich<br />
die Nightly-Builds unter [9] zu Gemüte<br />
führen. Beide Quellen bieten Agents und<br />
Clients in Form kompletter Tar-Pakete<br />
zum schnellen Download an. Über die<br />
auf Github gehosteten Quellen kann der<br />
Admin optional auch direkt auf möglicherweise<br />
aktuellere Bestandteile des<br />
Abbildung 2: Aus Sicht der Kommunikations-Infrastruktur<br />
steht der XMPP-Server im Zentrum der Architektur und<br />
kommuniziert via XMPP mit dem Hypervisor, den virtuellen<br />
Maschinen und den Benutzern.<br />
Archipel-Projektes zugreifen. Archipel ist<br />
unter der AGPL v3 lizensiert und damit<br />
frei verfügbar.<br />
Architektur<br />
Ein Archipel-Szenario („Archipel Datacenter“)<br />
besteht aus einem oder mehreren<br />
Hypervisor-Systemen (Xen, KVM,<br />
VMware), auf denen der sogenannte Archipel-Agent<br />
läuft, einem Jabber-Server<br />
(XMPP) als Kommunikationszentrale,<br />
dem Webserver zum Bereitstellen der<br />
GUI sowie den jeweiligen Clients. Alle<br />
Komponenten können auf einem physischen<br />
Host oder auch auf getrennten<br />
Maschinen laufen. Das Installieren aller<br />
Komponenten auf einer einzigen Maschine<br />
ist, außer eben zu Testzwecken,<br />
in der Regel wenig sinnvoll. In der Praxis<br />
sollte typischerweise ein KVM-, Xen, oder<br />
ESX-Hypervisor zum Einsatz kommen. In<br />
unserem Beispiel dient dieser gleichermaßen<br />
als Jabber- und Web-Server (Abbildung<br />
1, Abbildung 2).<br />
Archipel ist größtenteils in Objective-J<br />
(60 Prozent) und Python (35 Prozent)<br />
geschrieben; lediglich der Client ist pures<br />
Javascript. Der Archipel-Agent läuft<br />
auf dem Hypervisor und besteht aus den<br />
Modulen Libvirt-Python (Abbildung 3),<br />
Archipel-Core und Xmpppy.<br />
Der Archipel-Client ist eine typische Webanwendung<br />
(Javascript), die im Browser<br />
auf dem Client-Rechner läuft. Die Installation<br />
von Archipel ist übrigens im<br />
englischsprachigen Wiki auf der Github-<br />
Seite gut dokumentiert. Der folgende<br />
Workshop fußt zum Teil auf der englischsprachigen<br />
Dokumentation. Wer Archipel<br />
aus den fertig geschnürten Paketen<br />
oder den Nightly-Builds installiert,<br />
sollte mit den folgenden Handreichungen<br />
gut zurechtkommen. Für<br />
das Beispiel haben wir Archipel<br />
auf einem aktuellen Kubuntu-System<br />
(11.04) mit KVM installiert,<br />
und zwar der Einfachheit wegen<br />
Agent, Client, Web- und Jabber-<br />
Server auf der gleichen Maschine,<br />
was in freier Wildbahn wohl eher<br />
die Ausnahme sein dürfte.<br />
Die meisten der folgenden Schritte<br />
lassen sich problemlos auf andere<br />
aktuelle Debian-Systeme übertragen.<br />
Das Installieren von Archipel<br />
aus den Quellen ist aufwendiger,<br />
unter [13] aber ebenfalls gut dokumentiert.<br />
Ein Java Developement Kit (Sun<br />
JDK oder Open JDK) wird übrigens nur<br />
beim Installieren aus den Quellen benötigt<br />
und dort auch nur für die Cappuccino<br />
Build Tools. Der Admin kann das<br />
SDK später problemlos wieder entfernen.<br />
Archipel selbst braucht kein Java.<br />
Das Installieren von Webserver und<br />
Client verursacht den geringsten Aufwand,<br />
denn der Client besteht nur aus<br />
Javascript-Code. Außerdem braucht er im<br />
Gegensatz zu den heute üblichen Webanwendungen<br />
weder ein Backend noch<br />
PHP, Java/Servlets oder irgendetwas anderes.<br />
Es genügt, das von [7] oder [9]<br />
heruntergeladene Archiv im gewünschten<br />
Vhost- oder Documentroot-Verzeichnis<br />
auf dem Webserver zu entpacken. Wir<br />
haben uns im Beispiel für den aktuellen<br />
Nightly-Build entschieden.<br />
wget http://nightlies.archipelproject.orgU<br />
/latest‐archipel‐client.tar.gz<br />
tar ‐vxf latest‐archipel‐client.tar.gz<br />
sudo mv Archipel Pfad zum Webserver‐Root<br />
Abbildung 3: Der Python-Interpreter besitzt,<br />
sofern das Paket Python-Libvirt installiert ist,<br />
eine Schnittstelle zur Libvirt, die wiederum über<br />
den jeweiligen Treiber mit dem Hypervisor-Kernel<br />
kommuniziert.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
63
Test<br />
Archipel<br />
der Domain anzugeben. Der Host muss<br />
also im DNS-System unter diesem Namen<br />
bekannt sein. Die im Folgeschritt erfragte<br />
Admin-ID ist eine Jabber-ID (JID) mit<br />
administrativen Rechten. Der Admin<br />
kann diese später unter anderem dazu<br />
verwenden, sich über einen beliebigen<br />
XMPP-Client unter der URL »http://<br />
Hostname:5280/admin« am XMPP-Server<br />
anzumelden, also nicht nur am Archipel-<br />
Frontend. Ejabberd kennt eine Reihe von<br />
Kommandozeilen-Optionen, darunter<br />
die oben erwähnten zum Anlegen oder<br />
Löschen von Benutzern:<br />
sudo ejabberdctl register BenutzernameU<br />
Servername Passwort<br />
Das Löschen erfolgt analog mit<br />
sudo ejabberdctl unregister BenutzernameU<br />
Servername<br />
Abbildung 4: Das Web-GUI von Archipel wirkt modern und aufgeräumt. Dank purem Javascript setzt es auf<br />
Serverseite keine speziellen Frameworks voraus.<br />
Ist der Webserver bereits konfiguriert und<br />
aktiv, steht das Archipel-Web-GUI sofort<br />
unter »http://Server/Archipel‐Verzeichnis«<br />
zur Verfügung (Abbildung 4).<br />
Für das Konfigurieren des Webservers,<br />
insbesondere dessen Sicherheitsmerkmale,<br />
ist der Admin allerdings selbst<br />
zuständig. Da der Archipel-Client kein<br />
Backend benötigt, ist es ratsam, den<br />
Empfehlungen der Archipel-Entwickler<br />
zu folgen und auf eine schwergewichtige<br />
Apache-Installation zugunsten von<br />
Lighttpd zu verzichten, der sich bei<br />
Ubuntu problemlos über das Paketmanagement<br />
installieren lässt.<br />
sudo apt‐get install lighttpd<br />
Dessen Documentroot lässt sich in der<br />
Basis-Konfiguration unter »/etc/lighttpd/<br />
lighttpd.conf« nach Bedarf anpassen.<br />
Jabber-Server installieren<br />
Jetzt fehlt noch ein Server, der das XMPP-<br />
Protokoll unterstützt, das vom Instant-<br />
Messaging-Dienst Jabber bekannt ist.<br />
Die meisten Linux-Distributionen bringen<br />
verschiedene Jabber-Server mit. Wir<br />
haben uns im Test mit Ejabberd für die<br />
von den Archipel-Entwicklern empfohlenen<br />
Jabber-Version entschieden, die sich<br />
über das Paket-Management installieren<br />
lässt:<br />
sudo apt‐get install ejabberd<br />
Archipel braucht außerdem das<br />
Ejabberd-Modul »mod_admin_extra«,<br />
das bei den meisten Distributionen Teil<br />
des Ejabberd-Paketes ist. Je nach verwendeter<br />
Archipel-Version (< Beta 3) ist<br />
außerdem das Modul »ejabberd_xmlrpc«<br />
erforderlich. Erfreulicherweise stellen die<br />
Archipel-Entwickler auf der Github-Seite<br />
eine passende Konfigurationsdatei »/etc/<br />
ejabberd/ejabberd.cfg« als Vorlage zur<br />
Verfügung. Der Admin muss hierin lediglich<br />
den Platzhalter »FQDN« durch den<br />
Hostnamen seines Jabber-Servers ersetzen.<br />
Hat er die geänderte Konfigurationsdatei<br />
»ejabberd.cfg« an die angegebene<br />
Position kopiert, kann er den Daemon<br />
neu starten:<br />
sudo service ejabberd restart<br />
Vor dem ersten Test braucht der Jabber-<br />
Server einen Admin-Benutzer, der sich<br />
wie folgt anlegen lässt:<br />
ejabberdctl register admin Hostname Passwort<br />
Ubuntu- oder Debian-Nutzer können<br />
Ejabberd wahlweise auch mit »sudo<br />
dpkg‐reconfigure ejabberd« konfigurieren.<br />
Das Dpkg-Skript fragt dann den<br />
Hostnamen des Servers und anschließend<br />
den gewünschten Admin-Account<br />
ab. Ersterer ist als Hostnamen inklusive<br />
Nun fehlt noch der Archipel-Agent auf<br />
dem Hypervisor. Im Beispiel haben wir<br />
den Client der Einfachheit halber auf dem<br />
Hypervisor (Node) installiert. Die weitere<br />
Vorgehensweise setzt voraus, dass dieser<br />
bereits läuft und installiert ist. Ist das<br />
noch nicht der Fall, muss der Admin die<br />
notwendigen Voraussetzungen schaffen,<br />
was bei einem aktuellen Ubuntu-System<br />
11.04 durch Installieren von KVM und<br />
Python meist schnell erledigt ist, denn<br />
das Paketmanagement kümmert sich zuverlässig<br />
um aufzulösende Paket-Abhängigkeiten.<br />
Der Vollständigkeit halber seit trotzdem<br />
erwähnt, was ein Archipel-Agent im Einzelnen<br />
braucht: Neben einem Kernel mit<br />
KVM-Unterstützung sowie einer CPU mit<br />
VT-Erweiterung sind das vor allem möglichst<br />
aktuelle Versionen von KVM (0.13),<br />
Qemu (0.12.5), Libvirt (0.8.7 oder höher)<br />
und Python (2.5 oder höher). Darüber<br />
hinaus empfiehlt sich die Installation der<br />
Pakete »python‐magic«, »python‐imaging«<br />
und der »python‐setuptools«. Außerdem<br />
setzt das Archipel-Setup die »libvirtpython‐bindings«<br />
in Form des Paketes<br />
»python‐libvirt« voraus.<br />
Zum Installieren des Archipel-Agents<br />
kann der Admin zwischen der manuellen<br />
Variante auf Basis der Sourcen<br />
oder Nightly-Builds und der wesentlich<br />
einfacheren und schneller umsetzbaren<br />
Variante via Pypi wählen. Für den Produktivbetrieb<br />
ist der erste Weg sicher<br />
sinnvoll, im Beispiel-Setup haben wir uns<br />
64 Ausgabe 06-2011 Admin www.admin-magazin.de
Archipel<br />
Test<br />
einzutragen: »http://Webserver:5280/<br />
http‐bind«. Das Interface ergänzt den<br />
String aber beim korrekten Eintragen der<br />
JID in der Form »admin@Jabber‐Server«<br />
automatisch (Abbildung 6).<br />
Sollte die GUI trotzdem nicht starten,<br />
kann der Administrator mit<br />
sudo ejabberdctl connected_users<br />
prüfen, ob sich der Archipel-Agent erfolgreich<br />
beim Ejabberd anmelden konnte.<br />
Übrigens ist es, wie von den Entwicklern<br />
empfohlen, eine gute Idee, in »/etc/archipel/archipel.conf«,<br />
für »machine_ip« statt<br />
»auto« die tatsächliche IP zu verwenden.<br />
Beim Betrieb auf demselben Rechner ist<br />
zwingend 127.0.0.1 zu verwenden. Jetzt<br />
sollten sich existente KVM- oder Xen VMs<br />
an der Archipel-GUI verwalten lassen.<br />
Abbildung 5: Eine passende Beispiel-Konfiguration für den Archipel-Agent findet sich im Wiki auf der Archipel-<br />
Github-Seite. Im Prinzip ist dabei nur der Name des XMPP-Hosts an die eigene Installation anzupassen.<br />
für Pypi entschieden. Dazu muss der Admin<br />
lediglich das Paket »python‐pip« installieren.<br />
Pip ist ein alternativer Installer<br />
für Python-Pakete von Ian Bicking.<br />
sudo apt‐get install python‐pip<br />
Ist das geschehen, lässt sich der Archipel-Client<br />
direkt von [pypi. python. org]<br />
installieren.<br />
sudo easy_install archipel_agent<br />
Mit einem Aufruf »sudo archipelinitinstall«<br />
sollte die Installation des<br />
Archipel-Agents abgeschlossen sein. Allerdings<br />
muss der Administrator noch<br />
eine Reihe von Parametern in der Konfigurationsdatei<br />
»/etc/archipel/archipel.<br />
conf« anpassen, darunter etwa sämtliche<br />
XMPP-Einstellungen, damit der Archipel-<br />
Agent den Jabber-Server erreichen kann.<br />
Eine Beispiel-Konfiguration findet sich<br />
unter [15] (Abbildung 5).<br />
Die wichtigsten Einstellungen sind im<br />
nebenstehenden Kasten „Agenten-<br />
Konfiguration“ zu finden. Wer die Beta<br />
3 des Achipel-Agents installiert, kann<br />
übrigens im Abschnitt »XMPPSERVER«<br />
den XMLRPC-Mode aktivieren, was das<br />
Verwenden der Shared-Roster-Group-<br />
Funktion erlaubt und damit ein mühseliges<br />
Installieren des XMPP-Moduls<br />
»ejabberd‐xmlrpc« für Ejabberd (siehe<br />
oben) obsolet macht. Mit dieser Einstellung<br />
behandelt Archipel sämtliche<br />
Hypervisor-Systeme als Ejabberd-Administratoren:<br />
[XMPPSERVER]<br />
...<br />
use_xmlrpc_api = True<br />
Der Archipel-Agent lässt sich mithilfe des<br />
Initskriptes starten:<br />
/etc/init.d/archipel start<br />
oder auch manuell durch Eingabe von<br />
»runarchipel«. Wurde der Jabber-Server<br />
wie beschrieben aufgesetzt, sollte jetzt<br />
die Anmeldung am Archipel-Webclient<br />
möglich sein: Mit Jabber-ID und Passwort<br />
ist der beim Einrichten des Jabber-Servers<br />
angelegte Admin-Account gemeint. Bei<br />
»BOSH service« ist der Hostname oder<br />
die Adresse des Webservers wie folgt<br />
Agenten-Konfiguration<br />
Zwar stellen die Archipel-Entwickler eine Basis-<br />
Konfigurationsdatei für den Archipel-Agent zur<br />
Verfügung, diese ist allerdings mindestens in<br />
den folgenden Punkten vom Admin an die eigenen<br />
Wünsche anzupassen:<br />
n »xmpp_server«: Hostname des Ejabberd-<br />
Servers (nicht die IP-Adresse).<br />
n »archipel_root_admins«: Gibt es mehr als einen<br />
Admin-XMPP-Acount für Archipel, lassen<br />
sich die verschiedenen JIDs hier kommasepariert<br />
angeben.<br />
n »machine_ip«: Der Parameter ist per Default<br />
mit »auto« belegt, was allerdings in<br />
der Praxis zu Problemen führte. Besser ist<br />
Archipel verwenden<br />
Hat sich der Admin erfolgreich an der<br />
Archipel-GUI angemeldet, kann er im<br />
Menü »Archipel | Preferences« zunächst<br />
die GUI auf Deutsch einstellen und eine<br />
Reihe weiterer Parameter anpassen (Abbildung<br />
7).<br />
Dank Javascript lässt sich die GUI fast<br />
wie eine native Anwendung bedienen,<br />
es gibt lediglich keine Kontextmenüs.<br />
Die deutsche Lokalisierung ist außerdem<br />
noch nicht vollständig, was man einer<br />
Beta-Version aber nachsehen sollte. Zum<br />
Hinzufügen eines Hypervisors muss der<br />
Admin wie folgt vorgehen.<br />
Damit der Archipel-Client mit einem<br />
Archipel-Agent kommunizieren kann,<br />
muss der Admin einen solchen seiner<br />
Kontakt-Liste (Roster) auf der linken<br />
Seite hinzufügen. Dazu dient das Menü<br />
»Kontakte | Kontakt hinzufügen« oder<br />
es, hier die IP-Adresse des Hypervisors manuell<br />
einzutragen.<br />
n »hypervisor_xmpp_jid«: Hier ist die JID des<br />
Hypervisors einzutragen.<br />
n »qemu_img_bin_path«: Der Pfad zum Qemu-<br />
Img-Binary ist meist korrekt. Es genügt normalerweise,<br />
die Einstellung zu überprüfen.<br />
n »use_xmlrpc_api«: Sollte auf »True« gesetzt<br />
sein, um das Ejabberd-XMLRPC-API verwenden<br />
zu können. Das setzt allerdings voraus,<br />
dass das Ejabberd-XMLRPC-Modul installiert<br />
ist. Dann muss man auch die entsprechenden<br />
Werte für »xmlrpc_host«, »xmlrpc_password«<br />
und »xmlrpc_user« setzen.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
65
Test<br />
Archipel<br />
archipel/archipel.conf«. Die »‐‐uuid« ist<br />
die Libvirt-UUID der existenten virtuellen<br />
Maschine, »‐‐xmppserver« steht für den<br />
aktuellen Archipel-XMPP-Server. Hinter<br />
»‐‐name« folgt der Name für die VM und<br />
ein optionales Zugriffs-Passwort.<br />
Fazit<br />
Abbildung 6: Für das Anmelden an dem Web-GUI wird die Jabber ID (JID) des XMPP-Admins benötigt.<br />
alternativ ein Klick auf das Plus-Symbol<br />
links unter der Kontaktliste gefolgt von<br />
»Einen Kontakt hinzufügen«. Achtung:<br />
Ein Kontakt ist hier kein User, sondern<br />
die JID abzufragenden Hypervisors in der<br />
Form »myfqdn@myfqdn«, den der Admin<br />
durch einen frei wählbaren Nicknamen<br />
für die Kontaktliste ergänzen kann. Lässt<br />
er den Namen frei, erscheint in der Kontaktliste<br />
der Name des Hypervisors. Die<br />
Angabe »account@jabberserver« entspricht<br />
dem Wert für »hypervisor_xmpp_<br />
jid« in »/etc/archipel/archipel.conf«.<br />
In Archipel ist jede virtuelle Maschine<br />
eine XMPP-Entity, genau wie ein Hypervisor<br />
selbst mit seiner eigenen JID. Um<br />
eine virtuelle Maschine zu erzeugen,<br />
stellt der Admin durch einen Klick auf<br />
»Neue VM« eine entsprechende Anfrage<br />
an den gewünschten Hypervisor, der bei<br />
Erfolg mit dem Installations-Dialog für<br />
eine neue virtuelle Maschine antwortet.<br />
Mit den sogenannten Vmcasts bietet<br />
Archipel übrigens ein leistungsfähiges<br />
XML-Template-System zum Erzeugen<br />
virtueller Maschinen (Abbildung 8).<br />
fügung. Zuvor ist allerdings ein laufender<br />
Archipel-Agent zu stoppen. Die Syntax<br />
des Tools ist Folgende:<br />
archipel‐importvirtualmachine ‐‐file=U<br />
sqlite3DB ‐‐uuid=aUUID ‐‐xmppserver=aServerU<br />
‐‐name=aName [‐‐password=aPassword]<br />
Dabei ist ist »‐‐file« die Sqlite3-DB-Datei<br />
des Hypervisors. Der Wert findet sich<br />
bei »hypervisor_database_path« in »/etc/<br />
Antoine Mercadals Archipel ist ein äußerst<br />
vielversprechendes grafisches Werkzeug<br />
zum Verwalten virtueller Libvirt-Maschinen.<br />
Das Konzept geht weit über das<br />
hinaus, was andere Libvirt-GUIs (siehe<br />
Kasten „Weitere Libvirt-GUIs“) bisher<br />
bieten und verspricht, eine universelle<br />
Management-Konsole für beinahe beliebige<br />
virtuelle Maschinen in der Cloud zu<br />
werden. Archipel kann beispielsweise den<br />
Status laufender virtueller Maschinen in<br />
Echtzeit visualisieren und bietet innerhalb<br />
der Oberfläche die Möglichkeit, in Echtzeit<br />
Befehle an die beteiligten VMs abzusetzen<br />
oder untereinander via XMPP zu kommunizieren.<br />
Darüber hinaus lassen sich VMs<br />
und Hypervisor(s) in Gruppen organisieren.<br />
Auf diese Weise bietet Archipel eine<br />
homogene Verwaltung sinstanz für Virtualisierungslösungen<br />
wie KVM, Xen, Open<br />
VZ, Virtualbox.<br />
Das vollständig in Javascript realisierte<br />
Web-Interface beeindruckt schon jetzt<br />
durch sein modernes Look-and-Feel und<br />
Libvirt-VMs importieren<br />
Wer bereits einen KVM-Hypervisor im<br />
Einsatz hat, kann auch bestehende<br />
Libvirt-VMs importieren. Archipel stellt<br />
dazu das Kommandozeilenwerkzeug<br />
»archipel‐importvirtualmachine« zur Ver-<br />
Abbildung 7: Das Web-GUI ist teilweise bereits deutsch lokalisiert. Weitere Konfigurations-Parameter dafür<br />
finden sich im Preferences-Dialog.<br />
66 Ausgabe 06-2011 Admin www.admin-magazin.de
Archipel<br />
Test<br />
Abbildung 8: Mit sogenannten Vmcasts haben die Archipel-Entwickler ein Template-System für virtuelle<br />
Maschinen implementiert.<br />
lädt zum Experimentieren ein. Während<br />
Features wie die bereits implementierte<br />
Geo-Lokalisierung virtueller Maschinen<br />
im Unternehmens-Netz oder das Kommunikations-<br />
und Nachrichtensystem<br />
bereits gut funktionieren, gestaltet sich<br />
die Inbetriebnahme derzeit noch etwas<br />
holprig. Der von uns gewählte Weg via<br />
Pypi unter Verwendung von Standard-<br />
Konfigurationen für Jabber-Server, Webserver<br />
und Archipel-Agent genügt zwar<br />
für einen ersten Eindruck, wird aber den<br />
Anforderungen an eine Produktivumgebung<br />
noch nicht ganz gerecht. (ofr) n<br />
Infos<br />
[1] Libvirt: [http:// libvirt. org]<br />
[2] Archipel: [http:// archipelproject. org]<br />
[3] Red Hat Virt-Manager:<br />
[http:// virt‐manager. org]<br />
[4] GUIs für KVM: [http:// www. linux‐kvm. org/<br />
page/ Management_Tools]<br />
[5] Thomas Drilling, Univention Corporate<br />
Server als Virtualisierungsplattoform,<br />
<strong>ADMIN</strong> 03/11: [http:// www. admin‐magazin.<br />
de/ Das‐Heft/ 2011/ 03/ Univention‐Corporat<br />
e‐Server‐fuer‐virtuelle‐Infrastrukturen]<br />
[6] Thomas Drilling, Proxmox VE, <strong>ADMIN</strong><br />
05/10: [http:// www. admin‐magazin. de/<br />
Das‐Heft/ 2010/ 05/ Container‐und‐Hardwar<br />
e‐Virtualisierung‐unter‐einem‐Dach]<br />
[7] Download von Archipel Beta 3.2:<br />
[http:// archipelproject. org/ download]<br />
[8] Cappuccino: [http:// cappuccino. org]<br />
[9] Nightly-Builds:<br />
[http:// nightlies. archipelproject. org]<br />
[10] Archipel-Sourcen: [https:// github. com/<br />
primalmotion/ archipel]<br />
[11] Archipel installieren: [https:// github. com/<br />
primalmotion/ archipel/ wiki]<br />
[12] Jabber-Beispielkonfiguration: [https://<br />
github. com/ primalmotion/ Archipel/ wiki/<br />
Ejabberd%3A‐Configuration]<br />
[13] Archipel-Client aus den Quellen<br />
installieren: [https:// github. com/<br />
primalmotion/ Archipel/ wiki/<br />
Installation%3A‐Client]<br />
[14] Archipel-Agent aus den Quellen<br />
installieren: [https:// github. com/<br />
primalmotion/ Archipel/ wiki/<br />
Installation%3A‐Agent]<br />
[15] Beispiel-Konfiguration Archipel-Agent:<br />
[https:// github. com/ primalmotion/<br />
Archipel/ wiki/ Installation%3A‐archipel‐ag<br />
ent%27s‐configuration‐file]<br />
Weitere Libvirt-GUIs<br />
Archipel beschränkt sich als ausgewachsene Management-Konsole nicht<br />
nur auf einen Hypervisor-Host und unterstützt eine ganze Palette von<br />
Virtualisierungs-Lösungen, sofern Libvirt sie unterstützt. Wer nicht auf<br />
das finale Release warten möchte, findet im Open-Source-Umfeld weitere<br />
Benutzeroberflächen für KVM/Qemu, Xen oder Open VZ.<br />
n Aqemu, [http:// sourceforge. net/ projects/ aqemu/]: Eine sehr ausgereifte,<br />
fortgeschrittene Qt-Oberfläche zum Einrichten und Verwalten<br />
von KVM/Qemu-VMs im Stil von VMware Workstation. Aqemu lässt sich<br />
unter Debian und Ubuntu via Paketmanagement durch Auswahl des<br />
Pakets »aqemu« installieren.<br />
n Qemulator, [http:// qemulator. createweb. de/ de/]: Noch eine grafische<br />
Benutzeroberfläche für KVM- oder Wemu-VMs. Qemulator kann unter<br />
Debian und Ubuntu via Paketmanagement über das Paket »qemulator«<br />
installiert werden.<br />
n QtEmu, [http:// qtemu. org]: Eine weitere Qt4-Oberfläche für Qemu.<br />
Auch diese GUI lässt sich unter Ubuntu leicht durch Auswahl des Paketes<br />
»qtemu« installieren.<br />
n JQEMU, [http:// www. exprofesso. com/ jqemu/]: Eine Java-Oberfläche<br />
für Qemu, die sich noch in der Entwicklung befindet. Derzeit läuft<br />
JQEMU unter Linux mit JRE/JDK 1.4 oder höher, beherrscht allerdings<br />
nur die Optionen der Qemu-Version 0.8.0.<br />
n Qemu Launcher, [http:// download. gna. org/ qemulaunch]: Auch der<br />
Qemu Launcher bietet eine GUI zum Einstellen der Qemu-Optionen.<br />
Ubuntu 11.04 bringt das Paket »qemu‐lauchner« derzeit nur in der<br />
Version 1.7.4 mit. Es empfiehlt sich allerdings, die aktuelle Version<br />
1.8.0 zu verwenden.<br />
n Open QEMU Manager, [http:// sourceforge. net/ projects/<br />
openqemumanager/]: Open QEMU Manager bietet eine Weboberfläche<br />
zum Verwalten von virtuellen Qemu/KVM-Maschinen.<br />
n QwebMon, [http:// research. xlab. si/ index. php? option=com_content&<br />
task=view& id=107& Itemid=142]: Eine Webapplikation zum Verwalten<br />
von virtuellen Maschinen, die sich aber noch in einem sehr frühen<br />
Entwicklungsstadium befindet.<br />
n Enomalism, [http:// www. enomalism. com]: Realisiert eine Weboberfläche<br />
zur VM-Verwaltung auf einem oder mehreren Hosts.<br />
n Xenner, [http:// kraxel. fedorapeople. org/ xenner]: Das Tool Xenner ermöglicht<br />
die Ausführung von Xen-Gastmaschinen unter KVM.<br />
n ConVirt, [http:// www. convirt. net]: Das früher unter dem Namen<br />
Xenman entwickelte Paket ist ein in Python geschriebenes grafisches<br />
Management-Werkzeug für KVM und Xen.<br />
n Proxmox Virtual Environment, [http:// pve. proxmox. com]: Das Proxmox<br />
Virtual Environment ist eine auf Debian basierende 64-Bit-Linux-<br />
Distribution, die als Virtualisierungsplattform ausgelegt ist, sich als<br />
Appliance um das Aufsetzen eines KVM-Hypervisors kümmert und<br />
gleichzeitig eine Web-GUI zum Verwalten von KVM und Open VZ zur<br />
Verfügung stellt. Proxmox eignet sich auch zum Aufbau eines VM-<br />
Clusters, in dem der Admin die Open-Source-Lösung auf mehreren<br />
Hosts installiert.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
67
Security<br />
LXC<br />
Workshop: Container-Virtualisierung mit LXC<br />
Eingedost<br />
LXC legt mit wenig Overhead Systemcontainer an, um darin beispielsweise<br />
sicherheitskritische Dienste zu isolieren. Als Anwender müssen Sie jedoch<br />
einige Maßnahmen ergreifen, um ein System im System aufzubauen – und<br />
überhaupt hineinzukommen. Eva-Katharina Kunst, Jürgen Quade<br />
© Stefan Balk, Fotolia<br />
Kommen Ihnen die großen Virtualisierungen<br />
wie KVM, Xen, VMware oder Virtualbox<br />
etwas klobig vor, wenn es nur<br />
darum geht, einen einzelnen Dienst wie<br />
einen Druckerspooler oder ein Intrusion<br />
Detection System zu virtualisieren? Dieser<br />
Workshop zeigt, wie Sie stattdessen<br />
die leichtgewichtige Containervirtualisierung<br />
LXC unter Ubuntu 10.04 zu diesem<br />
Zweck einsetzen. Da LXC fester Bestandteil<br />
des Kernels ist, benötigen Sie nur<br />
die Userspace-Tools aus dem Paket »lxc«,<br />
um damit erste Erfahrungen zu machen.<br />
Die Zeile<br />
none /cgroup cgroup defaults 0 0<br />
in »/etc/fstab« hilft das zusätzlich not-<br />
wendige, virtuelle Cgroup-Filesystem unter<br />
»/cgroup« zu mounten.<br />
Das reicht Root bereits, um ein einzelnes<br />
Kommando – etwa eine Shell – in<br />
einem Anwendungs-Container ablaufen<br />
zu lassen:<br />
lxc‐execute ‐n foo ‐f /usr/share/U<br />
doc/lxc/examples/lxc‐macvlan.confU<br />
/bin/bash<br />
Das erzeugt gemäß der Konfigurationsdatei<br />
»lxc‐macvlan.conf« den Container und<br />
startet die Shell. Dass die in einer virtualisierten<br />
Umgebung läuft, zeigt bereits der<br />
Prompt an: Er trägt den geänderten Hostnamen.<br />
Die Liste der Prozesse – durch<br />
»ps auxw« aufgerufen – ist außerordentlich<br />
übersichtlich, Kernelthreads fehlen<br />
dort sogar vollständig. Und wenn Sie in<br />
das Proc-Verzeichnis wechseln, sehen Sie<br />
auch hier im Vergleich zum Hostsystem<br />
die reduzierte Anzahl von Einträgen für<br />
Prozesse.<br />
Ein- und Mehrwegbehälter<br />
Das Anlegen eines Systemcontainers ist<br />
komplexer, weil Sie dafür ein komplettes<br />
System installieren und vorbereiten<br />
müssen. Außerdem will insbesondere auf<br />
dem Host das Netzwerk konfiguriert sein.<br />
Installieren Sie darum auf dem Hostsystem<br />
zusätzlich die Pakete: »debootstrap«,<br />
»bridge‐utils« und »libcap2‐bin«. Als Teil<br />
der Netzkonfiguration benötigen Sie eine<br />
Brücke, um den Container unter einer<br />
eigenen IP-Adresse zu erreichen. Steht<br />
der Inhalt aus Listing 1 in »/etc/network/<br />
interfaces«, aktiviert »/etc/init.d/networking<br />
restart« die Einstellungen.<br />
Legen Sie nun ein Verzeichnis an, beispielsweise<br />
»/lxc«, in dem Sie die Systemdateien<br />
des Gastsystems ablegen. Ein<br />
Unterverzeichnis davon repräsentiert das<br />
Root-Filesystem des neuen Containers:<br />
mkdir -p /lxc/rootfs.guest<br />
Außerdem benötigen Sie eine Datei mit<br />
Namen »/lxc/fstab.guest«, die Pfade zu<br />
Mountpoints ähnlich wie in »/etc/fstab«<br />
festlegt (siehe Listing 2).<br />
Bereiten Sie jetzt das Gastsystem vor.<br />
Dazu wechseln Sie in dessen eben angelegtes<br />
Verzeichnis und erzeugen dort<br />
mit dem Debian-Installer ein minimales<br />
Linux-System (hier für die 64-Bit-Variante,<br />
für die 32-Bit-Version tauschen Sie<br />
»amd64« gegen »i386« aus):<br />
debootstrap ‐‐arch amd64 lucidU<br />
/lxc/rootfs.guest/U<br />
http://archive.ubuntu.com/ubuntu<br />
Jetzt müssen Sie das neue System noch<br />
anpassen: Kommentieren Sie in der Datei<br />
»/lxc/rootfs.guest/lib/init/fstab« die Zeilen<br />
aus, die »/proc«, »/dev« und »/dev/<br />
pts« mounten. Sie vergeben einen Hostnamen,<br />
indem Sie die Datei »/lxc/rootfs.<br />
guest/hostname« editieren. Im Beispiel<br />
heißt das System »guest«. Schreiben Sie<br />
dazu in die neue Datei »/lxc/rootfs.guest/<br />
etc/hosts«:<br />
127.0.0.1 localhost guest<br />
Die nächsten Änderungen führen Sie direkt<br />
im System aus, indem Sie mit Hilfe<br />
von »chroot« vorläufig in die neue Umgebung<br />
wechseln:<br />
chroot /lxc/rootfs.guest /bin/bash<br />
Um sich später in den Container einzuloggen,<br />
bietet sich Open SSH an, das Sie<br />
mit dem Paket »openssh‐server« installieren.<br />
Nun fehlen noch ein Benutzer-<br />
68 Ausgabe 06-2011 Admin www.admin-magazin.de
LXC<br />
Security<br />
account und ein geregelter Weg, um per<br />
»sudo« an Root-Rechte zu gelangen. Dazu<br />
legen Sie einen Benutzer an und machen<br />
ihn zum Mitglied der Gruppe »admin«:<br />
u=linuxmagazin; g=admin<br />
adduser $u; addgroup $g; adduser $u $g<br />
Editieren Sie mit Hilfe des Kommandos<br />
»visudo« die Datei »/etc/sudoers«. Ersetzen<br />
Sie dabei in der Zeile<br />
%sudo ALL=(ALL) ALL<br />
den Eintrag »sudo« durch »admin«. Danach<br />
verlassen Sie die Chroot-Umgebung<br />
durch »exit« wieder. Vor dem Test des<br />
vorbereiteten Containers konfigurieren<br />
Sie LXC noch in »/lxc/conf.guest« mit<br />
dem Inhalt aus Listing 3 und passen in<br />
Zeile 8 die IP-Adresse an. Mit<br />
lxc‐create ‐n guest ‐f /lxc/conf.guest<br />
bereitet LXC nun die Konfiguration auf.<br />
Das ist Voraussetzung, um anschließend<br />
das System mit »lxc‐start ‐n guest ‐d«<br />
zu aktivieren. Die Option »‐d« führt das<br />
Kommando im Hintergrund als Daemon<br />
aus. Sie haben jetzt zwei Möglichkeiten,<br />
sich auf dem virtualisierten System<br />
einzuloggen: direkt per »lxc‐console -n<br />
guest« oder – falls das Netzwerk auf Anhieb<br />
funktioniert – per »ssh«:<br />
ssh linuxmagazin@192.168.1.69<br />
Beim Zugang per »lxc‐console« müssen<br />
Sie allerdings etwas Geduld aufbringen.<br />
Bis der Systemcontainer sie aktiviert,<br />
kann es durchaus mehrere Minuten dauern!<br />
Dann meldet sich der Container, wie<br />
in Abbildung 1 zu sehen.<br />
Recycling-Container<br />
Um das System anzuhalten, verwenden<br />
Sie vom Host aus das Kommando<br />
»lxc‐stop ‐n guest«. Nach jeder Änderung<br />
der Konfigurationsdatei »/lxc/conf.<br />
guest« löschen Sie die alte Konfiguration<br />
mit »lxc-destroy -n Gastname« und legen<br />
mit dem Befehl »lxc-create« wieder eine<br />
neue an.<br />
Im LXC-Howto finden Sie die wichtigsten<br />
Schritte zusammengefasst [1], optional<br />
auch Ubuntu-Eigenheiten [2]. Mehr von<br />
den LXC-Tools weiß ein IBM-Kernelentwickler<br />
zu sagen [3]. Sind alle Konfigurationen<br />
am rechten Ort, bietet LXC eine<br />
flotte Alternative für die Trennung kleiner<br />
Dienste, die sich untereinander nicht ins<br />
Gehege kommen sollen. (mg/ofr) n<br />
Infos<br />
[1] Dwight Schauer, „LXC Howto“:<br />
[http:// lxc. teegra. net]<br />
[2] Beau Steward, „Virtualizing with LXC in<br />
Ubuntu“: [http:// www. nimdae. com/ ? p=576]<br />
[3] Matt Heisley, „LXC: Linux container tools“:<br />
[http:// www. ibm. com/ developerworks/<br />
linux/ library/ l‐lxc‐containers/]<br />
Die Autoren<br />
Eva-Katharina Kunst, Journalistin, und Jürgen<br />
Quade, Professor an der Hochschule Niederrhein,<br />
sind seit den Anfängen von Linux Fans von Open<br />
Source. Demnächst erscheint die dritte Auflage<br />
ihres Buches „Linux Treiber entwickeln“.<br />
01 auto lo<br />
Listing 1: »/etc/network/interfaces«<br />
02 iface lo inet loopback<br />
03 # LXC‐Config<br />
04 # The primary network interface<br />
05 #auto eth0<br />
06 #iface eth0 inet dhcp<br />
07 auto br0<br />
08 iface br0 inet dhcp<br />
09 bridge_ports eth0<br />
10 bridge_stp off<br />
11 bridge_maxwait 5<br />
12 post‐up /usr/sbin/brctl setfd br0 0<br />
Listing 2: »/etc/fstab«<br />
Abbildung 1: Die aktivierte Config startet den Container, was bisweilen einige Minuten dauert.<br />
01 none /lxc/rootfs.guest/dev/pts devpts defaults 0 0<br />
02 none /lxc/rootfs.guest/var/run tmpfs defaults 0 0<br />
03 none /lxc/rootfs.guest/dev/shm tmpfs defaults 0 0<br />
01 lxc.utsname = guest<br />
02 lxc.tty = 4<br />
03 lxc.network.type = veth<br />
04 lxc.network.flags = up<br />
05 lxc.network.link = br0<br />
06 lxc.network.hwaddr = 08:00:12:34:56:78<br />
07 #lxc.network.ipv4 = 0.0.0.0<br />
08 lxc.network.ipv4 = 192.168.1.69<br />
09 lxc.network.name = eth0<br />
10 lxc.mount = /lxc/fstab.guest<br />
Listing 3: Die Container-Konfiguration »conf.guest«<br />
11 lxc.rootfs = /lxc/rootfs.guest<br />
20 lxc.cgroup.devices.allow = c 5:0 rwm<br />
12 lxc.pts = 1024<br />
21 lxc.cgroup.devices.allow = c 4:0 rwm<br />
22 lxc.cgroup.devices.allow = c 4:1 rwm<br />
13 #<br />
23 # /dev/{,u}random<br />
14 lxc.cgroup.devices.deny = a<br />
24 lxc.cgroup.devices.allow = c 1:9 rwm<br />
15 # /dev/null and zero<br />
25 lxc.cgroup.devices.allow = c 1:8 rwm<br />
16 lxc.cgroup.devices.allow = c 1:3 rwm<br />
26 lxc.cgroup.devices.allow = c 136:* rwm<br />
17 lxc.cgroup.devices.allow = c 1:5 rwm<br />
27 lxc.cgroup.devices.allow = c 5:2 rwm<br />
18 # consoles<br />
28 # rtc<br />
19 lxc.cgroup.devices.allow = c 5:1 rwm<br />
29 lxc.cgroup.devices.allow = c 254:0 rwm<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
69
Security<br />
Cloud-Sicherheit<br />
Überlegungen zur Sicherheit in Clouds<br />
Überwiegend heiter?<br />
An Cloud-Computing führt kein Weg vorbei, wenn man Marketing und<br />
Analysten glauben will. Doch wie sieht es mit der Sicherheit in der<br />
Cloud aus? Einige Gedanken dazu… Kurt Seifried<br />
Ob man das nun gut findet oder nicht:<br />
Cloud-Computing setzt sich auf breiter<br />
Front durch und wird uns auch eine<br />
lange Zeit erhalten bleiben (darauf zu<br />
wetten, ist ziemlich risikolos, angesichts<br />
der Tatsache, dass Cobol und Fortran<br />
auch noch nach 50 Jahren existieren).<br />
Die gute Nachricht ist, dass Linux für die<br />
Cloud-Provider wie auch die ‐Anwender<br />
eine hervorragende Plattform ist.<br />
Eine große Herausforderung beim Cloud-<br />
Computing besteht darin, dass man keine<br />
Kontrolle über die zugrunde liegende<br />
Hardware wie das Netzwerk, Storage und<br />
so weiter hat. Wer seine Anwendungen<br />
in der Cloud laufen lässt, teilt vermutlich<br />
die Hardware mit anderen, etwa auf<br />
Amazons EC2. Für die Provider ist dieses<br />
Modell toll, denn sie können jeden Cent<br />
aus ihrer Hardware quetschen, indem<br />
sie ungenutzte Ressourcen an Anwender<br />
verkaufen, aber für die Enduser kann das<br />
gelegentlich zum Problem werden.<br />
Die Bandbreite der Anwendungen für<br />
Cloud Computing erweitert sich gleichermaßen<br />
ständig. Jeder kann sich plötzlich<br />
selbst rechenintensive Aufgaben leisten,<br />
etwa das Knacken von WLAN-Passwörtern<br />
mit Tesla-Karten von Nvidia. Service-Provider<br />
wie Google Apps erlauben<br />
es, Webanwendungen bereitzustellen,<br />
die mit Traffic-Spitzen umgehen können,<br />
ohne dass man sich selbst darum kümmern<br />
müsste. Letztlich stehen einem mit<br />
den Cloud-Angeboten dieselben Möglichkeiten<br />
zur Verfügung wie den großen<br />
Webdienstleistern.<br />
Aus Sicherheitsgründen müssen die Provider<br />
sicherstellen, dass die Daten der<br />
einzelnen Kunden sauber getrennt sind.<br />
Im Fall von Infrastructure as a Service<br />
(IaaS) haben sich die meisten zugrunde<br />
liegenden Virtualisierungstechnologien<br />
wie VMware, Xen oder KVM in dieser<br />
Hinsicht als zuverlässig erwiesen und<br />
trennen von Haus aus die einzelnen Instanzen.<br />
Bei Platform as a Service (PaaS)<br />
wie Google Apps liegen die Dinge etwas<br />
komplizierter. Sehr wenige Programmiersprachen<br />
lassen sich auf eine „sichere“<br />
Weise für Anwender bereitstellen, die<br />
zumindest potenziell Böses im Schilde<br />
führen. Ein Beispiel dafür ist Java, das<br />
zwar von Anfang an eine Art Sandbox<br />
implementierte, in der aber dennoch immer<br />
wieder schwerwiegende sicherheitskritische<br />
Fehler gefunden werden.<br />
Schließlich gibt es auch noch die Anbieter<br />
von Software as a Service (SaaS), die<br />
fertige Anwendungen bereitstellen und<br />
damit so viele Anwender wie möglich<br />
erreichen möchten. Da bleibt nur zu<br />
hoffen, dass sie darauf acht geben, dass<br />
diese Anwendungen weitgehend frei von<br />
den üblichen Sicherheitslücken wie etwa<br />
SQL-Injections und so weiter sind.<br />
Verschlüsselt<br />
Daten, die in der Cloud lagern, unterscheiden<br />
sich auf vielerlei Art von lokalen<br />
Daten, aber der wesentliche Punkt<br />
ist, dass sie sich auf Systemen befinden,<br />
die man nicht selbst kontrolliert. Noch<br />
schlimmer: Sie liegen auf Systemen, die<br />
man mit anderen teilt. Wenn nun etwa<br />
ein Kunde etwas Illegales auf dem Server<br />
anstellt, kann es sein, dass die Ermittlungsbehörden<br />
die komplette Maschine<br />
mitnehmen. Oder der Provider ist nicht<br />
anders in der Lage, den entsprechenden<br />
Aufforderungen nachzukommen [1].<br />
Ein Provider könnte auch eine komplette<br />
Festplatten mit sensiblen Daten zur Reparatur<br />
außer Haus schicken oder alte<br />
Hardware verkaufen, ohne sie vorher zu<br />
löschen – falls das überhaupt vollständig<br />
möglich ist [2]. Schließlich könnte auch<br />
die Server-Infrastruktur so beschaffen<br />
sein, dass sie zwar lokal und sicher erscheint,<br />
in Wirklichkeit aber die eigenen<br />
Daten übers Netzwerk fließen.<br />
Selbst wenn es beim Provider entsprechende<br />
Sicherheits-Policies gibt, die solche<br />
Dinge abdecken, bringt das wenig,<br />
wenn er irgendwann in Konkurs geht.<br />
Beispielsweise sicherte Toysmart.com<br />
seinen Kunden zu, niemals die persönlichen<br />
Daten zu Geschäftszwecken zu<br />
verwenden. Nach der Pleite fingen sie<br />
aber plötzlich an, genau das zu tun. Die<br />
Federal Trade Commission kam ins Spiel<br />
und einigte sich mit der Firma darauf,<br />
dass „der Verkauf dieser Kundeninformationen<br />
verboten sei – außer im Fall sehr<br />
spezieller Umstände“ [3].<br />
Der erste Schritt zur Absicherung liegt<br />
deshalb darin, die eigenen Daten zu verschlüsseln.<br />
Wo auch immer Daten gespeichert<br />
werden, sollten sie verschlüsselt<br />
werden, und das umfasst mehr als nur<br />
Storage und <strong>Datenbanken</strong>. Wer zum Beispiel<br />
bei einer Webanwendung Message<br />
Queues verwendet, muss damit rechnen,<br />
dass sie auf die Festplatte geschrieben<br />
werden, etwa das Binärlog von Beanstalkd.<br />
NoSQL-<strong>Datenbanken</strong> schreiben<br />
manchmal selbst Daten auf die Platte,<br />
aber auch beim Swappen können sensible<br />
Daten auf den Festspeicher gelangen.<br />
70 Ausgabe 06-2011 Admin www.admin-magazin.de
Cloud-Sicherheit<br />
Security<br />
Glücklicherweise bietet Linux ausgereifte<br />
Verschlüsselungsmechanismen dafür, inklusive<br />
der Verschlüsselung kompletter<br />
Festplatten, die per Default zur Verfügung<br />
steht. Dummerweise bieten nicht alle<br />
Provider einen vollwertigen Konsolenzugang,<br />
der Vorausetzung dafür ist, die<br />
komplette Platte zu verschlüsseln, denn<br />
man muss beim Booten ein Passwort eingeben.<br />
Bevor man die Verschlüsselung<br />
der ganzen Festplatte in Betracht zieht,<br />
muss man also erst einmal sicherstellen,<br />
dass das überhaupt möglich ist.<br />
Auch die zwischen einzelnen Rechnern<br />
in der Cloud übertragenen Netzwerkdaten<br />
müssen verschlüsselt werden. Beim<br />
Einsatz von VLANs und Tunnels entsteht<br />
leicht der Eindruck, es handle sich um<br />
direkt nebeneinander stehende Systeme,<br />
die sich aber tatsächlich in unterschiedlichen<br />
Gebäudeteilen, vielleicht sogar in<br />
unterschiedlichen Daten-Centern befinden.<br />
Ich bin schon gespannt, wann die<br />
erste Geschichte eines Einbruchs publik<br />
wird, bei dem Einbrecher die virtuelle<br />
Netzwerkinfrastruktur eines Providers<br />
gehackt und dann Zugriff auf den Netzwerktraffic<br />
aller Kunden erlangt haben.<br />
Je nach Anwendung und Infrastruktur<br />
gibt es verschiedene Möglichkeiten, den<br />
Netzwerktraffic abzusichern. So lässt<br />
sich mit IPsec der komplette Verkehr<br />
zwischen Systemen verschlüsseln, während<br />
sich SSL und SSH dafür eignen, die<br />
Übertragung einzelner Dienste zu verschlüsseln.<br />
Speicher<br />
Letztlich befinden sich sensible Daten<br />
immer noch ungeschützt im Speicher.<br />
Das war in der Vergangenheit vielleicht<br />
kein so großes Problem, als man noch<br />
der alleine Benutzer eines Servers war.<br />
Auf virtualisierten Systemen kann der<br />
Hypervisor die Speicherbereiche aller<br />
virtuellen Maschinen lesen. Wenn ein<br />
Angreifer sich Zugriff zum Hypervisor<br />
verschaffen kann, erlangt er damit auch<br />
Zugang zum Speicher aller virtuellen Maschinen.<br />
Wer also sensible Daten wie<br />
Krypto-Schlüssel, SSL-Zertifikate oder<br />
Kreditkartendaten verarbeiten will, sollte<br />
in letzter Konsequenz auf den Einsatz in<br />
der Cloud verzichten.<br />
Viele Cloud-Computing-Systeme sind so<br />
aufgebaut, dass sie so zustandslos wie<br />
möglich arbeiten. So beeinträchtigt der<br />
Ausfall eines Knotens das Gesamtsystem<br />
nicht oder nur wenig. Im Extremfall sind<br />
den Anwendern Ausfälle sogar willkommen<br />
[4]. Einzelne Komponenten wie <strong>Datenbanken</strong><br />
(eventuell repliziert), Message<br />
Queues oder Storage müssen dennoch<br />
zuverlässig funktionieren. Eine Technologie<br />
wie Ksplice [5], die das Patchen<br />
des Kernels ohne Reboot erlaubt, macht<br />
für Linux im Prinzip den ausfallsicheren<br />
Betrieb möglich.<br />
Für Provider ist der zuverlässige Betrieb<br />
des Hypervisors von größter Bedeutung.<br />
Unter allen Umständen will man es vermeiden,<br />
virtuelle Maschinen im großen<br />
Stil umzuziehen und ganze Farmen von<br />
virtuellen Hosts neu booten zu müssen.<br />
Derzeit ist Ksplice für Linux verfügbar,<br />
aber mit etwas Glück wird es in Zukunft<br />
noch für verbreitete Anwendungen erweitert.<br />
Security Policy Framework<br />
Das Militär ist typischerweise extrem paranoid,<br />
wenn es um Datenschutz und<br />
Sicherheit geht. Vermutlich weil sie wissen,<br />
wie effektiv es ist, an die Daten<br />
des Gegners zu kommen. Aus diesem<br />
Grund hat die NSA die Entwicklung von<br />
SELinux [6] gesponsort, einem System,<br />
das Mandatory Access Control (MAC)<br />
für Linux implementiert. Die meisten<br />
Administratoren begrüßen die Idee von<br />
SELinux: Man kann die Berechtigungen<br />
einzelner Anwendungen und Dienste so<br />
beschränken, dass ein Angreifer selbst<br />
dann keinen großen Schaden anrichten<br />
kann, wenn er sich Zugriff zu diesen<br />
Anwendungen verschafft.<br />
In der Praxis finden die meisten Administratoren<br />
SELinux dann weniger toll, denn<br />
es erschwert die Arbeit und behindert<br />
die Funktion vieler Dienste. Ich musste<br />
SELinux abschalten, weil damit Samba<br />
(mit nicht standardisierten Shares) und<br />
einige Webanwendungen nicht mehr<br />
funktionierten. Für Service-Provider, insbesondere<br />
Anbieter von PaaS, ist SELinux<br />
dennoch eine sehr nützliche Sicherheitsmaßnahme.<br />
Die meisten dieser Sicherheitsmaßnahmen<br />
helfen Kunden wenig, wenn sie<br />
sich mit einem böswilligen Provider<br />
konfrontiert sehen. Die meisten Verschlüsselungsverfahren<br />
basieren auf der<br />
Geheimhaltung eines Schlüssels. Interessiert<br />
sich der Provider für die Daten des<br />
Kunden, ist es ein Leichtes, im Speicher<br />
den Schlüssel zu finden. Oder er spiegelt<br />
die entsprechenden Ports der Netzwerk-<br />
Switches und schneidet den kompletten<br />
Traffic mit. Wenn er an den Schlüssel<br />
gelangt ist, kann er leicht alle Informationen<br />
entschlüsseln, etwa gespeicherte<br />
Kreditkarteninformationen.<br />
Ein Einbrecher kann natürlich dieselben<br />
Methoden anwenden, wenn er einmal<br />
entsprechende Rechte erlangt hat. Provider<br />
müssen deshalb Maßnahmen gegen<br />
solche Angriffe treffen.<br />
Die gute Nachricht<br />
Trotz der erwähnten Herausforderungen<br />
bei der Absicherung von Cloud-Systemen,<br />
stellt Linux eine gute Basis für sichere<br />
Clouds dar. SELinux beispielsweise gibt<br />
es nun schon seit mehr als zehn Jahren<br />
und ist entsprechend ausgereift. Auch in<br />
den Hypervisor-Systemen wurden bisher<br />
keine kritischen Bugs gefunden. Jetzt<br />
ist es nur noch eine Frage der richtigen<br />
Anwendung der passenden Tools,<br />
um genügend Sicherheit in der Cloud zu<br />
gewährleisten. (ofr)<br />
n<br />
Infos<br />
[1] Cloud computing, law enforcement,<br />
and business continuity: [http://<br />
berkeleyclouds. blogspot. com/ 2009/ 04/ clo<br />
ud‐computing‐law‐enforcement‐and. html]<br />
[2] Sanitizing SSDs:<br />
[http:// nvsl. ucsd. edu/ sanitize/]<br />
[3] FTC-Vereinbarung mit Toysmart.com:<br />
[http:// www. ftc. gov/ opa/ 2000/ 07/<br />
toysmart2. shtm]<br />
[4] 5 Lessons We’ve Learned Using AWS:<br />
[http:// techblog. netflix. com/ 2010/ 12/ 5‐les<br />
sons‐weve‐learned‐using‐aws. html]<br />
[5] Ksplice: [http://www.ksplice.com]<br />
[6] Thorsten Scherf, SELinux-Workshop,<br />
<strong>ADMIN</strong> 02/2008, S. 22<br />
Der Autor<br />
Kurt Seifried hat sich als<br />
Security-Consultat auf<br />
Linux und Netzwerke spezialisiert.<br />
Er fragt sich oft,<br />
wieso Technologie im großen<br />
Maßstab funktioniert,<br />
aber so häufig im Detail doch versagt.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
71
Know-how<br />
Performance-Simulation<br />
©nasa<br />
Was wäre wenn? Mathematische Lastsimulation mit Perl<br />
Berechenbare<br />
Performance<br />
Simulationen sind eine Möglichkeit, in die Zukunft zu schauen. Sie können zeigen, wie sich beispielsweise eine<br />
Aufstockung der Hardware oder auch Laständerungen auswirken würden. Mit dem richtigen Know-how kann<br />
jeder dieses Werkzeug nutzen. Neil J. Gunther<br />
Drei aufeinanderfolgende Prozesse machen<br />
das Performance-Management aus:<br />
Monitoring, Analyse und Modellierung<br />
(Abbildung 1). Das Monitoring sammelt<br />
die Daten, die Analyse erkennt in ihnen<br />
wiederkehrende Muster, und Modelle<br />
sagen auf dieser Grundlage künftige Ereignisse<br />
wie etwa Ressourcen-Engpässe<br />
voraus. PDQ (Pretty Damn Quick) ist ein<br />
Queueing-Analysetool in Gestalt eines<br />
Perl-Moduls, das dazu dient, solche Vorhersagen<br />
zu ermöglichen.<br />
Einführung<br />
Eine passende Monitoring-Lösung ist<br />
ausgewählt, installiert und konfiguriert<br />
– jetzt läuft sie im Produktivbetrieb. Das<br />
aber ist nicht etwa das Ende, sondern ein<br />
neuer Anfang und Ausgangspunkt. Eine<br />
wesentliche Voraussetzung besteht zunächst<br />
darin, die Leistung zu messen und<br />
Performancedaten zu sammeln. Ohne Daten<br />
lassen sich die Leistungseigenschaften<br />
der zu überwachenden Systeme und<br />
Applikationen nicht quantifizieren. Dies<br />
ist die Aufgabe der Monitoring-Phase.<br />
Das Monitoring auf sich alleine gestellt ist<br />
aber so sinnlos wie das bloße Starren auf<br />
die tänzelnden Zeiger im Cockpit eines<br />
Autos. Um die Lage richtig einschätzen zu<br />
können, muss man außerdem durch die<br />
Windschutzscheibe schauen, um andere<br />
Fahrzeuge in der Nähe zu erkennen. Mit<br />
anderen Worten: Wer sich ausschließlich<br />
auf das Monitoring verlässt, der erhält<br />
lediglich einen kurzfristigen Eindruck<br />
vom Systemverhalten (Abbildung 2).<br />
Der Blick aus dem Fenster eröffnet dagegen<br />
die Fernsicht. Doch je weiter weg ein<br />
Beobachtungsobjekt ist, desto schwieriger<br />
lässt sich mit Bestimmtheit sagen,<br />
wie wichtig es einmal werden könnte.<br />
Um aus Beobachtungswerten später Prognosen<br />
ableiten zu können, muss man<br />
die Leistungsdaten aus der Überwachungsphase<br />
mit Zeitstempeln versehen<br />
und sie in einer Datenbank speichern.<br />
Darauf baut die nächste Phase, die Performance-Analyse<br />
auf, die den Admin in<br />
die Lage versetzt, die gewonnenen Daten<br />
aus einer historischen Perspektive zu betrachten,<br />
um in ihnen Muster und Trends<br />
zu erkennen.<br />
Auf das Performance-Modeling baut anschließend<br />
die Leistungsvorhersage auf,<br />
die Phase des Performance-Managements,<br />
72 Ausgabe 06-2011 Admin www.admin-magazin.de
Performance-Simulation<br />
Know-How<br />
Queueing-Paradigmas vom realen System<br />
abstrahieren. Allerdings verursacht diese<br />
Vorgehensweise einen größeren Aufwand<br />
als die Trendanalyse in den Rohdaten,<br />
und sie setzt voraus, dass die Queueing-<br />
Abstraktion das echte System genau<br />
nachbildet. Je stärker das Modell von<br />
der Wirklichkeit abweicht, desto höher<br />
ist die Ungenauigkeit der Vorhersagen.<br />
Wie dieser Artikel demonstriert, ist es<br />
aber bei Weitem nicht so schwer, Wartedie<br />
einen in die Lage versetzt, aus dem<br />
Fenster und in die Zukunft zu blicken.<br />
Dafür benötigt man zusätzliche Tools,<br />
welche die Daten so aufbereiten, dass sie<br />
in Leistungsmodelle eingehen können.<br />
Dazu ist etwas Mathematik nötig.<br />
Statistik versus<br />
Warteschlange<br />
Es gibt zwei klassische Ansätze für das<br />
Performance-Modeling: die statistische<br />
Datenanalyse und das Warteschlangenmodell.<br />
Beide Methoden schließen sich<br />
gegenseitig nicht aus. Die Unterschiede<br />
lassen sich so beschreiben: Die statistische<br />
Datenanalyse, eine Aufgabe, die<br />
jede Buchhaltung kennt, basiert auf der<br />
Berechnung von Trends in den Rohdaten.<br />
Statistiker entwickelten viele schlaue<br />
Techniken und Tools im Laufe der Jahre,<br />
und ein Großteil dieser Intelligenz ist in<br />
Form von Open-Source-Paketen für das<br />
statistische Modeling erhältlich. Ein Beispiel<br />
für ein mächtiges freies Tool dieser<br />
Art ist R [2].<br />
Dieser Ansatz ist jedoch dadurch begrenzt,<br />
dass er sich ausschließlich auf<br />
bestehende Daten stützt. Wenn die Zukunft<br />
jedoch (angenehme oder unangenehme)<br />
Überraschungen bereithält, die<br />
sich aus den aktuellen Daten nicht erkennen<br />
lassen, leidet die Zuverlässigkeit<br />
der Vorhersage. Und wer sich etwa mit<br />
der Börse beschäftigt, der weiß, dass dies<br />
ständig geschieht.<br />
Warteschlangenmodelle sind von diesen<br />
Beschränkungen nicht betroffen. Das liegt<br />
daran, dass sie per Definition mithilfe des<br />
Performance analysis<br />
Performance monitoring<br />
Performance modeling<br />
Past Present Future<br />
Abbildung 1: Die drei Phasen des Performance-Managements – Monitoring, Analyse und Modeling – sind eng<br />
miteinander verknüpft.<br />
Abbildung 2: Ein 24-Stunden-Protokoll der durchschnittlichen Auslastung, das die Orca-Tools für Linux [1] auf<br />
eine Zeitachse projizieren.<br />
schlangenmodelle zu entwickeln als man<br />
vermuten würde. In Wirklichkeit ist es oft<br />
erstaunlich einfach.<br />
Marschroute<br />
Zu Anfang soll das bekannte Beispiel der<br />
Warteschlange vor der Kasse im Supermarkt<br />
grundlegende Queueing-Konzepte<br />
erklären (Abbildung 3). Danach wird<br />
dieses fundamentale Konzept so erweitert,<br />
dass sich damit die Skalierbarkeit<br />
einer dreischichtigen E-Commerce-Anwendung<br />
vorhersagen lässt (Listing 3).<br />
Gegen Ende des Artikels rücken schließlich<br />
realitätsnahe Erweiterungen der vorgestellten<br />
Leistungsmodelle und praktische<br />
Ratschläge für ihren Aufbau ins<br />
Blickfeld. Alle Beispiele verwenden Perl<br />
und das Open-Source-Queueing-Analysetool<br />
Pretty Damn Quick (PDQ), das<br />
der Autor zusammen mit Peter Harding<br />
pflegt. Es findet sich hier [6].<br />
© Julien Rousset, Fotolia<br />
Abbildung 3: Kunden stehen in einem Lebensmittelmarkt Schlange.<br />
Warum Warteschlangen?<br />
Buffer und Stacks sind in Computersystemen<br />
allgegenwärtig. Beim Buffer handelt<br />
es sich um eine Warteschlange, bei<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
73
Know-how<br />
Performance-Simulation<br />
Mit anderen Worten: Ersetzt man auf der<br />
rechten Seite der Gleichung die Verweilzeit<br />
R durch die Servicezeit S, dann entder<br />
die Reihenfolge des Eintreffens von<br />
Anforderungen die Reihenfolge ihrer Abarbeitung<br />
diktiert. Man spricht hier auch<br />
von FIFO (first-in, first-out) oder FCFS<br />
(first come, first served). Im Gegenzug<br />
dazu bedient ein Stack Anforderungen<br />
in LIFO-Reihenfolge (last-in, first-out);<br />
es handelt sich um eine LCFS-Warteschlange<br />
(last-come, first served). Unter<br />
Linux ist etwa der History-Buffer der<br />
Shell eine bekannte Warteschlange. Wie<br />
jede physikalische Implementierung ist<br />
er durch die endliche Menge an Speicherplatz<br />
(die Kapazität) beschränkt. In der<br />
Theorie kann eine Warteschlange jedoch<br />
eine unbegrenzte Kapazität besitzen, so<br />
wie das auch bei PDQ der Fall ist.<br />
Eine Warteschlange ist eine gute Abstraktion<br />
für gemeinsam genutzte Ressourcen.<br />
Ein sehr bekanntes Beispiel ist die<br />
Kasse im Supermarkt. Diese Ressource<br />
besteht aus Aufträgen (den Menschen,<br />
die Schlange stehen) sowie einer Bedienstation<br />
(der Kassiererin). Wenn man mit<br />
dem Einkaufen fertig ist, will man so<br />
schnell wie möglich den Laden verlassen,<br />
das ist das Performanceziel. Man kann<br />
dieses Ziel auch so formulieren, dass es<br />
darauf ankommt, möglichst wenig Zeit in<br />
der Schlange zu verbringen – man spricht<br />
hier von der Verweilzeit (R).<br />
Nachdem sich ein Kunde für eine bestimmte<br />
Kasse entschieden hat und sich<br />
anstellt, besteht seine Verweilzeit aus<br />
zwei Komponenten: zum einen aus der<br />
Zeit, die er in der Warteschlange verbringt<br />
bevor er zur Kasse gelangt, und<br />
zum anderen aus der Zeit für die Bedienung<br />
durch die Kassiererin, in der sie<br />
die Einkäufe über den Scanner zieht,<br />
das Geld annimmt und herausgibt. Geht<br />
man nun davon aus, dass jede Person in<br />
Tabelle 1: Leistungsmetriken<br />
Symbol Metrik PDQ<br />
l Ankunftrate Input<br />
S Bedienzeit Input<br />
N User-Last Input<br />
Z Denkzeit Input<br />
R Verweilzeit Output<br />
R Antwortzeit Output<br />
X Durchsatz Output<br />
p Auslastung Output<br />
Q Warteschlangenlänge<br />
Output<br />
N* Optimale Last Output<br />
Warteschlange<br />
der Warteschlange mehr oder weniger<br />
die gleiche Menge Artikel im Einkaufswagen<br />
hat, dann kann man erwarten,<br />
dass sich die Bedienzeiten pro Kunde im<br />
Schnitt angleichen. Darüber hinaus steht<br />
die Länge der Warteschlange offensichtlich<br />
im direkten Bezug zur Anzahl der<br />
Kunden im Laden. Wenn der Supermarkt<br />
fast leer ist, wird die durchschnittliche<br />
Wartezeit um einiges kürzer sein als zu<br />
Stoßzeiten.<br />
Die Abstraktion der Warteschlange (Abbildung<br />
4) bietet ein leistungsfähiges<br />
Paradigma, mit dessen Hilfe sich (unter<br />
anderem) die Leistung von Computersystemen<br />
und Netzwerken ermitteln lässt.<br />
Ihr besonderer Vorzug ist, dass sie die<br />
ansonsten unterschiedlichen Leistungsdaten,<br />
die die Monitoring-Tools liefern,<br />
in einem Modell zusammenfasst.<br />
Dieser Artikel nimmt immer wieder Bezug<br />
auf die Metriken in Tabelle 1 und<br />
zwar insbesondere auf die Beziehung<br />
zwischen der Verweilzeit (R), der Servicezeit<br />
(S) und der Ankunftrate (t):<br />
S<br />
R = 1−<br />
λ S<br />
Wartende<br />
Kunden<br />
Abbildung 4: Komponenten einer symbolischen Warteschlange.<br />
1<br />
Man kann Gleichung (1) als sehr einfaches<br />
Performancemodell betrachten.<br />
Die Eingaben für das Modell stehen auf<br />
der rechten Seite, die Ausgaben auf der<br />
linken. Nach genau demselben Schema<br />
funktionieren auch die Berechnungen<br />
mit PDQ. Durch dieses einfache Modell<br />
sieht man sofort, dass bei geringem Publikumsverkehr,<br />
die zum Passieren der<br />
Kasse benötigte Zeit (die Verweilzeit)<br />
ausschließlich aus der eigenen Servicezeit<br />
besteht. Wenn keine weiteren Personen<br />
eintreffen ( =0), dann fällt nur<br />
die Zeit an, die man selbst benötigt, um<br />
die Waren eingeben zu lassen und zu<br />
bezahlen.<br />
Wenn das Geschäft jedoch stark frequentiert<br />
ist, sodass für das Produkt λS 1<br />
gilt, dann steigt auch die Verweilzeit sehr<br />
stark an. Das rührt daher, dass sich die<br />
Länge der Warteschlange aus der Gleichung<br />
Q<br />
Kassierer<br />
= λR<br />
berechnet. Mit anderen Worten: Die<br />
Verweilzeit steht im direkten Bezug zur<br />
Warteschlangenlänge mal Eintreffrate<br />
und umgekehrt.<br />
Gleichung (2) stellt außerdem den Bezug<br />
zu den Überwachungsdaten her. Die Daten<br />
für die durchschnittliche Auslastung<br />
in Abbildung 2 sind Echtzeitwerte, gemessen<br />
über relativ kurze Zeitabschnitte,<br />
beispielsweise eine Minute. Für die Berechnung<br />
der Warteschlangenlänge (Q)<br />
wird dagegen der Durchschnittswert über<br />
die gesamte Messdauer von 24 Stunden<br />
verwendet. Will man sich das bildlich<br />
vergegenwärtigen, so kann man sich Q<br />
als Höhe eines imaginären Rechtecks vorstellen,<br />
das die gleiche Fläche hat wie<br />
die Kurve der Überwachungsdaten über<br />
demselben 24-Stunden-Zeitabschnitt.<br />
Eine dazu analoge Beziehung gilt, wenn<br />
man die Wartezeit aus der Verweilzeit (R)<br />
in (2) ausklammert:<br />
ρ = λS<br />
Neuankömmlinge<br />
Abgefertigte<br />
Kunden<br />
Kunden<br />
werden bedient<br />
2<br />
3<br />
74 Ausgabe 06-2011 Admin www.admin-magazin.de
Performance-Simulation<br />
Know-How<br />
interessiert, dem sei Kapitel 10 von [4]<br />
empfohlen.<br />
Eine der grundlegenden Annahmen in<br />
PDQ ist, dass sowohl die durchschnittliche<br />
Zwischenankunftszeit wie die durchschnittliche<br />
Bediendauer beide statistisch<br />
zufällig sind. Mathematisch gesehen bedeutet<br />
das, dass jede Ankunft und jedes<br />
Bedienereignis zu einem Poisson-Prozess<br />
gehört. Dann entspricht die Dauer dem<br />
Mittelwert einer exponentialen Wahrscheinlichkeitsstreuung.<br />
Erlang hat festgestellt,<br />
dass sich der Verkehr im Telefonnetz<br />
tatsächlich dieser Anforderung<br />
entsprechend verhält. Es gibt Methoden<br />
[5], mit deren Hilfe sich feststellen lässt,<br />
wie gut gegebene Monitoring-Daten diese<br />
Anforderung erfüllen.<br />
Wenn diese Monitoring-Daten wesentlich<br />
von den Bedingungen des Exponentials<br />
abweichen, ist es vielleicht sinnvoller,<br />
auf einen ereignisbasierten Simulator wie<br />
beispielsweise SimPy [3] auszuweichen,<br />
mit dessen Hilfe sich eine größere Bandbreite<br />
an Wahrscheinlichkeitsstreuungen<br />
berücksichtigen lässt. Das Problem dabei<br />
ist, dass die Programmierung und das Debuggen<br />
mehr Zeit in Anspruch nehmen<br />
(bei jeder Simulation geht es zugleich um<br />
die Programmierung); außerdem braucht<br />
man länger, um sicherzustellen, dass die<br />
Ergebnisse statistisch gültig sind.<br />
Ein weiterer Aspekt, der bei jeder wie<br />
auch immer gearteten Vorhersage stört,<br />
sind die Fehler, die grundlegende Annahmen<br />
des Modells verursachen. Annahmen<br />
in Modellen verursachen tatsächlich<br />
systematische Fehler im Vorhersageprospricht<br />
auf der linken Seite die Ausgabemenge<br />
der Auslastung in Tabelle 1.<br />
Geschichte der<br />
Warteschlangentheorie<br />
Die mathematische Theorie der Warteschlangen<br />
ist noch sehr jung; tatsächlich<br />
gibt es sie seit weniger als 100 Jahren.<br />
Agner Erlang hat im Jahre 1917 das erste<br />
formale Warteschlangenmodell entwickelt,<br />
um die Leistung des Telefonsystems<br />
(des Internets der damaligen Zeit)<br />
zu analysieren. Seine Aufgabe bestand<br />
darin, für Amtsgespräche aus Kopenhagen<br />
die Puffergröße für Vermittlungen<br />
festzulegen. Die heutige Terminologie<br />
bezeichnet dieses Modell als Einzel-<br />
Warteschlangenmodell.<br />
Einer der nächsten wesentlichen Schritte<br />
in der Entwicklung der Warteschlangentheorie<br />
folgte 1957, als James Jackson<br />
die ersten formalen Lösungen für die<br />
Berechnung eines Netzwerks oder einer<br />
Kette aus Warteschlangen entwickelte.<br />
Dieses Ergebnis blieb 20 Jahre lang rein<br />
akademisch, bis man schließlich den Bezug<br />
zur Implementierung des Internets<br />
erkannte. Das Warteschlangenmodell<br />
erwies sich dafür als zutreffend mit einer<br />
Abweichung von weniger als fünf<br />
Prozent. 1967, etwa fünfzig Jahre nach<br />
dem ersten Modell von Erlang, setzte ein<br />
Doktorand namens Allan Scherr ein Warteschlangenmodell<br />
ein, um die Leistung<br />
der CTSS- und Multics-Time-Sharing-<br />
Computersysteme zu berechnen, die in<br />
vielen Beziehungen die Vorläufer der<br />
Unix- und letztendlich damit auch der<br />
Linux-Rechner waren.<br />
zess, und daher sollte man sich alle PDQ-<br />
Ergebnisse in Wirklichkeit als Streuung<br />
plausibler Werte vorstellen. Was außerdem<br />
oft unberücksichtigt bleibt, ist<br />
die Tatsache, dass jede Quantifizierung<br />
fehlerbehaftet ist. Davon sind auch die<br />
Monitoring-Daten betroffen – aber wer<br />
kennt schon den exakten Fehlerbereich<br />
seines Monitoring?<br />
Weil es sich bei allen PDQ-Performance-<br />
Ein- und Ausgaben um Durchschnittswerte<br />
handelt, ist unbedingt sicherzustellen,<br />
dass es sich dabei um zuverlässige<br />
Mittelwerte handelt. Die lassen<br />
sich beispielsweise in der stabilen Phase<br />
(steady state) eines Lasttests messen<br />
(Abbildung 5). Der durchschnittliche<br />
Durchsatz im stabilen Zustand (X) für<br />
eine bekannte Benutzerlast (N) ergibt<br />
sich, indem man Messungen über einen<br />
längeren Zeitraum T vornimmt und alle<br />
Anfahr- oder Herunterfahrzeiten aus den<br />
Daten eliminiert. Eine nominelle Zeit T<br />
kann beispielsweise fünf bis zehn Minuten<br />
betragen, je nach Anwendung. Auch<br />
bei Industriestandard-Benchmarks wie<br />
SPEC und TPC gilt die Anforderung, dass<br />
alle gemeldeten Durchsatzergebnisse aus<br />
einem stabilen Zustand stammen.<br />
Eine einfache<br />
Warteschlange in PDQ<br />
Die Beziehung zwischen dem Szenario<br />
im Lebensmittelmarkt und den PDQ-<br />
Funktionen fasst Tabelle 2 zusammen.<br />
Nach diesem Schema kann man leicht<br />
ein einfaches Modell der Kasse in einem<br />
Fraktale Modelle<br />
In den späten 70er- und frühen 80er-<br />
Jahren haben einige neue theoretische<br />
Entwicklungen zu vereinfachten Algorithmen<br />
für die Berechnung der Leistungsmetriken<br />
von Warteschlangensystemen<br />
geführt. Diese Algorithmen sind<br />
auch in Tools wie PDQ implementiert.<br />
Bei den neuesten Entwicklungen in der<br />
Warteschlangentheorie geht es um Modelle<br />
für den sogenannten selbstähnlichen<br />
oder fraktalisierten Paketverkehr im<br />
Internet. Diese Begriffe sprengen zwar<br />
den Rahmen dieses Artikels; Wer sich<br />
aber für weiterführende Informationen<br />
Instantaneous throughput<br />
Ramp up Steady-state<br />
Abbildung 5: Durchsatzmessungen im stabilen Zustand.<br />
Ramp down<br />
Elapsed time<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
75
Know-how<br />
Performance-Simulation<br />
Lebensmittelmarkt nachbilden, wie das<br />
folgende Listing für die Perl-Variante von<br />
PDQ zeigt (Listing 1). Im PDQ-Code (unten)<br />
befinden sich die Input-Werte für die<br />
Ankunftsrate (λ) und die Bedienzeit (S):<br />
λ = 3/<br />
4<br />
4<br />
S = 10 .<br />
5<br />
Abbildung 6: Ein offenes System mit drei Queueing-Phasen.<br />
Wendet man nun die metrische Beziehung<br />
(2) an, ergibt sich die Auslastung<br />
der Kasse wie folgt:<br />
3*<br />
1<br />
ρ = = 075 .<br />
4<br />
Analog dazu ergibt sich für die Verweildauer<br />
durch Anwenden der metrischen<br />
Beziehungen (1) und (2):<br />
10 .<br />
R = = 40 . seconds<br />
3<br />
1−<br />
*<br />
4 10 .<br />
So erfährt man, dass die Verweildauer an<br />
der Kasse gleich vier durchschnittliche<br />
Bedienzeiten ist, wenn der Kassierer zu<br />
75% ausgelastet ist. Die sich daraus ergebende<br />
durchschnittliche Warteschlangenlänge<br />
ist:<br />
3<br />
Q = =<br />
4* 40 .<br />
Listing 1: Kassenmodell in PDQ<br />
01 #! /usr/bin/perl<br />
02 # groxq.pl<br />
03 use pdq;<br />
3.0 customers<br />
6<br />
7<br />
8<br />
04 #‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ INPUTS<br />
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
05 $ArrivalRate = 3/4; # Kunden je Sekunde<br />
06 $ServiceRate = 1.0; # Kunden je Sekunde<br />
07 $SeviceTime = 1/$ServiceRate;<br />
08 $ServerName = "Cashier";<br />
09 $Workload = "Customers";<br />
10 #‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ PDQ Model<br />
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
11 # Interne PDQ‐Variable initialisieren<br />
12 pdq::Init("Grocery Store Checkout");<br />
13 # Die von PDQ::Report() genutzten<br />
Einheiten anpassen<br />
14 pdq::SetWUnit("Cust");<br />
15 pdq::SetTUnit("Sec");<br />
16 # PDQ Bedienknoten erstellen<br />
Aus Platzgründen kann hier lediglich<br />
die Ausgabeseite des generischen PDQ-<br />
Reports für dieses Modell gezeigt werden<br />
(Listing 1a).<br />
Die berechneten PDQ-Werte stimmen genau<br />
mit den theoretischen Vorhersagen<br />
für den Durchsatz (X=λ), die Auslastung<br />
(r), die Warteschlangenlänge (Q) und die<br />
Verweildauer (R) überein.<br />
Nachdem die fundamentalen Begriffe<br />
bekannt sind und PDQ als Tool für die<br />
Berechnungen eingeführt ist, lassen sich<br />
diese Werkzeuge auch auf Computerprobleme<br />
anwenden, etwa auf die Vorhersage<br />
der Leistung individueller Hardware-<br />
Ressourcen wie der Ausführungswarteschlange<br />
der CPU (siehe Kapitel 4 in [5])<br />
oder eines Festplattengerätetreibers.<br />
Die meisten Lehrwerke zur Warteschlangentheorie<br />
bieten Beispiele auf diesem<br />
Niveau. Wichtiger für die Vorhersage der<br />
Leistung von echten Computersystemen<br />
ist allerdings die Fähigkeit, den Workflow<br />
zwischen mehreren Warteschlangen-<br />
Ressourcen abbilden zu können, also die<br />
(KassiererIn)<br />
17 $pdq::nodes =<br />
pdq::CreateNode($ServerName, $pdq::CEN,<br />
$pdq::FCFS);<br />
18 # Die PDQ‐Aufgabe mit Ankunftsrate<br />
erstellen<br />
19 $pdq::streams =<br />
pdq::CreateOpen($Workload,<br />
$ArrivalRate);<br />
20 # Bedienrate je Kunden an der Kasse<br />
definieren<br />
21 pdq::SetDemand($ServerName, $Workload,<br />
$SeviceTime);<br />
22 #‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ OUTPUTS<br />
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
23 # Das PDQ‐Modell lösen<br />
24 pdq::Solve($pdq::CANON);<br />
25 pdq::Report(); # einen vollständigen<br />
PDQ‐Report generieren<br />
Interaktion zwischen Anforderungen, die<br />
gleichzeitig an Prozessoren, Festplatten<br />
und das Netzwerk gestellt werden. Die<br />
nächsten Abschnitte zeigen, wie man<br />
diese Aufgabe mithilfe von PDQ erfüllt.<br />
Warteschlangensysteme<br />
Anforderungen, die aus einer Warteschlange<br />
in eine andere fließen, entsprechen<br />
einer Warteschlangenkette oder<br />
einem Warteschlangennetz. Erfasst man<br />
anstelle der Anzahl der Anforderungen<br />
lediglich die Ankunftsrate (λ), spricht<br />
man von einem offenen System oder<br />
Kreis (Abbildung 6). Ein Beispiel für<br />
eine Situation dieser Art, die nicht aus<br />
der Welt der Computer stammt und sich<br />
durch das offene Modell in Abbildung<br />
6 abbilden ließe, wäre das Boarding am<br />
Flughafen. Die drei Phasen sind: Warten<br />
am Gate, Schlangestehen auf der Fluggastbrücke,<br />
um ins Flugzeug zu gelangen,<br />
und zum Schluss Schlangestehen<br />
im Gang des Flugzeugs beim Boarding,<br />
während Passagiere weiter vorn Platz<br />
nehmen. Die durchschnittliche Antwortzeit<br />
(R) ergibt sich aus den in jeder Warteschlangenphase<br />
verbrachten Zeiten,<br />
also der Summe der drei Verweildauern.<br />
Im Computerkontext ließe sich das auf<br />
eine dreistufige Webapplikation anwenden,<br />
von der lediglich die Rate der HTTP-<br />
Requests bekannt ist.<br />
Eine weitere Art von Warteschlangensystemen<br />
wird durch eine finite Menge (N)<br />
von Kunden oder Anforderungen charak-<br />
Tabelle 2: PDQ-Funktionen<br />
Physikalisch<br />
PDQ-Funktion<br />
Warteschlange<br />
Kunde Arbeitslast CreateOpen()<br />
Kassierer Bedienknoten<br />
CreateNode()<br />
Buchhaltung Bedienzeit SetDemand()<br />
76 Ausgabe 06-2011 Admin www.admin-magazin.de
Performance-Simulation<br />
Know-How<br />
terisiert. Genau diese Situation ergibt sich<br />
bei einem Lasttest. Eine finite Menge von<br />
Client-Lastgeneratoren sendet Anforderungen<br />
an das Testsystem, wobei keine<br />
weiteren Anforderungen von außerhalb<br />
in das isolierte System eintreten können.<br />
(Open-Source Last- und Stresstesttools<br />
finden Sie unter [7].)<br />
Darüber hinaus wirkt eine Art Rückkopplungsmechanismus,<br />
weil zu jeder Zeit<br />
nicht mehr als eine Anforderung unbearbeitet<br />
bleiben darf. Mit anderen Worten:<br />
Jeder Lastgenerator sendet erst dann eine<br />
weitere Anforderung, wenn die vorherige<br />
abgearbeitet worden ist. In der Sprache<br />
der Warteschlangentheorie geht es hier<br />
um einen geschlossenen Warteschlangenkreis.<br />
Requests<br />
N clients<br />
Z = 0 ms<br />
Responses<br />
D ws<br />
D as D db<br />
Web Server App Server DBMS Server<br />
Abbildung 7: Ein geschlossener Warteschlangenkreis mit drei Warteschlangenphasen in Verbindung mit einer<br />
speziellen Wartephase (oben), die N Client-seitigen Lastgeneratoren mit einer durchschnittlichen Bedenkzeit<br />
von Z entspricht.<br />
E-Commerce-Applikation<br />
in PDQ<br />
Dieser Abschnitt zeigt, wie sich das<br />
PDQ-Modell des geschlossenen Systems<br />
aus Abbildung 7 einsetzen lässt, um<br />
die Durchsatzleistung der dreistufigen<br />
E-Commerce-Architektur aus Abbildung<br />
8 vorherzusagen. Wegen der hohen Kosten<br />
solcher Installationen sind Lasttests<br />
mit einem kleineren Modell der späteren<br />
Produktivumgebung die Regel. In unserem<br />
Beispiel soll jeweils ein Server jede<br />
Stufe abbilden. Ein Testsystem dieser Art<br />
eignet sich sehr gut für Leistungsmessungen,<br />
wie sie für die Parametrisierung<br />
Tabelle 3: Bedienzeiten<br />
N Sws Sas Sdb<br />
1 0.0088 0.0021 0.0019<br />
2 0.0085 0.0033 0.0012<br />
4 0.0087 0.0045 0.0007<br />
7 0.0095 0.0034 0.0005<br />
10 0.0097 0.0022 0.0006<br />
20 0.0103 0.0010 0.0006<br />
Avg 0.0093 0.0028 0.0009<br />
Tabelle 4: Leistungsdaten<br />
N X R Sws Sas Sdb<br />
(Clients) (GPS) (s) (%) (%) (%)<br />
1 24 0.039 21 8 4<br />
2 48 0.039 41 13 5<br />
4 85 0.044 74 20 5<br />
7 100 0.067 95 23 5<br />
10 99 0.099 96 22 6<br />
20 94 0.210 97 22 6<br />
Der erste Versuch, die Leistungscharakteristik<br />
von<br />
Abbildung 7 nachzubilden,<br />
stellt jeden Anwendungsserver<br />
einfach als eigenständigen<br />
PDQ-Knoten unter Eineines<br />
PDQ-Modells vonnöten sind. Den<br />
Durchsatz misst man in HTTP-Gets pro<br />
Sekunde (GPS) und die entsprechende<br />
Antwortzeit in Sekunden (s).<br />
Aus Platzgründen konzentriert sich dieser<br />
Artikel ausschließlich auf die Nachbildung<br />
der Durchsatzleistung. Wer sich für<br />
Antwortzeitmodelle interessiert, findet<br />
dazu Einzelheiten in [5]. Die kritischen<br />
Lasttestergebnisse für dieses Beispiel fasst<br />
Listing 1a: PDQ-Report<br />
01 *************************************<br />
02 ***** Pretty Damn Quick REPORT ******<br />
03 *************************************<br />
04 *** of : Sun Feb 4 17:25:39 2007 ***<br />
05 *** for: Grocery Store Checkout ***<br />
06 *** Ver: PDQ Analyzer v3.0 111904 ***<br />
07 *************************************<br />
08 ****** RESOURCE Performance *******<br />
09 <br />
10 Metric Resource Work Value Unit<br />
11 ‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐ ‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐<br />
12 Throughput Cashier Customers 0.7500 Cust/Sec<br />
13 Utilization Cashier Customers 75.0000 Percent<br />
14 Queue Length Cashier Customers 3.0000 Cust<br />
15 Residence Time Cashier Customers 4.0000 Sec<br />
16 N Sws Sas Sdb<br />
17 1 0.0088 0.0021 0.0019<br />
18 2 0.0085 0.0033 0.0012<br />
19 4 0.0087 0.0045 0.0007<br />
20 7 0.0095 0.0034 0.0005<br />
21 10 0.0097 0.0022 0.0006<br />
22 20 0.0103 0.0010 0.0006<br />
23 Avg 0.0093 0.0028 0.0009<br />
Tabelle 4 zusammen. Leider wurden die<br />
Daten nicht mit einer gleichbleibenden<br />
Inkrementierung der User-Last erzeugt,<br />
was für eine korrekte Leistungsanalyse<br />
nicht gerade optimal ist, aber dennoch<br />
kein unüberwindliches Problem darstellt.<br />
X und R sind Systemmetriken auf der<br />
Clientseite. Die Auslastung wurde eigenständig<br />
durch Performance-Monitore<br />
auf jedem der lokalen Server gemessen.<br />
Die gemessene Auslastung<br />
(r) und der Durchsatz (X)<br />
in Tabelle 4 lassen sich in<br />
eine umgestellte Version der<br />
Gleichung (3) einsetzen,<br />
um die entsprechenden Bedienzeiten<br />
für jede Stufe zu<br />
ermitteln:<br />
S<br />
= ρ<br />
X<br />
9<br />
Der nächste Abschnitt<br />
zeigt, wie der Durchschnittswert<br />
der ermittelten<br />
Bedienzeiten (die letzte<br />
Zeile in Tabelle 3) einzusetzen<br />
ist, um das PDQ-<br />
Modell zu parametrisieren.<br />
Naives PDQ-Modell<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
77
Know-how<br />
Performance-Simulation<br />
satz der durchschnittlichen Bedienzeiten<br />
aus Tabelle 3 dar. In Perl::PDQ wird die<br />
Parametrisierung der Warteschlangenknoten<br />
so, wie in Listing 2 zu sehen,<br />
codiert.<br />
Ein Diagramm des Durchsatzes, den dieses<br />
erste, sehr einfache Modell vorhersagt,<br />
zeigt die Abbildung 9. Man sieht<br />
auf den ersten Blick, dass das naive PDQ-<br />
Modell einen Durchsatz prophezeit, der<br />
im Vergleich mit den real gemessenen<br />
Daten der Testumgebung zu schnell absättigt.<br />
Allerdings teilt uns PDQ ebenfalls mit,<br />
dass der bestmögliche Durchsatz für<br />
dieses System – auf Basis der gemessenen<br />
Listing 2: Parametrisierung<br />
01 pdq::Init($model);<br />
02 $pdq::streams = pdq::CreateClosed($work, $pdq::TERM,<br />
$users,<br />
03 $think);<br />
04 ...<br />
05 # eine Warteschlange für jede der drei Stufen<br />
erstellen<br />
06 $pdq::nodes = pdq::CreateNode($node1, $pdq::CEN,<br />
$pdq::FCFS);<br />
07 $pdq::nodes = pdq::CreateNode($node2, $pdq::CEN,<br />
$pdq::FCFS);<br />
08 $pdq::nodes = pdq::CreateNode($node3, $pdq::CEN,<br />
$pdq::FCFS);<br />
09 ...<br />
10 # Zeitbasis sind Sekunden, die in Millisekunden<br />
ausgedrückt werden<br />
11 pdq::SetDemand($node1, $work, 9.3 * 1e‐3);<br />
12 pdq::SetDemand($node2, $work, 2.8 * 1e‐3);<br />
13 pdq::SetDemand($node3, $work, 0.9 * 1e‐3);<br />
Bedienzeiten aus Tabelle 3 – etwa 100<br />
GPS beträgt. Diese Leistung wird durch<br />
einen Ressourcen-Engpass begrenzt (die<br />
Warteschlange mit der längsten durchschnittlichen<br />
Bedienzeit), das ist im<br />
Beispiel der Webserver. Ihn muss man<br />
belasten, sodass der maximale Durchsatz<br />
nicht über einen Wert steigen kann, der<br />
sich aus der Beziehung (10) ergibt.<br />
X<br />
max<br />
1<br />
=<br />
max( S , S , S )<br />
ws as db<br />
1<br />
=<br />
0,<br />
0093<br />
= 107.<br />
53 GPS<br />
Load<br />
Drivers<br />
Load<br />
Balancer<br />
Web<br />
Servers<br />
Abbildung 8: Multitier-E-Commerce-Anwendung.<br />
<br />
Der höchstmögliche Durchsatz wird, wie<br />
sich hier zeigt, in unmittelbarer Nähe des<br />
errechneten optimalen Belastungspunkts<br />
N* erreicht (siehe Tabelle 1):<br />
N<br />
*<br />
Sws + Sas + Sdb<br />
+ Z<br />
=<br />
max( S , S , S )<br />
ws as db<br />
00093 . + 0. 0028 + 0. 0009 + 00 .<br />
=<br />
0.<br />
0093<br />
= 140 . clients<br />
Der liegt bei 1.40 Clients. Ändern sich die<br />
Bedienzeiten in Zukunft, beispielsweise<br />
durch eine neue Release der Anwendung,<br />
kann sich der Ressourcen-Engpass verschieben;<br />
das PDQ-Modell kann dann die<br />
Auswirkung Durchsatz und Antwortzeiten<br />
vorhersagen.<br />
Application<br />
Cluster<br />
Disk Array<br />
Database<br />
Server<br />
<br />
Listing 3: E-Commerce-Modell<br />
01 #! /usr/bin/perl<br />
02 # ebiz_final.pl<br />
03 use pdq;<br />
04 use constant MAXDUMMIES => 12;<br />
05 <br />
06 # Hash AV pairs: (in vusers laden, durchsatz in gets/sec)<br />
07 %tpdata = ( (1,24), (2,48), (4,85), (7,100), (10,99), (20,94) );<br />
08 <br />
09 @vusers = keys(%tpdata);<br />
10 $model = "e‐Commerce Final Model";<br />
11 $work = "ebiz‐tx";<br />
12 $node1 = "WebServer";<br />
13 $node2 = "AppServer";<br />
14 $node3 = "DBMServer";<br />
15 $think = 0.0 * 1e‐3; # wie beim testsystem<br />
16 $dtime = 2.2 * 1e‐3; # dummy‐bedienzeit<br />
17 <br />
18 # Header für benutzerspezifischen Report<br />
19 printf("%2s\t%4s\t%4s\tD=%2d\n", "N", "Xdat", "Xpdq", MAXDUMMIES);<br />
20 <br />
21 foreach $users (sort {$a $b} @vusers) {<br />
22 pdq::Init($model);<br />
23 $pdq::streams = pdq::CreateClosed($work, $pdq::TERM, $users, $think);<br />
24 $pdq::nodes = pdq::CreateNode($node1, $pdq::CEN, $pdq::FCFS);<br />
25 $pdq::nodes = pdq::CreateNode($node2, $pdq::CEN, $pdq::FCFS);<br />
26 $pdq::nodes = pdq::CreateNode($node3, $pdq::CEN, $pdq::FCFS);<br />
27 <br />
28 # Zeitbasis in Sekunden " in Millisekunden ausgedrückt<br />
29 pdq::SetDemand($node1, $work, 8.0 * 1e‐3 * ($users ** 0.085));<br />
30 pdq::SetDemand($node2, $work, 2.8 * 1e‐3);<br />
31 pdq::SetDemand($node3, $work, 0.9 * 1e‐3);<br />
32 <br />
33 # Dummy‐Knoten mit entsprechenden Bedienzeiten erstellen ...<br />
34 for ($i = 0; $i < MAXDUMMIES; $i++) {<br />
35 $dnode = "Dummy" . ($i < 10 ? "0$i" : "$i");<br />
36 $pdq::nodes = pdq::CreateNode($dnode, $pdq::CEN, $pdq::FCFS);<br />
37 pdq::SetDemand($dnode, $work, $dtime);<br />
38 }<br />
39 <br />
40 pdq::Solve($pdq::EXACT);<br />
41 printf("%2d\t%2d\t%4.2f\n", $users, $tpdata{$users},<br />
42 pdq::GetThruput($pdq::TERM, $work));<br />
43 }<br />
78 Ausgabe 06-2011 Admin www.admin-magazin.de
Performance-Simulation<br />
Know-How<br />
Offensichtlich ist es wünschenswert, den<br />
gesamten Datenbestand besser nachzubilden<br />
als das mit dem naiven PDQ-Modell<br />
gelang. Eine einfache Methode, um<br />
der schnellen Sättigung des Durchsatzes<br />
zu begegnen, wäre, die Bedenkzeit<br />
auf einen Wert ungleich null zu setzen<br />
( Abbildung 10):<br />
Z > 0:<br />
$think = 28.0 * 1e‐3; # freier Parameter<br />
...<br />
pdq::Init($model);<br />
$pdq::streams = pdq::CreateClosed(U<br />
$work, $pdq::TERM, $users,<br />
$think);<br />
Auf diese Art werden neue Anforderungen<br />
verlangsamt ins System injiziert.<br />
Man spielt hier mit der Bedenkzeit, als<br />
wäre sie ein freier Parameter. Der positive<br />
Wert von Z = 0.028 Sekunden stimmt<br />
nicht mit den Einstellungen überein, die<br />
beim Lasttest tatsächlich verwendet wurden,<br />
aber er kann einen Hinweis darauf<br />
geben, in welcher Richtung nach einem<br />
verbesserten PDQ-Modell zu suchen ist.<br />
Wie Abbildung 10 zeigt, verbessert die<br />
positive Bedenkzeit das Durchsatzprofil<br />
entscheidend.<br />
0. 0093 + 0. 0028 + 0. 0009 + 0.<br />
0028<br />
N * =<br />
0.<br />
0093<br />
= 441 . clients<br />
<br />
Der Trick mit der Bedenkzeit verrät uns,<br />
dass weitere Latenzen existieren, die in<br />
den Stresstestmessungen keine Berücksichtigung<br />
fanden. Die positive Bedenkzeit<br />
erzeugt eine Latenz, sodass sich die<br />
Round-Trip-Time der Anforderung verlängert.<br />
Als Nebenwirkung verringert<br />
sich der Durchsatz bei niedriger Last.<br />
Throughput (X)<br />
130<br />
120<br />
110<br />
100<br />
90<br />
80<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
0<br />
0 2 4 6 8 10 12 14 16 18 20<br />
Abbildung 9: Naives PDQ-Durchsatzmodell.<br />
Aber in der Praxis betrug die Bedenkzeit<br />
während der realen Lastmessungen null!<br />
Wie löst man dieses Paradoxon?<br />
Versteckte Latenzen<br />
berücksichtigen<br />
Als nächsten Trick fügt man dem PDQ-<br />
Modell aus Abbildung 11 Dummy-Knoten<br />
hinzu. Allerdings gibt es Bedingungen,<br />
die von den Bedienanforderungen der<br />
virtuellen Knoten zu erfüllen sind. Die<br />
Bedienanforderung eines jeden Dummy-<br />
Knotens ist so zu wählen, dass sie die<br />
Bedienanforderung des Engpassknotens<br />
nicht übersteigt. Darüber hinaus ist die<br />
Anzahl der Dummy-Knoten so zu wählen,<br />
dass die Summe der Serviceanforderungen<br />
einen Wert von Rmin = R(1)<br />
nicht übersteigt, sofern keine Konkurrenz<br />
auftritt, das heißt für eine Einzelanforderung.<br />
Wie sich herausstellt, lassen sich<br />
Clients (N)<br />
Xpdq<br />
Xdat<br />
diese Bedingungen erfüllen, wenn man<br />
zwölf einheitliche Dummy-Knoten einführt,<br />
von denen jeder eine Serviceanforderung<br />
von 2,2 ms aufweist. Die Änderungen<br />
des entsprechenden PDQ-Codes<br />
sehen folgendermaßen aus:<br />
use constant MAXDUMMIES => 12;<br />
$think = 0.0 * 1e‐3; #same as in test rig<br />
$dtime = 2.2 * 1e‐3; #dummy service time<br />
# Dummy‐Knoten mit Bedienzeiten erstellen<br />
for ($i = 0; $i < MAXDUMMIES; $i++) {<br />
$dnode = "Dummy" . ($i < 10 ? "0$i" :U<br />
"$i");<br />
$pdq::nodes = pdq::CreateNode($dnode,U<br />
$pdq::CEN, $pdq::FCFS);<br />
pdq::SetDemand($dnode, $work, $dtime);<br />
}<br />
Man beachte, dass die Bedenkzeit wieder<br />
auf null zurückgesetzt ist. Die Ergebnisse<br />
dieser Änderungen am PDQ-Modell finden<br />
sich in Abbildung 12. Das Durchsatzprofil<br />
ist immer noch für geringe Lasten<br />
(N < N*) passend, wobei gilt<br />
Throughput (X)<br />
130<br />
120<br />
110<br />
100<br />
90<br />
80<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
Xdat<br />
10<br />
Xpdq<br />
0<br />
0 2 4 6 8 10 12 14 16 18 20<br />
Clients (N)<br />
Abbildung 10: Durchsatzmodell mit positiver Bedenkzeit.<br />
. . . ( . )<br />
N * = 0 0093 + 0 0028 + 0 0009 + 12 0 0022<br />
0.<br />
0093<br />
= 424 . clients<br />
<br />
Lastabhängige Server<br />
Bestimmte Aspekte des physikalischen<br />
Systems wurden nicht gemessen, sodass<br />
die Validierung des PDQ-Modells schwerfällt.<br />
Bisher haben wir versucht, die Intensität<br />
der Arbeitslast durch Einführung<br />
einer positiven Bedenkzeit anzupassen.<br />
Die Einstellung von Z = 0.028 Sekunden<br />
beseitigte das Problem der schnellen<br />
Sättigung; gleichzeitig stimmt der Wert<br />
nicht mit dem Wert von Z = 0 Sekunden<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
79
Know-how<br />
Performance-Simulation<br />
überein, der für die eigentlichen Messungen<br />
eingestellt wurde. Durch die Einführung<br />
von Dummy-Warteschlangenknoten<br />
ins PDQ-Modell wurde das Modell für<br />
Szenarien mit geringer Last verbessert,<br />
aber dadurch wird dem in den Daten<br />
beobachteten Abfall des Durchsatzes<br />
nicht Rechnung getragen. Um diesen<br />
Effekt nachzubilden, können wir den<br />
Webserverknoten durch einen lastabhängigen<br />
Knoten ersetzen. Die Theorie<br />
der lastabhängigen Server wird in [5]<br />
besprochen.<br />
In unserem Beispiel wenden wir einen<br />
etwas einfacheren Ansatz an. Aus der<br />
Bedienzeit (Sws) in Tabelle 4 erkennt<br />
man, dass sie nicht für alle Clientlasten<br />
konstant bleibt. Es wird also eine<br />
Methode benötigt, um diese Variabilität<br />
auszudrücken. Wenn man ein Diagramm<br />
der Messdaten für Sws erstellt, lässt sich<br />
eine statistische Regressionsanpassung<br />
durchführen, wie sie Abbildung 13 zeigt.<br />
Die sich daraus ergebende Potenzgesetzgleichung<br />
lautet:<br />
D ( ws<br />
N ) . .<br />
= 8 0000N<br />
0 0850<br />
Damit wird Node1 des PDQ-Modells wie<br />
folgt parametrisiert:<br />
pdq::SetDemand($node1, $work, $$<br />
8.0 * 1e‐3 * ($users ** 0.085));<br />
Die angepasste Ausgabe des fertigen<br />
PDQ-Modells zeigt Tabelle 5. Sie zeugt<br />
von einer guten Übereinstimmung mit<br />
den gemessenen Daten für D = 12<br />
Dummy-PDQ-Knoten.<br />
Die Auswirkung auf das Durchsatzmodell<br />
lässt sich in Abbildung 14 erkennen. Die<br />
Throughput (X)<br />
140<br />
120<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
<br />
Requests<br />
mit Xpdq2 gekennzeichnete Kurve zeigt<br />
den vorhergesagten übersteuerten Durchsatz<br />
auf Basis des lastabhängigen Servers<br />
für das Webfrontend, und die Vorhersagen<br />
liegen locker innerhalb des Fehlerbereichs<br />
der gemessenen Daten. In diesem Fall<br />
bringt es wenig, PDQ für die Vorhersage<br />
einer Last einzusetzen, die oberhalb der<br />
gemessenen Last von N = 20 Clients liegt,<br />
weil der Durchsatz nicht nur gesättigt ist,<br />
sondern auch rückgängig. Nachdem nun<br />
ein PDQ-Modell existiert, das mit den Testdaten<br />
validiert wurde, kann man jetzt alle<br />
erdenklichen Was-wäre-wenn-Szenarien<br />
durchspielen.<br />
Das vorherige Beispiel ist bereits ziemlich<br />
anspruchsvoll, und ähnliche PDQ-Modelle<br />
sind für die meisten Anwendungsfälle<br />
vollkommen ausreichend. Allerdings<br />
N clients<br />
Z = 0 ms<br />
Responses<br />
D ws<br />
D as D db<br />
Web Server App Server DBMS Server<br />
Abbildung 11: Dummy-Knoten bilden versteckte Latenzen ab.<br />
0 2 4 6 8 10 12 14 16 18 20<br />
Abbildung 12: Durchsatz bei Z = 0 mit Dummy-Knoten.<br />
Clients (N)<br />
Xdat<br />
Xpdq<br />
UXB<br />
SXB<br />
Dummy Servers<br />
gibt es auch Situationen, in denen detailliertere<br />
Modelle erforderlich sein können.<br />
Zwei Beispiele für diese Szenarien sind<br />
multiple Server und multiple Aufgaben.<br />
Multiple Server<br />
Ein Szenario außerhalb der Computerwelt,<br />
das man mithilfe der Warteschlange<br />
mit multiplen Servern aus Abbildung 15<br />
nachbilden könnte, ist das Schlangestehen<br />
in einer Bank oder einem Postamt.<br />
Im Kontext der Computer-Performance<br />
könnte Abbildung 15 als einfaches Modell<br />
eines symmetrischen Mehrprozessorsystems<br />
dienen.<br />
Weitere Informationen zu diesem Thema<br />
finden Sie in Kapitel 7 von [5]. Die<br />
Antwortzeit in (1) wird durch Folgendes<br />
ersetzt:<br />
S<br />
R <br />
m<br />
1− ρ<br />
<br />
wobei r = lS, und m ist die integrale<br />
Anzahl von Servern. Technisch betrachtet<br />
Tabelle 5: Modellresultate<br />
N Xdat Xpdq D=12<br />
1 24 26.25<br />
2 48 47.41<br />
4 85 77.42<br />
7 100 98.09<br />
10 99 101.71<br />
20 94 96.90<br />
80 Ausgabe 06-2011 Admin www.admin-magazin.de
Performance-Simulation<br />
Know-How<br />
handelt es sich um eine Annäherung,<br />
aber keine schlechte! Die genaue Lösung<br />
ist komplexer und lässt sich mit dem<br />
folgenden Perl-Algorithmus entdecken<br />
(Listing 4).<br />
Es handelt sich um genau das Warteschlangenmodell,<br />
das Erlang vor 100 Jahren<br />
entwickelt hat. Damals stellte jeder<br />
Server eine Hauptleitung im Telefonnetz<br />
dar.<br />
Multiple Aufgaben<br />
Service Demand<br />
10.5<br />
10<br />
9.5<br />
9<br />
8.5<br />
y = 8.3437x 0.0645<br />
R 2 = 0.8745<br />
Data_Dws<br />
8.0 N^{0.085}<br />
Power (Data_Dws)<br />
Was in Wirklichkeit sehr häufig vorkommt,<br />
ist, dass eine einzelne Ressource,<br />
etwa ein Datenbankserver, mit<br />
verschiedenen Transaktionstypen umgehen<br />
muss. Zum Beispiel kann der Kauf<br />
eines Flugtickets oder die Buchung eines<br />
Hotelzimmers im Internet ein halbes<br />
Dutzend unterschiedliche Transaktionen<br />
erfordern, bevor das Ticket ausgestellt<br />
oder das Zimmer endlich reserviert ist.<br />
Situationen dieser Art lassen sich wie<br />
folgt mit PDQ abbilden.<br />
Man betrachte den einfacheren Fall von<br />
drei unterschiedlichen Transaktionstypen,<br />
die durch die Farben Rot, Grün und<br />
Blau gekennzeichnet werden. Jede dieser<br />
eingefärbten Aufgaben kann auf eine gemeinsam<br />
genutzte Ressource zugreifen,<br />
zum Beispiel einen Datenbankserver.<br />
Im Warteschlangenparadigma (Abbildung<br />
16) wird jede der bunten Aufgaben<br />
durch die unterschiedlichen Bedienzeiten<br />
charakterisiert. Mit anderen Worten: Die<br />
rote Last erhält eine rote Bedienzeit, die<br />
grüne eine grüne Bedienzeit und so weiter.<br />
Für jede Farbe gilt auch eine eigene<br />
Ankunftrate.<br />
Throughput (X)<br />
130<br />
120<br />
110<br />
100<br />
90<br />
80<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
0<br />
8<br />
0 5 10 15 20<br />
Clients (N)<br />
Abbildung 13: Regressionsanpassung der Webserver-Zeiten.<br />
0 2 4 6 8 10 12 14 16 18 20<br />
Abbildung 14: Modell des lastabhängigen Durchsatzes.<br />
Clients (N)<br />
Xdat<br />
Xpdq1<br />
UXB<br />
SXB<br />
Xpdq2<br />
Geht man davon aus, dass sich die Bedienzeiten<br />
unterscheiden, resultiert die<br />
tatsächliche Auswirkung auf die Warteschlange<br />
beim Eintreffen beispielsweise<br />
einer roten Anforderung nicht mehr allein<br />
aus der Anzahl von bereits wartenden<br />
Anforderungen (das trifft nur für eine<br />
„monochrome“ Aufgabe zu), sondern<br />
aus der Farbkombination der wartenden<br />
Anforderungen. In PDQ lässt sich Abbildung<br />
16 vielleicht so darstellen wie im<br />
Kasten „Gemischte Workloads“.<br />
Natürlich ist der durch multiple Aufgaben<br />
generierte PDQ-Report komplexer<br />
aufgrund der vielen möglichen Interaktionen.<br />
Auf jeden Fall wirft er etwas Licht<br />
auf die vielfältigen Erweiterungsmöglichkeiten<br />
von PDQ, um realistische Computerarchitekturen<br />
abbilden zu können.<br />
Diese Thematik noch weiter auszuführen,<br />
würde den Rahmen sprengen, aber<br />
man findet weitere Details in [5].<br />
Richtlinien für den Einsatz<br />
von PDQ<br />
Modelle jeder Art zu erstellen, ist teils<br />
Wissenschaft und teils Kunst, und daher<br />
ist es unmöglich, ein komplettes Regelwerk<br />
oder eine komplette Sammlung<br />
von Algorithmen bereitzustellen, die<br />
immer das richtige Modell liefern. Wie<br />
dieser Artikel illustriert, handelt es sich in<br />
Wirklichkeit um einen Prozess der ständigen<br />
Verbesserung. Erfahrung ist durch<br />
nichts zu ersetzen, und sie gewinnt man<br />
bekanntlich durch die ständige Wiederholung.<br />
In diesem Sinne folgen nun einige Richtlinien,<br />
die unter Umständen helfen, wenn<br />
man PDQ-Modelle kreiert: .<br />
n Keep it simple: Ein PDQ-Modell sollte<br />
so einfach wie irgend möglich sein,<br />
aber auch nicht einfacher. Es ist kaum<br />
zu vermeiden, dass man um so mehr<br />
Abbildung 15: PDQ-Modell einer Multiserver-<br />
Warteschlange.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
81
Know-how<br />
Performance-Simulation<br />
01 #! /usr/bin/perl<br />
02 # erlang.pl<br />
03 <br />
04 ## Input‐Parameter<br />
05 $servers = 8;<br />
06 $erlangs = 4;<br />
07 <br />
Details in das PDQ-Modell stopfen<br />
möchte, je mehr man über die Systemarchitektur<br />
weiß. Das führt jedoch unausweichlich<br />
zu einer Überlastung des<br />
Modells.<br />
n Eher die Streckenkarte als die U-Bahn<br />
im Hinterkopf behalten: Ein PDQ-Modell<br />
verhält sich zum Computersystem<br />
wie eine Karte der U-Bahn zum<br />
physikalischen U-Bahn-Netz. Eine<br />
U-Bahn-Karte ist eine Abstraktion, die<br />
kaum etwas mit der physischen Beschaffenheit<br />
des Netzes zu tun hat.<br />
Sie bietet gerade ausreichende Details,<br />
sodass man von Punkt A nach Punkt<br />
B kommt. Sie enthält jedoch keine<br />
überflüssigen Details wie die Höhe der<br />
Bahnhöfe über Normalnull, ja noch<br />
nicht einmal die Entfernung zwischen<br />
ihnen. Ein PDQ-Modell ist eine ähnliche<br />
Abstraktion.<br />
n Das große Bild: Im Gegensatz zu vielen<br />
Aspekten der Computertechnologie,<br />
bei denen man große Mengen<br />
winziger Details aufnehmen muss,<br />
geht es beim PDQ-Modell darum, zu<br />
entscheiden, wie viele Details man<br />
ignorieren kann!<br />
n Suchen nach dem Operationsprinzip:<br />
Wer das Operationsprinzip nicht in<br />
08 if($erlangs > $servers) {<br />
Listing 4: »erlang.pl«<br />
09 print "Error: Erlangs exceeds servers\n";<br />
10 exit;<br />
11 }<br />
12 <br />
13 $rho = $erlangs / $servers;<br />
14 $erlangB = $erlangs / (1 + $erlangs);<br />
15 <br />
16 for ($m = 2; $m
gemischten Aufgabenmodell (Multiclass-Streams<br />
in PDQ) vermeidet man<br />
die Nutzung von mehr als drei gleichzeitigen<br />
Aufgabenstreams, wo immer<br />
das möglich ist. Davon abgesehen,<br />
dass der resultierende PDQ-Report<br />
ansonsten ganz bestimmt unhandlich<br />
ist, interessiert man sich in der Regel<br />
lediglich für die Interaktion zweier<br />
Aufgaben, das heißt für einen Vergleich<br />
von Aufgabenpaaren. Alles andere<br />
gehört zur dritten Aufgabe (dem<br />
„Hintergrund“). Wenn man nicht<br />
erkennen kann, wie dieses Problem<br />
praktisch zu lösen wäre, dann ist<br />
man wahrscheinlich noch nicht so<br />
weit, das PDQ-Modell erstellen zu<br />
können.<br />
Fazit<br />
Performance-Modeling ist eine anspruchsvolle<br />
Disziplin, die man am<br />
besten durch ständige Wiederholung<br />
trainiert. Ein Großteil der Bemühungen<br />
kreisen dabei immer wieder um<br />
die Erstellung und die Validierung eines<br />
Modells, der zu untersuchenden Umgebung<br />
und ihrer Anwendungen. Sobald<br />
das PDQ-Modell erst einmal validiert ist,<br />
muss es nicht immer wieder aufs Neue<br />
zusammengebaut werden. Im Allgemeinen<br />
reicht dann etwas Tuning – und<br />
schon lassen sich auch Performance-<br />
Änderungen durch Hardware-Upgrades<br />
oder durch neue Software berücksichtigen.<br />
Die dreistufige E-Commerce- Applikation,<br />
für die dieser Beitrag ein beispielhaftes<br />
Modell geliefert hat, bildet einen recht<br />
guten Ausgangspunkt, auf dem sich aufbauen<br />
lässt. Auf diese Weise lässt sich<br />
das Modell relativ einfach um multiple<br />
Server und zusätzliche Aufgaben erweitern.<br />
Eines der erstaunlichsten Ergebnisse<br />
des PDQ-Modells ist die Tat sache,<br />
dass es den analysierenden Admin<br />
bestimmte Effekte – zum Beispiel versteckte<br />
Latenzen – erkennen lässt, die<br />
in den überwachten Daten für ihn sonst<br />
nicht ohne weiteres ersichtlich gewesen<br />
wären. Aber das vielleicht allerwichtigste<br />
Resultat des PDQ-Einsatzes<br />
sind gar nicht die Leistungsmodelle<br />
an sich, sondern es ist die Tatsache,<br />
dass der PDQ- Modellierungsprozess<br />
einen organisatorischen Rahmen für<br />
die Beurteilung aller Leistungsdaten<br />
liefert, in dem Erkenntnisse aus dem<br />
Monitoring bis hin zur Trendvorhersage<br />
zusammenfließen können. (jcb) n<br />
Infos<br />
[1] Kenneth Hess: „Monitoring Linux Performance<br />
with Orca“ [http:// www.<br />
linux‐magazine. com/ issue/ 65/ Linux_Performance_Monitoring_With_Orca.<br />
pdf]<br />
[2] R, Open Source Statistical Analysis Package:<br />
[http:// www. r‐project. org]<br />
[3] SimPy, Open Source Simulator wirtten in<br />
Python: [http:// sorceforge. net/ projects/<br />
simpy]<br />
[4] N. J. Gunther, „Guerrilla Capacity Planning“,<br />
Springer-Verlag, 2007<br />
[5] N. J. Gunther: „Analyzing Computer<br />
System Performance with Perl::PDQ“,<br />
Springer-Verlag, 2005<br />
[6] Perl-PDQ: [http:// www. perfdynamics. com/<br />
Tools/ pdq. tar. gz] .pdf<br />
[7] Linux-Stresstesttools: [http:// www.<br />
opensourcetesting. org/ performance. php]<br />
Der Autor<br />
Neil Gunther, M.Sc., Ph.D. ist ein international<br />
anerkannter Consultant und Gründer der Firma<br />
Performance Dynamics Company ([http:// www.<br />
perfdynamics. com]).<br />
Nach einer Ausbildung in theoretischer Physik<br />
nahm er verschiedene Forschungs- und<br />
Management-Aufgaben wahr, unter anderem an<br />
der San Jose State University und bei der NASA<br />
(Voyager- und Galileo-Missionen).<br />
Dr. Gunther ist Mitglied von AMS, APS, ACM,<br />
CMG, IEEE und INFORMS.<br />
&<br />
Listing 5: Gemischte Workloads<br />
01 $pdq::nodes = pdq::CreateNode("DBserver", $pdq::CEN, $pdq::FCFS);<br />
02 $pdq::streams = pdq::CreateOpen("Red", $ArrivalsRed);<br />
03 $pdq::streams = pdq::CreateOpen("Grn", $ArrivalsGrn);<br />
04 $pdq::streams = pdq::CreateOpen("Blu", $ArrivalsBlu);<br />
05 pdq::SetDemand("DBserver", "Red", $ServiceRed);<br />
06 pdq::SetDemand("DBserver", "Grn", $ServiceGrn);<br />
07 pdq::SetDemand("DBserver", "Blu", $ServiceBlu);<br />
www.admin-magazin.de
Know-how<br />
HA-Serie<br />
fbmadeira, 123RF<br />
HA-Workshop, Teil 5: Zentrales Cloud-Storage dank Pacemaker und iSCSI<br />
Die Speicherwolke<br />
Diese Fortsetzung des HA-Workshops setzt das Konzept des letzten Teils auf neue Füße und sorgt für die Skalierbarkeit.<br />
Dreh- und Angelpunkt: ein SAN-Drop-In mit DRBD, iSCSI und Pacemaker. Martin Loschwitz<br />
Die Wolke ist derzeit bekanntermaßen in<br />
aller Munde. Die Idee dahinter ist nicht<br />
neu, hieß früher nur anders: Infrastructure<br />
as a Service ist nichts anderes als<br />
das, was Cloud-Provider heute feilbieten.<br />
Im Grunde braucht es gar nicht viel,<br />
um sich eine eigene Wolke zu basteln.<br />
Schon der letzte Teil der vorliegenden<br />
Serie kam mit Hardware von der Stange,<br />
DRBD, KVM und Pacemaker schließlich<br />
zu einem voll funktionstüchtigen Virtualisierungscluster.<br />
An dieser Stelle von einer „Mini-Cloud“<br />
zu sprechen, mag dem einen oder anderen<br />
etwas zu dick aufgetragen vorkommen.<br />
Denn der vorgestellte Cluster erfüllt<br />
zwar die grundsätzlichen Anforderungen<br />
– im Rahmen der Ressourcen, die er zur<br />
Verfügung stellt, lässt sich Rechenleistung<br />
unkompliziert in die Hände Dritter<br />
übergeben. Aber bei genau diesem<br />
Detail liegt das Problem: Die gängigen<br />
Cloud-Setups sind immer auch skalierbar.<br />
Brauchen die Benutzer mehr Leistung,<br />
lässt sich diese schnell bereitstellen.<br />
Der Virtualisierungscluster aus dem<br />
Beispiel im letzten Heft stößt aber an<br />
Grenzen, wenn er seine Möglichkeiten<br />
ausgeschöpft hat. Und spätestens mit der<br />
maximalen Ausbaustufe der Hardware<br />
des Clusters ist auch das Ende der Fahnenstange<br />
erreicht.<br />
iSCSI zu Hilfe<br />
Cloud-Setups verwenden für gute Skalierung<br />
üblicherweise zentralen, geshareten<br />
Speicher und viele Virtualisierungsfrontends.<br />
Die holen sich den Speicher aus<br />
dem Shared Storage, binden ihn lokal ein<br />
und starten dann virtuelle Maschinen damit.<br />
Shared Storage bietet genau die Skalierbarkeit,<br />
die in solchen Setups nützlich<br />
ist: Neuer Speicher lässt sich bei Bedarf<br />
per Kommandozeile zuweisen oder entfernen,<br />
zusätzlicher Speicher ist durch<br />
neue Platten oder JBods leicht bereitzustellen.<br />
Im Vergleich zum Zwei-Knoten-<br />
Cluster mit Virtualisierungsfunktion ist<br />
die Fahnenstange bei solchen Setups sehr<br />
viel länger.<br />
Typischerweise arbeitet Shared Storage<br />
mit Fibre Channel. Das belastet den<br />
Admin mit den Nachteilen, die solche<br />
SANs üblicherweise haben: Hohe Anschaffungskosten,<br />
Vendor Lock-in und<br />
die Verwendung eines nicht-ubiquitären<br />
Protokolls sind nur drei davon. Kleinere<br />
Betriebe, die auf der Suche nach einer<br />
günstigen Lösung für eine private Cloud<br />
sind, haben selten das Budget für ein<br />
typisches SAN samt der meist benötigten<br />
Fibre-Channel-Hardware.<br />
84 Ausgabe 06-2011 Admin www.admin-magazin.de
HA-Serie<br />
Know-how<br />
Zentraler Speicher für eine skalierbare<br />
private Wolke lässt sich aber auch<br />
ohne SAN, dafür mit Standard-Hardware<br />
und Standard-Netzwerkhardware (1 GBit<br />
oder 10 GBit) realisieren. Die Komponenten,<br />
die dafür notwendig sind, hat die<br />
HA- Serie in den letzten zwei Ausgaben<br />
bereits vorgestellt: DRBD kümmert sich<br />
im Zwei-Knoten-Storagecluster um die<br />
Redundanz der eigentlichen Daten. Pacemaker<br />
managed mithilfe von Heartbeat 3<br />
oder Corosync den Cluster. Bleibt noch<br />
der Weg zwischen Storage und Virtualisierungsfrontend:<br />
Hier ist Ethernet als<br />
Transport gesetzt, und die Kommunikation<br />
auf dem Kabel übernimmt iSCSI.<br />
Voila: Fertig ist das Jedermann-SAN.<br />
Die passende Hardware<br />
Abbildung 1: 50 GBit wie zwischen diesen optischen Intel-Adaptern müssen es nicht sein, aber 10 wären sehr gut.<br />
Das vorgestellte Setup hat zwei Dimensionen<br />
in Sachen Hardware. Einerseits<br />
gilt es, die Hardware für den iSCSI-<br />
Cluster ordentlich zu dimensionieren, es<br />
müssen aber auch die Virtualisierungsfrontends<br />
genug Dampf unter der Haube<br />
haben. Was den iSCSI-Cluster angeht,<br />
gilt: CPU ist von geringerem Interesse<br />
als RAM und Speicher; Letztere sollten<br />
ausreichend vorhanden sein. Sinnvoll ist<br />
es, von Anfang an Rechner einzusetzen,<br />
die über zusätzliche Controller zu einem<br />
späteren Zeitpunkt mit JBODs erweiterbar<br />
sind. Zum Flaschenhals wird gern<br />
auch die Backplane der Server selbst;<br />
im Idealfall sind die Platten über mehrere<br />
Backplanes angebunden. In Sachen<br />
Netzwerkanbindung empfiehlt sich 10<br />
GBit; Controller hierfür sind schon unter<br />
200 Euro zu bekommen (Abbildung<br />
1). Der Crosslink zwischen den zwei<br />
Knoten des Clusters sollte genauso über<br />
eine 10-Gbit-Verbindung realisiert sein<br />
wie die Anbindung des iSCSI-Clusters<br />
an den Rest des Netzwerks. Das setzt<br />
freilich passende Switches voraus; die<br />
meisten Mittelklasse-Switches erlauben<br />
es, 10-Gbit-Funktionen über entsprechende<br />
Zusatzmodule nachzurüsten.<br />
Insgesamt liegt ein Zwei-Knoten-Cluster<br />
mit diesen Eigenschaften selbst bei größeren<br />
Mengen an Plattenplatz trotzdem<br />
weit unter dem Preis, den ein SAN mit<br />
Fibre Channel hätte. Im Hinblick auf die<br />
Virtualisierungsfrontends gilt, dass sie<br />
eine starke CPU und viel RAM benötigen.<br />
10 Gbit auf den Frontends ist toll,<br />
aber nicht zwingend notwendig. Dass<br />
die virtuellen Maschinen, die auf einer<br />
Kiste laufen, zusammen permanent 75-<br />
Abbildung 2: Ist ein Host an einem iSCSI-Target angemeldet, erscheint die Platte auf Linux-Systemen im<br />
»dmesg« als Virtual Disk.<br />
85 Megabyte konsumieren, die mit einer<br />
1-GBit-Verbindung erreichbar sind, ist<br />
unwahrscheinlich. Außerdem lässt sich<br />
die Kapazität der Netzwerkanbindung<br />
mit Bonding noch entsprechend erhöhen.<br />
Plattenplatz ist bei den Frontends<br />
hingegen ein zu vernachlässigender Faktor,<br />
denn ihre wichtigen Daten beziehen<br />
diese ohnehin vom iSCSI-Cluster.<br />
Die Systemarchitektur des<br />
iSCSI-Clusters<br />
Um die iSCSI-Funktion zu realisieren,<br />
braucht es auf dem iSCSI-Cluster ein<br />
passendes Storage-Setup. Der Storage-<br />
Controller stellt im Normalfall ein großes<br />
Device bereit, das den gesamten<br />
Platz der lokalen System-Platten enthält.<br />
Freilich ist es unsinnig, diesen gesamten<br />
Platz in ein DRBD-Laufwerk zu packen<br />
und das dann per iSCSI zu exportieren,<br />
denn so entfällt die Möglichkeit, den<br />
Platz in kleine Scheiben zu schneiden<br />
und bedarfsweise unterschiedlichen<br />
Aufgaben zu widmen. Sinnvoller ist es,<br />
LVM als zusätzliche Komponente mit<br />
aufzunehmen. Im Gegensatz zu den<br />
Setups, die im Rahmen der HA-Serie<br />
bisher dargestellt waren, liegt beim<br />
iSCSI-Cluster allerdings nicht das DRBD<br />
auf den LVM-Devices, sondern die Reihenfolge<br />
ist umgekehrt. Zwischen den<br />
beiden Knoten des iSCSI-Clusters gibt<br />
es ein paar DRBD-Ressourcen, die zusammen<br />
den gesamten Platz der Platten<br />
abdecken. Die DRBD-Konfiguration<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
85
Know-how<br />
HA-Serie<br />
bleibt schlank, weil nicht für jede VM<br />
auf einem Virtualisierungsfrontend eine<br />
neue Ressource anzulegen ist.<br />
Zudem entfällt mit dem vorgestellten<br />
Setup auch die Konfigurationsarbeit für<br />
neue DRBD-Ressourcen, wenn zu einem<br />
späteren Zeitpunkt eine neue VM auf den<br />
Frontends hinzukommt – das Anlegen<br />
einer neuen LV auf der vorhandenen<br />
LVM-Struktur geht auf der Komman-<br />
dozeile viel schneller (Abbildung 2).<br />
Streng genommen wäre es sogar möglich,<br />
bloß ein einziges, riesiges DRBD zu<br />
erzeugen und per LVM zu verwalten.<br />
Mit dieser Herangehensweise zwingt<br />
man aber den Cluster in ein typisches<br />
Aktiv-Passiv-Setup, weil die DRBD-Ressource<br />
jeweils nur auf einem Cluster-<br />
Knoten aktiv sein kann. Fragmentiert<br />
man den HDD-Platz zumindest ein kleines<br />
Stück weit, ermöglicht man eine<br />
einfache Form des Load-Balancings für<br />
den Fall mit zwei verfügbaren beiden<br />
Cluster-Knoten.<br />
Natürlich müsste man dann auch mit<br />
unterschiedlichen Service-IP-Adressen<br />
am Server und bei den Clients arbeiten.<br />
Außerdem gilt es, Over-Commitment zu<br />
verhindern: Ein einzelner Knoten muss<br />
stets die gesamte Last tragen können,<br />
Die Linux-iSCSI-Targets<br />
Ein Motto der FOSS-Bewegung ist, dass es mehr als einen Weg gibt, um<br />
etwas zu tun. Von dieser Regel machen die Entwickler auch bei iSCSI keine<br />
Ausnahme. So existiert nicht ein einzelnes iSCSI-Target, sondern es gibt<br />
gleich vier verschiedene, die um die Gunst der Admins buhlen.<br />
Generische Storage-Targets<br />
Dreh- und Angelpunkt von diversen Diskussionen, die sich um iSCSI und<br />
die dazugehörigen Targets abgespielt haben, ist die Frage, wie generisch<br />
ein iSCSI-Target sein soll. Oder anders: Soll ein Target außer iSCSI grundsätzlich<br />
auch andere Protokolle beherrschen? Und darf das im Prinzip so<br />
weit gehen, dass das eigentliche Target bloß noch dazu da ist, Plugins für<br />
verschiedene Protokolle zu laden – eines davon dann iSCSI?<br />
Bei den Debatten auf verschiedenen Entwickler-Mailinglisten zeichnete<br />
sich ab, dass die Idee von generischen Targets die meisten Fans hat.<br />
Nicht zuletzt hat auch Linux-Erfinder Linus Torvalds in anderen Fällen<br />
schon einige Male festgehalten, dass er generische Frameworks im Kernel<br />
bevorzugt, um dann möglichst viele hochspezifische Treiber die gleichen<br />
Funktionen nutzen zu lassen. Ob ein Storage-Target zum Bestandteil des<br />
offiziellen Kernels wird, hängt also zum großen Teil auch davon ab, wie gut<br />
es sich an diese Vorgabe hält.<br />
Der Veteran: IET<br />
Den Anfang dieses Überblicks macht IET, das älteste Target. Die Abkürzung<br />
IET steht für iSCSI Enterprise Target. Der Name verrät bereits, dass es<br />
sich nicht um ein generisches Target handelt: IET kann nur iSCSI, und die<br />
Entwickler planen auch nicht, das zu ändern, weil sie dazu riesige Teile der<br />
Treiberstruktur umbauen müssten. IET basiert auf der Arbeit von Ardis, das<br />
vor einigen Jahren ebenfalls ein eigenes iSCSI-Target am Markt etablieren<br />
wollte, dann aber das Interesse daran verlor. Die Köpfe hinter IET sind<br />
derzeit vor allem Arne Redlich und Ross S. W. Walker. Lange beteiligt war<br />
auch Fujita Tomonori, der sich als eifriger Poster auf der LKML mittlerweile<br />
auch auf anderen Themengebieten einen Namen gemacht hat.<br />
IET ist nicht Bestandteil des offiziellen Linux-Kernels. Die Lösung besteht<br />
aus einem Kernel-Modul und dazugehörigen Userland-Utilities. IET steht<br />
im Ruf, besonders stabil zu sein, und seine Entwickler sind sehr schnell,<br />
wenn es auftretende Probleme zu reparieren gilt. Außerdem ist die IET-<br />
Konfiguration verhältnismäßig leicht und lässt sich mittels eines Resource<br />
Agents für Pacemaker praktisch vollständig in der CRM des Cluster-Managers<br />
erledigen. Wer noch nicht mit iSCSI in Kontakt gekommen ist, findet<br />
mit IET einen guten Einstieg.<br />
Der Klassiker: STGT<br />
STGT ist ein zwar nicht von Red Hat entwickeltes, wohl aber von Red<br />
Hat sehr unterstütztes Storage-Target. Als Einziges der vier „großen“<br />
Targets ist STGT Bestandteil des Linux-Kernels, wobei die Aussage streng<br />
genommen so nicht stimmt: Der Teil von STGT, der im Kernel ist, hat für<br />
die eigentliche Funktion von STGT praktisch keinen Nutzen, sondern ist ein<br />
Stub. Sämtliche Funktionen wickelt STGT über die Userland-Programme<br />
ab, weshalb es in den meisten Benchmarks schlechter wegkommt als die<br />
anderen Targets, die sich in den Kernel einklinken. Im Gegensatz zu IET<br />
ist STGT ein generisches Target, das prinzipiell auch andere Protokolle als<br />
iSCSI zur Verfügung stellen kann. Im Gegensatz zu IET unterstützt STGT<br />
iSER – also iSCSI mitsamt RDMA.<br />
Der aufsteigende Stern: LIO<br />
Der Name LIO steht als Abkürzung für Linux-ISCSI.org. Gemeint ist ein<br />
generisches Storage-Target, das von den Linux-Entwicklern als Ersatz für<br />
STGT auserkoren worden ist. Anders als STGT spielt sich bei LIO der große<br />
Teil der Funktionen direkt im Kernel ab, ein passendes LIO-Modul im Kernel<br />
ist also Pflicht. Glücklich darf sich schätzen, wer von seinem Distributor<br />
einen Linux-Kernel 2.6.38 oder höher mitgeliefert bekommt; ab dieser<br />
Kernel-Revision ist LIO nämlich fester Bestandteil des Vanilla-Kernels.<br />
Treibende Kraft hinter LIO ist die Firma Rising Tide, deren Anteil an der<br />
kürzlichen Mainline-Integration riesig ist. Wie üblich haben die Kernel-<br />
Entwickler die Patches der LIO-Leute nämlich nicht einfach ohne Murren<br />
akzeptiert, sondern viele, teils tiefgehende Änderungen erbeten.<br />
LIO kommt mit einem iSCSI-Target, das SRP beherrscht und mithin auch<br />
Infiniband als Transportweg einsetzen kann – RDMA-Funktion inbegriffen.<br />
Auch Fibre Channel-HBAs von QLogic und LSI lassen sich mit LIO nutzen.<br />
Manche Funktionen sind bei LIO allerdings noch nicht so ausgereizt, wie<br />
man es sich als Admin wünschen würde. Die schon erwähnte SRP-Funktion<br />
ist hierfür ein gutes Beispiel: Bei Redaktionsschluss konnte LIO zwar SRP<br />
sprechen, im Rahmen eines Pacemaker-Clusters ließ sich die Funktion<br />
allerdings noch nicht nutzen – denn dafür fehlten ein paar Funktionen.<br />
Der böse Bube: SCST<br />
Schließlich ist noch SCST zu erwähnen: Auch bei SCST handelt es sich um<br />
ein Target mit Split-Design. Ein Teil der Funktionen liegt im Kernel, der Rest<br />
wird von entsprechenden Userland-Werkzeugen erledigt. SCST hat hohe<br />
Ansprüche an sich selbst: Auf der Website des Targets findet sich eine Vergleichstabelle,<br />
in der es für sich in Anspruch nimmt, das beste, schnellste<br />
und tollste Target zu sein. Sein Hauptentwickler, Vladislav Bolkhovitin, ist<br />
auf der LKML allerdings eher durch andere Ereignisse bekannt geworden,<br />
denn er fetzt sich dort regelmäßig mit den anderen Entwicklern. Die haben<br />
seinen Bestrebungen, SCST in den Mainline-Kernel zu hieven, dann bisher<br />
auch erwartungsgemäß eine Absage erteilt. Für schwache Nerven ist<br />
SCST aber ohnehin nichts: Um die versprochenen Performance-Gewinne<br />
zu erreichen, braucht es einen Kernel-Patch – und schon das dürfte SCST<br />
in vielen Firmen aus der engeren Wahl befördern.<br />
Pacemaker-Integration<br />
Die Pacemaker-Integration von iSCSI ist grundsätzlich gut. Florian Haas<br />
von hastexo hat schon 2009, damals noch bei LINBIT, zwei RAs auf OCF-<br />
Basis vorgestellt, die sowohl IET als auch STGT und LIO verwenden können.<br />
Lediglich die Unterstützung für SCST fehlt. Wer Pacemaker mit den anderen<br />
Targets betreiben möchte, ist aber fein raus.<br />
86 Ausgabe 06-2011 Admin www.admin-magazin.de
HA-Serie<br />
Know-how<br />
damit der gesamte Cluster als HA-<br />
Cluster durchgeht.<br />
Konkret sieht das Storage-Setup des iSCSI-<br />
Clusters also so aus: Ein großes Device<br />
wird vom Storage-Controller der beiden<br />
Knoten zur Verfügung gestellt, auf diesem<br />
liegen ein paar DRBD- Ressourcen,<br />
um die Redundanz der Daten zu erreichen.<br />
Die DRBD-Ressourcen sind die<br />
Physical Volumes von Volume Groups in<br />
LVM. Pacemaker aktiviert die VGs automatisch,<br />
nachdem auf einem Knoten ein<br />
DRBD-Laufwerk primär geworden ist.<br />
Die LVs der aktivierten VG exportiert<br />
ein iSCSI-Resource-Agent für Pacemaker<br />
schließlich in das lokale Netz.<br />
Die Pacemaker-<br />
Konfiguration<br />
Der Artikel geht im weiteren Verlauf davon<br />
aus, dass die beiden Knoten des<br />
iSCSI-Clusters bereits über ein Betriebssystem<br />
verfügen und dass sowohl DRBD<br />
wie auch der gesamte Cluster-Management-Stack<br />
– also Corosync oder Heartbeat<br />
plus Pacemaker – bereits installiert<br />
und grundlegend konfiguriert sind. Für<br />
iSCSI setzt der Artikel auf IET, das iSCSI<br />
Enterprise Target (Abbildung 3). Die<br />
zwei Resource Agents (RAs), die in Pacemaker<br />
das iSCSI-Setup übernehmen, beherrschen<br />
aber jeweils auch LIO und<br />
STGT. Detaillierte Informationen hierzu<br />
finden sich im Hilfstext des RA.<br />
Schritt 1: Die DRBD-<br />
Ressource<br />
Der lokale Plattenplatz der beiden Clusterknoten<br />
erscheint meist als ein großes<br />
Laufwerk im System. Mit Partitionen<br />
lässt er sich in kleinere Teile splitten,<br />
anschließend dienen die einzelnen Partitionen<br />
DRBD-Ressourcen auf beiden<br />
Knoten als Backing Device. Die Konfiguration<br />
der Ressource enthält die üblichen<br />
Einträge, ein funktionierendes Beispiel<br />
findet sich im Listing 1. Wenn die DRBD-<br />
Konfiguration auf beiden Servern passt,<br />
folgt das Anlegen des DRBD-Laufwerks.<br />
Das geschieht mit »drbdadm create‐md<br />
iscsivg01« auf beiden Clusterknoten. Es<br />
folgt der Start der Ressource, ebenfalls auf<br />
beiden Knoten: »drbdadm up iscsivg01«.<br />
Auf einem der beiden wird die Ressource<br />
danach zum ersten Mal primär: »drbdadm<br />
Abbildung 3: IET greift für seine Aufgaben auf den Kernel zurück, deshalb ist für den IET-Betrieb ein eigenes<br />
Kernel-Modul notwendig.<br />
‐‐ ‐‐force primary iscsivg01«. Sie ist damit<br />
einsatzbereit.<br />
Schritt 2: Die LVM-<br />
Infrastruktur<br />
Auf dem Knoten, auf dem die DRBD-Ressource<br />
primär ist, lässt sich nun die LVM-<br />
Infrastruktur anlegen: Mittels »pvcreate<br />
/dev/drbd/by‐res/iscsivg01/0« wird<br />
aus der DRBD-Ressource ein Physical<br />
Volume. »vgcreate iscsivg01 /dev/drbd/<br />
by‐res/iscsivg01/0« schafft eine Volume<br />
Group namens »iscsivg01 « und macht die<br />
DRBD-Ressource zum Teil davon. Nun<br />
fehlen noch die Logical Volumes, die<br />
später mittels iSCSI exportiert werden.<br />
»lvcreate ‐L512M ‐n lun1 iscsivg01« legt<br />
ein 512 Megabyte großes Logical Volume<br />
namens »lun1 « an. Analog kommt noch<br />
eine zweite LV gleicher Größe hinzu, die<br />
»lun2« heißt.<br />
In Sachen Storage ist das Haus bestellt,<br />
die nächste Hürde ist es, iSCSI mittels IET<br />
zum Laufen zu bringen.<br />
IET installieren und<br />
konfigurieren<br />
Das IET-iSCSI-Target gehört auf Debianbasierten<br />
Distributionen zum Lieferumfang.<br />
Red Hat unterstützt offiziell nur<br />
STGT, für CentOS finden sich aber passende<br />
Zusatzpakete. Für SLES stehen<br />
ebenfalls Drittanbieter-Pakete zur Verfügung.<br />
Die folgende Beschreibung bezieht<br />
sich auf Debian GNU/Linux.<br />
Um IET auf Debian zu nutzen, sind sowohl<br />
die Userland-Utilities im Paket »iscsitarget«<br />
zu installieren wie auch das entsprechende<br />
Kernel-Modul, das zuvor händisch<br />
gebaut gehört. Die Installation von »iscsitarget‐source«<br />
holt den Modul-Quelltext,<br />
mittels »apt‐get install module‐assistant<br />
&& m‐a prepare && m‐a ‐t a‐i iscsitarget«<br />
wird das Modulpaket gebaut und installiert.<br />
Das fertige ».deb«-File findet sich<br />
dann in »/usr/src« für die Installation auf<br />
dem zweiten Clusterknoten.<br />
Vorsicht: Der Module-Assistant bringt einige<br />
Development-Pakete mit. Wer auf<br />
seinem Server keine Development-Pakete<br />
dauerhaft installiert haben will, baut das<br />
Modul entweder gleich woanders, oder<br />
räumt anschließend händisch auf.<br />
Wenn IET installiert ist, schaltet<br />
»ISCSITARGET_ENABLE=true« in » /<br />
etc/default/iscsitarget« auf beiden Hosts<br />
IET scharf.<br />
Das große Ganze: die<br />
Pacemaker-Konfiguration<br />
Nun, da alle Software-Komponenten für<br />
den iSCSI-Cluster-Betrieb installiert sind,<br />
ist der letzte Schritt die Konfiguration<br />
der Dienste in Pacemaker. Weil einige<br />
Dienste zu konfigurieren sind, empfiehlt<br />
sich die CRM-Shell: Über den Befehl<br />
»crm« einmal gestartet, führt »configure«<br />
in den Abschnitt für die Konfiguration,<br />
und »edit« öffnet die aktuelle Konfiguration<br />
in einem Editor. Erst wenn alle<br />
Konfigurationseinträge fertig sind, sorgt<br />
Listing 1: »/etc/drbd.d/iscsivg01.res« für DRBD 8.4<br />
01 resource iscsivg01 {<br />
02 volume 0 {<br />
03 device /dev/drbd7;<br />
04 disk /dev/sdc1;<br />
05 meta‐disk internal;<br />
06 }<br />
07 <br />
08 on alice {<br />
09 address 192.168.133.111:7588;<br />
10 }<br />
11 <br />
12 on bob {<br />
13 address 192.168.133.112:7588;<br />
14 <br />
15 }<br />
16 }<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
87
Know-how<br />
HA-Serie<br />
»commit« dafür, dass die Änderungen<br />
im Clustermanager aktiv werden – eine<br />
zusätzliche Sicherheitsstufe ist in der<br />
CRM-Shell quasi eingebaut. Der Vorteil<br />
dieser Methode ist, dass die benötigten<br />
Ressourcen in Ruhe und nacheinander<br />
in den Cluster-Manager gelangen, unvollständige<br />
Einträge oder Tippfehler sorgen<br />
nicht automatisch für Chaos.<br />
Am Anfang der Pacemaker-Konfiguration<br />
steht die DRBD-Ressource. Die<br />
dafür benötigten Pacemaker- Einträge<br />
bestehen aus zwei Teilen, wie im zweiten<br />
Teil der HA-Serie erläutert wurde:<br />
zum einen der »primitive«-Ressource,<br />
zu anderen dem dazugehörigen »Master/Slave«-Setup.<br />
Im Beispiel heißt die DRBD-Ressource<br />
»iscsivg01«, die Pacemaker-Konfiguration<br />
dafür kann so aussehen:<br />
primitive res_drbd_iscsivg01 ocf:linbit:U<br />
drbd \<br />
params drbd_resource="iscsivg01" \<br />
op monitor interval="10s" role="Master" \<br />
op monitor interval="20s" role="Slave" \<br />
op start interval="0" timeout="240" \<br />
op stop interval="0" timeout="240"<br />
ms ms_drbd_iscsivg01 res_drbd_iscsivg01 \<br />
meta clone‐max="2" master‐max="1" master‐U<br />
node‐max="1" clone‐node‐max="1"<br />
notify="true" target‐role="Master"<br />
Die Konfiguration sorgt dafür, dass die<br />
DRBD-Ressouce auf einem der zwei Clus-<br />
ter-Knoten stets »Primary« ist.<br />
Weiter geht es mit der LVM-VG,<br />
die Pacemaker aktivieren muss,<br />
um an ihre LVs he ranzukommen.<br />
Pacemaker verfügt über einen eigenen<br />
Resource Agent für LVM<br />
namens »ocf:heartbeat:LVM«. Dieser<br />
Konfigurationseintrag greift für<br />
die Volume Group »iscsivg01«:<br />
primitive res_lvm_iscsivg01 ocf:U<br />
heartbeat:LVM params volgrpname=U<br />
"iscsivg01" op monitor interval="30s"<br />
Nun folgt die Konfiguration der Abbildung 4: Wenn Pacemaker wie im Beispiel beschrieben<br />
iSCSI-Dienste. Sie ist in zwei konfiguriert ist, sollte die Ausgabe von »crm_mon ‐1 ‐rf« so<br />
einzelne Teile getrennt: Einerseits<br />
startet der Resource Agent<br />
aussehen.<br />
»ocf:heartbeat:iSCSITarget« den<br />
IET-Daemon »ietd«, andererseits sorgt example:storage.example.iscsivg01" lun="1"<br />
»ocf:heartbeat:iSCSILogicalUnit« dafür, path="/dev/iscsivg01/lun1" U<br />
dass »ietd« weiß, welche Devices er exportieren<br />
soll.<br />
op monitor interval="10s"<br />
primitive res_lu_iscsivg01_lun2 U<br />
In diesem Beispiel sind zwei Logical Volumess<br />
zu exportieren, »lun1« und »lun2«. params target_iqn="iqn.2001‐04.com.U<br />
ocf:heartbeat:iSCSILogicalUnit U<br />
Mitsamt dem »ietd«-Start erledigen das example:storage.example.iscsivg01" lun="2"<br />
die folgenden Einträge:<br />
primitive res_target_iscsivg01 U<br />
ocf:heartbeat:iSCSITarget U<br />
params iqn="iqn.2001‐04.com.exampleU<br />
:storage.example.iscsivg01" U<br />
op monitor interval="10s"<br />
primitive res_lu_iscsivg01_lun1 U<br />
ocf:heartbeat:iSCSILogicalUnit U<br />
params target_iqn="iqn.2001‐04.com.U<br />
path="/dev/iscsivg01/lun2" U<br />
op monitor interval="10s"<br />
Der String »iqn.2001‐04.com.example:<br />
storage.example.iscsivg01« wirkt zuerst<br />
etwas kryptisch. Es handelt sich um<br />
den iSCSI Qualified Name. Der Eintrag<br />
sollte der Syntax »iqn.yyyy‐mm.reversed<br />
domainname[:identifier]« folgen.<br />
Listing 2: Die CRM-Shell-Konfiguration<br />
01 node $id="42e94fd0‐872d‐4021‐b606‐0f901f208138" bob \<br />
02 attributes standby="off"<br />
03 node $id="7b88dc12‐ee0d‐41cc‐9967‐aeb795d96292" alice \<br />
04 attributes standby="off"<br />
05 primitive res_drbd_iscsivg01 ocf:linbit:drbd \<br />
06 params drbd_resource="iscsivg01" \<br />
07 op monitor interval="10s" role="Master" \<br />
08 op monitor interval="20s" role="Slave" \<br />
09 op start interval="0" timeout="240" \<br />
10 op stop interval="0" timeout="240"<br />
11 primitive res_ip_iscsivg01 ocf:heartbeat:IPaddr2 \<br />
12 params ip="192.168.122.115" cidr_netmask="24" \<br />
13 op monitor interval="20s"<br />
14 primitive res_lu_iscsivg01_lun1 ocf:heartbeat:iSCSILogicalUnit \<br />
15 params target_iqn="iqn.2001‐04.com.example:storage.example.<br />
iscsivg01" lun="1" path="/dev/iscsivg01/lun1" \<br />
16 op monitor interval="10s"<br />
17 primitive res_lu_iscsivg01_lun2 ocf:heartbeat:iSCSILogicalUnit \<br />
18 params target_iqn="iqn.2001‐04.com.example:storage.example.<br />
iscsivg01" lun="2" path="/dev/iscsivg01/lun2" \<br />
19 op monitor interval="10s"<br />
20 primitive res_lvm_iscsivg01 ocf:heartbeat:LVM \<br />
21 params volgrpname="iscsivg01" \<br />
22 op monitor interval="30s"<br />
23 primitive res_target_iscsivg01 ocf:heartbeat:iSCSITarget \<br />
24 params iqn="iqn.2001‐04.com.example:storage.example.iscsivg01" \<br />
25 op monitor interval="10s"<br />
26 group g_iscsivg01 res_lvm_iscsivg01 res_target_iscsivg01 res_lu_<br />
iscsivg01_lun1 res_lu_iscsivg01_lun2 res_ip_iscsivg01<br />
27 ms ms_drbd_iscsivg01 res_drbd_iscsivg01 \<br />
28 meta clone‐max="2" master‐max="1" master‐node‐max="1"<br />
clone‐node‐max="1" notify="true" target‐role="Master"<br />
29 colocation co_g_iscsivg01_always_with_ms_drbd_iscsivg01 inf: g_iscsivg01<br />
ms_drbd_iscsivg01:Master<br />
30 order o_g_iscsivg01_always_after_ms_drbd_iscsivg01 inf: ms_drbd_<br />
iscsivg01:promote g_iscsivg01:start<br />
31 property $id="cib‐bootstrap‐options" \<br />
32 dc‐version="1.0.11‐6e010d6b0d49a6b929d17c0114e9d2d934dc8e04" \<br />
33 cluster‐infrastructure="Heartbeat" \<br />
34 no‐quorum‐policy="ignore" \<br />
35 stonith‐enabled="false" \<br />
36 maintenance‐mode="false" \<br />
37 last‐lrm‐refresh="1311435605"<br />
38 rsc_defaults $id="rsc‐options" \<br />
39 resource‐stickiness="200"<br />
40 <br />
88 Ausgabe 06-2011 Admin www.admin-magazin.de
HA-Serie<br />
Know-how<br />
Schließlich fehlt eine IP-Adresse, über<br />
die diese iSCSI-Targets zu erreichen sind.<br />
Diese sieht in Pacemaker so aus:<br />
primitive res_ip_iscsivg01 ocf: heartbeat: U<br />
IPaddr2 params ip="192.168.122.115" U<br />
cidr_netmask ="24" op monitor interval="20s"<br />
Damit sind alle Ressourcen komplett –<br />
nun muss Pacemaker noch wissen, wie<br />
die einzelnen Ressourcen zusammenhängen.<br />
Schließlich ist der iSCSI-Server dort<br />
zu starten, wo auch das dazugehörige<br />
DRBD-Device primär ist. Und zwar erst<br />
dann, wenn die LVM-VG erfolgreich aktiviert<br />
und deren LVs verfügbar sind. Die<br />
einfachste Lösung ist ein »group«-Eintrag<br />
für die angelegten Ressourcen:<br />
group g_iscsivg01 res_lvm_iscsivg01 U<br />
res_target_iscsivg01 res_lu_iscsivg01_U<br />
lun1 res_lu_iscsivg01_lun2 res_ip_iscsivg01<br />
Die DRBD-Ressource kann aufgrund ihrer<br />
Master/Slave-Eigenschaft nicht Teil einer<br />
Gruppe werden, sondern ist mit der angelegten<br />
Gruppe mittels Colocation- und<br />
Order-Constraint zu verbinden. DRBD<br />
muss auf einem Host im »Primary«-<br />
Modus laufen, bevor die Gruppe startbar<br />
ist. Diese Constraints stellen das sicher:<br />
colocation co_g_iscsivg01_always_with_U<br />
ms_drbd_iscsivg01 inf: g_iscsivg01 ms_U<br />
drbd_iscsivg01:Master<br />
order o_g_iscsivg01_always_after_ms_U<br />
drbd_iscsivg01 inf: ms_drbd_iscsivg01:U<br />
promote g_iscsivg01:start<br />
Wenn diese Einträge in der CRM-Shell<br />
gelandet sind, lädt Pacemaker wie oben<br />
beschrieben nach einem »commit« die<br />
neue Konfiguration. Ein »crm_mon ‐1 ‐rf«<br />
sollte danach wie in Abbildung 4 aussehen,<br />
und »cat /proc/net/iet/volume«<br />
sollte eine ähnliche Liste wie in Abbildung<br />
5 hervorbringen. Wenn dem so ist,<br />
ist die Konfiguration des iSCSI-Targets<br />
abgeschlossen.<br />
Das iSCSI-Target nutzen<br />
Das hochverfügbare iSCSI-Target ist fertig,<br />
nun bleibt noch zu klären, wie es<br />
sich auf Clients und insbesondere bei den<br />
Virtualisierungs-Frontends nutzen lässt.<br />
Grundvoraussetzung dafür ist, dass das<br />
Paket »open‐iscsi« installiert ist. So, wie<br />
„echtes“ SCSI, braucht auch iSCSI einen<br />
Initiator auf der Client-Seite. Der OpeniSCSI-Connector<br />
liegt praktisch jeder ak-<br />
Abbildung 5: Mittels »cat /proc/net/iet/volume« lässt sich herausfinden, welche iSCSI-Targets derzeit von<br />
einem Host exportiert werden.<br />
tuellen Distribution bei. Nach der Paketinstallation<br />
auf Debian ist sein Daemon<br />
noch mittels »/etc/init.d/open‐iscsi start«<br />
zu starten. Danach lässt sich das iSCSI-<br />
Device verbinden – im Beispiel mit dem<br />
Befehl<br />
scsiadm ‐m node ‐T iqn.2001‐04.com.U<br />
example:storage.example.iscsivg01 ‐p U<br />
192.168.122.115:3260 ‐‐login<br />
auf dem Knoten, auf dem das iSCSI-<br />
Target nicht gestartet ist (im Zweifelsfall<br />
gibt »crm_mon ‐1 ‐rf« Auskunft). Der Befehl<br />
sollte »Successful!« zurückliefern, in<br />
»dmesg« sind dann die neuen Devices<br />
als »Virtual Disk« zu sehen. Damit ist der<br />
lokale Zugriff auf sie möglich.<br />
Es gibt für Pacemaker auch einen Ressource-Agent,<br />
der über »open-iscsi« die<br />
Verbindung mit einem iSCSI-Target herstellt.<br />
Er heißt »ocf:heartbeat:iscsi « und<br />
setzt ein installiertes »open‐iscsi« voraus.<br />
Der entsprechende Eintrag in der CRM-<br />
Shell braucht zwei Parameter, nämlich<br />
»portal=« mit der IP-Adresse des Targets<br />
(im Beispiel 192.168.122.115) und andererseits<br />
» target=« mit dem Target-Namen<br />
(gemeint ist der IQN, im Beispiel wäre<br />
das »iqn.2001-04.com.example:storage.<br />
example.iscsivg01«). Ein vollständiger<br />
Eintrag für dieses Beispiel wäre dieses:<br />
primitive res_connect_iSCSI_iscsivg01 ocf:U<br />
heartbeat:iscsi \<br />
params portal="192.168.122.115:3260"<br />
target="iqn.2001‐04.com.example:storage.U<br />
example.iscsivg01" \<br />
op monitor interval="10s"<br />
Der Eintrag gehört allerdings nicht in die<br />
Pacemaker-Konfiguration auf dem iSCSI-<br />
Cluster, sondern in die der Virtualisierungs-Frontends.<br />
Die letzte noch zu klärende Frage betrifft<br />
die Virtualisierungs-Frontends selbst.<br />
Denn der iSCSI-Cluster kann nur Storage-<br />
Devices zur Verfügung stellen; er kann<br />
sich nicht unmittelbar darum kümmern,<br />
dass auf den Frontends wirklich auch<br />
virtuelle Maschinen laufen.<br />
Auch die Virtualisierungs-Frontends<br />
müssen deshalb im Hinblick auf HA noch<br />
ein paar Besonderheiten beachten. Verschiedene<br />
Konzepte bieten sich an. Die<br />
einfachste Variante besteht darin, auf den<br />
Frontends eine Linux-Distribution einzusetzen,<br />
die KVM oder Xen beherrscht.<br />
Aus den Frontends wird dank Pacemaker<br />
ebenfalls ein Cluster.<br />
Auf dem Laufenden<br />
Mittels eines Konfigurationsverwaltungstools<br />
wie Puppet oder Chef ist dafür gesorgt,<br />
dass die notwendigen Konfigurationsdateien<br />
überall und immer auf dem<br />
aktuellen Stand sind. Der iSCSI-Cluster<br />
exportiert pro VM ein iSCSI-Target (im<br />
Beispiel weitere Devices analog zu »iscsivg01«).<br />
Und der Pacemaker auf den Virtualisierungs-Frontends<br />
sorgt mit Colocation-<br />
und Order-Constraints dafür, dass<br />
die Pärchen aus iSCSI-Target und VM<br />
jeweils auf dem gleichen Host laufen. Ein<br />
Beispiel für die Anbindung eines iSCSI-<br />
Targets auf dem lokalen System findet<br />
sich weiter oben, wie VMs in Pacemaker<br />
zu integrieren sind, erklärte der vierte<br />
Artikel der Serie [1].<br />
Wer es lieber bunter mag oder auf eine<br />
fertige Lösung für die Frontends zurückgreifen<br />
möchte, kann das ebenso tun.<br />
Sowohl VMware ESX als auch der weit<br />
verbreitete Citrix Xenserver können auf<br />
iSCSI-Devices als Datenquelle zurückgreifen.<br />
Mit der iSCSI-Lösung steht storage-seitig<br />
eine sehr vielfältige Lösung<br />
zur Verfügung. (jcb)<br />
n<br />
Infos<br />
[1] Martin Gerhard Loschwitz, „Eigene Clouds“<br />
<strong>ADMIN</strong> 05/2011, S. 98<br />
Der Autor<br />
Martin Gerhard Loschwitz arbeitet als Principal<br />
Consultant bei hastexo. Er beschäftigt sich dort<br />
intensiv mit Hochverfügbarkeitslösungen.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
89
Know-how<br />
Cgroups<br />
Miss X, photocase.com<br />
Cgroups zur Ressourcenkontrolle in Linux<br />
Wie viel darf's<br />
denn sein?<br />
Mit dem neuen Cgroups-Feature lässt sich bei modernen Linux-Distributionen der Ressourcen-Verbrauch etwa<br />
von Prozessen administrativ beschränken. Besonders interessant ist die Anwendung der Technologie bei<br />
virtualisierten Systemen. Ralf Spenneberg<br />
Vor einigen Jahren führte der Autor<br />
eine Linux-Schulung bei einem großen<br />
IT-Dienstleister durch. Dessen Administratoren<br />
verfügten über umfangreiche<br />
Erfahrungen mit kommerziellen Unix-<br />
Varianten, wie etwa HP-UX, und stellten<br />
die Frage, wie sie unter Linux eine Ressourcensteuerung<br />
und ‐kontrolle umsetzen<br />
könnten: Wie kann ein Administrator<br />
den genutzten Arbeitsspeicher eines einzelnen<br />
Prozesses oder einer Gruppe von<br />
Prozessen beschränken?<br />
Zum damaligen Zeitpunkt musste der Autor<br />
einräumen, dass Linux diese Funktion<br />
nicht bietet. 2006 hat jedoch Rohit Seth<br />
begonnen, diese Funktionalität zu entwickeln.<br />
Seit dem Kernel 2.6.24 kann ein<br />
Administrator diese nun auch nutzen.<br />
Ursprünglich als „process container“<br />
bezeichnet, können die Control-Groups<br />
(kurz: cgroups) Ressourcen (Arbeitsspeicher,<br />
CPU, I/O) limitieren, priorisieren,<br />
zählen (für Abrechnungszwecke) und<br />
isolieren.<br />
Auch wenn viele Administratoren diese<br />
Funktionalität auf einem normalen Server<br />
wahrscheinlich nicht einsetzen werden,<br />
ist sie beim Einsatz etwa von KVM-Virtualisierung<br />
sehr interessant. Mit Cgroups<br />
lassen sich die Ressourcen eines virtuellen<br />
Gastes beschränken oder gegenüber<br />
anderen Gästen priorisieren [1].<br />
Gruppenzwang<br />
Mit einer Cgroup kann ein Administrator<br />
mehrere Prozesse zu einer Gruppe zusammenfassen.<br />
Diese Prozesse und sämtliche<br />
Kindprozesse kann der Administrator<br />
dann mit Parametern für bestimmte<br />
Subsysteme versehen. Ein Subsystem ist<br />
dann zum Beispiel ein Ressource-Controller,<br />
der den verfügbaren Arbeitsspeicher<br />
verwaltet. Am einfachsten illustriert<br />
dies ein Beispiel.<br />
Um die Cgroups zu verwenden, muss<br />
der Administrator zunächst Hierarchien<br />
anlegen, in der die Gruppen verwaltet<br />
werden. Hierzu editiert er die Datei<br />
»/ etc / cgconfig.conf«, die in Listing 1 zu<br />
sehen ist. Existiert die Datei noch nicht,<br />
so muss er das entsprechende Paket<br />
noch installieren. Diese Datei legt für<br />
jedes Subsystem eine eigene Hierarchie<br />
an, unterhalb derer die Cgroups angelegt<br />
werden können. Die Hierarchie<br />
»/cgroup/cpu« erlaubt die Verwaltung der<br />
CPU-Shares, während »/ cgroup/net_cls«<br />
die Verwaltung der Netz-I/O-Leistung<br />
unterstützt.<br />
Ein Start des Cgconfig-Daemons erzeugt<br />
dann die Verzeichnisse und mountet<br />
das Cgroups-Dateisystem. Mit dem Befehl<br />
»lssubsys« kontrolliert der Admin<br />
die korrekte Erzeugung der Hierarchien<br />
(Lis ting 2).<br />
Die Control Groups legt der Administrator<br />
mit dem Befehl »cgcreate« an:<br />
cgcreate ‐g blkio:/dd<br />
Welche Parameter für das Subsystem<br />
Block-I/O zur Verfügung stehen, lässt<br />
sich mit dem Befehl in Listing 3 in Erfahrung<br />
bringen.<br />
Ab Kernel 2.6.37 unterstützt der Kernel<br />
hier auch die Optionen »blkio.throttle.*«.<br />
Damit kann der Administrator die maximale<br />
I/O-Bandbreite beim Lesen und<br />
90 Ausgabe 06-2011 Admin www.admin-magazin.de
Cgroups<br />
Know-How<br />
Schreiben einer Prozessgruppe einschränken.<br />
Um dies zu testen, benötigt<br />
der Admin zunächst die Major- und<br />
Minor-Nummern des Gerätes, auf dem<br />
die Bandbreite eingeschränkt werden<br />
soll. Handelt es sich um »/dev/sda1«,<br />
kann er diese mit einem einfachen »ls«<br />
ermitteln:<br />
# ls ‐l /dev/sda1<br />
brw‐rw‐‐‐‐. 1 root disk 8, 1 10. Okt U<br />
08:32 /dev/sda1<br />
Hier handelt es sich um die Major/Minor-Nummern<br />
8 respektive 1. Um die<br />
Bandbreite für die Control-Group nun auf<br />
1 Mbyte/s zu beschränken, verwendet<br />
er den Befehl »cgset« oder einfach ein<br />
»echo«:<br />
echo "8:1 1048576" > /cgroup/blkio/dd/U<br />
blkio.throttle.write_bps_device<br />
Für den Test startet er nun dd.<br />
dd if=/dev/zero of=/tmp/test & pid=$!<br />
Zunächst arbeitet der Prozess »dd« in der<br />
Root-Cgroup, die nicht eingeschränkt ist.<br />
Dies testet der Administrator, indem er<br />
dem Prozess ein SIGUSR1 sendet:<br />
# kill ‐USR1 $pid<br />
578804+0 Datensätze ein<br />
578804+0 Datensätze aus<br />
296347648 Bytes (296 MB) kopiert, 7,00803 s,U<br />
42,3 MB/s<br />
Um den Prozess in die Cgroup »dd« zu<br />
verschieben, verwendet er den Befehl<br />
»echo«:<br />
# echo $pid > /cgroups/blkio/dd/tasks<br />
Sendet der Administrator nun erneut<br />
ein USR1-Signal an den »dd«-Prozess,<br />
erkennt er, dass die durchschnittliche<br />
Bandbreite stark sinkt, da der Prozess<br />
nun nur noch mit einer Bandbreite von 1<br />
MByte/s schreiben darf.<br />
Statt die maximale Bandbreite zu beschränken,<br />
kann der Admin auch die<br />
Bandbreiten zwischen den Gruppen<br />
priorisieren. Hierzu dient der Parameter<br />
»blkio.weight=«. Der Default-Wert beträgt<br />
500. Erhält eine Gruppe den Wert<br />
1000, so kann sie doppelt so häufig auf<br />
die Block-Geräte zugreifen wie die anderen<br />
Gruppen.<br />
Statt des Echo-Kommandos lassen<br />
sich Prozesse auch mit dem Kommando<br />
»cgclassify« einzelnen Gruppen<br />
zuweisen.<br />
Möchte der Admin einen Prozess direkt<br />
in einer bestimmten Gruppe starten, so<br />
verwendet er den Befehl »cgexec«:<br />
cgexec ‐g blkio:dd "dd if=/dev/zero of=U<br />
/tmp/test"<br />
Automatik<br />
Die manuelle Zuweisung von Prozessen<br />
zu verschiedenen Gruppen ist aufwendig<br />
und fehlerträchtig. Besser ist es deshalb,<br />
wenn der Daemon »cgrulesengd«<br />
diese Zuweisung auch automatisch übernimmt.<br />
Hierzu benötigt dieser Dienst die<br />
Regeldatei »/etc/cgrules.conf«, die ihm<br />
mitteilt, welcher Prozess von welchem<br />
Benutzer in welcher Control-Group landen<br />
soll. Die Datei besitzt eine recht einfache<br />
Syntax:<br />
[:
Know-how<br />
Cgroups<br />
elle Anwendungen, die im Alltag davon<br />
profitieren können. Jedoch ist es in vielen<br />
Fällen sinnvoller, dass der Linux-Kernel<br />
die Ressourcen selbstständig zuweist und<br />
hierbei keine Schranken setzt. Setzt man<br />
jedoch eine Virtualisierungslösung wie<br />
KVM ein und virtualisiert mehrere Gäste<br />
auf einem Host, gibt es durchaus Bedarf,<br />
die Ressourcennutzung der einzelnen<br />
Gäste untereinander zu beschränken, priorisieren<br />
und zu messen. Hierfür lassen<br />
sich die Cgroups ideal einsetzen.<br />
Virtualisiert<br />
Allerdings muss man beim Einsatz von<br />
Cgroups die Virtualisierung über die<br />
Libvirt-Bibliotheken steuern und LXC-<br />
Container oder Qemu/KVM verwenden.<br />
Der Libvirtd-Daemon erzeugt dann beim<br />
Der Autor<br />
Ralf Spenneberg arbeitet<br />
als freier Unix/Linux-<br />
Trainer, Berater und Autor.<br />
Mit seinem Unternehmen<br />
OpenSource Training Ralf<br />
Spenneberg führt er Schulungen<br />
und Beratungen durch. Er veröffentlichte<br />
bereits mehrere Bücher zu den Themen<br />
Intrusion Detection, SELinux, Firewalling und<br />
Virtuelle Private Netzwerke. Vor wenigen Wochen<br />
erschien sein neues Buch „Linux-Firewalls:<br />
Sicherheit für Linux-Server und ‐Netzwerke mit<br />
IPv4 und IPv6“.<br />
Bandbreitenkontrolle<br />
Wird ein Prozess vom Net_cls-Controller überwacht,<br />
kann der Admin für sämtliche Prozesse<br />
der Cgroup eine Class-ID vergeben. Diese kann<br />
dann mit dem »tc« Kommando genutzt werden.<br />
Hierzu setzt der Admin zunächst für die Cgroup<br />
die Class-ID:<br />
echo 0x00100001 > /cgroup/net_cls/libvirt/U<br />
qemu/Gast/net_cls.classid<br />
Diese hexadezimale Zahl besteht aus zwei Teilen:<br />
0xAAAABBBB. Hierbei definieren die Ziffern<br />
AAAA die Major-Nummer der Class-ID, während<br />
die Ziffern BBBB die Minor-Nummer angeben.<br />
Führende Nullen müssen nicht angegeben<br />
werden. Der obige Ausdruck hätte also auch<br />
0x100001 lauten können.<br />
Um nun die Class-ID zu nutzen, muss der Admin<br />
eine Classbased-Queueing-Discipline (QDisc) auf<br />
der ausgehenden Netzwerkkarte (etwas »eth0«)<br />
installieren. Die QDisc entscheidet, wann ein<br />
Start für jeden Gast eine eigene Cgroup<br />
mit dem Namen des Gastes. Diese befindet<br />
sich in der Hierarchie »libvirtd/<br />
qemu|lxc/Gast« unter jedem Controller.<br />
Hier kann der Admin nun für jeden Gast<br />
einzeln die Ressourcen verwalten und<br />
priorisieren. Damit ein Gast doppelt so<br />
viel CPU-Zeit wie ein zweiter Gast erhalten<br />
kann, muss man im CPU-Controller<br />
die »cpu.shares« ändern. Das angestrebte<br />
Ziel lässt sich erreichen, indem man den<br />
Default-Wert von 1024 auf 2048 ändert.<br />
Genauso kann der Administrator auch<br />
den Verbrauch des Arbeitsspeichers<br />
oder die Bandbreitennutzung im Netzwerk<br />
konfigurieren. Hierzu nutzt er den<br />
Memory-Controller oder den Net_Cls-<br />
Controller in Kombination mit dem<br />
»tc«-Befehl. Allerdings unterstützen<br />
erst die aktuellsten Libvirt-Varianten<br />
den Net_Cls-Controller. Er unterscheidet<br />
sich von den anderen Controllern,<br />
da er lediglich eine Class-ID setzt und<br />
man dann mit dem Kommando »tc« die<br />
Bandbreite kontrolliert (siehe Kasten<br />
„Bandbreiten kontrolle“). Der Blkio-<br />
Controller lässt sich noch nicht mit Libvirt<br />
nutzen, da er noch nicht die Hierarchien<br />
unterstützt, die der Libvirtd erzeugen<br />
möchte. Daran arbeiten die Kernel-Entwickler<br />
aber schon [2]. Will der Admin<br />
für die verbrauchte Zeit der einzelnen<br />
vir tuellen Gäste Abrechnungen erstellen,<br />
so kann er das mit dem CPUAcct-Controller<br />
erreichen. Dieser zählt für jeden<br />
Gast in »/cgroup/ cpuacct/libvirt/qemu/<br />
Paket zu versenden ist. Eine klassenbasierte<br />
QDisc erlaubt die Einsortierung der Pakete in<br />
unterschiedliche Klassen sowie die Priorisierung<br />
und Beschränkung dieser Klassen. Eine klassische<br />
QDisc für die Beschränkung des Netzwerkverkehrs<br />
ist der Hierarchical Token Bucket Filter<br />
(HTB). Der Admin muss zunächst diesen auf der<br />
Netzwerkkarte installieren. Hierzu löscht er eine<br />
möglicherweise vorhandene QDisc und lädt dann<br />
den HTB:<br />
tc qdisc del dev eth0 root 2>/dev/null<br />
tc qdisc add dev etho root handle 10: htbU<br />
default 2<br />
Nun muss der Admin die Klassen erzeugen.<br />
tc class add dev eth0 parent 10: classid 10:1U<br />
htb rate 10mbit<br />
tc class add dev eth0 parent 10: classid 10:2U<br />
htb rate 20mbit ceil 100mbit<br />
Gast/cpuacct.usage« die tatsächlich verbrauchte<br />
CPU-Zeit in Nano-Sekunden.<br />
Jeder Thread eines Prozesses kann in<br />
einer eigenen Cgroup kontrolliert werden.<br />
Daran muss der Administrator denken,<br />
wenn er, wie zu Beginn gezeigt,<br />
die Prozesse nach ihrem Start mit dem<br />
echo-Kommando einer Cgroup zuweisen<br />
möchte. Auch sämtliche gestarteten<br />
Threads (»/proc/pid/task/«) muss er<br />
entsprechenden Cgroups zuweisen. Einfacher<br />
ist da das Kommando »cgexec«.<br />
Dieser Befehl startet den Prozess bereits<br />
in der Cgroup. Alle Kindprozesse und<br />
‐threads erben dann diese Gruppe.<br />
Fazit<br />
Leider unterstützen nur die aktuellen<br />
Linux-Distributionen Cgroups. Einzelne<br />
Funktionen stehen sogar nur in den aktuellsten<br />
Linux-Kerneln zur Verfügung. Der<br />
Administrator muss daher im Einzelfall<br />
testen, welche Eigenschaften er nutzen<br />
kann. Dann bieten die Cgroups aber, insbesondere<br />
auch beim Einsatz von Virtualisierung,<br />
umfangreiche Funktionen für<br />
die Ressourcen-Steuerung der Prozesse<br />
und Gäste. (ofr)<br />
n<br />
Infos<br />
[1] Cgroups: [http:// www. kernel. org/ doc/<br />
Documentation/ cgroups/]<br />
[2] Blkio-Hierarchien:<br />
[http:// lwn. net/ Articles/ 413015/]<br />
Diese zwei Zeilen erzeugen zwei verschiedene<br />
Klassen. Die erste Klasse verfügt über eine<br />
maximale Bandbreite von 10 Megabit/s. Die<br />
zwei Klasse verfügt über 20 Megabit/s, darf<br />
jedoch bis zu einer maximalen Bandbreite von<br />
100 Mbit/s beanspruchen, wenn keine andere<br />
Klasse Ansprüche erhebt. Die Option »default 2«<br />
bei der Erzeugung des HTB weist unklassifizierten<br />
Verkehr der zweiten Klasse zu.<br />
Um die Class-ID der Cgroup Net_Cls nun auszuwerten,<br />
muss der Admin noch einen Filter<br />
definieren:<br />
tc filter add dev eth0 parent 10: \<br />
protocol ip prio 10 \<br />
handle 1: cgroup<br />
Nun wird die Net_Cls-Class-ID automatisch von<br />
dem Kernel für die Einsortierung der Pakete in<br />
den HTB-Klassen genutzt. Der Libvirt-Gast erhält<br />
nun eine maximale Sendeleistung von 10 Mbit/s.<br />
92 Ausgabe 06-2011 Admin www.admin-magazin.de
Admin-mAGAZin<br />
im JAhres-Abo<br />
Jede Ausgabe des Admin-<strong>Magazin</strong>s bietet praktisch anwendbares Wissen<br />
von ausgewiesenen Experten und ausführliche Hintergrundberichte für alle<br />
Systemverwalter von Linux, Unix und Windows. Die Schwerpunkte reichen von<br />
Storage und Backup bis hin zu Netzwerk-Themen und Security.<br />
Ein Sonderteil hilft Admins heterogener Welten.<br />
15 % sparen<br />
Jetzt bestellen unter:<br />
www.admin-magazin.de/abo<br />
sichern sie sich ihr<br />
GrAtis Admin t-shirt!<br />
• Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@admin-magazin.de<br />
Mit dem Jahres-Abo erhalten Sie 6 Ausgaben des Admin-<strong>Magazin</strong>s zum Vorzugspreis von E 49,90 * statt E 58,80 *<br />
(Lieferung frei Haus).<br />
* Preise gelten für Deutschland. Schweiz: SFr 99,90; Österreich: E 54,90; anderes Europa: E 59,90
Know-how<br />
Zarafa auf UCS<br />
© tykhyi, 123RF<br />
Zarafa-Groupware-Lösung auf Univention Corporate Server installieren<br />
Fundament für<br />
Teamarbeit<br />
Die Bremer Univention GmbH hat sich mit ihrem Corporate Server als Infrastruktur-Lieferant etabliert. Wer<br />
diesen Server als Fundament für die Groupware Zarafa nutzen möchte, kann zusätzlich auf die gute Vorarbeit<br />
des Univention-Partners LINET Services GmbH zurückgreifen. Thomas Drilling<br />
Die Groupware-Lösung mit dem Giraffen-Logo<br />
konzentriert sich bekanntlich<br />
auf die möglichst kompromisslose Umsetzung<br />
des MAPI-Protokolls, empfiehlt<br />
sich damit vorrangig als kostengünstige<br />
Alternative zu MS Exchange und wird<br />
von Zarafa auch in diesem Sinne vermarktet.<br />
Die jüngst erschienene Version<br />
7 [1] bringt mit Unicode-Unterstützung,<br />
neuem Admin-Interface, verbesserter<br />
Performance vor allem im Datenbankbereich<br />
und optimiertem IMAP-Gateway<br />
interessante Features mit und basiert<br />
mit MAPI bei der Umsetzung sämtlicher<br />
Collaboration-Features vollständig auf einem<br />
echten Groupware-Protokoll.<br />
Inwieweit eine Exchange-Alternative auf<br />
Zarafa-Basis tatsächlich kostengünstiger<br />
ist – Hersteller Zarafa spricht von bis zu<br />
50 Prozent – hängt von vielen Faktoren<br />
ab. Neben etwaigen Kosten für Migration,<br />
Pflege, Service und Schulung von Administratoren<br />
im Linux-Bereich – für Nutzer<br />
ändert sich dank nahezu vollständiger<br />
Outlook-Unterstützung und Outlookähnlichem<br />
Ajax-Web-GUI (Abbildung<br />
1) kaum etwas – fallen mitunter auch<br />
Kosten für das Server-Betriebssystem an,<br />
denn Zarafa vermarktet seine Groupware-<br />
Lösung nicht als Appliance, wenngleich<br />
es solche Produkte von Zarafa-Partnern<br />
wie etwa der Bitbone AG durchaus gibt.<br />
Zarafa soll sich nämlich nach den Vorstellungen<br />
der Entwickler maximal flexibel<br />
in die vorhandenen Infrastrukturen<br />
einfügen. Es obliegt also der Entscheidung<br />
des Administrators, welche<br />
Linux-Distribution er als Basis für eine<br />
Zarafa-Installation wählt. Im günstigsten<br />
Fall ergeben sich sogar für die gesamte<br />
Infrastruktur überhaupt keine Anschaffungskosten,<br />
nämlich dann, wenn sich<br />
der Admin für die Community-Version<br />
von Zarafa zusammen mit einer freien<br />
Distribution entscheidet. Die Community-Version<br />
unterstützt bereits eine unbegrenzte<br />
Nutzerzahl beim Webclient<br />
und dem IMAP-Gateway, allerdings nur<br />
94 Ausgabe 06-2011 Admin www.admin-magazin.de
Zarafa auf UCS<br />
know-how<br />
Rollen-Konzeptes für die in der Domäne<br />
verfügbaren Hosts, namentlich Domänencontroller<br />
Master, Domänencontroller<br />
Backup, Domänencontroller Slave, Memberserver,<br />
Managed Client, Mobile Client<br />
und Thin Client.<br />
Das Domänen-Konzept des UCS basiert<br />
auf den Diensten DNS, LDAP, Samba<br />
und Kerberos. Der von UCS beim Installieren<br />
eines DC Master implementierte<br />
DNS-Dienst löst sämtliche Namen und<br />
IP-Adressen aller im Managementsystem<br />
registrierten Systeme auf. Alle UCS-Einstellungen<br />
landen im LDAP. Alle UCS-<br />
Systeme registrieren sich in den im LDAP<br />
konfigurierten DNS-Domänen. Die Administration<br />
der DNS-Domäne erfolgt dann<br />
anhand der Rechnerobjekte im Managementsystem<br />
über eine Web-Schnittstelle<br />
zum LDAP-Verzeichnisdienst.<br />
UCS hält Änderungen bei Bedarf auch mit<br />
der DHCP-Konfiguration synchron. Außerdem<br />
lässt sich die DNS-Domäne auch<br />
für das Mail-Routing verwenden, wenn<br />
der Admin sie als MX-Record einträgt.<br />
Auch Windows-Clients können Mitglied<br />
einer UCS-Domäne sein, sofern die Unterstützung<br />
von Windows-Diensten (Samba)<br />
im UCS aktiviert ist. Dabei erscheint die<br />
UCS-Domäne aus Sicht der Windowsdrei<br />
Benutzer beim Outlook-Zugriff. Ihr<br />
fehlen zudem die Active-Directory-Unterstützung,<br />
der Mehrbenutzer-Kalender<br />
und das Backup-Tool. Diese Features<br />
bietet erst die Small Business Version.<br />
Ihr gegenüber bringt die Professional-<br />
Version den Blackberry Enterprise Server,<br />
Hochverfügbarkeitsfunktionen und eine<br />
automatische Software-Verteilung mit.<br />
Die Enterprise-Variante schließlich lässt<br />
sich dank Multiserver-Unterstützung auf<br />
mehrere Server verteilen und ist mandantenfähig.<br />
UCS-Konzepte<br />
Ein typisches Zarafa-Szenario ist in der<br />
Regel im KMU- oder Enterprise-Umfeld<br />
angesiedelt ist, deshalb ist für das Server-Betriebssystem<br />
eine Enterprise-Distribution<br />
die beste Wahl. Univentions<br />
Corporate Server (UCS) drängt sich hier<br />
insofern auf, als er für den Einsatz mit<br />
Zarafa zertifiziert und als Appliance konzipiert<br />
ist. Neben den generellen Vorteilen<br />
jeder Enterprise-Distributionen wie<br />
vom Hersteller gepflegte Repositories mit<br />
stabilen, aufeinander abgestimmten und<br />
besonders getesteten Paketen zählt im<br />
Praxiseinsatz für viele Admins vor allem<br />
ein möglichst langer Support-Zeitraum.<br />
Der Univention Server lockt darüber<br />
hi naus mit zahlreichen Funktionen,<br />
die nicht unmittelbar mit seiner Zertifizierung<br />
als Groupware-Server zu tun<br />
haben [2]. Für ihn spricht etwa sein<br />
Verzeichnisdienst-basiertes Identity- und<br />
Infrastruktur-Managementsystem, dessen<br />
durchgängige Umsetzung einmalig in der<br />
Linuxwelt ist, allerdings auch die Integration<br />
einer komplexen Software wie Zarafa<br />
erschwert. Es gibt aber sowohl von UCS<br />
als auch von Zarafa Versionen für eine<br />
unbegrenzte Nutzung zu persönlichen<br />
Zwecken, die sich für ein kostenloses<br />
Testszenario empfehlen. Herausragendes<br />
Merkmal des UCS ist sein Single-Pointof-Administration-Konzept.<br />
Der UCS<br />
verwaltet sämtliche Benutzer, Gruppen<br />
und Hosts webbasiert, wozu alle Komponenten<br />
den gemeinsamen OpenLDAP-<br />
Verzeichnisdienst nutzen. Dazu implementieren<br />
die Univention-Entwickler<br />
ein eigenes Domänen-Konzept zur einfachen<br />
Integration von Servern und Arbeitsplätzen<br />
in das zentrale Identity- und<br />
Infrastrukturmanagement mitsamt eines<br />
Abbildung 1: Die Zarafa-Web-GUI steht nach Installation von »zarafa4ucs« nach wenigen Schritten auf dem<br />
Univention Server zur Verfügung.<br />
Clients wie eine Windows NT-Domäne.<br />
Der Windows-Client (ab Windows XP<br />
Professional) tritt der Domäne bei. Das<br />
ist allerdings nicht Voraussetzung, um<br />
MS Outlook als Zarafa-Client verwenden<br />
zu können, denn der Zarafa-Dienst läuft<br />
in Prinzip auch unabhängig von den geschilderten<br />
UCS-Funktionen.<br />
Unabhängig vom UCS<br />
Gleiches gilt auch für die Benutzerverwaltung<br />
und Authentifizierung des Zarafa-<br />
Servers. Auch diese ist im Prinzip unabhängig<br />
vom UCS. Allerdings kann Zarafa<br />
diese Prozesse wahlweise via MySQL,<br />
Unix/Passwd oder LDAP abwickeln und<br />
verlangt dann einen entsprechend konfigurierten<br />
UCS. Der verwendet nämlich<br />
unter anderem die Kerberos-Implementierung<br />
Heimdal (Kerberos 5-Standard)<br />
zur Realisierung eines echten und sicheren<br />
„Single Sign On“, wobei die Kerberos-<br />
Realm (Kerberos-Domäne) in der Regel<br />
mit der DNS-Domain übereinstimmt.<br />
Da UCS bei der Installation des DC Master<br />
die Kerberos-Realm anhand der DNS-Domain<br />
einstellt, erhalten die im Managementsystem<br />
angelegten Benutzerkonten<br />
automatisch ein Kerberos-Konto unter<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
95
Know-how<br />
Zarafa auf UCS<br />
dieser Realm, und der DC Master registriert<br />
alle UCS Systeme als Kerberos Hosts.<br />
Im Übrigen erfolgt dann das Anbinden<br />
existierender Kerberos-Installation durch<br />
den Aufbau einer Vertrauensstellung. Elegant<br />
ist ferner, dass die Datenhaltung der<br />
Domänen-Kontexte von DNS und Kerberos<br />
durch den Einsatz des UCS-Managementsystems<br />
konsistent bleiben. Benennt<br />
der Admin etwa einen Host dort um, gilt<br />
der neue Name sowohl im DNS als auch<br />
in der Windows-Domäne. Ändert ein Benutzer<br />
sein Passwort gegenüber Kerberos<br />
oder der Windows-Domäne, ändert es<br />
sich auch im jeweils anderen Kontext.<br />
Zarafa und Univention<br />
Für die weitere Vorgehensweise wird<br />
vorausgesetzt, dass ein UCS DC Master<br />
bereits installiert ist und läuft, wie etwa<br />
unter [2] beschrieben. Das Konfigurieren<br />
eines Zarafa-Setups ist dann in Prinzip<br />
kein großes Problem und in [1] und [3]<br />
sowie auf der Zarafa-Seite [4] hinreichend<br />
erläutert. Als Fundament kann<br />
jede der von Zarafa unterstützen Linux-<br />
Distributionen dienen. Die Installation<br />
gelingt dank des mitgelieferten Installer-<br />
Skripts nahezu überall problemlos, sofern<br />
die wichtigsten Voraussetzungen wie<br />
das Vorhandensein von Webserver und<br />
Datenbank erfüllt sind.<br />
Wer neu installiert, entpackt das Installationsarchiv<br />
etwa der aktuellen Version<br />
»zcp‐7.0.2‐2xxxxxx‐free.tar.gz« in einem<br />
beliebigen Verzeichnis mit Schreibrechten,<br />
wechselt dann ins entsprechende<br />
Unterverzeichnis »zcp‐7.0xxxx« und führt<br />
dort das Installationsskript aus »sudo ./<br />
install.sh« . In dessen Verlauf bestückt das<br />
Skript unter anderem die Server-Konfigurationsdatei<br />
»/etc/zarafa/server.cfg« mit<br />
Default-Werten oder zeigt Werte an, die<br />
Zarafa 7 mit UCS<br />
Leider berücksichtigt die aktuelle Version des<br />
Zarafa4ucs-Integrationspakets noch nicht die<br />
neue Zarafa-Version 7, die bei Redaktionsschluss<br />
bereits in der finalen Version 7.02 vorlag.<br />
Allerdings gibt es inoffiziell seit Sommer<br />
eine neue Version des Integrationspakets, das<br />
gegenwärtig noch Alpha-Status besitzt. Doch<br />
das Paket befindet sich bereits bei einigen Kunden<br />
zuverlässig im Einsatz. Bis auf Weiteres<br />
lässt sich das Paket daher zum Ausprobieren<br />
von [10] kostenlos herunterladen. Sollte sich<br />
Abbildung 2: Nach erfolgreichem Installieren von »zarafa4ucs« lassen sich Zarafa-Nutzer über den Univention<br />
Directory Manager (UDM) anlegen und werden unmittelbar im LDAP gespeichert.<br />
der Admin durch »[Enter]« übernehmen<br />
kann. Leider ist diese Vorgehensweise<br />
in Zusammenarbeit mit dem Univention<br />
Corporate Server nicht zu empfehlen, einerseits<br />
weil die Default-Konfiguration<br />
lediglich das DB-User-Plugin konfiguriert<br />
– das LDAP-Plugin erfordert ohnehin eine<br />
weitergehende Konfiguration – und andererseits,<br />
weil externe Paketquellen oder<br />
gar generische Installer die Integrität des<br />
Univentions Servers gefährden könnten.<br />
Außerdem verzichtet der Admin bei einer<br />
Zarafa-Standardinstallation auf sämtliche<br />
geschilderten Vorteile des zentralen Identity-<br />
und Infrastrukturmanagements des<br />
UCS, auch wenn sich die reine Groupware-Funtkionalität<br />
auf dieser Weise<br />
der Link bis zum Erscheinen dieses Beitrages<br />
ändern, genügt eine Mail an »zarafa4ucs@<br />
linet‐services.de«. Der Funktionsumfang ist<br />
fast identisch zur beschriebenen Version für<br />
Zarafa 6.40, ergänzt um die Möglichkeit, POP3/<br />
IMAP auf Benutzer-Ebene an- und abschalten zu<br />
können. Der einzige Grund dafür, weshalb das<br />
Paket noch im Repository zu finden ist, ist der,<br />
dass LINET Services, Univention und Zarafa derzeit<br />
noch klären, wie sich der Entwicklungs- und<br />
Release-Prozess künftig verbessern lässt.<br />
wohl gewährleisten ließe. Im Übrigen<br />
ist es beim UCS kaum empfehlenswert,<br />
wichtige Konfigurationsdateien etwa zur<br />
Postfix-Konfiguration selbst anzufassen<br />
oder durch ein externes Skript anfassen<br />
zu lassen, denn zur Umsetzung seines<br />
einheitliches Konfigurationsmanagement<br />
enthält der UCS seine Univention Configuration<br />
Registry (UCR), ein zentrales<br />
Tool zum Verwalten der lokalen Systemkonfiguration<br />
und damit eine Art Registrierungsmechanismus<br />
für Systemeinstellungen.<br />
Der Admin setzt hier einzelne<br />
Einstellungen ausschließlich durch UCR-<br />
Variablen. Das Verwalten der UCR-Variablen<br />
erfolgt dabei mithilfe des Kommandos<br />
»univention‐config‐registry«, oder dessen<br />
Alias »ucr« auf der Konsole oder alternativ<br />
mit dem UMC-Modul Univention<br />
Configuration Registry im Webbrowser.<br />
Das System aktualisiert dabei zahlreiche<br />
Standard-Konfigurationsdateien nach jeder<br />
Veränderung bestimmter auf sie registrierter<br />
UCR-Variablen.<br />
»zarafa4ucs«<br />
Dreh und Angelpunkt der Zarafa-Integration<br />
in UCS ist die Tatsache, dass Zarafa<br />
ebenfalls ein Single-Sign-On auf Basis<br />
96 Ausgabe 06-2011 Admin www.admin-magazin.de
Zarafa auf UCS<br />
know-how<br />
von LDAP und Kerberos oder gegen einen<br />
existenten Active Directory Domain<br />
Controller unterstützt. Der Admin muss<br />
dafür entsprechende Suchanfragen in der<br />
»ldap.cfg« des Zarafa-Servers konfigurieren.<br />
Im Zentrum des folgenden Workarounds<br />
steht daher die Integration der<br />
LDAP-Schema-Erweiterung von Zarafa<br />
zum Speichern von Zarafa-Attributen im<br />
LDAP des UCS durch das Zarafa4ucs-Kit.<br />
Es wurde von der LINET Services GmbH<br />
in Braunschweig, einem Univention-<br />
Partner der ersten Stunde, zunächst zur<br />
eigenen Verwendung entwickelt, dann<br />
aber der Zarafa Community-Seite samt<br />
ausführlicher Dokumentation [6] [7] zur<br />
Verfügung gestellt.<br />
Das Integrationskit »zarafa4ucs« installiert<br />
und konfiguriert Zarafa auf dem<br />
Univention Corporate Server (UCS) und<br />
kümmert sich dabei um das Einbinden<br />
der Groupware in das Managementsystem<br />
des UCS. Die LDAP-Anbindung besteht<br />
im Wesentlichen aus dem Erstellen<br />
eines Extended-Attributes im UCS. Das<br />
Integrationskit ist elegant als UCS-Paket<br />
realisiert und installiert Zarafa nicht nur<br />
inklusive aller benötigten Komponenten<br />
automatisch auf dem UCS, sondern sorgt<br />
außerdem dafür, dass der Admin Zarafa<br />
vollständig unter UCS verwalten kann.<br />
Das Integrationspaket selbst besteht aus<br />
zwei Komponenten, nämlich den für Zarafa<br />
angepassten Schema-Erweiterungen<br />
für LDAP und einigen angepassten Konfigurationsdateien<br />
für den Betrieb auf<br />
UCS-Systemen. Die Zarafa-Pakete der<br />
Community-Version werden vom Integrationskit<br />
im Zuge der Installation aus<br />
einem eigens zur Verfügung gestellten<br />
Apt-Repository geholt. Für das Verwenden<br />
des Integrationspakets »zarafa4ucs«<br />
Zarafa sollte jetzt installiert sein und<br />
einwandfrei funktionieren. Das sonst<br />
erforderliche manuelle Anlegen von<br />
Zarafa-Nutzern erübrigt sich jetzt, denn<br />
der Univention Directory Manager besitzt<br />
nun nach erfolgreicher Installation<br />
einen zusätzlichen Reiter »Zarafa« in der<br />
Benutzer-Verwaltung (Abbildung 2).<br />
Mit einem Häckchen bei »Zarafa‐User«<br />
wird aus einem UCS Nutzer-Account auf<br />
einfache Weise ein Zarafa-User. Login<br />
und Passwort sind dann mit dem UCS-<br />
Login identisch. Genauso einfach lässt<br />
sich der User auch zum Zarafa-Admin<br />
heraufstufen. Ebenfalls komfortabel ist,<br />
dass sich das händische Konfigurieren<br />
des MTA (etwa Postfix) ebenfalls erübfallen<br />
keine zusätzlichen Lizenz-oder<br />
Maintenance-Gebühren bei Univention<br />
oder LINET Services an.<br />
Installationskit einrichten<br />
Die vorliegenden Erläuterungen beziehen<br />
sich auf den Einsatz des Zarafa-Integrationkits<br />
auf Basis von UCS 2.3 und 2.4.<br />
mit Zarafa 6.40. Die zum Redaktionsschluss<br />
bevorstehende Veröffentlichung<br />
von UCS 3.0 (unter anderem mit Samba4-<br />
Unterstützung) wird aller Voraussicht<br />
nach eine geänderte Vorgehensweise<br />
nach sich ziehen. Allerdings arbeitet die<br />
LINET Service GmbH bereits an einer<br />
Umsetzung.<br />
Will man das Integrationskit in Betrieb<br />
nehmen, geht man wie folgt vor (alle folgenden<br />
Befehle benötigen Root-Rechte):<br />
Der Admin richtet das entsprechende<br />
Apt-Repository von LINET auf seinem<br />
UCS-System zunächst als Online-Repository<br />
ein. Es gibt für jede UCS-Version<br />
(aktuell 2.3 und 2.4) jeweils passende<br />
Pakete. Das Einbinden des Online-Repositorys<br />
geschieht für UCS 2.3 so:<br />
ucr set repository/online/component/U<br />
zarafa4ucs/server=zarafa4ucs.LINET‐U<br />
services.de \<br />
repository/online/component/zarafa4ucsU<br />
=enabled \<br />
repository/online/component/zarafa4ucsU<br />
/version=2.3 \<br />
repository/online/component/zarafa4ucsU<br />
prefix=repository<br />
Für UCS 2.4 klappt es entsprechend mit<br />
geänderter Versionsnummer.<br />
Beim Verwenden einer UCS-Version 2.3<br />
oder 2.4 mit lokalen Repository funktioniert<br />
das Einbinden eines Online-<br />
Repositorys mitunter nicht. In diesem<br />
Abbildung 3: Auch die Gruppen-Verwaltung integriert sich elegant in den Directory Manager.<br />
Fall spricht aber nichts dagegen, die<br />
Zarafa4ucs-Paketquellen manuell einzubinden.<br />
Bei Debian-basierten Systemen<br />
wie UCS ist dazu eine neue »sources.<br />
list«-Datei unterhalb von »/etc/apt/sources.list.d/«<br />
anzulegen, deren Name mit<br />
einer Ziffer, größer als die letzte Vorhandene<br />
(in der Regel 20 …) beginnt,<br />
etwa »25_zarafa4ucs.list«. Diese nimmt<br />
je nach verwendeter UCS-Version und<br />
Architektur-Variante beide Paketquellen<br />
wie im folgenden Beispiel für UCS 2.3<br />
– i386 auf:<br />
deb http://zarafa4ucs.LINET‐services.deU<br />
/repository/2.3/maintained/component U<br />
zarafa4ucs/all/<br />
deb http://zarafa4ucs.LINET‐services.deU<br />
/repository/2.3/maintained/component U<br />
zarafa4ucs/i386/<br />
Danach ist ein Update der Paketquellen<br />
mittels »apt‐get update« erforderlich. Jetzt<br />
steht dem Installieren der Zarafa4ucs-<br />
Pakete aus den Apt-Repositories nichts<br />
mehr im Wege, zunächst die Zarafa-<br />
Schema-Erweiterungen für UCS:<br />
apt‐get install zarafa‐ucs‐schema<br />
gefolgt von Zarafa selbst<br />
apt‐get install zarafa‐ucs<br />
Alles Weitere erledigt das Zarafa-Integrationspaket<br />
automatisch und speichert<br />
übrigens alle während der Installation<br />
gewählten Optionen als Univention<br />
Baseconfig-Variable, die sich nachträglich<br />
wie gewohnt mit dem Werkzeug (»ucr«)<br />
ändern lässt.<br />
Zarafa administrieren<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
97
Know-how<br />
Zarafa auf UCS<br />
Was macht das Integrationspaket?<br />
Bei einer klassischen Zarafa-Installation mit<br />
dem mitgelieferten Install-Skript kümmert sich<br />
der Zarafa-Installer unter anderem um das Anpassen<br />
der Konfiguration für den Zarafa-Server<br />
sowie die wichtigsten Komponenten wie Webaccess,<br />
Spooler, Gateway und so weiter und um<br />
die Postfix-Konfiguration. Diese Default-Konfiguration<br />
fällt bei der Integration mit »zarafa4ucs«<br />
weg, weil sie für die Zusammenarbeit mit dem<br />
UCS unzweckmäßig ist oder gar dessen Konzepte<br />
unterläuft.<br />
Aus diesem Grunde enthält das Zarafa4ucs-<br />
Apt-Repository nur die reinen Debian-Pakete<br />
für Server, Webaccess, Webaccess Mobile,<br />
Lizenz-Dienst und einige andere. Das Zarafa4ucs-Integrationskit<br />
installiert zunächst alle<br />
diese Pakete und kümmert sich dann um die<br />
Zarafa-Konfiguration und die Integration in den<br />
Univention Directory Manager, damit sämtliche<br />
Zarafa-Funktionen via UDM verwaltbar sind. Zarafa4ucs<br />
integriert im Wesentlichen die LDAP-<br />
Schema-Erweiterung von Zarafa und erstellt<br />
ein zugehöriges Extended-Attribut im UCS. Es<br />
benutzt dazu die im UDM vorgesehene Erweiterungsschnittstelle<br />
sowie die UCS Registry<br />
(UCR), um viele der Anpassungen im LDAP/UDM<br />
unterzubringen. Details kann der interessierte<br />
Admin unter [6] nachlesen. Eine grobe Zusammenfassung<br />
sieht etwa so aus:<br />
1. Nach dem Installieren der Zarafa-Debian-Pakete<br />
und einem Neustart des Webservers richtet<br />
»zarafa4ucs« zunächst Zarafas Standard-LDAP-<br />
Schema ein. Das findet sich unter »/usr/share/<br />
doc« in Form der Archiv-Datei »zarafa.schema.<br />
gz«. Die wird entpackt und nach »/usr/share/zarafa/«<br />
kopiert. Danach erweitert »zarafa4ucs«<br />
das Standard-LDAP-Schema derart, dass das<br />
Abbildung 6: Dank »zarafa4ucs« lassen sich Zarafa-Optionen<br />
über UCS-Base-Config-Variablen setzen.<br />
Zarafa-Feature »zarafa contacts« mit dem Univention<br />
Directory Manager administrierbar ist.<br />
Zarafa4ucs ergänzt dazu den UCS um ein zusätzliches<br />
LDAP-Attribut »z4uContact«.<br />
Um dabei möglichst wenig Änderungen am<br />
Original-Schema vornehmen zu müssen, haben<br />
die Entwickler eine zusätzliche Schema-Datei<br />
»/usr/share/zarafa/zarafa_extensions.schema«<br />
kreiert [6]. Zum Aktiveren der LDAP-Schema-<br />
Erweiterung muss sie ins laufende LDAP übernommen<br />
werden. Das Zara4ucs-Kit enthält dazu<br />
ein UCR-Template »/etc/univention/templates/<br />
files/etc/ldap/slapd.conf.d/14zarafa‐schema«.<br />
Zum Registrieren des UCR-Template-Files in<br />
Univentions Configuration Registry ergänzt<br />
»zarafa4ucs« die Datei »/etc/univention/templates/info/zarafa4ucs.info«<br />
mit der Subfile-<br />
Directive um den Eintrag »/etc/ldap/slapd.<br />
conf.d/14zarafa‐schema«, ruft dann die UCR-<br />
Kommandos<br />
ucr register zarafa4ucs<br />
ucr commit /etc/ldap/slapd.conf >/dev/null 2>&1<br />
auf und startet anschließend den OpenLDAP-<br />
Verzeichnisdienst neu.<br />
2. Anschließend erweitert das Zarafa4ucs-Kit<br />
den Univention Directory Manager. Der UDM<br />
ist nämlich so konzipiert, dass er sich mit so<br />
genannten erweiterten Attributen gezielt<br />
aufbohren lässt, was detailliert in Univention<br />
Server-Dokumentation [9] beschrieben ist. Die<br />
Erweiterung erstreckt sich neben dem Erstellen<br />
von Containern zur Aufnahme erweiterter Attribute<br />
und weiterer Zarafa-Features wie etwa<br />
der Adress-List-Funktion auf die beschriebenen<br />
UDM-Bereiche für Benutzer und Gruppen.<br />
Teil der erwähnten Erweiterung ist beispielsweise<br />
auch ein Workaround, welcher<br />
es erlaubt, im LDAP einen<br />
Zarafa Contact zum normalen User<br />
zu machen. Dieser Workaround ist<br />
etwa erforderlich, weil es aufgrund<br />
eines bekannten Bugs nicht möglich<br />
ist, im LDAP die einem LDAP-User<br />
einmal zugewiesene ObjectClass-<br />
Klasse wieder zu entziehen. Ein<br />
weiterer in [6] beschriebener<br />
recht umfangreicher Work around<br />
bezieht sich auf die Tatsache, dass<br />
bei Zarafa normalerweise das Tool<br />
»zarafa‐admin« zum Einsatz kommt,<br />
um Meeting Request Options zu<br />
ändern, die meist im Zusammenhang<br />
mit Ressourcen zum Einsatz<br />
kommen. Auch zum Integrieren der<br />
Zarafa-Features Address List haben<br />
die LINET-Experten entsprechende<br />
Python-Skripte erstellt.<br />
3. Den größten Teil der von »zara4ucs« vorgenommenen<br />
Änderungen betrifft allerdings das<br />
Anpassen der zahlreichen an der Integration von<br />
Zarafa in UCS beteiligten Konfigurationsdateien.<br />
Das sind sowohl alle Zarafa-Konfigurationsdateien,<br />
deren Bedeutung unter anderem in [1]<br />
erklärt ist, als auch die am Mail-Routing beteiligten<br />
Postfix-Konfigurationsdateien »master.<br />
cf« und »main.cf«.<br />
So kümmert sich »zarafa4ucs« beispielsweise<br />
um das Bereitstellen von Zertifikaten für die<br />
verschlüsselte Kommunikation und konfiguriert<br />
den Zarafa Server, Zarafa Webaccess und<br />
Postfix. Dabei erstellt das Kit unter anderem<br />
eine Reihe von UCR-Einträgen (Univention<br />
Configuration Registry) zum Konfigurieren<br />
der meisten Aspekte einer typischen Zarafa-<br />
Installation wie<br />
ucr set zarafa/server/mysql/host="localhost" U<br />
zarafa/server/mysql/port="3306" U<br />
zarafa/server/mysql/user="MySQL-User" U<br />
zarafa/server/mysql/password="MySQL-U<br />
Passwort" zarafa/server/mysql/U<br />
database="Datenbank-Name"<br />
Eine vollständige Liste findet sich in [6]. Danach<br />
erstellt Zarafa4ucs Zarafa-Configfile-Templates<br />
unter »/etc/univention/templates/files/etc/zarafa«<br />
und ergänzt zum Registrieren der Templates<br />
die Datei »/etc/univention/templates/info/<br />
zarafa4ucs.info« um die Pfade der beteiligten<br />
Zarafa-Konfigurationsdateien.<br />
Zarafa4ucs kümmert sich unter anderem auch<br />
um das Konfigurieren von Zarafa-Webaccess.<br />
Der erfordert zum Beispiel das Aktivieren von<br />
»magic_quotes_gpc« in der PHP-Konfiguration<br />
»/etc/php5/apache2/php.ini«. Zum Erweitern<br />
der UCS-Portalseite um die URL für den Zarafa-<br />
Webaccess zieht Zara fa4ucs wieder die UCR-<br />
Schnittstelle heran und erstellt dazu die beiden<br />
Kommandos<br />
ucr commit /var/www/ucs‐overview/de.html.dU<br />
/42zarafa‐webaccess.html<br />
ucr commit /var/www/ucs‐overview/en.html.dU<br />
/42zarafa‐webaccess.html<br />
Auch die Postfix-Konfiguration geschieht mithilfe<br />
von UCR-Variablen:<br />
ucr set postfix/mailbox_transport="mailbox_U<br />
transport = zarafa"<br />
ucr set postfix/zarafa=true<br />
gefolgt von einem Restart von Postfix. Zarafa4ucs<br />
überschreibt übrigens auch das Template<br />
der Postfix-Konfiguration, weil sich nicht alle<br />
erforderlichen Optionen mit dem Standard-Template<br />
des UCS umsetzen lassen.<br />
98 Ausgabe 06-2011 Admin www.admin-magazin.de
Zarafa auf UCS<br />
know-how<br />
rigt, weil der UCS dank »zarafa4ucs« die<br />
für den jeweiligen Benutzer im UDM<br />
hinterlegten E-Mail-Adressen automatisch<br />
in das zugehörige Zarafa-Postfach<br />
einliefert. Außerdem kann der Admin<br />
an dieser Stelle auf einfache Weise<br />
Hard- und Soft-Quotas einrichten oder<br />
einen einfachen Shared-Store anlegen.<br />
Ebenso elegant in den Univention<br />
Directory Manager integriert ist die<br />
Gruppen-Verwaltung (Abbildung 3).<br />
Auch sie verfügt nach dem Installieren<br />
von »zarafa4ucs« in den Gruppeneinstellungen<br />
über einen Reiter »Zarafa«.<br />
Setzt der Admin hier das Häckchen bei<br />
»Zarafa‐Gruppe«, taucht diese Gruppe in<br />
Zarafas globalem Adressbuch auf.<br />
Übrigens lässt sich die bei der<br />
ausgewählten Zarafa-Gruppe eingetragene<br />
E-Mail-Adresse zum direkten<br />
Adressieren aller Gruppenmitglieder<br />
benutzen. Beim Versand einer E-Mail<br />
an diese Gruppen-Adresse erhalten<br />
dann somit alle Mitglieder der Gruppe<br />
eine Kopie der E-Mail in ihrem Zarafa-<br />
Postfach.<br />
Fazit<br />
Zarafa und der UCS sind ein interessantes<br />
Gespann. Letzterer erschwert<br />
mit seinem individuellen Konzept zwar<br />
auf den ersten Blick die Integration<br />
von Zarafa, es lohnt sich aber, sich<br />
auf die Integration von Zarafa mit den<br />
UCS-Konzepten einzulassen, denn<br />
im Ergebnis lockt die durchgängige<br />
Administrierbarkeit von Zarafa über<br />
die Web-Schnittstelle des Univention<br />
Servers inklusive Benutzerverwaltung<br />
im LDAP. Dank des Engagements des<br />
LINET Services, halten sich die Mühen<br />
des Unterfangens in Grenzen, da das<br />
Zarafa4ucs-Inte grationspaket sämtliche<br />
benötigten Schritte zuverlässig automatisch<br />
erledigt. (jcb)<br />
n<br />
Abbildung 5: Vor der Installation von Zarafa4ucs empfiehlt sich ein Online-Update auf die aktuellste UCS-Version.<br />
Abbildung 4: Der Zarafa-Webaccess steht nach Installation von »zarafa4ucs« auch in der UCS-Startseite zur<br />
Verfügung.<br />
Infos<br />
[1] Thomas Drilling, Zarafa 7, <strong>ADMIN</strong> 04/2011:<br />
[http://www.admin-magazin.de/<br />
Das-Heft/2011/04/Zarafa-7-mit-MAPI-<br />
Unterstuetzung-und-voller-Outlook-<br />
2010-Kompatibilitaet/%28language%29/<br />
ger-DE]<br />
[2] Thomas Drilling, UCS 2.4, <strong>ADMIN</strong> 03/11:<br />
[http:// www. admin‐magazin. de/ Das‐Heft/<br />
2011/ 03/ Univention‐Corporate‐Server‐fu<br />
er‐virtuelle‐Infrastrukturen/ (language)/<br />
ger‐DE]<br />
[3] Thomas Drilling, Zarafa 6.40, <strong>ADMIN</strong><br />
06/2010: [http://www.admin-magazin.<br />
de/Das-Heft/2010/06/Open-Source-<br />
Mapi-und-Active-Sync-mit-Zarafa-<br />
6.40/%28language%29/ger-DE]<br />
[4] Dokumentation Zarafa-Server:<br />
[http:// www. zarafa. com/ content/<br />
documentation]<br />
[5] LINET Services:<br />
[http:// www. LINET‐services. de/]<br />
[6] Zarafa4UCS Dokumentation:<br />
[http:// community. zarafa. com/ pg/ plugins/<br />
project/ 190/ developer/ tisp/ zarafa4ucs]<br />
[7] Zarafa4UCS:<br />
[http:// zarafa4ucs. LINET‐services. de/]<br />
[8] Zarafa-Community-Download<br />
[http:// download. zarafa. com/ community/<br />
final/ 6. 40/]<br />
[9] UCS-Server-Dokumentation:<br />
[http:// www. univention. de/ download/<br />
dokumentation/ standarddokumentation/]<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
99
Know-how<br />
HA-Troubleshooting<br />
© Gleb Semenov, 123RF<br />
HA-Workshop, Teil 5: Troubleshooting, Tipps & Tricks<br />
Aus der Werkstatt<br />
HA-Cluster und umfassende HA-Setups bergen viele Fallstricke und bieten<br />
sehr viele Fettnäpfchen. Wer mit dem Fuß in einem solchen steht, findet in<br />
diesem Artikel die Lösung für das Problem. Martin Loschwitz<br />
Der Alltag eines IT-Admins bietet gelegentlich<br />
genügend Gründe für pure<br />
Verzweifelung. Wer mit dem Linux-Clusterstack<br />
zu tun hat, kann davon meist<br />
eine mehrstündige Arie singen: Nach etlichen<br />
Stunden des Tüftelns ist die CIB-<br />
Konfiguration für Pacemaker endlich<br />
fertig, doch beim ersten Test führt das<br />
Abschalten eines Knotens nicht zum gewünschten<br />
Failover. Stattdessen schwadroniert<br />
der Kernel im »dmesg« von einem<br />
»Split‐Brain«, und im Anschluss helfen<br />
nicht einmal mehr die bekannten Befehle,<br />
damit DRBD wieder tut, was es tun soll.<br />
Und dann ist da noch die ungute Erinnerung<br />
an das letzte Kernel-Update: Nach<br />
dem Reboot war einiges an Konfigurationsarbeit<br />
notwendig, um Pacemaker<br />
zur neuerlichen Kooperation zu überreden.<br />
Außerdem gab es Probleme mit der<br />
Datenbank, weil Pacemaker sie immer<br />
wieder neu gestartet hat. Eine Nacht ohne<br />
Schlaf war der Lohn für das Bestreben,<br />
die Software aktuell zu halten. Schrauben<br />
und Räder hat ein Cluster einige, und entsprechend<br />
viel kann in einem HA-Setup<br />
daneben gehen. Dieser Artikel versucht,<br />
die Ursachen für die häufigsten Fehler zu<br />
erklären, und beschäftigt sich ausführlich<br />
mit der kurz- und langfristigen Lösung<br />
der Cluster-Probleme.<br />
Rund um DRBD<br />
Die Replikationslösung DRBD hat üblicherweise<br />
direkt mit Hardware zu tun,<br />
denn der DRBD-Treiber kommuniziert<br />
mit den Storage-Laufwerken und sorgt<br />
dafür, dass auf den Platten landet, was<br />
auf die Platten gehört. Entsprechend ist<br />
es auch der DRBD-Treiber, der als Erster<br />
von Hardware-Problemen erfährt und<br />
idealerweise die richtigen Gegenmaßnahmen<br />
einleitet. Soforthilfe bringt die<br />
»Diskless‐Primary«-Funktion, die viele<br />
Admins gar nicht kennen.<br />
Schon der erste Artikel dieser Serie [1]<br />
erwähnte, dass der Befehl »drbdadm up<br />
Ressource« eigentlich ein Alias ist. Ruft<br />
ein Admin »drbdadm up« auf, dann tut<br />
»drbdadm« drei verschiedene Dinge: Zunächst<br />
sorgt es dafür, dass eine DRBD-<br />
Ressource sich für ihr konfiguriertes<br />
Backing-Device die exklusiven Zugriffsrechte<br />
sichert (der Einzelbefehl hierfür<br />
lautet »drbdadm attach«). Dann startet<br />
es im Kernel einen Receiver-Thread und<br />
einen Sender-Thread für die TCP/IP-Verbindung<br />
zum jeweils anderen Clusterknoten<br />
(»drbdadm connect«). Schließlich<br />
konfiguriert es auch die »rate«, also den<br />
maximal zulässigen Datendurchsatz dieser<br />
Ressource, wenn dieser in DRBDs<br />
Konfigurationsdatei festgelegt ist (» drbdsetup<br />
/dev/Minor‐Nummer ‐r Rate«).<br />
Alternativ zu »drbdadm up« wäre es folglich<br />
auch möglich, diese drei Befehle händisch<br />
abzusetzen. Mit »drbdadm down«<br />
verhält es sich übrigens ganz ähnlich: Es<br />
ist ein Alias für »drbdadm disconnect«<br />
und »drbdadm detach« – das Entfernen<br />
der Syncer-Rate entfällt, weil die beim<br />
nächsten Start der Ressource ohnehin<br />
wieder den Wert annimmt, den sie in der<br />
Config hat, oder den Default-Wert. Die<br />
beiden getrennten »drbdadm up«-Kom-<br />
102 Ausgabe 06-2011 Admin www.admin-magazin.de
HA-Troubleshooting<br />
Know-how<br />
mandos machen deutlich,<br />
dass der Netzwerkzustand<br />
einer DRBD-Ressource und<br />
ihr Plattenzustand miteinander<br />
nur indirekt zu tun<br />
haben. Faktisch kann eine<br />
DRBD-Ressource attached<br />
sein, aber keine Netzwerkverbindung<br />
haben.<br />
Und umgekehrt geht’s<br />
genauso: Eine Ressource<br />
kann eine Netzwerkverbindung haben,<br />
aber kein funktionierendes Backing<br />
Device. Dieses Feature trägt den schon<br />
erwähnten Namen »Diskless Primary<br />
Mode« und ist ein echter Retter in der<br />
Not, denn es sorgt im Zweifelsfalle dafür,<br />
dass ein Dienst trotz kaputter Festplatte<br />
unterbrechungsfrei weiterlaufen kann.<br />
Diskless-Primary aktivieren<br />
Ob der Diskless-Primary-Modus (Abbildung<br />
1) zur Anwendung kommt, entscheidet<br />
sich in der DRBD-Konfiguration.<br />
Der Parameter heißt »on‐io‐error«, gehört<br />
zur Sektion »disk« und kennt als wichtigste<br />
Parameter »pass_on« und »detach«.<br />
Bis einschließlich DRBD 8.3 war es in der<br />
Default-Config so, dass DRBD I/O-Fehler<br />
von Backing Devices an das Dateisystem<br />
weitergab und diesem die Entscheidung<br />
überließ, was zu tun sei (»pass_on«).<br />
Ab DRBD 8.4 ist die »detach«-Option der<br />
Defaultwert.<br />
Sobald DRBD mit dieser Konfiguration<br />
Fehlermeldungen vom lokalen Storage<br />
erhält, gibt es automatisch sein Backing<br />
Device frei und lässt es fortan in Ruhe.<br />
Das geschieht unabhängig davon, ob die<br />
DRBD-Ressource gerade im » Primary«-<br />
oder »Secondary«-Modus ist. Admins<br />
können das feststellen, indem sie einerseits<br />
die entsprechenden Meldungen in<br />
»dmesg« verfolgen, andererseits ist im<br />
Feld »ds« in »cat /proc/drbd« der Wert<br />
für den Rechner mit der defekten Platte<br />
ab diesem Zeitpunkt »Diskless«.<br />
Sollte die Ressource »Primary« sein, wickelt<br />
DRBD für sie sämtliche Lese- sowie<br />
Schreibvorgänge ab sofort über den verbliebenen<br />
sekundären Knoten ab.<br />
Wann immer also ein Zugriff auf die Ressource<br />
ohne Backing Device stattfindet,<br />
holt DRBD sich vom sekundären Knoten<br />
die Daten oder schaufelt sie dorthin weiter<br />
– je nachdem, ob es sich um einen<br />
Abbildung 1: Dank des »Diskless‐Primary«-Modus kann eine DRBD-Ressource ohne ein Backing Device im »Primary«-Modus sein.<br />
Lese- oder Schreibzugriff handelt. Der<br />
Vorteil für Admins liegt auf der Hand:<br />
Es geht mit dem Server zwar für die<br />
nächsten Stunden langsamer weiter –<br />
denn jeder Zugriff muss ja zwischen dem<br />
primären und dem sekundären Knoten<br />
hin- und herwandern – dafür lässt sich<br />
aber die Reparatur sinnvoll planen.<br />
Der Switch over lässt sich beispielsweise<br />
in eine Zeit legen, in der weniger auf den<br />
Systemen los ist als zu einer Stoßzeit.<br />
Diskless-Primary gibt dem Admin also<br />
vor allem Zeit zum Planen.<br />
Defekte Platten richtig<br />
austauschen<br />
Hat eine Platte das Zeitliche gesegnet<br />
(oder ist durch den Defekt von mehreren<br />
Platte ein RAID-Verbund kaputtgegangen),<br />
braucht es nach dem Hardware-<br />
Tausch noch ein paar DRBD-Handgriffe,<br />
um wieder klare Verhältnisse zu schaffen.<br />
Der Artikel geht an dieser Stelle davon<br />
aus, dass die kaputte Hardware ausgetauscht<br />
ist und dass im System die Storages<br />
so aussehen wie vor dem Ausfall.<br />
War zwischen DRBD und der Hardware<br />
noch eine Zwischenschicht eingezogen,<br />
beispielsweise LVM, so ist auch diese<br />
entsprechend wiederherzustellen.<br />
Nach dem Hardwaretausch ist die lokale<br />
DRBD-Ressource im Grunde nicht<br />
mehr vorhanden, vor allem dann nicht,<br />
wenn sie interne Metadaten genutzt hat.<br />
Aber auch, wenn externe Metadaten in<br />
Verwendung waren – die Daten, die zu<br />
diesen Metadaten gehören, sind nichtsdestotrotz<br />
auf dieser Seite des Clusters<br />
schlichtweg weg.<br />
Der Tausch der Platte funktioniert so wie<br />
das Anlegen einer neuen Ressource. Auf<br />
dem Rechner mit der ausgetauschten<br />
Platte führen die folgenden Befehle zum<br />
Ziel: »drbdadm create‐md Ressource« legt<br />
die Metadaten an (externe Metadaten der<br />
vorherigen Ressource sind zu überschreiben<br />
»drbdadm up Ressource« sorgt für<br />
den Start der Ressource. Weil der andere<br />
Clusterknoten als Diskstate »UpToDate«<br />
hat, erkennt DRBD automatisch, dass der<br />
reparierte Knoten aktuelle Daten braucht,<br />
und startet eine komplette Synchronisation.<br />
Bereits während diese läuft, ist<br />
es übrigens möglich, Primary-Rolle und<br />
Secondary-Rolle wieder zu vertauschen,<br />
falls das notwendig sein sollte.<br />
DRBD nachträglich<br />
installieren<br />
Das Thema Hochverfügbarkeit wird<br />
immer wichtiger, und viele Setups, die<br />
zuvor als SPOFs ihr Dasein fristeten, sollen<br />
redundant werden. DRBD kommt da<br />
gerade recht: Es ist einerseits eine sehr<br />
günstige Lösung für redundante Daten,<br />
andererseits lässt es sich ohne größere<br />
Mühen auch auf existierende Setups<br />
anwenden, wenn die richtigen Tipps<br />
Beachtung finden.<br />
Fakt ist: Nutzt eine DRBD-Ressource<br />
interne Metadaten, dann liegen diese<br />
am Ende der Ressource. Um auf ein vorhandenes<br />
Storage DRBD anzuwenden,<br />
muss es also entweder möglich sein,<br />
das Backing Device zu vergrößern (bei<br />
LVs in einer LVM-Volume-Group, in der<br />
noch Platz ist, ist das die eleganteste<br />
und sicherste Lösung) oder das darauf<br />
residierende Dateisystem zu verkleinern.<br />
Wer XFS verwendet, kann die<br />
Verkleinerungsvariante vergessen, denn<br />
XFS lässt sich ob seiner Eigenschaft als<br />
extent-basiertes Dateisystem grundsätzlich<br />
nicht schrumpfen.<br />
Ist kein Plattenplatz für die Vergrößerung<br />
des Devices mehr vorhanden und<br />
kann das Dateisystem nicht verkleinert<br />
werden, bleibt als letzter Ausweg nur die<br />
Variante mit externen Meta-Daten.Wenn<br />
interne Meta-Daten möglich sind, ist der<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
103
Know-how<br />
HA-Troubleshooting<br />
Abbildung 2: Das DRBD-Kernel-Modul beschwert sich im »dmesg« ausführlich über Split Brain-Situationen …<br />
Rest des Vorgangs quasi das berühmte<br />
Schema F: Am Ende des zukünftigen<br />
Backing Devices ist so viel Platz freizuschaufeln,<br />
dass die Meta-Daten Platz<br />
haben.<br />
Wie groß die Metadaten im schlimmsten<br />
Falle werden, lässt sich mit der Faustformel<br />
„32 kByte pro repliziertem Gigabyte“<br />
ungefähr herausfinden. Wenn<br />
sicher ist, dass genug freier Platz am<br />
Ende des Backing Devices vorhanden ist<br />
und für die Ressource eine brauchbare<br />
Konfigurationsdatei existiert, geht es mit<br />
»drbdadm create‐md Ressource« wie gewohnt<br />
weiter. »drbdadm up Ressource «<br />
setzt die Ressource in Gang, »drbdadm<br />
‐‐ ‐‐force primary Ressource « versetzt sie<br />
in den »Primary«-Modus. Ab sofort sind<br />
über die Ressource die gleichen Daten<br />
verfügbar, die vorher direkt vom Backing<br />
Device kamen. Im Anschluss kann der<br />
neue Clusterpartner folgen – fertig ist<br />
das Setup.<br />
Anpassen der DRBD-<br />
Konfiguration<br />
»drbdadm« ist das Werkzeug, mit dem<br />
Admins ihre DRBD-Ressourcen auf der<br />
Kommandozeile verwalten sollen. Im<br />
Hintergrund ruft es »drbdsetup« auf, das<br />
die Kommunikation mit DRBDs Kernel-<br />
Modul abwickelt. »drbdsetup« hat aber<br />
auch noch einen anderen Nutzen: Mit<br />
ihm lassen sich im laufenden Betrieb<br />
zumindest einige Konfigurationsparameter<br />
einer Ressource anpassen. Das<br />
beste Beispiel dafür ist die Syncer-<br />
Rate, die festlegt, wie viel Bandbreite<br />
die DRBD-Resynchronisation höchstens<br />
in Anspruch nehmen darf. Wenn nach<br />
längeren Ausfällen große Mengen an<br />
Daten zu resynchronisieren sind, wirkt<br />
sich das unter Umständen negativ auf<br />
die Performance des Storage-Systems<br />
aus. Mittels »drbdset-up« lässt sich das<br />
unterbinden. Um die Synchronisationsrate<br />
so anzupassen, lautet der korrekte<br />
Befehl »drbdsetup /dev/drbdMinor ‐r<br />
Rate«. »Minor« ist dabei durch die Minor-Nummer<br />
der Ressource zu ersetzen<br />
und »Rate« durch die gewünschte Rate<br />
samt Größeneinheit, also beispielsweise<br />
»60M« für 60 Megabyte pro Sekunde.<br />
Änderungen an der DRBD-Konfiguration,<br />
die so vorgenommen werden, sind nach<br />
dem nächsten Neustart der Ressource<br />
verschwunden. Sollen sie permanent<br />
sein, empfiehlt sich eine andere Funktion,<br />
diesmal wieder von »drbdadm«:<br />
der »adjust«-Befehl. Er liest die derzeit<br />
auf der Platte liegende Config ein und<br />
passt die Parameter der gerade laufenden<br />
Ressourcen entsprechend an. Eine<br />
Änderung in der Konfigurationsdatei<br />
einer Ressource mit anschließendem<br />
»drbdadm adjust Ressource« führt also<br />
ebenfalls dazu, dass die neue Konfiguration<br />
on-the-fly aktiv wird – und nach<br />
dem nächsten Neustart noch vorhanden<br />
ist. Vorsicht ist bei »drbdadm adjust«<br />
trotzdem geboten: Manche Parameter<br />
müssen auf beiden Hosts zwingend<br />
identisch sein, sonst trennt DRBD die<br />
Verbindung zwischen den Clusterknoten.<br />
Genauere Informationen enthält der<br />
DRBD User’s Guide unter [2].<br />
Split-Brain-Situationen<br />
mit DRBD<br />
DRBD ist darauf ausgelegt, dass der eine<br />
Knoten eines Clusters weiß, was der andere<br />
Knoten gerade tut – oder sicher annehmen<br />
kann, dass der zweite Knoten<br />
außer Betrieb ist. Aus diesem Grunde sei<br />
dringend dazu geraten, dass zwischen<br />
zwei Clusterknoten mindestens zwei<br />
Kommunikationspfade existieren, um<br />
auch den Ausfall beispielsweise eines<br />
Switches noch zu kompensieren.<br />
Verlieren beide Clusterknoten zu irgendeinem<br />
Zeitpunkt all ihre Pfade zur Kommunikation,<br />
während sie ansonsten noch<br />
funktionstüchtig sind, so ist das für den<br />
Cluster eine Katastrophe. Denn solch ein<br />
Szenario führt zwangsläufig zu Datenkorruption.<br />
Die Clustermanager auf beiden<br />
Seiten des Clusters glauben, der andere<br />
Clusterknoten sei weg und sie müssten<br />
sofort sämtliche Cluster-Dienste alleine<br />
anbieten. Solange eine DRBD-Ressource<br />
104 Ausgabe 06-2011 Admin www.admin-magazin.de
HA-Troubleshooting<br />
Know-how<br />
Abbildung 3: … und nimmt die Arbeit erst wieder auf, nachdem der Admin das Problem händisch gelöst hat.<br />
auf einem Host den Diskstate »UpTo-<br />
Date« hat, hindert der DRBD-Treiber den<br />
Cluster Resource Manager nicht daran,<br />
die Ressource in den primären Modus<br />
umzuschalten. So nimmt das Unglück<br />
seinen Lauf: Pacemaker macht genau das<br />
auf beiden Clusterknoten. Und wenn wenigstens<br />
ein Kommunikationspfad wieder<br />
funktioniert und die Ressourcen die<br />
Verbindung wiederherstellen könnten,<br />
stellen sie fest, dass auf beiden Seiten<br />
unterschiedliche Veränderungen passiert<br />
sind. Dieses Szenario heißt „Split‐Brain“:<br />
Alleine weiß der Cluster nun nicht mehr,<br />
welcher der beiden Datensätze der Richtige<br />
ist.<br />
Fakt ist: Sollen nicht die Inhalte der beiden<br />
Ressourcen händisch wieder zusammengeführt<br />
werden, geht definitiv einer der<br />
Datensätze verloren. Im DRBD-Sprachgebrauch<br />
ist vom „Split‐Brain Victim“<br />
und vom „Split‐Brain Survivor“ die Rede.<br />
Die Daten von Ersterem gehen den Bach<br />
runter, Letztere bleiben erhalten.<br />
Ein Split Brain erkennen<br />
DRBD ist darauf ausgerichtet, sich bei<br />
einem Split Brain lautstark über diesen<br />
Zustand zu beschweren. Meistens fallen<br />
Probleme zuerst in Pacemaker auf: Weil<br />
sich eine DRBD-Ressource mit Split Brain<br />
partout nicht mehr von beiden Seiten aus<br />
Abbildung 4: Wenn die Ressourcen im Cluster wie von Geisterhand außer Rand und Band geraten, ist oft eine kopierte DRBD-Konfigurationsdatei schuld.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
105
Know-how<br />
HA-Troubleshooting<br />
Abbildung 5: Mittels des »is‐managed«-Meta-Attributes lässt sich Pacemakers Klammergriff auf einzelne Ressourcen deaktivieren.<br />
verbinden lässt, ist die Ressource in Pacemaker<br />
als » failed« markiert. Ein Blick ins<br />
»dmesg« verschafft Klarheit: Findet sich<br />
darin eine Zeile wie »Split‐Brain detected<br />
but unresolved, dropping connection!«,<br />
ist manuelle Intervention angesagt (Abbildung<br />
2).<br />
Der wichtigste Schritt für den Admin ist,<br />
das Victim und den Survivor festzulegen.<br />
Es steht die Frage im Mittelpunkt, mit<br />
welchem Datensatz der Cluster weiterar-<br />
beitet. Wegen der konkreten Eigenheiten<br />
von Setups sieht der Artikel an dieser<br />
Stelle von einer generellen Empfehlung<br />
ab. Stehen Victim und Survivor fest, ist<br />
der weitere Verlauf aber klar: Auf beiden<br />
Knoten ist zunächst »drbdadm disconnect<br />
Ressource« sinnvoll – das stellt sicher,<br />
dass von beiden Seiten keine Connect-<br />
Versuche mehr ausgehen.<br />
Jetzt erfährt das Victim, dass es das<br />
Victim ist: »drbdadm secondary Ressource«<br />
sichert ab, dass sich die Ressource<br />
im »Secondary«-Modus befindet. Dann<br />
kommt der entscheidende Befehl auf dem<br />
Victim: »drbdadm ‐‐ ‐‐discard‐my‐data<br />
connect Ressource« weist die Ressource<br />
an, wieder einen Verbindungsversuch zu<br />
unternehmen und seine eigenen Daten<br />
zu verwerfen. »drbdadm connect Ressource«<br />
auf dem Survivor sorgt dafür,<br />
dass er wieder Connections akzeptiert.<br />
Im »dmesg« findet sich für die Ressource<br />
Abbildung 6: Der Maintenance-Modus setzt das gesamte Cluster-Management außer Kraft, ohne sich auf den Zustand der Ressourcen auszuwirken.<br />
106 Ausgabe 06-2011 Admin www.admin-magazin.de
Linux-<strong>Magazin</strong><br />
ACADEMY<br />
anschließend eine Meldung wie diese:<br />
»Split‐Brain detected, manually solved.<br />
Sync from this node« (Abbildung 3). Der<br />
Split Brain ist repariert und der Normalzustand<br />
wiederhergestellt.<br />
Geisterhand bei der<br />
Clusterkonfiguration<br />
Die alltäglichen DRBD-Probleme sind damit<br />
abgedeckt. Hinzu gesellen sich ein<br />
paar Schwierigkeiten im Zusammenspiel<br />
von Pacemaker und DRBD oder von Pacemaker<br />
mit anderen Cluster-Ressourcen.<br />
Ein häufig beobachteter Effekt ist beispielsweise,<br />
dass beim Anlegen neuer<br />
DRBD-Ressourcen die bereits in Pacemaker<br />
vorhandenen Ressourcen plötzlich<br />
Fehler anzeigen und der gesamte Cluster<br />
aus dem Tritt gerät.<br />
Das Problem ist allerdings handgemacht.<br />
Es ist eine Mischung aus der Faulheit<br />
vieler Admins und einer etwas unglücklichen<br />
Verhaltensweise von »drbdadm«.<br />
Häufig nehmen Admins für neue Ressourcen<br />
die Konfigurationsdateien von<br />
schon existierenden DRBD-Ressourcen<br />
und ändern diese entsprechend ab.<br />
Im Grunde spricht nichts gegen diese<br />
Technik, denn oft verwenden sämtliche<br />
Ressourcen auf einem System exakt die<br />
gleichen Parameter.<br />
Unglücklich wird die Situation, wenn<br />
beim Anlegen der neuen Datei im Ordner<br />
»/etc/drbd.d« einfach eine existierende<br />
Datei kopiert wird und ihr Name<br />
auf ».res« endet – das Standard-Suffix für<br />
Ressourcen.<br />
Zumindest kurzzeitig liegen dann<br />
nämlich in diesem Ordner zwei Dateien<br />
mit der Endung, die eine identische<br />
Res sourcenkonfiguration haben. An dieser<br />
Stelle steigt »drbdadm« aus und gibt<br />
außer einer Fehlermeldung gar nichts<br />
mehr aus, bis das Problem behoben<br />
ist – und zwar ganz gleich, zu welcher<br />
Ressource es Informationen ausgeben<br />
soll (Abbildung 4).<br />
Das letzte Puzzleteil fügt Pacemaker<br />
selbst hinzu: Der Ressource-Agent von<br />
Linbit, mit dem sich DRBD-Ressourcen<br />
steuern und überwachen lassen, ruft<br />
»drbdadm« auf, wenn der »monitor«-<br />
Parameter angegeben wird. Solange die<br />
DRBD-Fehlkonfiguration vorliegt, wird<br />
aber auch Pacemaker mit einer Fehlermeldung<br />
abgespeist – und denkt, sämt-<br />
liche Ressourcen seien plötzlich kaputt.<br />
Der Versuch, Ressourcen hektisch hin<br />
und her zu verschieben, ist selten von<br />
Erfolg gekrönt, und so bleibt der Cluster<br />
am Ende einer solchen Aktion häufig<br />
kaputt zurück.<br />
Kurzfristig hilft der Cleanup-Befehl, sinnvoller<br />
ist aber Prävention: Wer neue Ressourcen<br />
auf Basis alter Konfigurationsdateien<br />
anlegt, gibt diesen idealerweise<br />
die Endung ».res.new« und benennt sie<br />
erst um, wenn die Konfiguration tatsächlich<br />
ordentlich eingerichtet ist. Auf diese<br />
Weise bleiben unangenehme Effekte<br />
jedenfalls aus.<br />
Der Cleanup-Befehl<br />
Beim Thema Troubleshooting soll auch<br />
Pacemaker nicht zu kurz kommen. Der<br />
wichtigste Befehl ist definitiv das »crm<br />
resource cleanup«-Kommando.<br />
Nicht immer geht beim Anlegen einer<br />
neuen Cluster-Ressource alles glatt, gelegentlich<br />
unterlaufen dem Administrator<br />
Tippfehler oder es fehlt noch eine<br />
Konfigurationsdatei: Schon schlägt der<br />
erste Start der Ressource fehl. Wenn der<br />
gleiche Fehler auf beiden Clusterknoten<br />
vorhanden ist und auf beiden Knoten der<br />
erste Start fehlschlägt, setzt Pacemaker<br />
automatisch den Wert für »fail‐count«<br />
bei dieser Ressource auf 1.000.000 und<br />
lässt sie danach in Ruhe. Laufen tut sie<br />
deshalb freilich trotzdem nicht.<br />
Die fehlgeschlagenen Starts sind an der<br />
eindeutigen Ausgabe in »crm_mon« eindeutig<br />
zu erkennen. Mittels des »crm<br />
resource cleanup«-Befehls bringt der<br />
Clusteradmin Pacemaker dazu, den Fail-<br />
Count auf 0 zu stellen und mit dieser<br />
Resssource quasi von vorn anzufangen.<br />
Heißt die Ressource zum Beispiel »res_ip_<br />
nfs«, wäre der korrekte Cleanup- Befehl<br />
»crm resource cleanup res_ip_nfs«. In<br />
älteren Anleitungen findet sich möglicherweise<br />
noch der Befehl »crm_resource<br />
‐C ‐r Ressource« – dies ist die in Heartbeat<br />
2 typische Vorgehensweise, weil es<br />
die CRM-Shell damals noch nicht gab.<br />
bei Pacemaker-Setups gibt es allerdings<br />
keinen Grund, auf die CRM-Shell zu verzichten.<br />
Eine Besonderheit gilt übrigens beim<br />
»cleanup«-Kommando, wenn es um<br />
Master-Slave-Ressourcen geht, typischerweise<br />
also um DRBD. Hier ist der<br />
Online-Training<br />
IT-Sicherheit<br />
Grundlagen<br />
mit Tobias Eggendorfer<br />
Themen:<br />
❚ physikalische Sicherheit<br />
❚ logische Sicherheit<br />
• Betriebssystem<br />
• Netzwerk<br />
❚ Sicherheitskonzepte<br />
❚ Sicherheitsprüfung<br />
@Kirsty Pargeter, 123RF<br />
20%<br />
Treue-Rabatt für<br />
Abonnenten<br />
Deckt in Teilbereichen auch das<br />
Prüfungswissen für LPIC-303-<br />
Inhalte ab.<br />
Inklusive Benutzer- und Rechteverwaltung,<br />
Authentifizierung,<br />
ACLs sowie wichtige Netzwerkprotokolle<br />
und mehr!<br />
Das Grundlagentraining für IT-<br />
Sicherheit richtet sich an Systemadministratoren<br />
und solche, die<br />
es werden wollen ebenso wie an<br />
ambitionierte Heimanwender.<br />
Nur 299 Euro inkl. 19 % MwSt.<br />
www.admin-magazin.de<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/sicherheit
Know-how<br />
HA-Troubleshooting<br />
Abbildung 7: »grep ERROR« auf das Syslog führt zu manch erhellender Idee im Hinblick auf auftretende Probleme.<br />
»cleanup«-Befehl nicht auf die einzelnen<br />
Ressourcen auszuführen, sondern auf die<br />
Master-Slave-Regel selbst. »crm resource<br />
cleanup ms_drbd_nfs« bringt sämtliche<br />
DRBD-Ressourcen auf allen Clusterknoten<br />
auf Vordermann, die zum Master-<br />
Slave-Setup »ms_drbd_nfs« gehören.<br />
Der Maintenance-Modus<br />
Wenn Pacemaker eine Ressource einmal<br />
unter seine Fittiche genommen hat,<br />
kümmert er sich nahezu rührend um sie.<br />
Mit entsprechend eingerichteter Monitor-<br />
Operation merkt er, wenn sie abgestürzt<br />
ist und startet sie neu. Im Alltag der Systemadministration<br />
kann es gelegentlich<br />
aber vorkommen, dass eine Ressource<br />
zeitweise gar nicht laufen soll. Wird sie<br />
vom Admin händisch gestoppt, würde<br />
Pacemaker die Ressource trotzdem neu<br />
starten. Für solche Fälle ist in Pacemaker<br />
das Meta-Flag »is‐managed« vorgesehen<br />
(Abbildung 5).<br />
Um eine einzelne Ressource aus den<br />
Klauen von Pacemaker zu entreißen,<br />
führt »crm configure« zunächst auf die<br />
CRM-Shell, wo »edit« einen Editor mit<br />
der aktuellen CRM-Konfiguration öffnet.<br />
Dann gilt es, die Ressource ausfindig zu<br />
machen, die Pacemaker kurzzeitig egal<br />
sein soll. An die letzte Zeile von deren<br />
Ressourcen-Konfiguration kommt ein<br />
„\“, um den Zeilenumbruch zu maskieren.<br />
Die nächste Zeile sieht so aus: » meta<br />
is‐managed="false"«. Nach dem Abspeichern<br />
und »commit« zeigt »crm_mon ‐1<br />
‐rf« an, dass die Ressource von Pacemaker<br />
ignoriert wird. Um den Vorgang zu<br />
revidieren, genügt es, die hinzugefügte<br />
Zeile wieder aus der CRM-Konfiguration<br />
zu entfernen.<br />
Bei größeren Wartungsarbeiten, beispielsweise<br />
einem kompletten Update<br />
des Clusterstacks, ist es übrigens auch<br />
möglich, Pacemaker zeitweilig ohne Auswirkung<br />
auf die Ressourcen komplett zu<br />
deaktivieren (Abbildung 6). Die Funktion<br />
heißt »maintenance‐mode«. »crm configure<br />
property maintenance‐mode=true«<br />
aktiviert den Wartungsmodus. Anstelle<br />
von »true« deaktiviert »false« ihn wieder.<br />
Es sei allerdings vor dem lässigen<br />
Umgang mit diesem Modus ausdrücklich<br />
gewarnt: Mancher Einfaltspinsel hat auf<br />
genau diese Art seinen Clustermanager<br />
unbemerkt über mehrere Wochen außer<br />
Betrieb gesetzt – weil er vergessen hatte,<br />
den Modus am Ende der Wartungsarbeiten<br />
zu deaktivieren.<br />
Fazit<br />
Die in diesem Artikel vorgegebenen Hilfestellungen<br />
decken erfahrungsgemäß<br />
95 Prozent der alltäglichen Probleme ab,<br />
die bei der Cluster-Arbeit auftreten. Wer<br />
ein nicht beschriebenes Problem hat, findet<br />
sowohl im DRBD User’s Guide wie<br />
auch in Andrew Beekhofs Cluster-Handbuch<br />
Cluster From Scratch [3] diverse<br />
Hilfestellungen und Erläuterungen. Und<br />
sollte eine Ressource einmal gar nicht<br />
starten wollen, gibt es noch einen alten,<br />
aber sehr hilfreichen Trick: Alle Fehlermeldungen,<br />
die Pacemaker von seinen<br />
Resource Agents serviert bekommt, gibt<br />
er mit dem Präfix »ERROR« in die festgelegte<br />
Logdatei aus (meist entweder das<br />
Syslog oder »/var/log/ha‐log«. Der Befehl<br />
»grep ERROR Logdatei« fördert meistens<br />
sehr nützliche Informationen zutage<br />
und gibt eine Vorstellung davon, wo das<br />
Problem liegt (Abbildung 7). (jcb) n<br />
Infos<br />
[1] Martin Gerhard Loschwitz, Admin-<strong>Magazin</strong><br />
04/2011, Seite 68: „Der Cluster-Leitstand“<br />
[2] DRBD User’s Guide:<br />
[http:// www. drbd. org/ users‐guide/]<br />
[3] Cluster from Scratch:<br />
[http:// www. clusterlabs. org/ doc/ en‐US/<br />
Pacemaker/ 1. 1/ html/ Clusters_from_<br />
Scratch/]<br />
Der Autor<br />
Martin Gerhard Loschwitz arbeitet als Principal<br />
Consultant bei hastexo. Er beschäftigt sich dort<br />
intensiv mit Hochverfügbarkeitslösungen und<br />
pflegt in seiner Freizeit den Linux-Cluster-Stack<br />
für Debian GNU/Linux.<br />
108 Ausgabe 06-2011 Admin www.admin-magazin.de
GPT<br />
Basics<br />
© Gennadiy Kravchenko, 123RF.com<br />
GUID-Partitionstabelle statt MBR in der Praxis<br />
Table Dance<br />
GPT – die GUID-Partitionstabelle – löst bei großen Festplatten den gewohnten<br />
Master Boot Record zwangsweise ab. Die normalen Linux-Fdisk-<br />
Programme kommen aber noch nicht klar mit dem neuen Partitionierungsschema.<br />
Mit den richtigen Tools ist der korrekte Dreh aber schnell<br />
gefunden. Hans-Peter Merkely<br />
Seit Menschen Festplatten in PC-Gehäuse<br />
schrauben, stoßen sie an Limits.<br />
Mal waren es die im Bios, dann die von<br />
Controllern [1] oder solche in den Betriebssystemen.<br />
Maximale Sektoren,<br />
Köpfe, Partitionsgrenzen und ‐mengen,<br />
Bootbereiche und, und, und. In den<br />
80ern beispielsweise zwang MS-DOS<br />
3.2 Festplattenbesitzer dazu, ihre teuren<br />
Schätzchen in 32-MByte-Partition aufzuteilen.<br />
Eine solche Veteranin mit 2,5<br />
Kilo Kampfgewicht zeigt Abbildung 1 auf<br />
der Seite liegend. Um ihre nach heutigen<br />
Maßstäben lächerlichen 85 MByte Kapazität<br />
zu nutzen, waren mindestens drei<br />
Partitionen nötig.<br />
Das zweite, optisch kleinere Gerät auf<br />
dem Foto dagegen ist sehr viel neuerem<br />
Datums, eine von zwei Seagate-Festplatten<br />
ST 33000651 AS, die der Hersteller<br />
dem Autor für die Tests zu diesem Artikel<br />
geliehen hat. Mit ihrer Kapazität von<br />
rund 3 TByte überschreitet sie gegenwär-<br />
tig das PC-geschichtlich kritische Limit<br />
von 2 TByte, verursacht diesmal durch<br />
die MBR-Partitionstabelle (Abbildung 2,<br />
[2]).<br />
Altlasten<br />
Das klassische MBR-Partitionierungsschema<br />
CHS ist sowieso schon lange ausgeschöpft<br />
(maximal 1024 Cylinders * 255<br />
Heads * 63 Sectors) mit seinen 8 GByte.<br />
Seither nehmen Bios und Betriebssystem<br />
immer 254 Köpfe, 63 Sektoren und 1023<br />
Zylinder an und nutzen die jeweils 4 Byte<br />
in der Partitionstabelle, um Position und<br />
Größe der Sektoren festzulegen (Logical<br />
Block Addressing, LBA).<br />
Mit diesem Kniff lebte die PC-Welt bislang<br />
ganz gut – doch die Zeit ist vorbei,<br />
denn (2 32 -1 Sektoren)*512 Byte Sektorgröße<br />
ergibt rund 2,2 TByte als maximale<br />
Größe für eine Partition und reichlich 4<br />
TByte als Größe der Festplatte ([3], [4]).<br />
Wer also eine aktuelle 3-TByte-Platte am<br />
Stück verwenden will, beispielsweise in<br />
einem File- oder Mailserver, muss grundlegend<br />
etwas ändern – willkommen in<br />
der Welt der GUID-Partitionstabellen!<br />
Die GPT ist Nachfolgerin der MBR-Partitionstabellen<br />
und Teil des EFI-Standards<br />
(Extensible Firmware Interface, [5]). Die<br />
Spezifikation EFI, in der Hersteller-unabhängigen<br />
Ausprägung heißt sie Unified<br />
EFI (UEFI), ersetzt und vereinheitlicht die<br />
Teile des Bios, die fürs Booten und zum<br />
Abarbeiten von Pre-Boot-Programmen<br />
zuständig sind. Die GPT verwendet wie<br />
die moderneren MBR-Tabellen LBA, aber<br />
mit 64 Bit, was Festplatten bei 512 Byte<br />
Sektorgröße bis 8 Zettabyte adressierbar<br />
macht, was rund 8 Milliarden TByte entspricht.<br />
Außerdem verwaltet eine GPT bis<br />
zu 128 Partitionen (Abbildung 3, [6]).<br />
Trotz „Hirnschadens“:<br />
GPT in der Praxis<br />
Der Linux-Kernel unterstützt die aktuellen<br />
großen Platten und GPTs seit Version<br />
2.6.25, auch wenn Linus Torvalds EFI als<br />
„Intels Hirnschaden“ abtut [7]. Das Testsystem<br />
spricht die Seagate als »/dev/sdh«<br />
an, Listing 1 zeigt, was der »dmesg«-Befehl<br />
liefert. Beim Partitionieren mit einer<br />
GPT verweigern die bekanntesten Programme<br />
»fdisk« oder »cfdisk« allerdings<br />
die Mitarbeit. Das grafische Programm<br />
Gparted dagegen unterstützt GPTs (Abbildung<br />
4). Die erste Festplatte soll eine<br />
einzige große Datenpartition erhalten.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
109
Basics<br />
GPT<br />
Bootloader<br />
Disk-Signatur<br />
Partitionstabelle<br />
MBR-<br />
Signatur<br />
Programmcode<br />
0x0000<br />
4 Einträge à 16 Byte<br />
0x55AA<br />
0x000 0x1B8 0x1BC 0x1BE 0x1FE<br />
440 Byte<br />
4 Byte 2 Byte<br />
64 Byte<br />
2 Byte<br />
Abbildung 2: Aufbau des Master Boot Record. Die Partitionstabelle mit vier Einträgen hat nur 4 Byte pro<br />
Sektornummer zur Verfügung.<br />
Abbildung 1: Alt und neu: Seite an Seite eine mit<br />
85 MByte nur äußerlich große Micropolis-Platte<br />
aus den 80ern neben einer aktuellen 3-TByte-SATA-<br />
Festplatte von Seagate, die für diesen Artikel als<br />
Testobjekt diente.<br />
In Gparted legt der Admin zuerst über<br />
den Menüpunkt »Laufwerk« eine Partitionstabelle<br />
an, die eine Meldung in<br />
Übergröße nach sich zieht, dass alle<br />
bisher darauf enthaltenen Daten verlustig<br />
gehen. Im selben Fenster navigiert<br />
der Administrator dann zu »Erweitert |<br />
Partitionstabellentyp« an und wählt den<br />
Eintrag»gpt«.<br />
Geduld gefragt<br />
Der Menüpunkt »Partition | Neu« macht<br />
den Weg für eine neue primäre Partition<br />
mit Ext 4 als Dateissystem frei. Die Ankündigung<br />
»Abhängig von Anzahl und<br />
Größe der Operationen kann dies einige<br />
Zeit in Anspruch nehmen« konkretisierte<br />
das Testsystem mit einer 10-minütigen<br />
Auszeit. Anschließend stehen die 3 TByte<br />
zur Verfügung – abzüglich eines stolzen<br />
Verwaltungs-Overhead von 44,05 Gibibyte<br />
(Listing 2).<br />
Listing 1: Kernel erkennt 3-TByte-Platte<br />
Listing 3 riskiert einen Blick in den 512<br />
Byte großen Master Boot Record, den<br />
die GPT aus Kompatibilitätsgründen auch<br />
besitzt. Die Signatur 0x55AA signalisiert<br />
in Zeile 5 das Ende des MBR. Im zweiten<br />
Sektor der GPT befindet sich die Header-<br />
Information zur GUID-Partitionierung<br />
(Zeilen 7 bis 12). Ab Position 0x400 liegen<br />
die Partitionseinträge, die aus folgenden<br />
Daten bestehen:<br />
n Partitionstyp (16 Byte)<br />
n GUID der Partition (16 Byte)<br />
n Beginn der Partition (8 Byte)<br />
n Ende der Partition (8 Byte)<br />
n Attribute (8 Byte)<br />
n Partitionsname (72 Byte)<br />
Die GUID (Globally Unique Identifier) ist<br />
Namensgeberin der GPT, einer eindeutigen,<br />
16 Byte langen Chiffre des Partitionstyps.<br />
Tabelle 1 zeigt einige GUIDs (Quelle:<br />
Wikipedia). Das Testsystem besitzt seit<br />
der Gparted-Aktion eine Datenpartition.<br />
Die zugehörige GUID lautet EBD0A0A2-<br />
B9E5-4433-87C0-68B6B72699C7, die Umsetzung<br />
in Zeile 14 dreht (wohl wegen<br />
Big und Little Endian) einige Positionen<br />
der ID um.<br />
Backup-Block<br />
Ans Ende des Datenträgers legt EFI übrigens<br />
eine Kopie der GPT zu Sicherungszwecken<br />
ab. Eine beschädigte primäre<br />
GPT lässt sich mit Hilfe dieser Kopie wiederherstellen.<br />
Wer ein Speichermedium<br />
von GPT- wieder auf eine MBR-Partitionierung<br />
zurückführen möchte, muss die<br />
zweite GPT auch löschen, sonst erkennt<br />
das System die Festplatte weiterhin als<br />
GPT-initialisiert.<br />
Kleine Auswahl<br />
Serveradmins, die auf der Kommandozeile<br />
arbeiten, können mit Gparted wenig<br />
anfangen. Derzeit ist die Zahl der<br />
GPT-geeigneten Fdisk-Ersatzprogramme<br />
recht überschaubar. Am interessantesten<br />
erscheint das Projekt GPT fdisk [8], es<br />
besteht aus den Programmen »gdisk«,<br />
»sgdisk« und »fixparts«. Ein aktuelles<br />
Ubuntu kann nur »gdisk« über sein Repository<br />
beziehen. Deshalb ist es sinnvoller,<br />
alle Pakete direkt über den Open Suse<br />
Build Service [9] zu holen.<br />
Ist das Toolset installiert, lässt sich eine<br />
Festplatte prüfen und bearbeiten. Gdisk<br />
zeigt bei einer frischen Festplatte:<br />
Partition table scan:<br />
MBR: not present<br />
BSD: not present<br />
APM: not present<br />
GPT: not present<br />
Mit dem Kommando »p« für „Print the<br />
partition table“ listet das Tool die Partitionstabelle<br />
(Listing 4). Der Kurzbefehl<br />
»o« (Create a new empty GUID partition<br />
table) legt nach einer Sicherheitsabfrage<br />
eine neue GPT-Tabelle an. Mit der Auswahl<br />
»n« (Add a new partition) lässt sich<br />
wie vorhin mit Gparted eine durchgängige<br />
Datenpartition erzeugen. Gdisk liefert<br />
dabei GUID-Optionen, die Gparted<br />
nicht kennt:<br />
01 [782663.410960] ata6: SATA link up 6.0 Gbps (SStatus 133 SControl 300)<br />
02 [782663.445923] ata6.00: ATA‐8: ST33000651AS, CC44, max UDMA/133<br />
03 [782663.445931] ata6.00: 5860533168 sectors, multi 0: LBA48 NCQ (depth<br />
31/32)<br />
04 [782663.446811] ata6.00: configured for UDMA/133<br />
05 [782663.446830] ata6: EH complete<br />
06 [782663.447076] scsi 7:0:0:0: Direct‐Access ATA ST33000651AS<br />
CC44 PQ: 0 ANSI: 5<br />
07 [782663.447507] sd 7:0:0:0: Attached scsi generic sg9 type 0<br />
08 [782663.447585] sd 7:0:0:0: [sdh] 5860533168 512‐byte<br />
logical blocks: (3.00 TB/2.72 TiB)<br />
09 [782663.447780] sd 7:0:0:0: [sdh] Write Protect is off<br />
10 [782663.447788] sd 7:0:0:0: [sdh] Mode Sense: 00 3a 00 00<br />
11 [782663.447928] sd 7:0:0:0: [sdh] Write cache: enabled,<br />
read cache: enabled, doesn't support DPO or FUA<br />
12 [782663.448846] sdh: unknown partition table<br />
13 [782663.474623] sd 7:0:0:0: [sdh] Attached SCSI disk<br />
110 Ausgabe 06-2011 Admin www.admin-magazin.de
GPT<br />
Basics<br />
MBR Header 1 2 . . . . . . 128<br />
512 Byte 128 Byte 128 Byte 128 Byte<br />
Signatur<br />
EFI PART<br />
Revision<br />
0x0001<br />
0000<br />
Headergröße<br />
und<br />
Prüfsumme<br />
Reserviert<br />
Position der<br />
Partitionstabellen<br />
Position des<br />
ersten und letzten Blocks<br />
GUID<br />
Position der<br />
Partitionsstelle<br />
Anzahl der<br />
Partitionen<br />
Tabellen-<br />
Prüfsumme<br />
CRC32<br />
Größe des<br />
Partitionseintrags<br />
8 Byte<br />
4 Byte 8 Byte 4 Byte 16 Byte 16 Byte 16 Byte 8 Byte 4 Byte 4 Byte 4 Byte<br />
Abbildung 3: Aufbau einer GPT. Nach dem wegen der Kompatibilität zu alten Betriebssystemen mitgeführten Standard-MBR folgt ein knapp 100 Byte langer Header. Die<br />
eigentliche Partitionstabelle nimmt in 32 Blöcken die Daten von maximal 128 Partitionen à 128 Byte auf.<br />
Use 'l' on the experts' menu to adjustU<br />
alignment<br />
Last sector (2048‐5860533134, default =U<br />
5860533134) or {+‐}size{KMGTP}:<br />
Current type is 'Linux/Windows data'<br />
Hex code or GUID (L to show codes, Enter =U<br />
0700):<br />
Den vorgeschlagenen Wert »0700« für<br />
»Linux/Windows data« übernahmen die<br />
Tester und schrieben per »w« (Write table<br />
to disk and exit) alles auf den Datenträger.<br />
Zum Formatieren diente im Test<br />
»mkfs.ext4«. Auf der Kommandozeile<br />
dauerte der gesamte Vorgang etwa 3 Mi-<br />
Tabelle 1: Beispiele für GUIDs<br />
Partitionstyp<br />
nuten weniger als mit Gparted. Die so<br />
geschriebene GPT war identisch mit der<br />
von Gparted erzeugten, das jedenfalls<br />
ergab im Test ein direkter Vergleich mit<br />
»dd« und »xxd«.<br />
Von MBR nach GPT ...<br />
Praktischerweise vermag Gdisk MBRpartitionierte<br />
Festplatten in GPT-partitionierte<br />
umzuwandeln. Das spart das Retten<br />
und Wiederherstellen vorhandener<br />
Partitionsinhalte. Zuständig ist das Gdisk-<br />
Kommando »r« (Recovery and transfor-<br />
GUID<br />
Kein Betriebssystem<br />
Unbenutzt 00000000-0000-0000-0000-000000000000<br />
MBR<br />
024DEE41-33E7-11D3-9D69-0008C781F39F<br />
EFI-Systempartition<br />
C12A7328-F81F-11D2-BA4B-00A0C93EC93B<br />
Bios-Bootpartition<br />
21686148-6449-6E6F-744E-656564454649<br />
Linux<br />
Datenpartition<br />
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7<br />
Raidpartition<br />
A19D880F-05FC-4D3B-A006-743F0F84911E<br />
Swappartition<br />
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F<br />
Partition für Linux-LVM<br />
E6D6D379-F507-44C2-A23C-238F2A3DF928<br />
Reserviert<br />
8DA63339-0007-60C0-C436-083AC8230908<br />
Windows<br />
Von Microsoft reservierte Partition<br />
E3C9E316-0B5C-4DB8-817D-F92DF00215AE<br />
Basic-Datenpartition<br />
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7<br />
Logical-Disk-Manager-Partition für Metadaten 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3<br />
Logical-Disk-Manager-Partition für Daten AF9B60A0-1431-4F62-BC68-3311714A69AD<br />
Mac OS X<br />
Partition für HFS+<br />
48465300-0000-11AA-AA11-00306543ECAC<br />
Partition für UFS<br />
55465300-0000-11AA-AA11-00306543ECAC<br />
Partition für Software-Raid<br />
52414944-0000-11AA-AA11-00306543ECAC<br />
Partition für Apple-TV-Recovery<br />
5265636F-7665-11AA-AA11-00306543ECAC<br />
mation options). Die Tester zogen dafür<br />
einen älteren, 200 GByte großen Datenträger<br />
mit MBR-Partitionierung aus ihrem<br />
Fundus. Nach der Konvertierung liefert<br />
»gdisk /dev/sde« folgendes Ergebnis:<br />
Partition table scan:<br />
[...]<br />
Found valid GPT with protective MBR; usingU<br />
GPT.<br />
Listing 5 zeigt die Ausgabe des Forensiktools<br />
»mmls« aus dem Sleuthkit-Paket<br />
[10]. Zeile 2 bestätigt die erfolgreiche<br />
Umwandlung. Interessant gestaltet sich<br />
der Partitionseintrag selbst in Listing 6,<br />
denn der Datentyp liegt zusätzlich zur<br />
GUID als Texteintrag in Zeile 4 bis 6 vor.<br />
... und umgekehrt<br />
Gdisk konvertiert ebenfalls GPT in MBR<br />
zurück. Diese Option funktioniert nicht<br />
in allen Fällen und ist darum mit Vorsicht<br />
anzuwenden. Nach Rückkonvertierung<br />
der zuvor schon umgewandelten Festplatte<br />
meldet sich Gdisk mit den Hinweisen<br />
aus Listing 7. An dieser Stelle kann<br />
Listing 2: »fdisk ‐lu« nach dem Partitionieren<br />
01 Disk /dev/sdh: 3000 GB, 3000590369280 bytes<br />
02 255 heads, 63 sectors/track, 364801 cylinders, total<br />
5860528065 sectors<br />
03 Units = sectors of 1 * 512 = 512 bytes<br />
04 <br />
05 Device Boot Start End Blocks Id<br />
System<br />
06 /dev/sdh1 2048 5860532223 2930272033 83<br />
Linux<br />
07 Warning: Partition 1 does not end on cylinder<br />
boundary.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
111
Basics<br />
GPT<br />
Abbildung 4: Gparted erkennt unpartitionierte 3-GByte-Platten auf Anhieb, anders als Fdisk und Cfisk. Um sie<br />
zu nutzen, muss der Admin nun eine GPT anlegen.<br />
»sgdisk«, das zweite Program aus dem<br />
GPT-fdisk-Paket, hilfreich sein, das Low-<br />
Level-Reparaturen ausführt.<br />
Normale Festplatten speichern die Daten<br />
in ihren Sektoren zu je 512 Bytes.<br />
Betriebssysteme und deren Filesysteme<br />
fassen mehrere dieser Sektoren zu einem<br />
Cluster zusammen, häufig acht Stück,<br />
was Cluster mit 4096 Byte Länge ergibt.<br />
Um mehr Performance zu erreichen,<br />
arbeiten neuerdings große Festplatten<br />
intern ebenfalls mit 4096 Byte großen<br />
Clustersektoren, die Hersteller sprechen<br />
dann von „4k“-Festplatten. Die im Test<br />
benutzten Seagate-Festplatten zählen zu<br />
dieser Klasse.<br />
Um nach außen für das Bios kompatibel<br />
zu sein, übersetzt eine Festplatteninterne<br />
Logik die Cluster wieder in 512<br />
Byte große Sektoren. Damit die Angleichung<br />
der Verwaltungseinheiten-Größen<br />
von Betriebssystem und Festplatte auch<br />
zu dem gewünschten Geschwindigkeitsgewinn<br />
führt, sollten – egal ob MBR-<br />
Partitionen oder mit einer GPT – die<br />
4-KByte-Cluster der Festplatte und die<br />
4-KByte-Cluster des Dateisystems genau<br />
aufeinander liegen.<br />
Andernfalls verkehrt sich der Effekt sogar<br />
ins Gegenteil: Wenn bei einem Versatz<br />
von 2048 Byte das Betriebssystem<br />
zum Beispiel einen Cluster auf die Platte<br />
schreibt, muss diese dann zwei halbe<br />
Cluster auf seine Scheiben übertragen,<br />
was auf zwei ganze Cluster hinausläuft.<br />
Besonders negativ betroffen von diesem<br />
so genannten Alignment sind SSD-Disks,<br />
da es auf dem Flashspeicher bei überlappenden<br />
Schreibzyklen zu einem Read-<br />
Modify-Write-Zyklus kommt.<br />
Startsektor 63 oder 2048<br />
Dass Betriebssystem und Permanentspeicher<br />
ihre Verwaltungseinheiten nicht<br />
synchron betreiben, ist eher die Regel als<br />
die Ausnahme. Schuld ist Microsoft, denn<br />
die Partitionierungstools von MS-DOS bis<br />
Windows XP lassen die erste Partition<br />
nach dem MBR bei Sektor 63 starten. So<br />
partitionierte Platten sind darum immer<br />
falsch ausgerichtet. Würde die erste Partition<br />
bei Sektor 64 beginnen, wäre dagegen<br />
eine ganzzahlige Zusammenfassung<br />
von 4096 Blöcken möglich. Fdisk von<br />
Linux ahmt aus Kompatibilitätsgründen<br />
dieses Verhalten nach ([11], [12])<br />
Seit Windows Vista hat Microsoft das<br />
Problem erkannt und legt bei neu zu partitionierenden<br />
Datenträgern den Start der<br />
ersten Partition auf Sektor 2048 statt auf<br />
Sektor 63. Bei Fdisk von Linux muss man<br />
je nach Version mindestens den DOS-<br />
Kompatibilitätsmodus per Kommandozeilenoption<br />
abschaltenden. Die Details<br />
weiß [11] zu berichten. Alle Tools, die<br />
eine GPT einrichten können, legen per<br />
Default den Startsektor zum Glück auf<br />
Position 2048.<br />
Genau dies ließ sich bei den Tests zu diesem<br />
Artikel beobachten: Zeile 6 von Listing<br />
2 zeigt als Startsektor 2048 – daher<br />
läuft die Zuordnung der ersten verwen-<br />
Booten von GPT-Platten<br />
Handelsübliche Serversysteme, Großrechner<br />
und neuere Apple-Rechner entsprechen der<br />
EFI-Spezifikation und booten darum auch von<br />
einer GPT-initialisierten Festplatte. Desktop-<br />
Mainboards für Intel- und AMD-CPUs dagegen<br />
booten derzeit fast ausschließlich über ihre<br />
MBR-Bios-Routinen.<br />
Linuxer haben aber das große Glück, Grub 2<br />
als Lösung des Problems an der Hand zu haben.<br />
Der Urlader des Tools stellt nämlich dem<br />
Rechner eine EFI-Umgebung zur Verfügung,<br />
aus der Linux problemlos von GPT-Datenträgern<br />
hochfährt. Achtung: Frühere Grub-Versionen<br />
haben dieses Feature noch nicht!<br />
Abbildung 5: Durch die ungünstige Wahl des Partitions-Startsektors 63 liegen die 4096 Byte großen Cluster von Dateisystem und Festplatte niemals aufeinander.<br />
(Quelle: Thomas Krenn Server)<br />
Listing 1: Kernel erkennt 3-TByte-Platte<br />
01 [...]<br />
02 00001c0: 0100 eefe ffff 0100 0000 ffff ffff 0000 ................<br />
03 00001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................<br />
04 00001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................<br />
05 00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.<br />
06 [...]<br />
07 0000200: 4546 4920 5041 5254 0000 0100 5c00 0000 EFI PART....\...<br />
08 0000210: 0e0f 49ee 0000 0000 0100 0000 0000 0000 ..I.............<br />
09 0000220: afa3 505d 0100 0000 2200 0000 0000 0000 ..P]....".......<br />
10 0000230: 8ea3 505d 0100 0000 cbb9 6e3f 0765 a746 ..P]......n?.e.F<br />
11 0000240: a7c2 70a1 3db8 25c4 0200 0000 0000 0000 ..p.=.%.........<br />
12 0000250: 8000 0000 8000 0000 6afb 3a17 0000 0000 ........j.:.....<br />
13 [...]<br />
14 0000400: a2a0 d0eb e5b9 3344 87c0 68b6 b726 99c7 ......3D..h..&..<br />
15 0000410: 6903 b666 b91c 7646 a8dd e9d1 d7c6 bc5a i..f..vF.......Z<br />
16 0000420: 0008 0000 0000 0000 ff9f 505d 0100 0000 ..........P]....<br />
112 Ausgabe 06-2011 Admin www.admin-magazin.de
GPT<br />
Basics<br />
deten 3-TByte-Platte optimal. Vorsicht ist<br />
jedoch bei Datenträgern mit einer Vorgeschichte<br />
geboten. Zeile 10 von Listing<br />
5 zeigt nämlich, dass eine GPT auch ab<br />
Sektor 63 statt ab 2048 starten darf. Zur<br />
Erinnerung: Die zweite Festplatte wurde<br />
von einem MBR-Schema in ein GPT-<br />
Schema konvertiert. Dabei blieb dann<br />
die Partitionsgrenze bei 63 bestehen.<br />
Ob sich die Gesamtproblematik in der<br />
Praxis so scharf stellt wie in der Theorie,<br />
ist strittig, da moderne Festplatten<br />
ein ausgeklügeltes, nur dem Hersteller<br />
bekanntes Mapping betreiben und zudem<br />
in den Betriebs- und Dateisystemen<br />
diverse Puffer und Optimierungen eingebaut<br />
sind. Es bleibt aber festzuhalten,<br />
dass das Verlegen der Partitionen auf<br />
4-KByte-Grenzen eine begrüßenswerte<br />
Entwicklung darstellt, die Admins tätig<br />
mittragen sollten.<br />
GUID-Table, bitte zum Tanz!<br />
Die Zeit für GPT ist definitiv angebrochen.<br />
Moderne Festplatten benötigen<br />
die neuen Tabellen, um Partitionen jenseits<br />
der 2,2 TByte anzulegen. Von Fdisk<br />
muss der Admin dabei vorerst die Finger<br />
lassen, Tools wie Gparted springen in<br />
die Bresche. Mit dem Bootloader Grub<br />
2 booten auch Desktop-Mainboards problemlos<br />
Linux von einer GPT-Platte. In<br />
Sachen Performance heißt es, die Augen<br />
offen halten: Dass viele moderne Speicher<br />
intern mit 4 KByte großen Clustern<br />
statt mit 512-Byte-Sektoren arbeiten, ist<br />
zwar beim LBA-Adressieren nicht zu bemerken,<br />
kann aber bei ungünstigen Partitionen<br />
die Performance ruinieren. (jk) n<br />
Infos<br />
[1] ST506-Schnittstelle von 1982:<br />
[http:// de. wikipedia. org/ wiki/ ST506]<br />
[2] MBR: [http:// de. wikipedia. org/ wiki/<br />
Master_Boot_Record]<br />
[3] MBR-Partitionstabelle: [http:// de.<br />
wikipedia. org/ wiki/ Partitionstabelle]<br />
[4] FAQ: Drive Partition Limits:<br />
[http:// www. uefi. org/ learning_center/<br />
UEFI_MBR_Limits_v2. pdf]<br />
[5] EFI und UEFI:<br />
[http:// developer. intel. com/ technology/<br />
efi/], [http:// www. uefi. org/ home/]<br />
[6] GPT: [http:// de. wikipedia. org/ wiki/<br />
GUID_Partition_Table]<br />
[7] „Linus On The Extensible Firmware Interface“:<br />
[http:// kerneltrap. org/ node/ 6884]<br />
[8] GPT fdisk:<br />
[http:// www. rodsbooks. com/ gdisk/]<br />
[9] GPT fdisk über den Open Suse Build<br />
Service: [https:// build. opensuse. org/<br />
package/ show? package=gptfdisk&<br />
project=home%3Asrs5694]<br />
[10] Sleuthkit: [http:// sleuthkit. org]<br />
[11] Partition Alignment:<br />
[http:// www. thomas‐krenn. com/ de/ wiki/<br />
Partition_Alignment]<br />
[12] Hintergründe zum Paragon Alignment<br />
Tool: [http:// blog. paragon‐software. de/<br />
uploads/ WhitePaper_ParagonAlignment-<br />
Tool_GER. pdf]<br />
Der Autor<br />
Hans-Peter Merkel ist mit<br />
dem Schwerpunkt Datenforensik<br />
seit vielen Jahren in<br />
der Open-Source-Community<br />
aktiv. Er bildet Mitarbeiter<br />
von Strafverfolgungsbehörden<br />
in Europa, Asien und Afrika aus und engagiert<br />
sich als Gründer und Vorsitzender bei Freioss und<br />
Linux4afrika.<br />
Listing 4: Partitions-Informationen von Gdisk<br />
01 Disk /dev/sdh: 5860533168 sectors, 2.7 TiB<br />
02 Logical sector size: 512 bytes<br />
03 Disk identifier (GUID): 0AE667A2‐818F‐4670‐A328‐500021C76A73<br />
04 Partition table holds up to 128 entries<br />
05 First usable sector is 34, last usable sector is 5860533134<br />
06 Partitions will be aligned on 2048‐sector boundaries<br />
Listing 5: »mmls /e3v/sde«<br />
01 GUID Partition Table (EFI)<br />
02 Offset Sector: 0<br />
03 Units are in 512‐byte sectors<br />
04 <br />
05 Slot Start End Length Description<br />
06 00: Meta 0000000000 0000000000 0000000001 Safety Table<br />
07 01: ‐‐‐‐‐ 0000000000 0000000062 0000000063 Unallocated<br />
08 02: Meta 0000000001 0000000001 0000000001 GPT Header<br />
09 03: Meta 0000000002 0000000033 0000000032 Partition Table<br />
10 04: 00 0000000063 0390716864 0390716802 Linux/Windows data<br />
11 05: ‐‐‐‐‐ 0390716865 0390721967 0000005103 Unallocated<br />
Listing 6: »dd if=/dev/sde | xxd« (Auszug)<br />
01 0000400: a2a0 d0eb e5b9 3344 87c0 68b6 b726 99c7 ......3D..h..&..<br />
02 0000410: 42c4 6d88 c9f9 c84c a33d a0a6 ceb3 2bf3 B.m....L.=....+.<br />
03 0000420: 3f00 0000 0000 0000 c0dd 4917 0000 0000 ?.........I.....<br />
04 0000430: 0000 0000 0000 0000 4c00 6900 6e00 7500 ........L.i.n.u.<br />
05 0000440: 7800 2f00 5700 6900 6e00 6400 6f00 7700 x./.W.i.n.d.o.w.<br />
06 0000450: 7300 2000 6400 6100 7400 6100 0000 0000 s. .d.a.t.a.....<br />
Listing 7: »gdisk /dev/sde«<br />
01 GPT fdisk (gdisk) version 0.7.1<br />
02 <br />
03 Partition table scan:<br />
04 MBR: MBR only<br />
05 BSD: not present<br />
06 APM: not present<br />
07 GPT: not present<br />
08 <br />
09 ***************************************************************<br />
10 Found invalid GPT and valid MBR; converting MBR to GPT format.<br />
11 THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if<br />
12 you don't want to convert your MBR partitions to GPT format!<br />
13 ***************************************************************<br />
14 <br />
15 Exact type match not found for type code A400; assigning type code for<br />
16 'Linux/Windows data'<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
113
Basics<br />
RAM erklärt<br />
Nicholas Kinney, 123RF<br />
RAM-Speicher erklärt<br />
Hirnforschung<br />
Virtualisierte Systeme treiben den RAM-Bedarf in die Höhe, Storage-Zugriffe gehen flotter, weil überschüssiger<br />
RAM als Pagecache hilft, und schließlich vermeidet ausreichend RAM den gefürchteten Performance-Killer Swapping.<br />
Höchste Zeit also, sich die aktuellen Random Access Memorys näher anzusehen. Werner Fischer<br />
Arbeitsspeicher dient Prozessoren in<br />
Computersystemen seit jeher als Speicher<br />
für die gerade auszuführenden Programme<br />
und ihre Daten. Seit den 80er-<br />
Jahren wird überschüssiger Arbeitsspeicher<br />
auch als Pagecache zum Cachen<br />
von Disk-Zugriffen verwendet [1][2].<br />
Als Technologie kommt seit Anfang 2000<br />
Double Data Rate Synchronous Dynamic<br />
Random Access Memory (DDR-SDRAM)<br />
zum Einsatz. Im Gegensatz zum Vorläufer<br />
SDRAM überträgt DDR-SDRAM<br />
sowohl bei der steigenden als auch fallenden<br />
Flanke des Taktsignals Daten und<br />
verdoppelt damit die Datenrate.<br />
DDR-SDRAM gibt es mittlerweile in<br />
drei Generationen, die vierte ist bereits<br />
in Arbeit (Tabelle 1). Aktuelle Systeme<br />
nutzen DDR3. Da Server und Desktops<br />
aber meist über einen Zeitraum von drei<br />
bis fünf Jahren im Einsatz sind, findet<br />
sich in vielen Rechenzentren und Büros<br />
auch noch viel DDR2-Arbeitsspeicher.<br />
Für DDR4 gibt es erste Prototypen. Da<br />
aber die Energieeffizienz von DDR3<br />
laufend verbessert wird und LR-DIMMs<br />
künftig noch höhere DDR3-Speicherkonfigurationen<br />
erlauben werden, erwarten<br />
Analysten eine signifikante Verbreitung<br />
von DDR4 erst ab 2014.<br />
Fehlerkorrektur<br />
Egal, welche DDR-Generation zum Einsatz<br />
kommt, zur Auswahl stehen immer<br />
herkömmliche Speichermodule und<br />
solche, die eine Fehlerkorrektur bieten.<br />
Letztere sind mit Mechanismen zur<br />
Fehlerkorrektur (Error-Correcting Code,<br />
ECC) ausgestattet und kommen vor allem<br />
im Serverbereich zum Einsatz. Der<br />
Vorteil liegt dabei auf der Hand: Durch<br />
den integrierten Hamming-Code können<br />
ECC-Speichermodule 1-Bit-Fehler erkennen<br />
und korrigieren, 2-Bit-Fehler werden<br />
zumindest noch erkannt. Mainboard und<br />
Prozessor müssen ECC für die Fehlerkorrektur<br />
unterstützen, andernfalls laufen<br />
ECC-Module ohne ECC. Erkennbar sind<br />
die fehlerkorrigierenden Module übrigens<br />
auch optisch an der Anzahl der aufgelöteten<br />
Speicherchips: Während herkömmliche<br />
Dual-Inline-Memory-Module<br />
(DIMMs) meist acht Speicherchips auf<br />
einer Seite haben, findet sich bei ECC<br />
DIMMs noch ein neunter Speicherchip.<br />
ECC-Module sind im Vergleich zu den<br />
herkömmlichen Modulen zwar etwas<br />
teurer, die höhere Zuverlässigkeit rechnet<br />
sich im Server-Betrieb aber allemal.<br />
Pufferchips<br />
In Desktop-Rechnern und Servern mit<br />
einem CPU-Sockel werden sogenannte<br />
Unbuffered DIMMs verwendet. Der Speichercontroller<br />
greift in diesem Fall direkt<br />
auf die Speicherchips zu. Das ermöglicht<br />
ein gutes Preis-/Leistungsverhältnis, da<br />
114 Ausgabe 06-2011 Admin www.admin-magazin.de
RAM erklärt<br />
Basics<br />
genden Nehalem/Westmere-Microarchitektur<br />
(Xeon 5500 und 5600) wurden<br />
die FB-DIMMs durch Registered DIMMs<br />
auf Basis von DDR3 ersetzt. Durch den<br />
Registerchip laufen nur die CMD/ADDR/<br />
CLK-Signalleitungen, nicht aber die Verbindungen<br />
für die eigentlichen Daten.<br />
Der Energiebedarf ist damit im Vergleich<br />
zu FB-DIMMs deutlich geringer. Einen<br />
weiteren Schritt gehen die bereits angekündigten<br />
Load-Reduced DIMMs (LR-<br />
DIMMs, Abbildung 1). Die haben zwar<br />
ähnlich wie FB-DIMMs einen Puffer (Isolation<br />
Memory Buffer, iMB), durch den<br />
alle Signalleitungen verlaufen. Der iMB<br />
arbeitet allerdings nicht wie der AMB<br />
von FB-DIMMs mit einem speziellen<br />
Signalprotokoll, sondern wie normale Redie<br />
Signale aber vom Speichercontroller<br />
bis in jeden Speicherchip laufen, sind<br />
dem maximalen Speicherausbau Grenzen<br />
gesetzt. Dual-CPU-Systeme verwenden<br />
aus diesem Grund andere Speichermodule,<br />
die Pufferchips oder Register<br />
enthalten und dadurch die Obergrenzen<br />
erhöhen. Bei den Dual-CPU-Systemen der<br />
Intel-Core-Microarchitektur (Xeon 5100,<br />
5200, 5300 und 5400) kamen dazu Fully<br />
Buffered DIMMs (FB-DIMMs) auf Basis<br />
von DDR2 zum Einsatz.<br />
Der auf den FB-DIMMs enthaltene<br />
Advanced Memory Buffer (AMB) erhöht<br />
allerdings den Energiebedarf und<br />
die W ärmeentwicklung, die Hersteller<br />
haben die Speichermodule daher mit<br />
Kühl blechen ausgestattet. Bei der fol-<br />
gistered DIMMs. Der Stromverbrauch soll<br />
durch den iMB daher nur gering steigen.<br />
Da bei LR-DIMMs alle Signalleitungen<br />
durch den iMB laufen, ist die elektrische<br />
Last für den Speichercontroller im<br />
Vergleich zu Registered DIMMs geringer.<br />
Gegenüber dem Speichercontroller<br />
verhalten sich LR-DIMMs wie ein Single<br />
Rank Modul. Die für 2012 erwarteten<br />
Dual-CPU-Systeme der Sandy-Bridge-<br />
Mikroarchitektur sollen als erste Systeme<br />
LR-DIMMs unterstützen.<br />
Rangordnung<br />
Auf DIMMs sind immer mehrere Speicherchips<br />
aufgelötet. Die einzelnen Chips<br />
können entweder über vier (x4), acht (x8)<br />
Tabelle 1: DDR-Generationen<br />
Eigenschaft DDR1 DDR2 DDR3 DDR4 (in Entwicklung),<br />
ab 2014 erwartet<br />
Anzahl Kontakte 184 240 240 noch unbekannt<br />
Betriebsspannung 2,5 V 1,8 V 1,5 V (DDR3L: 1,35V<br />
DDR3U: 1,25V)<br />
1,2V<br />
Chip (I/O Taktfrequenz)<br />
Prefetching<br />
DDR-200 (100 MHz),<br />
DDR-266 (133 MHz),<br />
DDR-333 (166 MHz),<br />
DDR-400 (200 MHz)<br />
Zweifach-Prefetch<br />
(2-Bit)<br />
DDR2-400 (200 MHz), DDR2-<br />
533 (266 MHz), DDR2-667<br />
(333 MHz), DDR2-800 (400<br />
MHz), DDR2-1066 (533 MHz)<br />
DDR3-800 (400 MHz),<br />
DDR3-1066 (533 MHz),<br />
DDR3-1333 (666 MHz),<br />
DDR3-1600 (800 MHz),<br />
DDR3-1866 (933 MHz),<br />
DDR3-2133 (1066 MHz)<br />
DDR3-1600 (800 MHz) bis DDR3-3200<br />
(1600 MHz)<br />
Vierfach-Prefetch (4-Bit) Achtfach-Prefetch (8-Bit) Achtfach-Prefetch mit zwei oder vier<br />
Bank Groups<br />
Typische Strukturbreiten 150nm, 100nm 100nm, 90nm, 80nm, 60nm 80nm, 60nm, 50nm,<br />
40nm, 30nm, 25nm<br />
30nm<br />
MAGAZIN<br />
ONLINE<br />
Linux-<strong>Magazin</strong> newsLetter<br />
Newsletter<br />
informativ<br />
kompakt<br />
Nachrichten rund um die<br />
Themen Linux und Open<br />
Source lesen Sie täglich<br />
im Newsletter des Linux-<br />
<strong>Magazin</strong>s.<br />
tagesaktuell<br />
www.linux-magazin.de/newsletter
Basics<br />
RAM erklärt<br />
Abbildung 1: Bei Load-Reduced DIMMs verlaufen alle Signalleitungen (einschließlich Daten) durch den<br />
Zwischenchip. Die elektrische Last ist für den Speichercontroller damit geringer.<br />
oder 16 (x16) Signalleitungen verfügen.<br />
Da bei Unbuffered DIMMs die Signalleitungen<br />
des Speichercontrollers direkt<br />
mit den Speichercips verbunden sind,<br />
scheiden x4-Chips hier aus – diese können<br />
nur in Verbindung mit Pufferchips<br />
genutzt werden.<br />
Ein vom Speichercontroller eindeutig<br />
adressierbarer Bereich verfügt über 64<br />
(non-ECC) oder 72 (ECC) Signalleitungen<br />
und wird als Rang (englisch Rank)<br />
bezeichnet. Für ein Nicht-ECC-Speichermodul<br />
kann ein Rang damit entweder<br />
aus acht x8-Chips oder vier x1-Chips bestehen.<br />
Speichermodule, die mit einem<br />
Rang bestückt sind, werden als Single-<br />
Rank-Module bezeichnet, solche mit<br />
zwei Rängen als Dual-Rank-Module. Ein<br />
einzelnes Dual-Rank-DIMM belastet den<br />
Speicherbus übrigens gleich stark wie<br />
zwei Single-Rank-DIMMs. Im Desktop-<br />
Umfeld unterstützen die Speichercontrol-<br />
ler bis zu vier Ranks pro Speicherkanal,<br />
das entspricht zwei Dual-Rank-DIMMs.<br />
Entsprechende Mainboards mit zwei<br />
Speichercontrollern (Dual-Channel) sind<br />
daher meistens mit vier RAM-Slots ausgestattet.<br />
Es gibt zwar auch Boards mit<br />
sechs Slots, die erlauben dann allerdings<br />
nur jeweils ein Dual-Rank-DIMM gepaart<br />
mit zwei Single-Rank-DIMMs pro Kanal.<br />
Auf Boards mit drei Speichercontrollern<br />
(Triple-Channel) finden sich im Desktop-<br />
Umfeld ebenfalls vier RAM-Slots: zwei<br />
Slots für den Kanal A und jeweils ein Slot<br />
für die Kanäle B und C.<br />
Green RAM<br />
Neben der Entwicklung von FB-DIMMs<br />
hin zu Registered DIMMs und LR-DIMMs<br />
gibt es weitere technologische Fortschritte,<br />
die den Energiebedarf von Arbeitsspeicher<br />
laufend senken. So wurde<br />
etwa die Betriebsspannung kontinuierlich<br />
verringert: von 2,5V bei DDR-1 über<br />
1,8V bei DDR2 hin zu 1,5V bei DDR3.<br />
Mit DDR3L (1,35V) und DDR3U (1,25V)<br />
stehen zwei weitere Reduktionen bevor,<br />
ehe DDR4 auf 1,2V zurückgeht.<br />
Weitere Beiträge zum Stromsparen leistet<br />
die kontinuierliche Verkleinerung<br />
der Strukturengrößen bei der Fertigung:<br />
DDR1 startete mit 150nm, die Strukturbreiten<br />
wurden bei DDR2 und DDR3 weiter<br />
gesenkt und die ersten DDR4 Protypen<br />
stammen gar aus einer 30nm-Fertigung.<br />
In Summe haben es die Chip-Hersteller<br />
geschafft, mit diesen Maßnahmen den<br />
Energiebedarf pro GByte RAM von knapp<br />
7 Watt bei ECC DDR2 FB-DIMMs auf aktuell<br />
0,54 Watt bei ECC DDR3 Registered<br />
DIMMs zu senken (Tabelle 2). (ofr) n<br />
Infos<br />
[1] Page Cache allgemein:<br />
[http:// en. wikipedia. org/ wiki/ Page_cache]<br />
[2] Page Cache in Linux:<br />
[http:// www. thomas‐krenn. com/ de/ wiki/<br />
Linux_Page_Cache_Grundlagen]<br />
[3] DDR-SDRAM:<br />
[http:// www. thomas‐krenn. com/ de/ wiki/<br />
DDR‐SDRAM] (Listing 1)<br />
Der Autor<br />
Werner Fischer ist seit<br />
2005 Technology Specialist<br />
bei der Thomas-Krenn AG<br />
und Chefredakteur des<br />
Thomas Krenn Wikis. Seine<br />
Arbeitsschwerpunkte<br />
liegen in den Bereichen Hardware-Monitoring,<br />
Virtualisierung, I/O-Performance und Hochverfügbarkeit.<br />
Tabelle 2: Energieverbrauch einiger Speichermodule (Quelle: ATP)<br />
Speichermodul Kapazität Speichertyp Leistungsaufnahme<br />
Leistungsaufnahme<br />
je GByte<br />
AL48M72F4GKF8S 16 GByte DDR3, Registered, ECC, 4 Rank 8,710 Watt 0,54 Watt/GByte<br />
AL24M72E4BKH9S 8 GByte DDR3, Registered, ECC, 2 Rank 6,132 Watt 0,77 Watt/GByte<br />
AL12M72B8BKH9S 4 GByte DDR3, Registered, ECC, 2 Rank, Speicherchips mit 256Mx8 Organisation<br />
(2 Gbit Chips)<br />
AL56M72B8BJH9S 2 GByte DDR3, Registered, ECC, 2 Rank, Speicherchips mit 128Mx8 Organisation<br />
(1 Gbit Chips)<br />
2,934 Watt 0,73 Watt/GByte<br />
5,132 Watt 2,57 Watt/GByte<br />
AL28M72A8BJH9S 1 GByte DDR3, Registered, ECC, 1 Rank 2,241 Watt 2,24 Watt/GByte<br />
AQ12M72E8BKH9S 4 GByte DDR3, Unbuffered, ECC, 2 Rank, Speicherchips mit 256Mx8 Organisation<br />
(2 Gbit Chips)<br />
2,214 Watt 0,55 Watt/GByte<br />
AQ28M72D8BJH9S 1 GByte DDR3, Unbuffered, ECC, 1 Rank 1,387 Watt 1,39 Watt/GByte<br />
AJ28K72F8BJE6S 1 GByte DDR2, Unbuffered, ECC 1,872 Watt 1,87 Watt/GByte<br />
AP56K72G4BHE6S 2 GByte DDR2, FB-DIMM, ECC 13,683 Watt 6,84 Watt/GByte<br />
116 Ausgabe 06-2011 Admin www.admin-magazin.de
Linux-<strong>Magazin</strong><br />
ACADEMY<br />
LPIC-1<br />
All-in-One Solution<br />
✓<br />
✓<br />
✓<br />
Stellen Sie Ihr Linux-Wissen mit<br />
einer Zertifizierung unter Beweis!<br />
Nutzen Sie die volle Flexibilität bei<br />
der Zeiteinteilung Ihrer Schulung!<br />
Holen Sie sich alles, was Sie<br />
benötigen, in einem Paket!<br />
LPIC-1 Komplettpaket* nur € 1.249<br />
*Zertifizierung als „Junior Level Linux Professional“<br />
(zzgl. MwSt.)<br />
100% flexibel!<br />
Weitere Infos: academy.linux-magazin.de/solution
Basics<br />
Windows-Tuning<br />
© Matthias Creydt, Fotolia<br />
Leistungsüberwachung in Windows Server 2008 R2<br />
Stellschraube<br />
Vor allem, wenn auf einem Server noch Zusatzdienste laufen, etwa<br />
sharepoint, Exchange oder SQL, tauchen manchmal Leistungsprobleme<br />
auf, die sich durch die Leistungsüberwachung aufdecken und beheben<br />
lassen. Dazu genügen mitgelieferte und kostenlose Tools. Thomas Joos<br />
Windows Server 2008 R2 stellt mit der<br />
Leistungsüberwachung ein mächtiges<br />
Tool zur Verfügung, um Performance-<br />
Probleme auf einem Server aufzudecken.<br />
Die Bedienung hat sich im Vergleich<br />
zu den Vorgängerversionen nur<br />
wenig geändert. Sie finden das Tool im<br />
Server-Manager unter »Diagnose\Leistung\Überwachungstools\Leistungsüberwachung«.<br />
Schneller starten Sie es durch<br />
Eingabe von »perfmon.msc« im Suchfeld<br />
des Startmenüs. Ein Aufruf von »perfmon<br />
/res« startet den Ressourcenmonitor,<br />
der aktuell verbrauchten Ressourcen in<br />
Echtzeit anzeigt, ähnlich wie der Task-<br />
Manager.<br />
Exchange und Active<br />
Directory<br />
Treten Leistungsprobleme in Exchange<br />
oder anderen Serverdiensten auf, die von<br />
Active Directory abhängen, zum Beispiel<br />
beim Postfachzugriff oder dem Versenden<br />
von Nachrichten, liegt häufig auch ein<br />
Problem in Active Directory oder DNS<br />
vor. Das heißt, parallel zur Leistungsüberwachung<br />
sollten Sie noch eine Diagnose<br />
der Namensauflösung sowie der Domänencontroller<br />
durchführen, zum Beispiel<br />
über »dcdiag.exe«. Exchange, aber auch<br />
andere Dienste, die den Windows-Verzeichnisdienst<br />
benötigen, greifen über<br />
die Systemdatei »wldap32.dll« auf das<br />
Active Directory zu. Dabei laufen (vereinfacht)<br />
folgende Vorgänge ab:<br />
n Die Datei »wldap32.dll« auf dem<br />
Exchange-Server erhält durch einen<br />
Exchange-Prozess eine Anfrage, um<br />
auf den globalen Katalog zuzugreifen.<br />
n Per DNS versucht der Server, den globalen<br />
Katalog-Server aufzulösen, um<br />
auf diesen zugreifen zu können. Dauert<br />
das zu lange, verzögert sich bereits<br />
an dieser Stelle der Active-Directory-<br />
Zugriff.<br />
n Nach der Namensauflösung baut<br />
»wldap32.dll« eine Verbindung zum<br />
globalen Katalog auf und überträgt die<br />
Anfrage.<br />
n Anschließend wird eine TCP-Verbindung<br />
aufgebaut und eine LDAP-Abfrage<br />
gestartet. Damit die Verbindung<br />
funktioniert, benötigt die TCP-Verbindung<br />
drei Bestätigungen durch den<br />
Domänencontroller. Bei einer Latenz<br />
von 10ms im Netzwerk dauert der<br />
Zugriff also bereits 30ms, bevor der<br />
Exchange-Server die LDAP-Abfrage<br />
übertragen kann.<br />
n Die LDAP-Abfrage wird auf dem<br />
Domänencontroller von der Datei<br />
»lsass.exe« entgegengenommen, die<br />
auf dem LDAP-Port des Servers auf<br />
Verbindungen wartet.<br />
n Der Domänencontroller nimmt die<br />
Abfrage an den globalen Katalog entgegen<br />
und führt die Suche in seinem<br />
globalen Katalog durch.<br />
n Der globale Katalog sendet die Daten<br />
über die Netzwerkkarte zur Datei<br />
»wldap32.dll« auf dem Exchange-Server.<br />
Handelt es sich um eine große<br />
Anzahl an Daten, zum Beispiel beim<br />
Auflösen der Mitglieder einer Verteilergruppe,<br />
müssen erst alle Daten übertragen<br />
werden, bevor Exchange mit<br />
der Verarbeitung weitermachen kann.<br />
Ein großer Teil der Leistung hängt also<br />
bei Servern von der Netzwerkgeschwindigkeit<br />
zwischen Exchange-Server und<br />
dem globalen Katalog oder Domänencontroller<br />
ab. Aus diesem Grund sollten Sie<br />
bei Leistungsproblemen der Exchange-<br />
Infrastruktur auch immer die Geschwindigkeit<br />
des Netzwerks messen.<br />
Grundlage:<br />
Netzwerkperformance<br />
Auch eine schnelle Verbindung zum<br />
DNS-Server und eine prompte, stabile<br />
und korrekte Namensauflösung sind sehr<br />
wichtig. Die Verzögerung zum DNS-Server<br />
darf 50ms nicht überschreiten, wenn<br />
Sie die Leistung des Exchange-Servers<br />
optimieren wollen. Dauert die Anfrage<br />
länger, haben Sie schon den ersten Flaschenhals<br />
bei der Exchange-Performance<br />
gefunden. Dazu reicht das Pingen des<br />
Servers aus, Sie benötigen noch nicht mal<br />
die Leistungsüberwachung.<br />
Auf der Seite [1] finden Sie das<br />
Freeware-Tool Performance Analysis<br />
of Logs (PAL), das bei der Auswertung<br />
von Leistungsberichten eine<br />
gute Hilfe sein kann. Auf der Seite<br />
erhalten Sie das Tool und weiterführende<br />
Hilfe und Dokumentationen<br />
zum Thema Leistungsüberwachung<br />
von Servern. Bei<br />
komplexen Strukturen sollten<br />
118 Ausgabe 06-2011 Admin www.admin-magazin.de
Windows-Tuning<br />
Basics<br />
Sie sich die Anleitungen auf der Seite<br />
durchlesen. Sie benötigen für das Tool<br />
noch die ebenfalls frei erhältlichen Zusatzprogramme<br />
Log Parser 2.2 [2] und<br />
Office 2003 Add-in: Office Web Components<br />
[3].<br />
Diese Tools müssen Sie vor der Installation<br />
von Performance Analysis of Logs<br />
(PAL) auf dem Server installieren. Mit<br />
Insight für Active Directory, auch als<br />
ADInsight bezeichnet, überwachen Sie<br />
die LDAP-Verbindungen eines Domänencontrollers<br />
in Echtzeit mit einer grafischen<br />
Oberfläche (Abbildung 1). Das<br />
Tool gehört zu den Sysinternal-Tools von<br />
Microsoft und steht kostenlos zur Verfügung.<br />
Sie erhalten es von der Seite [4].<br />
Die Bedienung entspricht in etwa den<br />
beiden Sysinternal-Tools Regmon und<br />
Filemon. ADInsight untersucht alle Aufrufe<br />
der Datei »wldap32.dll« und zeigt<br />
alle Anfragen an, auch die blockierten.<br />
Auf diesem Weg können Administratoren<br />
Authentifizierungsprobleme von Active-<br />
Directory-abhängigen Programmen analysieren<br />
und feststellen, welche Clients<br />
und Server eine Verbindung mit den<br />
Domänencontrollern aufbauen.<br />
Leistungsprobleme müssen nicht immer<br />
von der Latenz oder Serverressourcen<br />
kommen, oft liegt deren Ursache auch<br />
in Authentifizierungsproblemen. Alle Anfragen<br />
an den Domänencontroller protokolliert<br />
ADInsight und speichert diese<br />
zur Fehlersuche auch als HTML-Bericht<br />
oder als Textdatei. Das Protokoll enthält<br />
die Anfrage des Clients und die Antwort,<br />
die der Client über LDAP erhalten hat.<br />
Auch die Zugriffe der Systemdienste zeigt<br />
ADInsight an. Bestandteil des Tools ist<br />
eine englischsprachige Hilfedatei, die den<br />
Anwender bei den ausführlichen Analysemöglichkeiten<br />
unterstützt. Sobald<br />
Programme wie Exchange auf den Domänencontroller<br />
zugreifen, füllt sich das<br />
Fenster mit Informationen. Über einen<br />
Rechtsklick können Sie weitere Informationen<br />
über die einzelnen Einträge anzeigen.<br />
Die Anzeige lässt sich über das<br />
Menü auch filtern.<br />
Die Anzeige umfasst auch den Benutzernamen<br />
des zugreifenden Benutzers.<br />
Mit ADInsight lassen sich nur lokale Zugriffe<br />
überwachen, eine Diagnose über<br />
das Netzwerk per Remotezugriff ist nicht<br />
möglich. Immerhin besteht die Möglichkeit,<br />
über die Suchfunktion von ADIn-<br />
Abbildung 1: Mit ADInsight lassen sich LDAP-Zugriffe auf Domänencontroller diagnostizieren.<br />
sight nach bestimmten Prozessen, Fehlern<br />
oder Abfrageergebnissen zu filtern. Das<br />
Tool markiert das Ergebnis, sodass sich<br />
auch spezifische Überwachungsvorgänge<br />
durchführen lassen. ADInsight kann auch<br />
automatisiert eingesetzt werden und stellt<br />
dazu verschiedene Optionen zur Verfügung.<br />
Hilfreich bei der Automatisierung<br />
ist die Fähigkeit, das Protokoll in eine<br />
Datei schreiben zu lassen, ohne die Vorgänge<br />
in der grafischen Oberfläche anzuzeigen.<br />
Das Tool läuft auf Windows 2000<br />
Server und höher.<br />
LDAP-Lesezugriffe messen<br />
Um die Leistung von Active-Directoryabhängigen<br />
Serverdiensten wie Exchange<br />
im Zusammenspiel mit dem Verzeichnisdienst<br />
zu überprüfen, benötigen Sie<br />
zunächst die Leistungsdaten beim Abrufen<br />
von Active-Directory-Informationen<br />
über LDAP. Ist die Verbindung zum<br />
Active Directory langsam, dann reagiert<br />
auch Exchange langsam. Haben Sie Probleme<br />
der Namensauflösung, des Active<br />
Directory und der Authentifizierung mit<br />
den vorangegangenen Schritten bereits<br />
ausgeschlossen, können Sie mit der Leistungsüberwachung<br />
die Ursache des Problems<br />
weiter eingrenzen. Der erste Schritt<br />
bei der Leistungsüberwachung führt<br />
daher zunächst über die Leistungsüberwachung<br />
auf dem Exchange-Server, die<br />
Sie mit »perfmon.msc« starten. Klicken<br />
Sie anschließend auf Leistungsüberwachung.<br />
Klicken Sie auf das grüne Plus-Zeichen,<br />
um einen neuen Indikator hinzuzufügen.<br />
Mit Indikatoren überwachen Sie verschiedene<br />
Ressourcen des Servers. Wählen Sie<br />
zunächst den entsprechenden Indikator<br />
aus und klicken Sie auf »Hinzufügen«.<br />
Sie können eine Beschreibung der Indikatorengruppe<br />
anzeigen, die aktuell in<br />
der Liste ausgewählt ist. Aktivieren Sie<br />
dazu das Kontrollkästchen »Beschreibung<br />
anzeigen« in der unteren linken Ecke des<br />
Bildschirms. Sie können die verfügbaren<br />
Indikatoren einer Gruppe anzeigen,<br />
indem Sie auf den Abwärtspfeil rechts<br />
neben dem Gruppennamen klicken. Zum<br />
Hinzufügen einer Indikatorengruppe<br />
markieren Sie den Gruppennamen und<br />
klicken auf die Schaltfläche »Hinzufügen«.<br />
Markieren Sie einen Indikator in<br />
der Liste, bevor Sie auf »Hinzufügen«<br />
klicken, fügen Sie nur diesen Indikator<br />
hinzu. Möchten Sie mehrere Indikatoren<br />
einer Gruppe auswählen, klicken Sie bei<br />
gedrückter [Strg]-Taste auf die Namen in<br />
der Liste.<br />
Sobald alle gewünschten Indikatoren<br />
ausgewählt sind, klicken Sie auf »Hinzufügen«.<br />
Möchten Sie nur eine bestimmte<br />
Instanz eines Indikators hinzufügen, markieren<br />
Sie einen Gruppennamen in der<br />
Liste, wählen den gewünschten Prozess<br />
in der Liste im Bereich »Instanzen des<br />
gewählten Objekts« aus und klicken auf<br />
»Hinzufügen«. Bei Auswahl einer Instanz<br />
protokolliert die Leistungsüberwachung<br />
nur die Indikatoren, die der gewählte<br />
Prozess erzeugt. Wenn Sie keine Instanz<br />
auswählen, protokolliert die Leistungsüberwachung<br />
alle Instanzen, zum Beispiel<br />
alle Prozessoren.<br />
Als Instanzen können Sie zum Beispiel<br />
einzelne Webanwendungen auf dem Server<br />
auswählen oder auch alle Prozessoren<br />
oder Prozessorkerne. Wichtig für die<br />
Verbindung von Exchange zum Active<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
119
Basics<br />
Windows-Tuning<br />
Abbildung 2: Hinzufügen von neuen Leistungsindikatoren zur Windows-<br />
Leistungsüberwachung auf Exchange-Servern.<br />
Directory ist die Indikatorgruppe »MSExchange<br />
ADAccess‐Prozesse«. Diese fügt<br />
der Exchange-Installationsassistent auf<br />
einem Server hinzu (Abbildung 2).<br />
Interessant sind in dieser Gruppe die beiden<br />
Indikatoren »LDAP‐Lesedauer« und<br />
»LDAP‐Suchdauer«. Klicken Sie dazu<br />
auf das Pluszeichen neben der Indikatorgruppe<br />
im oberen Bereich und dann<br />
auf die beiden Indikatoren. Wählen Sie<br />
im unteren Bereich Instanzen die Instanz<br />
»Alle Instanzen« und klicken Sie<br />
auf »Hinzufügen«. »LDAP‐Lesedauer«<br />
misst die Zeit, die eine LDAP-Abfrage<br />
bis zur Datenübermittlung benötigt.<br />
»LDAP‐Suchdauer« zeigt die Zeit an, die<br />
der Server für eine Suche per LDAP im<br />
Active Directory benötigt.<br />
Der Durchschnittswert für diese<br />
Indikatoren sollte unter 50ms liegen, die<br />
Maximaldauer sollte nicht über 100ms<br />
steigen. Über die Symbolleiste der<br />
Leistungsüberwachung können Sie die<br />
Anzeige zwischen Linie, Histogrammleiste<br />
und Bericht hin- und herwechseln.<br />
Auf diesem Weg können Sie zum Beispiel<br />
schneller eine Übersicht erhalten, wenn<br />
ein bestimmter Server Probleme beim<br />
Verbinden mit dem Active Directory hat.<br />
Damit Active-Directory-abhängige<br />
Dienste schnell und effizient Daten aus<br />
dem Active Directory abrufen können,<br />
muss der globale Katalog schnell antworten<br />
und darf nicht überlastet sein. Um<br />
diese Auslastung zu überprüfen, können<br />
Sie ebenfalls die Leistungsüberwachung<br />
verwenden. Klicken Sie anschließend<br />
auf »Sammlung-<br />
sätze\System\Active<br />
Directory Diagnostics«.<br />
Klicken<br />
Sie anschließend<br />
auf das grüne<br />
Dreieck in der<br />
Symbolleiste, um<br />
den Sammlungssatz<br />
zu starten.<br />
Während der<br />
Server die Daten<br />
misst, versuchen<br />
Sie, die Abfrage<br />
auf das Active<br />
Directory durchzuführen,<br />
um<br />
festzustellen, ob<br />
das Problem auf<br />
Seite des globalen<br />
Katalogs liegt. Ist die Abfrage<br />
fertiggestellt, können Sie den Sammlungssatz<br />
über das Stopzeichen anhalten.<br />
Zeigt ein Server Leistungsprobleme,<br />
starten Sie den Sammlungssatz einfach<br />
und lassen eine Zeit lang die Abfragen<br />
messen. Nach einiger Zeit beenden Sie<br />
die Messung über das Kontextmenü<br />
des Sammlungssatzes oder die Symbolleiste.<br />
Anschließend können Sie über<br />
»Berichte\System\Active Directory Diagnostics«<br />
die Daten der letzten Messung<br />
anzeigen lassen. In verschiedenen Bereichen<br />
sehen Sie alle durchgeführten Aufgaben<br />
und deren Daten und Zugriffsgeschwindigkeiten.<br />
Wichtig in diesem Bericht ist vor allem<br />
der Bereich »Active Directory«. Klicken<br />
Sie im Bericht auf den kleinen Pfeil an<br />
der rechten Seite und wählen Sie die Option<br />
»Suche« aus. Es öffnet sich eine neue<br />
Seite, in der Sie die Daten und Verbindungen<br />
sowie die Vorgänge genau anzeigen<br />
können. Im rechten Bereich sehen Sie<br />
die Antwortzeiten und die übertragenen<br />
Daten. Hier sollten keine größeren Ausschläge<br />
nach oben zu sehen sein. Je kürzer<br />
die Antwortzeiten, desto schneller reagiert<br />
der Server. Klicken Sie den Bericht<br />
mit der rechten Maustaste an, können<br />
Sie über »Ansicht\Ordner« den Inhalt des<br />
Berichtes anzeigen lassen. In der Ordneransicht<br />
stehen zum Beispiel auch eine<br />
HTML-Datei sowie eine XML-Datei zur<br />
Verfügung, die die Daten des Berichtes<br />
enthalten. Diese Daten lassen sich mit<br />
anderen Programmen weiterverarbeiten,<br />
zum Beispiel mit dem bereits erwähnten<br />
Freeware Performance Analysis of Logs<br />
(PAL).<br />
Speicherengpässe beheben<br />
Performanceprobleme können eine Reihe<br />
unterschiedlicher Ursachen haben. Ein<br />
weiteres Problem bei der Performanceanalyse<br />
ist, dass die Beseitigung eines<br />
Engpasses oft zum nächsten Engpass<br />
führt. Dafür gibt es viele Beispiele. Wer<br />
mehr Speicher bereitstellt, erfährt oft als<br />
Nächstes, dass auch der Prozessor bereits<br />
an der Kapazitätsgrenze angelangt ist.<br />
Es gibt einige grundsätzliche Regeln für<br />
den Einsatz von Hauptspeicher. Die erste<br />
Regel lautet: Viel hilft viel, sowohl bei<br />
Hauptspeicher als auch beim Cache. Das<br />
hat bei Windows Server 2008 R2 noch<br />
mehr Gültigkeit als unter Windows Server<br />
2003/2008. Die zweite Regel besagt,<br />
dass die Auslagerungsdatei am besten<br />
auf einer anderen physischen Festplatte<br />
als der Systempartition aufgehoben ist.<br />
Der Preis dafür ist, dass bei einem Systemfehler<br />
keine Speicherdumps mehr zur<br />
Verfügung stehen.<br />
Profis können Speicherdumps dazu nutzen,<br />
Fehler im Betriebssystem nachzuvollziehen.<br />
Allerdings werden diese Möglichkeiten<br />
heutzutage eher selten genutzt, da<br />
es zur Fehlerbehebung einfachere Tools<br />
gibt. Die Auslagerungsdatei ist auch einer<br />
der Bereiche, die für die Speicherverwaltung<br />
die größte Bedeutung haben. Windows<br />
Server 2008 R2 lagert Informationen<br />
aus dem physischen Hauptspeicher<br />
in die Auslagerungsdatei aus, wenn nicht<br />
genügend Hauptspeicher zur Verfügung<br />
steht, beziehungsweise Prozesse ihre Daten<br />
nicht dauerhaft benötigen. Der Server<br />
kann zwar, ausreichend freie Festplattenkapazität<br />
vorausgesetzt, fast beliebig viel<br />
Speicher auslagern. Es ist aber relativ<br />
schnell der Punkt erreicht, an dem diese<br />
Auslagerung zu langsam ist. Die Überwachung<br />
der Auslagerung spielt daher bei<br />
der Analyse eine wichtige Rolle.<br />
Sie sollten die Auslagerungsdatei auf eine<br />
andere physische Festplatte des Servers<br />
verschieben, damit Schreibzugriffe auf<br />
die Auslagerungsdatei nicht von Schreibzugriffen<br />
auf der Festplatte ausgebremst<br />
werden. Wenn keine zweite physische<br />
Festplatte zur Verfügung steht, ist ein<br />
Verschieben sinnlos, da die Auslagerung<br />
120 Ausgabe 06-2011 Admin www.admin-magazin.de
Windows-Tuning<br />
Basics<br />
auf eine Partition, die auf derselben Platte<br />
liegt, keine positiven Auswirkungen hat.<br />
Zusätzlich können Sie die Größe der Auslagerungsdatei<br />
auf etwa das 2,5-Fache<br />
des tatsächlichen Arbeitsspeichers legen.<br />
Damit verhindern Sie die Fragmentierung<br />
der Datei, da Windows diese nicht ständig<br />
vergrößern oder verkleinern muss.<br />
Die Einstellungen für die Auslagerungsdatei<br />
finden Sie unter »Start\Systemsteuerung\System<br />
und Sicherheit\System\<br />
Erweiterte Systemeinstellungen« auf<br />
der Registerkarte »Erweitert« mit »Leistung\Einstellungen\Erweitert\Virtueller<br />
Arbeits speicher\Ändern«.<br />
Deaktivieren Sie das Kontrollkästchen<br />
»Auslagerungsdateigröße für alle Laufwerke<br />
automatisch verwalten«. Aktivieren<br />
Sie die Option »Benutzerdefinierte<br />
Größe«, wenn Sie selbst eine Größe<br />
der Datei festlegen wollen. Setzen Sie<br />
bei »Anfangsgröße« und bei »Maximale<br />
Größe« in etwa das 2,5-Fache des Arbeitsspeichers<br />
ein. Dadurch ist sichergestellt,<br />
dass die Datei nicht fragmentiert wird, da<br />
sie immer die gleiche Größe hat. Setzen<br />
Sie die Größe der Auslagerungsdatei für<br />
Laufwerk C: auf 0. Klicken Sie auf »Festlegen«,<br />
um die Änderungen zu speichern,<br />
schließen Sie alle Fenster und starten Sie<br />
den Server neu.<br />
Auf einem Core-Server verschieben Sie<br />
die Auslagerungsdatei am besten mit<br />
dem Befehl<br />
Wmic pagefileset where name="Pfad"U<br />
set InitialSize=Anfangsgröße,U<br />
MaximumSize=Maximale Größe<br />
Zuvor beenden Sie die automatische Konfiguration<br />
mit dem Befehl<br />
wmic computersystem where name="Hostname"U<br />
set AutomaticManagedPagefile=False.<br />
Interessante Hinweise zu diesem Vorgang<br />
finden Sie auch unter [5]. Die naheliegende<br />
Konsequenz bei Speicherengpässen<br />
ist, mehr Arbeitsspeicher den Server<br />
einzubauen. Nur ist das keineswegs auch<br />
immer der sinnvollste Weg. In jedem<br />
Fall sollten Sie zunächst untersuchen,<br />
welche Prozesse für die hohe Speicherauslastung<br />
verantwortlich sind. Dazu<br />
verwenden Sie das Objekt »Prozess« in<br />
der Leistungsüberwachung. Auch die<br />
Prozessorleistung kann natürlich einen<br />
solchen Flaschenhals darstellen. Zu wenig<br />
Hauptspeicher kann die Konsequenz<br />
haben, dass auch der Prozessor sehr<br />
stark belastet ist. Denn die Auslagerung<br />
von Seiten und viele andere Vorgänge gehen<br />
natürlich nicht spurlos am Prozessor<br />
vorbei. Schließlich ist er maßgeblich an<br />
der Verwaltung des Arbeitsspeichers beteiligt.<br />
Da Engpässe beim Hauptspeicher<br />
typischerweise deutlich kostengünstiger<br />
zu beheben sind als solche beim Prozessor,<br />
sollte diese Situation zunächst<br />
untersucht werden. Es ist in Ordnung,<br />
wenn die die Auslastung kurzzeitig oder<br />
nur gelegentlich über 90 Prozent liegt.<br />
Zum Problem wird es erst, wenn sie andauernd<br />
in diesem Bereich liegt.<br />
Bei Mehrprozessorsystemen gilt das Augenmerk<br />
natürlich vor allem den Leistungsindikatoren<br />
aus dem Objekt »System«.<br />
Dort fasst Windows die Informationen<br />
von mehreren Systemkomponenten<br />
zusammen. So ermitteln Sie die Gesamtbelastung<br />
aller Prozessoren. Ergänzend<br />
sind aber auch hier die Leistungsindikatoren<br />
»Prozessorzeit« des Objekts<br />
»Prozessor« von Bedeutung. Wenn viele<br />
verschiedene Prozesse laufen, ist eine einigermaßen<br />
gleichmäßige Lastverteilung<br />
fast sicher. Bei einem einzelnen Prozess<br />
ist dagegen die Aufteilung in einigermaßen<br />
gleichgewichtige Threads wichtig.<br />
Ein Thread ist eine Ausführungseinheit<br />
eines Prozesses. Wenn ein Prozess mehrere<br />
Threads verwendet, können diese<br />
auf unterschiedlichen Prozessoren laufen.<br />
Die Verteilung erfolgt entsprechend<br />
der Auslastung der einzelnen Prozessoren<br />
durch das System. Eine hohe Zahl von<br />
Warteschlangen bedeutet, dass mehrere<br />
Threads rechenbereit sind, ihnen aber<br />
vom System noch keine Rechenzeit zugewiesen<br />
wurde. Die Faustregel für diesen<br />
Wert ist, dass er nicht allzu häufig über<br />
2 liegen sollte. Wenn die Auslastung des<br />
Prozessors im Durchschnitt relativ gering<br />
ist, spielt dieser Wert nur eine untergeordnete<br />
Rolle.<br />
Um die Leistung eines Servers zu messen,<br />
spielen also vor allem die Überwachung<br />
des Prozessors, des Arbeitsspeichers, der<br />
Netzwerkgeschwindigkeit und die Antwortzeiten<br />
des Active Directorys eine wesentliche<br />
Rolle. Bei virtuellen Servern, die<br />
Sie mit Hyper-V in Windows Server 2008<br />
R2 einsetzen, sollten Sie auf jeden Fall<br />
das Service Pack 1 für Windows Server<br />
2008 R2 einsetzen und Dynamic Memory<br />
aktivieren. Dynamic Memory ermöglicht<br />
die dynamische Zuteilung von Arbeitsspeicher<br />
zwischen den virtuellen Servern.<br />
Sie können für virtuelle Computer<br />
einen Minimalwert und einen maximalen<br />
Wert für den Arbeitsspeicher zuteilen.<br />
Zusätzlich können Sie den Server noch<br />
gewichten, sodass Hyper-V entscheiden<br />
kann, welcher Server welche Menge an<br />
Arbeitsspeicher erhält. Der Vorteil ist,<br />
dass der Arbeitsspeicher dynamisch<br />
zur Verfügung steht, sodass Server, die<br />
zeitweise mehr RAM benötigen, diese<br />
automatisch von Hyper-V zugeteilt bekommen.<br />
Andere Server, die zeitweise<br />
nicht ihren kompletten Speicher benötigen,<br />
geben ihn dafür ab.<br />
Fortgeschritten<br />
Reichen Ihnen die Möglichkeiten der<br />
Leistungsüberwachung nicht aus, bietet<br />
Microsoft weitere Lösungen an. So<br />
lässt sich mit dem kostenlosen Windows<br />
Performance Toolkit von Microsoft die<br />
Leistung eines Systems ebenfalls sehr<br />
effizient messen. Mehr dazu verrät ein<br />
Artikel im <strong>ADMIN</strong> 05/2011 [6]. (ofr) n<br />
Infos<br />
[1] PAL: [http:// pal. codeplex. com]<br />
[2] Log Parser 2.2: [http:// www. microsoft.<br />
com/ downloads/ details. aspx? FamilyID=8<br />
90cd06b‐abf8‐4c25‐91b2‐f8d975cf8c07&<br />
DisplayLang=en]<br />
[3] Office 2003 Add-in: Office Web Components:<br />
[http:// www. microsoft. com/<br />
downloads/ details. aspx? FamilyID=7287<br />
252c‐402e‐4f72‐97a5‐e0fd290d4b76&<br />
DisplayLang=en]<br />
[4] Active Directory Insight: [http:// technet.<br />
microsoft. com/ de‐de/ sysinternals/<br />
bb897539]<br />
[5] Command for changing the page file:<br />
[http:// forums. microsoft. com/ TechNet/<br />
ShowPost. aspx? PostID=2599415&<br />
SiteID=17]<br />
[6] Thomas Joos, Windows Performance Toolkit,<br />
<strong>ADMIN</strong> 05/2011, S. 58<br />
Der Autor<br />
Thomas Joos ist freiberuflicher IT-Consultant<br />
und seit über 20 Jahren in der IT tätig. Neben<br />
seinen Projekten schreibt er praxisnahe Fachbücher<br />
und Fachartikel rund um Windows und<br />
andere Microsoft-Themen. Online trifft man ihn<br />
unter [http:// thomasjoos. spaces. live. com].<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
121
Programmieren<br />
Python<br />
Skriptprogrammierung mit Python<br />
Werkzeugkasten<br />
Es ist nicht alles Shell, was glänzt. Auch mit Python lassen sich Systemaufgaben unkompliziert skripten. Dieser<br />
Artikel gibt eine Einführung in die moderne Skriptsprache. Oliver Frommel<br />
Wenn ich auf einem Linux-Rechner ein<br />
komplizierteres Problem auf der Kommandozeile<br />
lösen möchte, mache ich<br />
das nur in einfachen Fällen mit einem<br />
Shellskript. Bei Fallunterscheidungen,<br />
Schleifen und Variablen ist mir die<br />
Syntax zu kompliziert. Das liegt sicher<br />
auch an fehlender Übung, aber warum<br />
sollte ich mich mit dem Erlernen einer<br />
weiteren Programmiersprache, in diesem<br />
Fall der Shell abmühen, wenn ich<br />
etwa mit Python einfache wie komplexe<br />
Programme schreiben kann?<br />
Zudem hat sich Python in den letzten 15<br />
Jahren als Standard auf allen Betriebssystemen<br />
und Linux-Distributionen etabliert.<br />
Die Versionen 2.5 bis 2.7 sind weitgehend<br />
kompatibel und auf den meisten Plattformen<br />
verfügbar – einschließlich Windows<br />
und Mac OS X. Python zeigt sich inklusive<br />
seiner umfangreichen Zusatzbibliotheken<br />
als ausgereiftere Plattform. Bei<br />
aller Sympathie für Ruby muss man feststellen,<br />
dass es in der Ruby-Welt häufige<br />
und teilweise inkompatible Änderungen<br />
gibt, die die Portabilität von Skripten erschweren<br />
(eine Lösung dafür bietet der<br />
Ruby Version Manager, den ein Artikel in<br />
diesem Heft näher vorstellt).<br />
Über die Installation von Python gibt es<br />
nicht viele Worte zu verlieren, da es auf<br />
allen Linux-Distributionen wie auch auf<br />
Mac OS X standardmäßig zur Verfügung<br />
steht. Für Windows gibt es einfache<br />
Installer, die nur wenige Klicks benötigen.<br />
Eine interessante Alternative für<br />
Windows ist der Ironpython-Interpreter,<br />
der die Programmiersprache auf der<br />
Dotnet-Runtime implementiert.<br />
Weißraum<br />
Das charakteristische Feature von Python,<br />
an dem sich die Geister scheiden, ist die<br />
Kennzeichnung von Blocks per Whitespace,<br />
das heißt durch die Tiefe der Einrückung,<br />
sei es mittels Leer- oder Tab-<br />
Zeichen. Ruft man den Python-Interpreter<br />
»python« auf der Kommandozeile auf,<br />
gelangt man in einen Modus, der sich für<br />
die interaktive Erforschung der Sprache<br />
eignet. Alternativ dazu bietet sich der<br />
IPython-Interpreter [1] an, der ebenfalls<br />
eine interaktive Umgebung aber noch<br />
einigen Komfort mehr – wie etwa die<br />
automatische Vervollständigung von<br />
Methoden – bietet (Abbildung 1).<br />
Eine einfache If-Unterscheidung<br />
sieht in Python beispielsweise so<br />
aus:<br />
user = "root"<br />
if user == "root":<br />
print "Superuser"<br />
privileged = True<br />
else:<br />
print "Normalo"<br />
privileged = False<br />
Vladimir Yudin, 123RF<br />
Hier ist zu sehen, wie die einzelnen<br />
Blöcke durch die Einrückungstiefe gekennzeichnet<br />
werden. Vor der Print-Anweisung<br />
im If-Block und der Zuweisung<br />
an die Variable »privileged« muss die<br />
gleiche Zahl an Leer- beziehungsweise<br />
Tab-Zeichen stehen. Ich bevorzuge hierbei<br />
Leerzeichen, da es erfahrungsgemäß<br />
weniger Probleme damit gibt, ein Skript<br />
in unterschiedlichen Editoren und auf<br />
mehreren Plattformen zu bearbeiten.<br />
Hinweise zur entsprechenden Einstel-<br />
122 Ausgabe 06-2011 Admin www.admin-magazin.de
Python<br />
Programmieren<br />
lung des Vi(m)-Editors gibt der Kasten<br />
„Vim-Konfiguration“. Praktisch ist hierbei,<br />
dass man zur Eingabe trotzdem die<br />
Tab-Taste verwenden kann, die der Editor<br />
dann durch die konfigurierte Zahl von<br />
Leerzeichen ersetzt.<br />
Was das obige Code-Beispiel außerdem<br />
illustriert, ist die Tatsache, dass Anweisungen<br />
nicht durch Semikolons abgeschlossen<br />
werden müssen (wie etwa in<br />
Perl oder PHP). Hinter den Fall-Unterscheidungen<br />
von If und Else folgt jeweils<br />
ein Doppelpunkt. Das ist beispielsweise<br />
auch bei For- oder While-Schleifen der<br />
Fall, mit denen man über häufig verwendete<br />
Datenstrukturen wie numerische<br />
und assoziative Arrays (sogenannte<br />
Dictionaries) iteriert, etwa:<br />
packages = ['apache', 'xftpd', 'postfix']<br />
for package in packages:<br />
print package<br />
Diese Syntax ist auch für Nicht-Programmierer<br />
beinahe intuitiv verständlich, während<br />
die Verarbeitung von Arrays in einem<br />
Bash-Skript mit vielen eckigen Klammern<br />
mir eher qualvoll erscheint. Bei jedem<br />
Schleifendurchgang findet hier eine Zuweisung<br />
statt, die jeweils das aktuelle Element<br />
der Liste »packages« an die Variable<br />
»package« zuweist. Etwas komplizierter<br />
gestaltet sich das Gleiche mit Dictionaries.<br />
Mit der eingebauten Methode »keys()«<br />
lassen sich die Schlüssel auslesen, mit<br />
»values()« die dazugehörigen Werte. Iteriert<br />
man über die Keys, kann man den<br />
jeweiligen Schlüssel dazu verwenden, um<br />
an den Wert zu gelangen:<br />
versions = {'apache': 2.4, 'xftpd': 1.0}<br />
for package in versions.keys():<br />
print package, versions[package]<br />
Das lässt sich mit der Methode »items()«<br />
auch in einem Schritt erreichen:<br />
for package, version in versions.items():<br />
print package, version<br />
Wie man hier sieht, besitzt Python als<br />
objektorientierte Programmiersprache für<br />
die eingebauten Datentypen eine Reihe<br />
praktischer Methoden, um zum Beispiel<br />
Listen (Arrays) zu verändern: »append()«<br />
hängt ein Element an, »del()« löscht ein<br />
Element per Index, »remove()« löscht es<br />
nach dem Wert, »len()« gibt die Länge<br />
des Arrays aus und so weiter. Alle Methoden,<br />
die zu einem Datentyp (oder an-<br />
Abbildung 1: Die IPython-Umgebung bietet gegenüber dem normalen Python-Interpreter noch mehr Komfort:<br />
etwa Tab-Completion, automatische Ergänzung von Klammern, Objekt-Introspektion und vieles mehr.<br />
die Import-Anweisung geladen werden<br />
müssen. Als „Bad Practice“ gilt es dabei<br />
eigentlich, ein komplettes Modul per »import<br />
Modul« zu laden. Stattdessen sollte<br />
man nur die Methoden beziehungsweise<br />
Klassen importieren, die man auch wirklich<br />
verwendet, etwa mit »from string<br />
import lower«.<br />
Mit dem OS-Modul lassen sich typische<br />
Teilschritte von Shellskripten lösen, wie<br />
etwa in ein Verzeichnis zu wechseln<br />
(»chdir()«), das aktuelle Arbeitsverzeichderen<br />
Klassen) gehören, lassen sich der<br />
Python-API-Dokumentation entnehmen.<br />
Beispielsweise empfiehlt sich ein Blick<br />
in die String-Klasse [2], da man ohne<br />
die Verarbeitung von Strings wohl in den<br />
seltensten Fällen auskommen wird.<br />
Module<br />
Python besteht aus dem Interpreter, der<br />
den Sprachkern implementiert und aus<br />
einer Sammlung von Standard-Modulen,<br />
ohne die sich kaum Skripts schreiben<br />
lassen, die wirklich Arbeit verrichten.<br />
So implementiert das Modul »os« eine<br />
Schnittstelle zum Betriebssystem [3].<br />
Viele Methoden sind auf allen Betriebssystemen<br />
gleichermaßen verfügbar, manche<br />
unterscheiden sich zwischen Unix<br />
(Linux, Mac OS X …) und Windows, andere<br />
lassen sich sogar dazu verwenden,<br />
Portabilitätsprobleme zu lösen. Einen<br />
Überblick über die aktuelle Umgebung<br />
liefert beispielsweise das Dictionary »os.<br />
environ«, dessen Ausgabe auf Mac OS X<br />
in Listing 1 abgedruckt ist.<br />
In Listing 1 ist auch zu sehen, dass nicht<br />
im Sprachkern vorhandene Module über<br />
Vim-Konfiguration<br />
Da Python die Grenzen von Blocks per Einrückungstiefe<br />
kennzeichnet, muss der verwendete<br />
Editor sorgfältig damit umgehen und<br />
am besten die Arbeit damit erleichtern. Es<br />
bietet sich an, ihn so einzustellen, dass ein<br />
Druck auf die Tab-Taste zwar den folgenden<br />
Text ein Stück weit einrückt, aber statt eines<br />
Tab-Zeichens die entsprechende Anzahl an<br />
Leerzeichen eingefügt wird. Im Vi(m)-Editor<br />
lässt sich das mit der folgenden Konfiguration<br />
in der Datei ».vimrc« erreichen:<br />
set expandtab<br />
set tabstop=3<br />
set shiftwidth=3<br />
set smartindent<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
123
Programmieren<br />
Python<br />
Listing 1: »os.environ« auf OS X<br />
01 >>> import os<br />
02 >>> for key, value in os.environ.items():<br />
03 ... print key, value<br />
04 ...<br />
05 VERSIONER_PYTHON_PREFER_32_BIT no<br />
06 TERM_PROGRAM_VERSION 273.1<br />
07 LOGNAME oliver<br />
08 USER oliver<br />
09 PATH /opt/local/bin:/opt/local/sbin:/Users/oliver/<br />
bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/<br />
usr/local/bin:/usr/texbin:/usr/X11/bin<br />
10 DISPLAY /tmp/launch‐X9bzHU/org.x:0<br />
11 TERM_PROGRAM Apple_Terminal<br />
12 LANG de_DE.UTF‐8<br />
13 TERM xterm‐color<br />
14 VERSIONER_PYTHON_VERSION 2.6<br />
15 SHLVL 1<br />
16 _ /usr/bin/python<br />
17 HOME /Users/oliver<br />
18 SSH_AUTH_SOCK /tmp/launch‐9nXMJp/Listeners<br />
19 SHELL /bin/bash<br />
20 TMPDIR /var/folders/Sd/<br />
SdnFaCHZE5CuSIG3‐c1lpU+++TI/‐Tmp‐/<br />
21 __CF_USER_TEXT_ENCODING 0x1F5:0:3<br />
22 PWD /Users/oliver<br />
23 COMMAND_MODE unix2003<br />
Listing 2: »os.walk()«<br />
01 import os<br />
02 from os.path import join, getsize<br />
03 for root, dirs, files in os.walk('python/Lib/email'):<br />
04 print root, "consumes",<br />
05 print sum(getsize(join(root, name)) for name in<br />
files),<br />
06 print "bytes in", len(files), "non‐directory<br />
files"<br />
07 if 'CVS' in dirs:<br />
08 dirs.remove('CVS') # don't visit CVS<br />
directories<br />
Listing 3: Zugriff auf SQLite<br />
01 from pysqlite2 import dbapi2 as sqlite<br />
02 import sys<br />
03 <br />
04 db = "urls.db"<br />
05 conn = sqlite.connect(db)<br />
06 if not conn:<br />
07 debug("can't get db connection")<br />
08 sys.exit()<br />
09 conn.execute('create table if not exists urls ( url<br />
text, time integer )')<br />
10 <br />
11 c = conn.cursor()<br />
12 c.execute('insert into urls values ( ?,<br />
strftime("%s","now"))', (url,))<br />
13 conn.commit()<br />
14 url = "http://www.admin‐magazin.de"<br />
15 results = c.execute('''select * from urls where url =<br />
?''', (url,))<br />
16 for result in results:<br />
17 print result<br />
nis auslesen (»getcwd()«). Die Eigentumsverhältnisse<br />
ändert »os.chown()«,<br />
die Rechte »os.chmod()«. Dateien und<br />
Verzeichnisse lassen sich mit dem Modul<br />
anlegen, löschen, umbenennen. Darüber<br />
hinaus enthält es Low-Level-Methoden,<br />
um Dateien zu öffen, zu lesen, zu<br />
schreiben und so weiter. Mit der Methode<br />
»walk()« kann ein Skript einen<br />
Verzeichnisbaum durchschreiten, wie es<br />
Listing 2, ein Beispiel aus der Python-<br />
Dokumentation, vormacht. Ab Python<br />
2.6 versteht die Walk-Methode einen Parameter<br />
»followlinks«, der festlegt, ob sie<br />
symbolischen Links folgt oder nicht.<br />
Bis zu Python 2.5 waren auch die Popen-<br />
Methoden, die die Kommunikation mit<br />
Subprozessen ermöglichen, Bestandteil<br />
des OS-Moduls. Mit Version 2.6 wurden<br />
sie durch ein neues Subprocess-Modul ersetzt<br />
[4]. Damit lassen sich zum Beispiel<br />
Unix-Tools aufrufen und deren Ausgabe<br />
im Python-Skript weiterverarbeiten. Im<br />
einfachsten Fall geht das mit »subprocess.<br />
Popen()«, dem man als erstes Argument<br />
die auszuführende Kommandozeile als<br />
Array übergibt. Die dafür nötigen Tokens<br />
gewinnt man aus einer einfachen Zeichenkette<br />
beispielsweise mit »split()« aus<br />
dem »shlex«-Modul:<br />
cmd = '''import ‐window root screen.png'''<br />
args = shlex.split(cmd)<br />
subprocess.Popen(args)<br />
Die Popen-Methode kennt noch eine<br />
Reihe weiterer Parameter, etwa um ein<br />
Dictionary von Umgebungsvariablen zu<br />
übergeben. Insbesondere sollte man in<br />
den meisten Fällen darauf verzichten,<br />
per »Shell=true« eine Subshell zu starten,<br />
weil das mögliche Sicherheitslücken<br />
öffnet.<br />
Um an die Ergebnisse zu gelangen, bietet<br />
es sich an, die Standardausgabe umzuleiten<br />
und dann mit der Communicate-<br />
Methode auszulesen:<br />
result = subprocess.Popen("ls", stdout=U<br />
subprocess.PIPE).communicate()<br />
print result<br />
('artikel.txt\n', None)<br />
print result[0]<br />
'artikel.txt\nbild.png\n'<br />
Das ist zugegebenermaßen keine besonders<br />
schöne Methode und ziemlich viel<br />
zu tippen. Einfacher geht es mit dem OS-<br />
Modul, auch wenn dessen Verwendung<br />
nicht mehr empfohlen wird:<br />
result = os.popen('ls').read()<br />
'artikel.txt\nbild.png\n'<br />
Das Ergebnis kann mithilfe der »split()«-<br />
Methode der String-Klasse wieder leicht<br />
in eine Liste zerlegt werden. Man sollte<br />
auch nur im Ausnahmefall auf das Aufrufen<br />
von Unix-Kommandos ausweichen<br />
und stattdessen eines der über 3000<br />
Python-Module verwenden, die die meisten<br />
Anwendungsgebiete abdecken.<br />
Regulär<br />
Auch Regular Expressions für die Verarbeitung<br />
von Strings gehören zur Standardausstattung<br />
einer Python-Installation.<br />
Nach dem Importieren des dazugehörigen<br />
Moduls stehen Methoden<br />
wie »search()« und »match()« zur Verfügung.<br />
Der Unterschied besteht darin,<br />
dass Match nur am Anfang eines Strings<br />
nachsieht, sein Pendant Search aber den<br />
ganzen String durchsucht. Die Anwendung<br />
sieht etwa so aus:<br />
import re<br />
s = "Regulär ausgedrückt"<br />
m = re.search('(Reg.*) ', s)<br />
m.group(0)<br />
'Regul\xc3\xa4r '<br />
print m.group(0)<br />
Regulär<br />
Wie man sieht, funktioniert das auch<br />
mit Umlauten, allerdings muss man dabei<br />
auf die richtige Zeichen-Codierung<br />
achten. Aktuelle Python-Versionen können<br />
mit UTF-8 umgehen, manchmal ist<br />
es aber erforderlich, Strings erst in die<br />
richtige Codierung zu wandeln, etwa mit<br />
der »unicode()«-Methode. Mehr dazu<br />
verrät das Python-Unicode-Howto. Das<br />
Encoding einer Python-Quelldatei lässt<br />
sich festlegen, indem man in der ersten<br />
Zeile (nach dem Aufruf des Interpreters)<br />
einen Kommentar in folgendem Format<br />
schreibt: »# encoding: utf‐8«.<br />
<strong>Datenbanken</strong><br />
Für den Zugriff auf relationale <strong>Datenbanken</strong><br />
bietet Python ein mehr oder weniger<br />
standardisiertes Interface über die DB-API<br />
2.0 an, etwa für die Standards MySQL,<br />
PostgreSQL oder SQLite. Ein Beispiel für<br />
SQLite ist in Listing 3 zu sehen.<br />
Die meisten Statements dürften sich für<br />
alle diejenigen selbst erklären, die schon<br />
124 Ausgabe 06-2011 Admin www.admin-magazin.de
Python<br />
Programmieren<br />
einmal mit einer SQL-Datenbank gearbeitet<br />
haben. Interessant ist die Verwendung<br />
sogenannter Prepared Statements, vor allem<br />
beim Insert in Zeile 12. Insbesondere<br />
bei Webanwendungen ist dies ein Gegenmittel<br />
gegen SQL-Injections. Die Argumente<br />
sind in eine Tupel-Datenstruktur<br />
zu verpacken, was bei einem Tupel mit<br />
nur einem Element zu der etwas eigentümlichen<br />
Schreibweise mit einem abschließenden<br />
Komma führt.<br />
Webverarbeitung<br />
Um mit Webseiten umzugehen, bringt<br />
Python einige nützliche Module mit. So<br />
sind dank der »urllib« nur wenige Zeilen<br />
nötig, um eine Webseite oder eine im Web<br />
gespeicherte Datei herunterzuladen.<br />
import urllib<br />
url = "http://www.spiegel.de"<br />
u = urllib.urlopen(url)<br />
data = u.read()<br />
Die Methode »urlretrieve()« speichert<br />
Webseiten als Datei. Um beispielsweise<br />
den User-Agent-String selbst zu setzen,<br />
leitet man die eigene Klasse vom »Fancy-<br />
URLopener« ab und setzt in ihr die Klassenvariable<br />
»version« auf den gewünschten<br />
Wert. Wer ein großes Webmining-<br />
Projekt plant, sollte daran denken, den<br />
Inhalt der Datei »robots.txt« zu respektieren<br />
und ein gewisses Maß an Vernunft<br />
walten zu lassen. Einen relativ robusten<br />
Parser für das oft nicht korrekte HTML<br />
findet man in Beautiful Soup [5].<br />
Ausblick<br />
Eine Vorstellung der praktischen<br />
Python-Module lässt sich noch endlos<br />
fortsetzen, eine Liste findet sich unter<br />
[6]. Gerade zur Systemverwaltung gibt<br />
es schon eine Reihe Pakete, die bereits<br />
auf Linux-Distributionen installiert sind,<br />
etwa »python‐fstab«, »python‐cups« oder<br />
»python‐xdg«. Wer daran interessiert ist,<br />
sollte einfach mal die Liste der installierten<br />
Pakete durchsehen. Das <strong>ADMIN</strong>-<br />
<strong>Magazin</strong> wird nützliche Module im Rahmen<br />
dieser Python-Reihe regelmäßig<br />
vorstellen, etwa für LDAP, Logdateien,<br />
Virtualisierung und vieles mehr. (ofr) n<br />
Infos<br />
[1] IPython: [http://i python. org]<br />
[2] String-Library:<br />
[http:// docs. python. org/ release/ 2. 6/<br />
library/ string. html]<br />
[3] OS-Modul:<br />
[http:// docs. python. org/ library/ os. html]<br />
[4] Subprocess:<br />
[http:// docs. python. org/ library/<br />
subprocess. html]<br />
[5] Beautiful Soup:<br />
[http:// www. crummy. com/ software/<br />
BeautifulSoup/]<br />
[6] Useful Modules:<br />
[http:// wiki. python. org/ moin/<br />
UsefulModules]<br />
Alles zum ThemA Android<br />
Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />
Neu!<br />
Kennenlernangebot:<br />
3 AusgAben<br />
für nur 3 euro<br />
Jetzt bestellen unter:<br />
www.android–user.de/miniabo<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de
Programmieren<br />
Ruby Environment Manager<br />
Der Ruby Environment Manager (RVM) im Einsatz<br />
Der Verwandlungskünstler<br />
Die Verwaltung mehrerer Ruby-Interpreter und ‐Versionen sowie Gem-Sets zeitgleich auf demselben Rechner<br />
wird mit »rvm« fast zum Kinderspiel Caspar Clemens Mierau<br />
Seit einigen Jahren hat sich Ruby durch<br />
den Erfolg von Rails neben anderen<br />
Skriptsprachen wie PHP, Perl und Python<br />
einen festen Platz in Webhosting-Stacks<br />
gesichert. Wo allerdings mehrere Ruby-<br />
Versionen gleichzeitig genutzt werden,<br />
ergeben sich schnell Probleme.<br />
Zudem wird die Auswahl an möglichen<br />
Ruby-Interpretern und ‐Versionen zunehmend<br />
unübersichtlich. Der klassische<br />
Ruby Interpreter – oft nach seinem Haupt-<br />
Entwickler „Matz’s Ruby Interpreter“<br />
oder kurz MRI [2] genannt – wird durch<br />
Änderungen, die die Rückwärtskompatibilität<br />
brechen, derzeit im 1.8er und 1.9er<br />
Branch gepflegt. Projekte, die auf Ruby<br />
1.8 setzen, nutzen für den Live-Betrieb<br />
nicht selten die um einen verbesserten<br />
Garbage Collector erweiterte Ruby Enterprise<br />
Edition (REE)[3]. Java-nahe und<br />
Performance-kritische Projekte setzen mit<br />
JRuby [4] eine Ruby-Implementation in<br />
Java ein, um etwa in einem Rails-Projekt<br />
von Java-Bindings zu profitieren.<br />
Zugleich gibt es mit Rubygems [5] einen<br />
De-facto-Standard für Erweiterungen,<br />
vergleichbar zu Perl CPAN, PHP Pear<br />
und Python Eggs. Gems werden über ein<br />
eigenes Paketmanagement verwaltet, was<br />
die Arbeit zwar zunächst vereinfacht, bei<br />
mehreren Projekten mit verschiedenen<br />
Gem-Abhängigkeiten aber schnell unübersichtlich<br />
werden kann. Einen Ausweg<br />
aus der komplexen Verschränkung<br />
von Ruby-Interpretern und ‐Versionen<br />
sowie Gems bietet »rvm« [1] mit der Möglichkeit,<br />
projektbasierte Umgebungen zu<br />
pflegen.<br />
Elnur Amikishiyev, 123RF<br />
Die Standard-Installation von »rvm« gestaltet<br />
sich einfach, wenn auch für Administratoren<br />
eher ungewohnt. Wie in der<br />
Ruby-/Rails-Welt nicht selten, wird das<br />
Installationsskript direkt aus dem Netz<br />
ausgeführt. Zuvor müssen lediglich Git<br />
und Curl installiert sein. Unter Debian/<br />
Ubuntu wird das System mit »apt‐get<br />
install curl git‐core« für die Installation<br />
von »rvm« vorbereitet.<br />
Installation<br />
Folgt man der offiziellen Quick Installation<br />
Methode [6], ruft man in einem<br />
Shellfenster direkt ein Skript aus dem<br />
Netz auf: »bash <
Ruby Environment Manager<br />
Programmieren<br />
Daten, kommt vollständig ohne Root-<br />
Rechte aus und ist gegebenenfalls per<br />
»rm ‐rf ~/.rvm« wieder zu entfernen.<br />
Systemweite Installation<br />
Sollen mehrere Benutzer auf RVM zugreifen<br />
können, empfiehlt sich die systemweite<br />
Installation, die wie die benutzerspezifische<br />
Installation gestartet wird,<br />
jedoch per »sudo« oder direkt als Root.<br />
Das Installationsskript erkennt dann,<br />
dass es über die Rechte zur systemweiten<br />
Installation verfügt, und führt sie aus.<br />
EVM wird in »/usr/local/rvm« installiert,<br />
der Befehl »rvm« in »/usr/local/bin/rvm«<br />
per Symlink eingebunden, der Bootstrapper<br />
für Bash und Zsh in »/etc/profile.d/<br />
rvm.sh« abgelegt und die Gruppe »rvm«<br />
gespeichert. Benutzer, die mit »rvm«<br />
arbeiten sollen, müssen Mitglied dieser<br />
Gruppe sein. Die Installationslogik von<br />
RVM hat sich im Laufe des Projekts mehrfach<br />
geändert – je nach Version kann es<br />
zu Abweichungen bei den verwendeten<br />
Pfaden kommen.<br />
Nach einem erneuten Login des Users<br />
zum Auslesen der geänderten Gruppenrechte<br />
und des Bootstrappers steht der<br />
Befehl »rvm« in der Konsole zur Verfügung.<br />
Der Bootstrapper in »/etc/profile«<br />
wird in der Regel von Login-Shells automatisch<br />
ausgeführt, eine manuelle Erweiterung<br />
wie bei der benutzerspezifischen<br />
Installation ist also nicht notwendig.<br />
Erste Schritte<br />
»rvm help« und »man rvm« geben einen<br />
Überblick über die generelle Benutzung.<br />
Je nach gewünschter Ruby-Installation<br />
müssen eventuell noch Abhängigkeiten<br />
erfüllt werden. »rvm requirements«<br />
zeigt je nach Distribution eine Liste mit<br />
Abbildung 2: Die Ausgabe des Kommandos »rvm info« nach dem Wechsel in eine<br />
installierte Version 1.9.2 des MRI.<br />
Besonders hilfreich ist RVM im Umgang<br />
mit Rubygems. Während es mit noch<br />
vertretbarem Aufwand möglich ist, mehrere<br />
Ruby-Versionen nebeneinander zu<br />
betreiben, sprengt spätestens der Umden<br />
erforderlichen<br />
Abhängigkeiten<br />
je Ruby-Version<br />
und deren Auflösung<br />
mit dem jeweils<br />
spezifischen<br />
Paketmanager.<br />
Die »aptget«-Aufrufe<br />
zur Vorbereitung<br />
von klassischen<br />
Ruby- und<br />
etwas exotischeren<br />
JRuby-Installatio<br />
nen zeigt entsprechend<br />
Abbildung<br />
1.<br />
Die Installation<br />
von Ruby-Interpretern<br />
gestaltet<br />
sich nach Erfüllen<br />
der Abhängigkeiten<br />
einfach: »rvm<br />
install ruby‐1.9.2«<br />
installiert den<br />
klassischen Ruby-<br />
Interpreter im aktuellsten<br />
stabilen Patchlevel der Version<br />
1.9.2. Dabei werden die Quellen heruntergeladen<br />
und auf dem Zielsystem kompiliert.<br />
RVM warnt, wenn dazu nötige<br />
Pakete fehlen und gibt die zur Installation<br />
nötigen Kommandos aus, spezifisch nach<br />
Betriebssystem oder Linux-Distribution.<br />
Konfigurationsparameter des eigentlichen<br />
Configure-Skripts können direkt übergeben<br />
werden, etwa »rvm install 1.9.2<br />
‐‐without‐readline«. Auch JRuby und andere<br />
Ruby-Interpreter werden auf diese<br />
Weise installiert, etwa »jruby‐1.6.3« oder<br />
»ree‐1.8.7«. Eine Liste aller über »rvm«<br />
installierbaren Ruby-Derivate und ‐Versionen<br />
erhält man über »rvm list known«.<br />
Hier wird ersichtlich, dass neben der genauen<br />
Angabe eines Patchlevels (wie in<br />
»ruby‐1.8.7‐p352«)<br />
auch die jeweils<br />
aktuellste Version<br />
(»‐head«) oder ein<br />
bestimmter Release-Status<br />
(zum<br />
Beispiel »‐rc1«)<br />
gewählt werden<br />
kann. Beim klassischen<br />
Ruby-Interpreter<br />
kann der<br />
Name weggelassen<br />
werden, sodass<br />
Abbildung 1: Auflistung der Abhängigkeiten per »rvm requirements« zur<br />
Installation verschiedener Ruby-Interpreter auf einem Ubuntu.<br />
auch »rvm install 1.9.2« funktioniert.<br />
Nach erfolgreicher Installation wechselt<br />
man per »rvm use« die Ruby-Umgebung.<br />
»rvm use 1.9.2« führt in die soeben installierte<br />
Version. Die vom System bereitgestellte<br />
Version kann jederzeit per »rvm<br />
use system« wieder aktiviert werden. Der<br />
Wechsel in eine spezifische RVM-Version<br />
ist immer sitzungsspezifisch. Es ist also<br />
problemlos möglich, in zwei verschiedenen<br />
Terminalfenstern zugleich zwei<br />
völlig verschiedene Ruby-Versionen zu<br />
nutzen. Eine genaue Auskunft über die<br />
aktuell verwendete Version erhält man<br />
mit »rvm info«. Abbildung 2 zeigt die<br />
Ausgabe nach dem Wechsel in die installierte<br />
Version 1.9.2. Hier wird auch deutlich,<br />
wie RVM arbeitet: Die Veränderung<br />
der PATH- und weiterer Umgebungsvariablen<br />
ermöglichen den bequemen Wechsel<br />
in andere Umgebungen, ohne auf dem<br />
Dateisystem Änderungen durchführen zu<br />
müssen.<br />
Gem-Sets<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 06-2011<br />
127
Programmieren<br />
Ruby Environment Manager<br />
Fortgeschrittene Ruby-Anwender und<br />
‐Entwickler finden auf der RVM-Webseite<br />
eine Zusammenstellung von Best<br />
Practices und problemspezifischen Lögang<br />
mit verschiedenen Gem-Sets den<br />
Rahmen. Unter einem Gem-Set versteht<br />
man eine spezifische Zusammenstellung<br />
von Gems. Rubygems selbst unterstützt<br />
den parallelen Betrieb mehrerer Versionen<br />
desselben Gems. Rails, das selbst<br />
ein Gem ist, kann theoretisch also nebst<br />
seiner Abhängigkeiten in verschiedenen<br />
Versionen installiert sein. Innerhalb von<br />
Ruby lassen sich dann spezifische Gems<br />
laden. Leider sind Programme jedoch oft<br />
fehlerhaft und laden zum Beispiel immer<br />
die neueste statt einer spezifischen<br />
Version eines Gems, was nicht selten zu<br />
Kompatibilitätsproblemen führt.<br />
Hilfreich ist hier der Ansatz, Gems nicht<br />
mehr beliebig zu installieren, sondern<br />
pro Projekt zu pflegen, um nur die benötigten<br />
Gems vorzuhalten. RVM bietet<br />
hierfür Gem-Sets als Container für spezifische<br />
Zusammenstellungen von Gems<br />
an. »rvm gemset create projekt1« erstellt<br />
ein Gemset »projekt1« in der aktuellen<br />
Umgebung. Nun kann man mit »rvm use<br />
1.9.2@projekt1« in das Gem-Set wechseln.<br />
Alle per »gem install« installierten Gems<br />
werden nur innerhalb dieses Gem-Sets<br />
dieser Ruby-Version ausgerollt. Schneller<br />
kann man per »rvm use 1.9.2@projekt2<br />
‐‐create« gleichzeitig ein Gem-Set erstellen<br />
und hineinwechseln. Benötigt man direkten<br />
Zugriff auf das Gem-Verzeichnis, lässt<br />
man sich den Pfad über »rvm info« oder<br />
»echo $GEM_HOME« anzeigen.<br />
Listing 2: Die wichtigsten RVM-Befehle<br />
01 # zeige benötigte Abhängigkeiten<br />
02 rvm requirements<br />
03 # zeige installierte Interpreter<br />
04 rvm list<br />
05 # Installiere Interpreter<br />
06 rvm install Interpreter_version<br />
07 # zeige aktuelle RVM‐Umgebung<br />
08 rvm info<br />
09 # wechsle Umgebung<br />
10 rvm use Interpreter_version/default/system<br />
11 # aktualisiere RVM<br />
12 rvm get latest/head/VERSION<br />
13 # Entferne Interpreter<br />
14 rvm remove Interpreter_version<br />
15 # zeige Release‐Notes<br />
16 rvm notes<br />
Listing 1: »~/.rvm/gemsets/global.gems«<br />
01 LISTING Default Gem‐Set<br />
02 bundler ‐v~>1.0.0<br />
03 awesome_print<br />
04 shoutbox_client<br />
Über Gem-Sets lassen sich nicht nur Projekte<br />
klar voneinander trennen, sondern<br />
auch neue Gemversionen problemlos testen.<br />
Mit »rvm gemset copy 1.9.2@projekt1<br />
1.9.2@projekt2« werden komplette<br />
Gem-Sets kopiert. Dies ist auch zwischen<br />
verschiedenen Ruby-Versionen möglich.<br />
Ebenso können mit »rvm gemset export/<br />
import« Gem-Sets in einer ».gems«-Datei<br />
gesichert oder aus dieser importiert<br />
werden. Wer auch bei neu angelegten<br />
Gem-Sets immer wieder dieselben Gems<br />
benötigt, kann in »~/.rvm/gemsets/<br />
global.gems« eine Liste von Standard-<br />
Gems pflegen. Sie werden bei Erstellen<br />
neuer Gem-Sets automatisch ausgerollt.<br />
Listing 1 zeigt ein Beispiel.<br />
Konfiguration<br />
RVM wird über »~/.rvmrc« bzw »/etc/<br />
rvmrc« konfiguriert. Die Konfiguration<br />
ist optional, ermöglicht aber das Setzen<br />
spezifischer Compiler-Flags und Pfadangaben.<br />
Eine Liste möglicher Optionen liefert<br />
die Datei »~/.rvm/examples/rvmrc«.<br />
Interessanter ist der Einsatz projektspezifischer<br />
».rvmrc«-Konfigurationen. Der<br />
eingangs erwähnte RVM-Bootstrapper für<br />
Bash und Zsh lädt nicht nur »rvm«, sondern<br />
prüft bei jedem Verzeichniswechsel,<br />
ob im aktuellen Verzeichnis eine<br />
».rvmrc«-Datei vorhanden ist und bietet<br />
nach einmaliger Prüfung an, diese automatisch<br />
zu laden.<br />
Die entsprechende Datei ».rvmrc« kann<br />
bereits bei Erstellung eines Gem-Sets<br />
automatisch im aktuellen Ordner geschrieben<br />
werden: »rvm ‐‐rvmrc ‐‐create<br />
1.9.2@projekt3«. Beim ersten Wechsel<br />
in das Verzeichnis muss einmalig die<br />
Vertrauenswürdigkeit der Datei bestätigt<br />
werden. Danach löst jeder Wechsel in das<br />
Verzeichnis einen automatischen Wechsel<br />
in die entsprechende Ruby-Version<br />
und das Gem-Set aus. Für Entwickler<br />
ergibt sich so eine einfache Möglichkeit,<br />
durch eine gemeinsam bearbeitete<br />
».rvmrc« Ruby-Version den Namen des<br />
Gem-Sets für alle am Projekt Beteiligten<br />
bekanntzumachen. Neue Entwickler erhalten<br />
automatisch die richtige Version.<br />
Einziger Nachteil ist, dass nur Gem-Sets<br />
automatisch erstellt werden – eventuell<br />
nicht vorhandene Ruby-Versionen müssen<br />
einmalig per »rvm install« nachinstalliert<br />
werden.<br />
Letztlich handelt es sich bei der ».rvmrc«<br />
nur um ein Bash-Skript. Ein Blick in die<br />
automatisch erstellte Datei zeigt, dass<br />
hier mit Umgebungsvariablen und Shell-<br />
Logik gearbeitet wird. Es bietet sich also<br />
an, innerhalb der ».rvmrc« weitere Umgebungsvariablen<br />
zu setzen oder das<br />
RVM-Bootstrapping weiter ans Projekt<br />
anzupassen, um zum Beispiel die Verwendung<br />
von 32- oder 64-Bit-Versionen<br />
eines Ruby-Interpreters sicherzustellen.<br />
Integration und Skripting<br />
Benutzt man auf Ruby und Rubygems<br />
aufbauende Dienste wie Passenger, ist<br />
der Einsatz von RVM teils nicht ganz<br />
trivial [7]. Je nach verwendeter Software<br />
muss geprüft werden, wie RVM eingebunden<br />
werden kann. Hilfreich ist oft<br />
die Verwendung absoluter Pfadangaben<br />
zu Ruby-Interpretern. Für jede Ruby-<br />
Version legt RVM symbolische Links an,<br />
die direkt aufrufbar sind. »rvm info« zeigt<br />
die entsprechenden Pfadangaben. Auch,<br />
wenn Pfadangaben wie »/home/ccm/.<br />
rvm/rubies/ruby‐1.9.2‐p290/bin/ruby«<br />
ungewohnt aussehen, verweisen sie auf<br />
eine vollständige Ruby-Installation.<br />
Das Laden von Gem-Sets wird je nach<br />
Dienst über Umgebungsvariablen, Start-<br />
Skripte oder weitere Bootstrapper geregelt.<br />
Für Passenger und Rails3 kann zum<br />
Beispiel eine Datei »config/setup_load_<br />
paths.rb« im Rails-Projekt die entsprechenden<br />
Pfade setzen.<br />
Für den täglichen Einsatz von RVM gibt<br />
es weitere hilfreiche Skripte. Soll ein Befehl<br />
per »sudo« unter Beibehalten der<br />
aktuellen RVM-Umgebung ausgeführt<br />
werden, kann »rvmsudo« als Wrapper<br />
genutzt werden. Für den Einsatz in Shellskripten<br />
bietet »rvm‐shell« als RVM-Bash-<br />
Wrapper die Möglichkeit, auch für nichtinteraktive<br />
Sitzungen den Einsatz von<br />
».rvmrc«-Dateien zu ermöglichen. Für<br />
Cronjobs bietet sich zum Beispiel an, die<br />
Variable »SHELL« auf die entsprechende<br />
RVM-Shell zu setzen, sodass Skripte korrekt<br />
ausgeführt werden.<br />
Ausblick<br />
128 Ausgabe 06-2011 Admin www.admin-magazin.de
Ruby Environment Manager<br />
Programmieren<br />
sungsansätzen [8]. Die Interaktion mit<br />
dem Gem-Bundler wird ebenso diskutiert<br />
wie die Einbindung in Entwicklungsumgebungen,<br />
der Einsatz in Continuous<br />
Integration Systemen wie Hudson und<br />
Auto-Completion in Zsh/Bash.<br />
Ubuntu Oneiric Ocelot (11.10) liefert<br />
als eine der ersten Linux-Distributionen<br />
RVM selbst als Paket aus [9]. Inwieweit<br />
sich der untypische Ansatz von RVM<br />
und das Paketmanagement vertragen,<br />
wird sich erst zeigen müssen. Obwohl<br />
die Auslieferung von RVM als Paket dem<br />
Nutzer die erste Hürde der ungewohnten<br />
Installation nimmt, muss er dafür aber<br />
auf die Verbesserungen der sehr kurzen<br />
RVM-Entwicklungszyklen verzichten.<br />
In automatisierten Server-Landschaften<br />
lässt sich RVM bequem per Puppet ausrollen<br />
und verwalten. Entsprechende<br />
Puppet-Module finden sich auf Github<br />
[10]. Experimentierfreudige können<br />
RVM zum Anlass nehmen, sich mit dem<br />
Scripting Management Framework (SM)<br />
auseinanderzusetzen [11]. Das auch<br />
BDSM genannte System ist ein Skripting-<br />
Framework zur Automatisierung von Servern,<br />
welches weitestgehend die RVM-<br />
Entwickler pflegen.<br />
RVM ist ein komplexer Meta-Paketmanager<br />
für Ruby-Interpreter und Gem-Sets.<br />
Die Implementation in Bash-Skripten und<br />
die geringen Abhängigkeiten von »curl«<br />
und »git‐core« bieten eine vergleichsweise<br />
schlanke, wenn auch komplexe Lösung.<br />
»rvm« ist trotz einiger Schwierigkeiten in<br />
der Handhabung der derzeit am weitesten<br />
verbreitete Ansatz dieser Art in der Ruby-<br />
Welt. Ob man nun am Distributions-Paketmanager<br />
vorbeiinstallieren möchte oder<br />
nicht: Einfacher lässt sich die Verwaltung<br />
kaum übernehmen. (jcb)<br />
n<br />
Infos<br />
[1] RVM: [https:// rvm. beginrescueend. com]<br />
[2] MRI:<br />
[http:// en. wikipedia. org/ wiki/ Ruby_MRI]<br />
[3] Ruby Enterprise Edition:<br />
[http:// www. rubyenterpriseedition. com]<br />
[4] JRuby: [http:// jruby. org]<br />
[5] Ruby Gems: [http:// rubygems. org]<br />
[6] Installations-Möglichkeiten: [https:// rvm.<br />
beginrescueend. com/ rvm/ install]<br />
[7] Passenger: [http:// beginrescueend. com/<br />
integration/ passenger]<br />
[8] RVM-Integration:<br />
[http:// beginrescueend. com/ integration]<br />
[9] RVM-Packages für Ubuntu:<br />
[http:// packages. ubuntu. com/ oneiric/<br />
ruby‐rvm]<br />
[10] RVM und Puppet:<br />
[https:// github. com/ blt04/ puppet‐rvm]<br />
[11] BSDM-Projekt:<br />
[https:// sm. beginrescueend. com]<br />
Der Autor:<br />
Caspar Clemens Mierau ist Medien-Kulturwissenschaftler,<br />
arbeitet an seiner Dissertation<br />
über Entwicklungsumgebungen und berät mit<br />
seinem Projekt Screenage Firmen wie moviepilot.de,<br />
artfacts.net und aperto.de.<br />
Die Linux New Media AG ist das weltweit größte Medienunternehmen rund um Linux und Open Source. Der Verlag produziert eine umfangreiche Reihe an Monatsund<br />
Sonderpublikationen zum Thema Linux, Open Source, Android, und anderen IT-Themen. Zielgruppenorientierte Onlineangebote kennzeichnen einen wichtigen Teil<br />
der Zukunftsstrategie des Unternehmens. Die Linux New Media AG agiert international, ihre Print- und Online-Publikationen erscheinen in fünf Sprachen weltweit.<br />
Wir suchen für die Weiterentwicklung unseres Online-Geschäfts zum nächstmöglichen Zeitpunkt eine/n<br />
Webentwickler (m/w) in Vollzeit<br />
Ihre Aufgaben:<br />
• Weiterentwicklung der bestehenden und Umsetzung neuer Websites unter Einbringung eigener Ideen und Vorschläge.<br />
• Support des Teams bei der Arbeit mit eZ Publish und Magento.<br />
• Unterstützung des Anzeigenteams bei der Verwaltung und Planung von Eigen- und Kundenkampagnen in OpenX<br />
Ihr Profil:<br />
• Gute Kenntnisse in PHP, objektorientierter Programmierung sowie Webservices<br />
• Sie verfügen über Kenntnisse in einem oder mehreren der folgenden Bereiche:<br />
- Programmierung von Templates und Erweiterungen für das CMS eZ Publish,<br />
oder die Bereitschaft sich kurzfristig und weitgehend selbständig darin einzuarbeiten. Erfahrungen<br />
mit der Smarty Template Engine erleichtern den Einstieg.<br />
- Entwicklung von Designs und Plug-Ins für Magento<br />
- Kenntnisse in XML und XSLT<br />
• Erfahrungen mit anderen PHP-basierten Content Management Systemen sind von Vorteil<br />
• Versierter Umgang mit MySQL<br />
• HTML-, CSS-, JavaScript-Entwicklung unter Berücksichtigung der Kompatibilität mit den wichtigen<br />
Webbrowsern<br />
• Versierter Umgang mit Subversion und anderen Versionskontrollsystemen sowie mit Bugtracking-<br />
Systemen<br />
• Von Vorteil sind Kenntnisse weiterer Webtechnologien wie Rails, Zope, Perl oder Java.<br />
• Englischkenntnisse in Wort und Schrift werden vorausgesetzt<br />
Ihr Arbeitsplatz ist am Verlagsstandort in München<br />
Können Sie sich dafür begeistern, kreative<br />
Lösungen zu suchen und im Kontakt mit einem<br />
jungen, dynamischen Team etwas Neues<br />
aufzubauen?<br />
Wenn ja, bewerben Sie sich mit Beispielen<br />
Ihrer bisherigen Tätigkeit im Bereich<br />
Webentwicklung und Ihren Gehaltsvorstellungen<br />
bei:<br />
Linux New Media AG<br />
Frau Liane Ganguin<br />
Putzbrunner Str. 71<br />
81739 München<br />
Tel.: 089 / 99 34 11 -00<br />
E-Mail: bewerbung-web@linuxnewmedia.de<br />
Mehr Infos unter:<br />
www.linux-magazin.de/Webentwickler
Service<br />
Impressum und <strong>Vorschau</strong><br />
Impressum ISSN 2190-1066<br />
<strong>ADMIN</strong>-<strong>Magazin</strong><br />
eine Publikation der Linux New Media AG<br />
Redaktionsanschrift Putzbrunner Straße 71<br />
81739 München<br />
Tel.: 0 89/99 34 11-0<br />
Fax: 0 89/99 34 11-99 oder -96<br />
Internet<br />
www.admin-magazin.de<br />
E-Mail<br />
redaktion@admin-magazin.de<br />
Geschäftsleitung<br />
Chefredakteure<br />
Redaktion<br />
News/Report<br />
Software/Test<br />
Security/Networking<br />
Ständige Mitarbeiter<br />
Produktionsleitung<br />
Grafik<br />
Abo-Infoseite<br />
Abonnenten-Service<br />
Brian Osborn (Vorstand), bosborn@linuxnewmedia.de<br />
Hermann Plank (Vorstand), hplank@linuxnewmedia.de<br />
Oliver Frommel (V.i.S.d.P.),<br />
ofrommel@admin-magazin.de (ofr)<br />
Jens-Christoph Brendel<br />
jbrendel@admin-magazin.de (jcb)<br />
Ulrich Bantle (Ltg.), ubantle@linuxnewmedia.de (uba)<br />
Mathias Huber, mhuber@linuxnewmedia.de (mhu)<br />
Marcel Hilzinger, mhilzinger@linuxnewmedia.de, (mhi)<br />
Kristian Kißling, kkissling@linuxnewmedia.de, (kki)<br />
Markus Feilner, mfeilner@linuxnewmedia.de (mfe)<br />
Thomas Leichtenstern, tleichtenstern@linuxnewmedia.de (tle)<br />
Elke Knitter (Schlussredaktion),<br />
Carsten Schnober, Tim Schürmann, Claudia Thalgott<br />
Christian Ullrich, cullrich@linuxnewmedia.de<br />
Kristina Fleischer, Judith Erb<br />
Titel: Judith Erb, Bildmaterial: mipan, 123RF<br />
www.admin-magazin.de/abo<br />
Lea-Maria Schmitt<br />
abo@admin-magazin.de<br />
Tel.: 07131/27 07 274, Fax: 07131/27 07 78 601<br />
Preise Print Deutschland Österreich Schweiz Ausland EU<br />
Einzelheft € 9,80 € 10,80 Sfr 19,60 (siehe Titel)<br />
Mini-Abo (2 Ausgaben) € 9,80 € 10,80 Sfr 19,60 (siehe Titel)<br />
Jahres-DVD (Einzelpreis) € 14,95 € 14,95 Sfr 18,90 € 14,95<br />
Jahres-DVD (zum Abo 1 ) € 6,70 € 6,70 Sfr 8,50 € 6,70<br />
Jahresabo € 49,90 € 54,90 Sfr 99,90 € 59,90<br />
Preise Digital Deutschland Österreich Schweiz Ausland EU<br />
Heft-PDF Einzelausgabe € 9,80 € 9,80 Sfr 10,71 € 9,80<br />
DigiSub (6 Ausgaben) € 44,90 € 44,90 Sfr 49,05 € 44,90<br />
DigiSub (zum Printabo) € 6,— € 6,— sfr 6,— € 6,—<br />
HTML-Archiv (zum Abo 1 ) € 48,— € 48,— sfr 48,— € 48,—<br />
Preise Kombiabos<br />
Profi-Abo 2 € 136,60 € 151,70 Sfr 259,90 € 165,70<br />
1<br />
nur erhältlich in Verbindung mit einem Jahresabo Print oder Digital<br />
2<br />
mit Linux-<strong>Magazin</strong>-Abo und beiden Jahres-DVDs<br />
Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises oder einer aktuellen<br />
Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei Verlängerung neu zu erbringen. Andere Abo-<br />
Formen, Ermäßigungen im Ausland etc. auf Anfrage.<br />
Adressänderungen bitte umgehend mitteilen, da Nachsendeaufträge bei der Post nicht für Zeitschriften gelten.<br />
Pressemitteilungen info@admin-magazin.de<br />
Anzeigen/Repräsentanz<br />
Es gilt die Anzeigenpreisliste vom 01.01.2010<br />
National<br />
Petra Jaser<br />
Tel.: 089/99 34 11 24, Fax: 089/99 34 11 99<br />
E-Mail: anzeigen@admin-magazin.de<br />
Pressevertrieb MZV, Moderner Zeitschriften Vertrieb GmbH<br />
Breslauer Straße 5, 85386 Eching<br />
Tel.: 089/31906-0, Fax: 089/31906-113<br />
Druck<br />
Vogel Druck und Medienservice GmbH<br />
97204 Höchberg<br />
Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung für die Unix-ähnlichen Betriebssysteme<br />
verschiedener Hersteller, zum Beispiel Eurix (Comfood), Ultrix (Digital Equipment), HP/UX (Hewlett-Packard) oder Sinix<br />
(Siemens) benutzt, nicht als die Bezeichnung für das Trademark von X/Open. Linux ist eingetragenes Marken zeichen von<br />
Linus Torvalds und wird in unserem Markennamen mit seiner Erlaubnis verwendet. Alle anderen Marken sind Eigentum<br />
der jeweiligen Inhaber. Eine Haftung für die Richtigkeit von Veröffentlichungen kann trotz sorgfältiger Prüfung durch<br />
die Redaktion vom Verlag nicht übernommen werden. Mit der Einsendung von Manu s kripten gibt der Verfasser seine<br />
Zustimmung zum Abdruck im Admin-<strong>Magazin</strong>. Für unverlangt ein gesandte Manuskripte kann keine Haftung übernommen<br />
werden. Die Redaktion behält sich vor, Artikel zu kürzen. Das Exklusiv- und Verfügungsrecht für angenommene<br />
Manuskripte liegt beim Verlag. Es darf kein Teil des Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in<br />
irgendeiner Form vervielfältigt oder verbreitet werden. Copyright © 1994–2011 Linux New Media AG<br />
Inserentenverzeichnis<br />
1&1 Internet AG http://www.einsundeins.de 14<br />
<strong>ADMIN</strong> http://www.admin-magazin.de 93<br />
Android User GY http://www.android-user.de 125<br />
Fernschule Weber GmbH http://www.fernschule-weber.de 91<br />
Galileo Press http://www.galileo-press.de 31<br />
German Unix User Group (GUUG) e.V. http://www.guug.de 83<br />
Hetzner Online AG http://www.hetzner.de 2<br />
Hostserver GmbH http://www.hostserver.de 132<br />
In-Depth Security Conference https://deepsec.net 35<br />
Kamp Netzwerkdienste GmbH http://www.kamp.net 23<br />
Linux New Media AG http://www.linuxnewmedia.de 129<br />
Linux-Hotel http://www.linuxhotel.de 13<br />
Linux-<strong>Magazin</strong> http://www.linux-magazin.de 131<br />
Linux-<strong>Magazin</strong> Academy http://academy.linux-magazin.de 107, 117<br />
Linux-<strong>Magazin</strong> Online http://www.linux-magazin.de 115<br />
Netclusive GmbH http://www.netclusive.de 9<br />
NETHINKS GmbH http://www.nethinks.com 59<br />
outbox AG http://www.outbox.de 57<br />
OVH GmbH http://www.ovh.de 7<br />
pascom GmbH & Co.KG http://www.pascom.net 11<br />
Pluspol GmbH http://www.pluspol.de 61<br />
PlusServer AG http://www.plusserver.de 20, 32, 46, 100<br />
Spenneberg Training & Consulting http://www.spenneberg.com 53<br />
Stern & Schatz GmbH http://www.getdigital.de 25<br />
Thomas Krenn AG http://www.thomas-krenn.com 17<br />
Vogel IT-Medien GmbH http://www.vogel.de 45<br />
Vollmar.net http://www.vollmar.net 27<br />
Einem Teil dieser Ausgabe liegt eine Beilage der Firma OVH GmbH (http://www.ovh.de)<br />
bei. Wir bitten unsere Leser um freundliche Beachtung.<br />
Autoren dieser Ausgabe<br />
Alex Davies Auf der Liste 34<br />
Thomas Drilling Fundament für Teamarbeit 94<br />
Thomas Drilling Rettungsinsel 62<br />
Prof. Dr. Stefan Edlich NoSQL 48<br />
Werner Fischer Hirnforschung 114<br />
Dr. Neil Gunther Berechenbare Performance 72<br />
Thomas Joos Flusskontrolle 28<br />
Thomas Joos Gekachelt 58<br />
Thomas Joos Stellschraube 118<br />
Eva-Katharina Kunst Eingedost 68<br />
Martin Loschwitz Aus der Werkstatt 102<br />
Martin Loschwitz Die Speicherwolke 84<br />
Hans-Peter Merkel Table Dance 109<br />
Caspar Clemens Mierau Der Verwandlungskünstler 126<br />
Alessandro Osaria Auf der Liste 34<br />
Jürgen Quade Eingedost 68<br />
Thorsten Scherf Aufzucht 18<br />
Kurt Seifried Weitgehend heiter? 70<br />
Ralf Spenneberg Wie viel darf’s denn sein? 90<br />
VORSCHAU<br />
norebbo, 123RF<br />
<strong>ADMIN</strong> 01/2012 erscheint am 12. JANUAR 2012<br />
Monitoring<br />
Die eigene Systemlandschaft zu<br />
überwachen hilft dabei, Probleme<br />
frühzeitig zu erkennen. Die kommende<br />
<strong>ADMIN</strong>-Ausgabe gibt einen Überblick<br />
über Monitoring-Software und verrät,<br />
worin sich die zahlreichen Nagios-Forks<br />
unterscheiden.<br />
BSD-Firewall<br />
Ein Blick über den Tellerrand<br />
schadet nicht. Und so nehmen<br />
wir im kommenden Heft die<br />
auf FreeBSD basierende Firewall<br />
pfSense unter die Lupe,<br />
die mit Features wie Hochverfügbarkeit<br />
beeindruckt.<br />
Yuri Arcurs, Fotolia<br />
130 Ausgabe 06-2011 Admin www.admin-magazin.de
JETZT<br />
MiT dVd!<br />
MAGAZIN<br />
SondErAkTion<br />
Testen Sie jetzt<br />
3 Ausgaben<br />
für 3 Euro!<br />
Jetzt schnell bestellen:<br />
• Telefon 07131 / 2707 274<br />
• Fax 07131 / 2707 78 601<br />
• E-Mail: abo@linux-magazin.de<br />
• Web: www.linux-magazin.de/probeabo<br />
Mit großem Gewinnspiel unter:<br />
www.linux-magazin.de/probeabo<br />
GEwinnEn SiE... EinE Von fünf rEwind Mini hd<br />
kAMErAS iM GESAMTwErT Von fAST 400 Euro!<br />
Einsendeschluss ist der 15.12.2011<br />
zur Verfügung gestellt von<br />
.de
Managed<br />
Hosting<br />
sicher, flexibel und<br />
verfügbar<br />
Profitieren Sie von:<br />
aktueller Clustertechnologie<br />
ISO 27001 zertifiziertem<br />
Hochsicherheits-Datacenter<br />
Hosting direkt am DE-CIX<br />
IPv4 und IPv6 Anbindung<br />
24/7 Service und Support<br />
Entdecken Sie den Unterschied<br />
Professionelles Hosting mit persönlichem<br />
und kompetentem Support.<br />
Individuelle Hostinglösungen vom Server<br />
bis zum Clustersystem. Beratung, Planung<br />
und Service 24/7.<br />
Wir bieten über 10 Jahre Erfahrung in<br />
Hosting und Systemadministration.<br />
Für mehr Performance, Sicherheit und<br />
Verfügbarkeit, jeden Tag, rund um die Uhr.<br />
hostserver.de/hosting<br />
0 30 / 420 200 24 hostserver.de<br />
Berlin Marburg Frankfurt am Main