“A Day in the Life of Facebook Operations” bezeichnete Tom Cook, System Engineer von Facebook seinen Vortrag auf der “Velocity 2010″ Er liefert dabei interessante Einblicke in den Aufbau der Server und Services, auf Open-Source Basis.
Da Facebook mittlerweile mehrere 10.000 Server hinter einem gigantischen Load Balancer System im Einsatz hat, ist es eine große Herausforderung diese alle zu Verwalten und auf den aktuellen Stand (Patches, Security Fixes, …) zu halten. Tom Cook erläutert in seinem ca. 40 minütigen Vortrag den grundlegenden Aufbau von Facebook. Hier einige wichtige Fakten und Komponenten aus der Sicht eines Systemadministrators.
Betriebsystem:
Facebook setzt ausschließlich auf Linux. Verwendet wird eine CentOS 5 Version mit einem modifizierten 2.6er Kernel
HipHop for Php ist ein SourceCode Transformer, welcher PHP in einen performanceoptimierten und kompilierten C++ Code verwandelt. Enwickelt wird das System von 3 Facebook Engineers auf Open-Source Basis. Durch die Einführung von HipHop wurde die WebServerlast von Facebook um beachtliche 50% Reduziert.
Memcached
Ist ein Open Source Cache-Server der häufig verwendete Abfragen (insbesondere SELECT Statements) vom Datenbankserver im Arbeitsspeicher abspeichert und dadurch Festplattenzugriffe bzw. Datenkbankzugriffe stark reduziert. Memcached hält für Facebook derzeit über 300+ TB live Daten im RAM.
Configuration Management:
CFengine 2.x.x
ist eine zentrale Configurations Management Software um viele (mehrere 10.000) Systeme auf den gleichen Softwarestand zu bringen und zu aktualisieren. Dieser Vorgang wird alle 15 Minuten für ALLE Server ausgeführt. So können zentral über 100 Policies welche einige 1000 Regeln beinhalten innerhalb von 30 Sekunden bei allen Servern auf den neuesten Stand gebracht werden.
Monitoring:
Hierbei setzt man ebenfalls auf bekanntere System wie Ganglia, Nagios und ODS (Operational Data Store),
WebPush:
Das Verteilen von neuen Inhalten, Features und Patches für Facebook.com wird über einen internen BitTorrent Server realisiert. Es dauert so ungefähr eine Minute bis der neue Code für Facebook.com auf mehreren 10.000 Servern verfügbar ist. Folgende Zyklen werden dabei verwendet
1x pro Woche für neue Features
1x pro Tag für Code Änderungen an der Hauptseite
mehrere male am Tag für Bugfixes und Patches
Das Passwort eines MySQL Users in der Kommandozeile zu ändern ist eigentlich ein ziemlich simpler Vorgang. Da ich mir den Befehl aber selber nie merken kann schreibe ich ihn hier auf:
Mit folgenden Befehl auf der MySQL Serverkonsole anmelden
mysql -u root -p
Die Datenbank mysql auswählen
use mysql;
Passwort mit folgendem Befehl ändern (dein-neues-passwort und dein-user durch ein entsprechendes Passwort bzw. Usernamen ersetzten)
update user set password=PASSWORD("dein-neues-passwort") where User='dein-user';
Sequel Pro ist ein OpenSource MySQL Management Tool für den MAC, welches einige nützliche Extras, wie das SSH-Tunneling besitzt.
Sequel Pro ist ein sehr hilfreiches Tool für jeden Webentwickler und (Datenbank)Administratoren, die viel mit MySQL Datenbanken zu tun haben. Im Bereich von MAC OS X gibt es leider sehr wenig Tools, welche diese Funktionen bieten und noch dazu OpenSource sind. Aufgebaut ist Sequel Pro auf das bekannte Tool CacoaMySQL, welches sein einiger Zeit nicht mehr weiterentwickelt wurde. Die Funktionen wurden jedoch um einiges erweitert und die Oberfläche grundlegend überarbeitet.
MySQL Datenbank Zugriff via SSH Tunnel
Das Besondere an Sequel Pro ist die Möglichkeit auf MySQL Datenbanken via SSH Tunnel zuzugreifen. Es muss somit von extern keine Verbindung mehr zugelassen werden, sondern man kann bequem per SSH auf die lokale Datenbank eines Servers zugreifen. Die Verbindungen können natürlich auch als Favoriten abgespeichert werden, damit beim nächsten mal der Zugriff schneller stattfindet.
Ein weiteres MySQL Problem, welches mir schon des öfteren über den Weg gelaufen ist: “ERROR 1045: Access denied for user ‘debian-sys-maint’@'localhost’” Ich will Euch hier kurz das Problem + Lösung erläutern
Das Problem
Debian hat einen eigenen Account (debian-sys-maint) für das Starten/Stoppen und Status checken von MySQL. Diese Userinformationen + Passwort werden in der Datei /etc/mysql/debian.cnf abgelegt. Nach einer Neuinstallation von MySQL, oder der Migrierung von einer Datenbank inklusive Usertabellen auf ein neues System stimmt das Passwort für den User nicht mehr überein:
/etc/init.d/mysql start
Starting MySQL database server: mysqld ..
Checking for corrupt, not cleanly closed and upgrade needing tables..
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
nvieking1:/# ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
Die Lösung
Die Datei /etc/mysql/debian.cnf öffnen und das Passwort für den User debian-sys-maint auslesen und kopieren.
Mit dem root User auf die Datenbank verbinden:
mysql -u root -p
Das Passwort des Users debian-sys-maint mit folgendem Befehl ändern (<<passwort>> ist mit dem ausgelesenen Passwort zu ersetzen):
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘debian-sys-maint’@'localhost’ IDENTIFIED BY ‘<<passwort>>’ WITH GRANT OPTION;
Nun könnt ihr eure MySQL Datenbank wieder starten.
/etc/init.d/mysql start
Starting MySQL database server: mysqld ..
Checking for corrupt, not cleanly closed and upgrade needing tables..
Ich hatte bereits mehrmals den Error: “Can’t open file (errno: 24) when using LOCK TABLES”, wenn ich bei größeren MySQL Datenbanken einen Dump machen wollte. Im Besonderen bei größeren WordPress/Buddypress Projekten. Ich will Euch hier kurz das Problem + Lösung vor Augen führen.
Das Problem:
Der Befehl “mysqldump” kann keine Datenbanken mit mehr als 330 Tabellen dumpen, und das stellt gerade bei Datenbanken mit sehr vielen Tabellen, wie WordPress/Buddypress ein großes Problem dar. Das Problem dabei ist, dass MySQL versucht, zu viele Dateien gleichzeitig offen zu halten.
mysqldump: Got error: 1016: Can't open file: './wordpress/wp_user_645_friends_activity_cached.frm' (errno: 24) when using LOCK TABLES
Die Lösung:
Einfach den Dumpbefehl um folgendes Argument ergänzen: –lock-tables=false
Bei mir sieht dann der Befehl für ein gesamtes Datenbankbackup wie folgt aus:
mysqldump -u user -p password --opt --all-databases --lock-tables=false > /usr/databasebackup/mysql_dump.sql
Die wichtigsten Themen der letzten Woche im Überblick
Microsoft bestätigt Lücke in Internet Information Server:
Durch einen Fehler in der WebDAV-Funktion beim Dekodieren von URLs mit Unicode-Zeichen ist es möglich, die Authentifizierungsfunktionen auszuhebeln und auf geschützte Ordner und Dateien im Kontext des standardmäßig eingerichteten anonymen Users-Kontos zuzugreifen. Laut Microsoft hat dieser Nutzer in den Default-Einstellungen keine Schreibrechte auf dem Server, sodass sich entgegen dem ursprünglichen Bericht wohl doch keine Dateien auf dem Server durch die Lücke ablegen lassen. Heise
Wolfram Alpha: Startschuss für die Antwortmaschine:
Die Antwortmaschine Wolfram Alpha hat am Samstag ihr Suchfeld aktiviert. Wolfram Alpha soll Fragen beantworten, die teilweise noch nie gestellt wurden. Die Maschine wird als größter Gegenspieler von Google gehandelt und hat seit der Ankündigung im März für reges mediales Interesse gesorgt. DiePresse
Nagios-Chefentwickler enttäuscht über Fork
Nagios-Hauptentwickler Ethan Galstad hat sich in einem Blogeintrag enttäuscht über den kürzlich entstandenen Fork der freien Serverüberwachung geäußert. Die Entwickler hätten ihm diesen Fork nicht angekündigt. Dennoch hält er den Fork für “eines der besten Dinge, die Nagios je passiert sind.” Golem
Open Database Alliance will MySQL weiterbringen
Die Gründung der Allianz ist eine direkte Reaktion auf die Ankündigung von Oracle, Sun kaufen zu wollen. Auch wenn die Übernahme noch endgültig genehmigt werden muss, bedeutet sie in den Augen vieler MySQL-Anwender eine erhebliche Unsicherheit für die Zukunft von MySQL. Zudem gab es schon, nachdem im Januar 2008 Sun MySQL gekauft hatte, einige Kritik an der Leitung der MySQL-Entwicklung, sogar von Michael »Monty« Widenius, einem der Gründer von MySQL, selbst. Widenius, ebenso wie der MySQL-Mitgründer David Axmark, haben inzwischen Sun verlassen. pro-linux
Kumo – Neue Suchmaschine von Microsoft
Wie das “Wall Street Journal” (“WSJ”) am Dienstag (Ortszeit) berichtet hat, wird Microsoft in der kommenden Woche seine neue Suchmaschine vorstellen. Intern sei das Projekt unter dem Namen “Kumo” gelaufen, so das Blatt unter der Berufung auf Insider. Microsoft hat die Angaben nicht bestätigt. futurezone
Ich möchte in diesem Guide beschreiben wie ihr unter Debian 5 – Codename “Lenny” und Ubuntu einen voll funktionsfähigen Webserver mit php, mysql, und Java Support in wenigen Schritten installieren könnt.
Paketlisten aktualisieren
Um zu gewährleisten, das ihr auch die richtigen, und aktuellen Pakete erhaltet, ist zu empfehlen mit folgendem Befehl eure Paketlisten upzudaten:
apt-get update
Installation des Apache Webserver (Version 2.2)
Mit folgendem Befehl wir der standard Apache Server 2.2 ohne zusätzliche Module installiert und gleich gestartet. Wir haben somit bereits einen lauffähigen Webserver, der HTML Dateien wiedergeben kann.
apt-get install -y apache2
Um dies zu testen, könnt ihr in einem Browser die IP eures Servers eingeben. Die Standard Webseite des Apache ( /var/www/index.html ) wird aufgerufen und sagt euch nur: It works!
Installation der PHP module für Apache
Da uns die Ausführung von stinknormalen html Dateien nicht reicht, und wir natürlich auch php Files ausführen möchten, installieren wir folgende Pakete zum Apache Webserver hinzu.
Als ganz großen Tipp für die Beschleunigung von PHP unter Apache empfehle ich eAccelerator, über den ihr Hier einen Guide findet.
Installation der MySQL Datenbank
Wenn ihr auf eurem Server mit Datenbanken arbeiten wollt, bzw. Datenbanken zur Verfügung stellen möchtet, dann wird der MySQL-Server mit folgenden Paketen installiert.
apt-get install -y mysql-server php5-mysql
Während dem Installationsvorgang werdet ihr in einem blau hinterlegtem Bildschirm dazu aufgefordert, das MySQL-Root Passwort zu setzen. Ich empfehle, dies auch zu tun.
Nach der Bestätigung des Passworts ist die Installation des MySQL Servers abgeschlossen. › Continue reading