25.02.2014 Aufrufe

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 / LPIC­1<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 / LPIC­2<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 3­5<br />

48565 Steinfurt<br />

Tel.: 02552 638755<br />

Fax: 02552 638757<br />

Weitere Informationen unter www.os­t.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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!