KVM Benchmark: Apachebench, IOzone, Graphics Magick
Update 20100115: Bezügl. I/O-Performance und dem qcow2-Format, sollte man das hier noch lesen: Features/KVM qcow2 Performance . Seit Qemu/KVM 0.11.0 hat sich da einiges getan. Vorraussetzung für die bessere Performance ist aber, das man das qcow2-Image mit Qemu >= Version 0.11.0 erzeugt hat. Es kann also durchaus Sinn machen, ein altes Image in ein Neues zu konvertieren.
Ich habe in den letzten Tagen auf einem HP DL 380 G6 Server ein paar Benchmarks mit der Linux Kernel Virtual Maschine (KVM) gemacht. Ich persönlich nutze die KVM schon seit fast zwei Jahren und produktiv laufen aktuell über 40 VMs. Die Stabilität und die Performance hat sich in den letzten Releases sehr gut entwickelt und die Entwicklung geht sehr schnell voran.
Der Host und der Gast liefen mit Gentoo und Kernel 2.6.31.1. Der Host hat folgende Komponeten eingebaut:
2 x Intel Xeon CPU L5520 - 2 Quad-Processors (static performance, VT-d, Hyperthreading eingeschaltet in BIOS)
8 x 300 GB SAS 10k Festplatten (RAID 10)
24 GB RAM
(Einige) Host (kernel) Einstellungen:
I/O scheduler: deadline
Filesystem: xfs
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_RING=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
(Einige) Gast (Kernel) Einstellungen:
I/O scheduler: deadline/cfq (siehe unten)
Filesystem: ext3 (datamode=ordered/writeback [siehe unten])
VIRTIO Network (VIRTIO_NET) und Block (VIRTIO_BLK) Treiber verwendet.
Der Gast ist ein qcow2-Image, welches ich vorher mit "dd" erweitert habe, damit es für den IO Test groß genug ist und nicht erst während des Tests erweitert wird (was die Werte total verfälscht hätte).
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_PARAVIRT_SPINLOCKS=y
KVM Startup Optionen (die Wichtigsten):
-m "variabel-siehe unten"
-smp "variabel-siehe unten"
-cpu host
-daemonize
-drive file=/data/kvm/kvmimages/gfs1.qcow2,if=virtio,boot=on
-net nic,vlan=104,model=virtio,macaddr=00:ff:48:23:45:4b
-net tap,vlan=104,ifname=tap.b.gfs1,script=no
-net nic,vlan=96,model=virtio,macaddr=00:ff:48:23:45:4d
-net tap,vlan=96,ifname=tap.f.gfs1,script=no
Da wir KVM hauptsächlich für Webserver benötigen, habe ich Benchmarks mit Apachebench, Graphics Magick und IOzone erstellt:
Apachebench mit 4 GB RAM, CFQ Scheduler, 1/2/4/8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-3428/
Apachebench mit 2 GB RAM, CFQ Scheduler, 1/2/4/8 vProcs verglichen mit dem Host:
http://www.tauceti.net/kvm-benchmarks/merge-6053/
Mich hat hier u.a. interessiert, ob mehr RAM mehr Durchsatz bringt und ob mehrere virtuelle Prozessoren skalieren. Wenn man die 2xQuadCore + Hyperthreading mit den 8 virtuellen Prozessoren (vProcs) vergleicht, dann kann die KVM hier mithalten. Die Speichergröße spielt keine Rolle.
Graphics Magick resize mit 4 GB RAM, CFQ scheduler, 1/2/4/8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-5214/
Graphics Magick resize mit 2 GB RAM, CFQ scheduler, 1/2/4/8 vProcs verglichen mit dem Host (the hp380g6 graph):
http://www.tauceti.net/kvm-benchmarks/merge-7186/
Mit 8 vProcs ist die KVM ungefähr 10% langsamer. Mehr Speicher scheint auch hier nicht zu helfen.
Der folgende IOzone Test lief mit der KVM-Option cache=none. In diesem Fall ist alleine der Host für's Wegschreiben der Daten verantwortlich. Das erscheint mir aktuell immer noch die sicherste Option zu sein, um die Datenintegrität des KVM-Images und der Filesysteme in der KVM sicher zu stellen. Allerdings bremst das die Performance:
IOzone Schreibtest (write) mit 2 GB RAM, CFQ scheduler, ext3 Filesystem und datamode=ordered, 1/2/4/8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-3564/
IOzone Schreibtest (write) mit 2 GB RAM, deadline scheduler, ext3 Filesystem und datamode=ordered, 1/2/4/8 vProcs:
http://www.tauceti.net/kvm-benchmarks/merge-4533/
Wie man sieht, bringt das Austauschen des Schedulers ungefähr 10-15 MByte/s mehr an Durchsatz. Die CPU-Auslastung habe ich aber nicht überprüft während des Tests.
Die folgenden IOzone Tests liefen ohne cache-Option und somit mit dem Defaultwert writethrough:
IOzone Schreibtest (write) mit 2 GB RAM, deadline scheduler, ext3-Filesystem und writeback (siehe Testseite), 8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-7526/
Die Zahlen sind relativ beeindruckend. Die KVM kann eigentlich fast immer - mit den entsprechenden Einstellungen - mit dem "echten" Host mithalten in diesen Tests. Den Netzdurchsatz müsste man jetzt noch messen, dann wäre der gesamte Benchmark schon fast vollständig.
Posted at 11:32nachm. Okt. 06, 2009 by cetixx in Tipps | Kommentare [3]
Firefox und Thunderbird unter KDE 4
Wer sich schon öfter mal darüber geärgert hat, das Firefox und Thunderbird nicht so wahnsinnig toll aussehen, wenn sie unter KDE laufen, dem kann geholfen werden. Grundsätzlich liegt das daran, das die beiden Apps GTK-Anwendungen sind und damit GUI-Elemente haben, die eben etwas anders aussehen, wie man das von einer KDE-Anwendung gewohnt ist.
Unter Gentoo installiert man das Paket gtk-engines-qt (heisst bei anderen Distributionen ähnlich). Dann KDE durchstarten. Anschließend kann man in KDE die System Settings aufrufen und dort dann den Button Apearance auswählen (sorry, kenne nur die englischen Bezeichnungen dafür...). In der linken Spalte sieht man dann jetzt GTK Styles and Fonts. Wenn man dort Use my KDE style in GTK applications auswählt, hat man das, was man braucht :-)
Posted at 04:03vorm. Juli 28, 2009 by cetixx in Tipps | Kommentare [0]
PostgreSQL-Replikation mit Londiste und SkyTools - Teil 1
Warum SkyTools / Londiste? Ich war auf der Suche nach einer Replikationslösung, die mir einfach die Daten von einer Master-DB auf eine Slave-DB kopiert. Die Slave-DB ist read-only. Man muss grundsätzlich vorwegnehmen, das es unter Postgres leider keinen Replikationsmechanismus gibt, wie ihn die MySQL hat. Dort werden die Transaktionslogs auf dem Slave nachgefahren. D.h. das wirklich alle Statements auch auf dem Slave ausgeführt werden inkl. aller DDL-Statements (also sowas wie CREATE TABLE). Das ist bei (fast) keiner Replikationslösung, die es unter Postgres gibt, der Fall. Ich vermute mal, das das PGCluster macht, welcher auch Multimaster-Replikation unterstützt. Zu dieser Lösung habe ich aber kein Vertrauen, da im Supportforum keiner der Entwickler antwortet. Ausserdem ist der PGCluster oder auch PGCluster-II (wird wohl eh nie erscheinen) immer eine speziell angepasste Version von Postgres und hängt der Entwicklung immer hinterher (und aktuell schon ziemlich...). Ich mag keine so reingeschusterten Sachen. Dann gibt es noch den CyberCluster, der in eine ähnliche Kategorie fällt und auf PGCluster aufbaut, aber auch so seine Probleme hat, wie ich mal auf der Postgres-Mailingliste erfahren habe.
Dann gibt es noch Tools, die soz. Statements replizieren auf zwei oder mehrere Datenbanken und wie ein vorgeschalteter Proxy arbeiten, mit dem sich die Clients verbinden. pgpool-II gehört da dazu. Aber was mach ich, wenn eine Node ausfällt? Die Daten bei dieser Art Replikation müssen zwangsläufig auseinander laufen, wenn eine DB ausfällt. Eine Antwort darauf gibt Gerd Koenig in pgpool-II for beginners (PDF). Das ist an sich schon mal nicht schlecht, aber diese Methode benötigt eigentlich fast schon ein komplettes Recovery der DB, damit die Datenbanken wieder konistent werden.
Dann gibt's noch Bucardo. Da ist zwar der Entwickler sehr aktiv, aber mir gefällt das dahinterliegende Konzept gar nicht, mit rsync irgendwelche Daten durch die Gegend zu kopieren. Prinzipiell handelt es sich hierbei um eine Multi-Master-Replikation.
Weiterhin hätten wir noch den Mammoth Replicator. Der war mal kommerziell und ist jetzt OpenSource. Hier kann man auch Support von Enterprise DB kaufen. Bin ich aber auch nicht so wirklich überzeugt von dem Konzept.
Bleiben grob noch zwei Tools: Slony-I und Londiste.
Slony-I ist schon irgendwie das Schweizer Taschenmesser und Urgestein unter den Replikationslösungen - nur ungleich komplizierter zu bedienen. Und das war für mich dann auch der Grund, es mit Londiste/SkyTools zu versuchen, welches die Skype-Entwickler als OpenSource veröffentlich haben und das teilweise in Python geschrieben ist - was gleich noch viel mehr für die Lösung spricht ;-)
Hier mal eine Übersicht über die wichtigsten Links bezügl. Londiste/SkyTools:
SkyTools Download:
Londiste ist ein Teil der SkyTools. Version 2.1.9 ist gerade aktuell. Diese Version kann man sich auf pgFoundry downloaden. Da ich aber einen Teil der Funktionalität von Version 3 brauche, lade ich mir das Source-Paket (http://pgfoundry.org/pipermail/skytools-users/2009-April/001029.html) runter, welches Marko Kreen in einem Posting der SkyTools-Mailingliste erwähnt hat. Version 3 ist aktuell noch Alpha - wobei ich mir ziemlich sicher bin, das das Skye intern schon länger im Einsatz ist und sicherlich weit weniger Alpha ist, als so manches andere Prgramm ;-) Bei mir läuft das jetzt auf jeden Fall schon mal seit 3 Monaten ganz gut durch.
SkyTools @ PostgreSQL Wiki
http://wiki.postgresql.org/wiki/SkyTools
Londiste Tutorial (Version 2)
http://pgsql.tapoueh.org/site/html/londiste/londiste.html
SkyTools Users Archives Mailingliste
http://pgfoundry.org/pipermail/skytools-users/
Manpage für londiste (Version 2)
http://manpages.ubuntu.com/manpages/jaunty/man1/londiste.1.html
Whats you favourite PostgreSQL Replication Tool:
1. Slony-I
2. pgpool2
3. londiste
http://www.postgresql.org/community/survey.61
PostgreSQL Replication using Slony-I
http://jayant7k.blogspot.com/2008/11/postgresql-replication-using-slony-i.html
Database management tools from Skype: WAL shipping, queueing, replication. The tools are named walmgr, PgQ and Londiste, respectively
http://pgfoundry.org/projects/skytools/
Und in Teil 2 erklär ich dann, wie ich es eingerichtet habe...
Posted at 05:22nachm. Juli 06, 2009 by cetixx in Tipps | Kommentare [0]
Amiga MOD-Files per FUSE-FS abspielen mit uadefs
Schon witzig, was es alles heutzutage als Filesystem gibt ;-) So kann man mit uadefs ein Verzeichnis mit Tracker-Dateien mounten und dann auf dieses Verzeichnis mit jedem beliebigen Player, der WAV-Dateien abspielen kann, diese Dateien abspielen. Das funktioniert ähnlich wie bei sshfs (ermöglicht ein Filesystem eines entfernten Rechners per SSH zu mounten):
1. mkdir -p ~/mnt/uadefs
2. uadefs /amiga/songs ~/mnt/uadefs
3. vlc ~/mnt/uadefs/mod.foo
Voraussetzung ist natürlich, das man das FuSE-Paket installiert hat. uadefs ist bei Gentoo ein Teil des uade-Pakets (Unix Amiga Delitracker Emulator).
Posted at 12:00vorm. Mai 29, 2009 by cetixx in Tipps | Kommentare [0]
MySQL Performance- und Diagnose-Tool Jet Profiler
Normalerweise bin ich ja kein Fan von ClosedSource Programmen insbesondere im OpenSource Umfeld. Aber dieses Tool hier ist wirklich praktisch und ich habe bisher auch noch nicht wirklich was Besseres gefunden, wenn es um die Performanceanalyse einer MySQL-DB geht, insbesondere wenn man auf der Suche nach langsamen Queries, Locks, Cache-Hit-Ratio's, usw. geht. Man bekommt diese Infos zwar auch teilweise anderweitig, aber kaum so gut und übersichtlich aufbereitet, was letztendlich viel Arbeit spart.
Vom Jet Profiler kann man sich eine soweit ganz funktionale, freie Version downloaden, aber leider wird man relativ schnell feststellen, das man ohne die 499 Dollar teure Version nicht so arg weit kommt. Nicht ganz billig, aber das ist Oracle auch nicht ;-) Wenn man täglich hört "die Datenbank ist langsam...", dann ist dieses Programm die Antwort. Das Programm ist in Java geschrieben und ist allen Unkenrufen zum Trotz (was man immer noch von Java-Programmen hört) schnell und gut bedienbar. Es läuft unter Linux, Mac OS X und Windows.
Posted at 11:30nachm. Mai 06, 2009 by cetixx in Tipps | Kommentare [1]
Die eigene Cloud mit EUCALYPTUS
EUCALYPTUS - Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems. Wer seine eigene Cloud bauen will, kann das mit EUCALYPTUS tun. Die Software ist OpenSource, unterstützt Xen und in Release 1.5 jetzt auch KVM als Hypervisor. Das Interface ist kompatibel zu Amazons EC2. Das Schöne an dem Ganzen ist, das es im Prinzip nur ohnehin schon vorhandene Tools verwendet, die es so unter Linux gibt.
Posted at 03:00nachm. Apr. 15, 2009 by cetixx in Tipps | Kommentare [0]
grep: Mehr als ein Wort rausfiltern - eine Art mulit-grep
Wer sich schon immer gefragt hat, wie man mit grep nach mehreren z.B. Wörtern filtern kann, dem sei geholfen:
grep -F -e wort1 -e wort2 dateiname
wort1 und wort2 ersetzt man durch die Wörter, die man sucht und dateiname nach dem Dateinamen in dem man suchen möchte oder lässt den Dateinamen weg, wenn man von stdin lesen möchte.
Posted at 12:00vorm. Apr. 02, 2009 by cetixx in Tipps | Kommentare [0]
KVM, Qemu: Welche I/O-Scheduler verwenden
Update 20110831: Weitere Informationen zu dem Thema gab es auf dem KVM Forum 2011 in dem PDF Optimizing Your KVM Instances von Mark Wagner. Auch hier zeigt sich, das der Deadline Scheduler aktuell der Optimalste für eine KVM ist.
Update 20100318: Mehr Tuning-Informationen für die KVM gibt es hier: http://www.linux-kvm.org/page/Tuning_KVM .
Update 20090403: Ich denke, das sich das unten stehende, so nicht halten läßt. Die Sache mit dem noop-Scheduler verhält sich teilweise sehr gut, teilweise aber auch ziemlich übel, in dem z.B. der pgflush-Daemon ziemlich viel Systemzeit beansprucht und der I/O-Durchsatz ziemlich in die Knie geht. Das ändert sich schlagartig, sobald man auf den Deadline-Scheduler umschaltet. Auf den getesteten Systemen scheint die Benutzung des Deadline-Schedulers in Host und Guest die beste Kombination zu sein. Man kann das ja selber mal ausprobieren, in dem man den I/O-Scheduler im laufenden Betrieb wechselt z.B.
echo "deadline" > /sys/block/vda/queue/scheduler
Man sollte dann aber schon eine Anwendung oder einen Test fahren, der gut was auf die Platte schreibt und das auch möglichst konstant macht. Oder besser: Man verwendet bonnie++ . Ein eher syntetischer Test für I/O-Durchsatz aber ein guter Ausgangspunkt.
Text vom 20090330: Diese gar nicht so uninteressante Frage kam jetzt schon des Öfteren auf der KVM Mailingliste hoch. Letztendlich ist man sich einig, das das Gastsystem mit elevator=noop gestartet werden sollte. Per Default setzen ja heute die meisten Distributionen den Completely Fair Scheduler-I/O (CFQ) ein. Für den Host selbst ist das vielleicht ok, wenn im Gast elevator=noop als Kernelparameter z.B. im Grub übergibt. Es macht auch nicht wirklich Sinn, wenn sich die I/O-Scheduler im Gast und im Host Gedanken machen müssen, wie denn die Daten am Besten auf die Platte kommen sollen. Wenn ich die Mails der KVM-Entwickler/-User aber richtig interpretiere, dann bevorzugen sie doch eher den deadline Scheduler für den Host. Mit dem habe ich auch sehr gute Erfahrungen gemacht im Serverbereich. Ich finde - aber das ist jetzt meine subjektive Meinung - das der CFQ sich besser für den Desktopbereich eignet als für Serveranwendungen.
Posted at 10:00nachm. März 30, 2009 by cetixx in Tipps | Kommentare [0]
VLC: Segfault in libc
Wenn mal der VLC nicht mehr startet und in /var/log/messages eine Meldung wie diese zu finden ist
vlc[23006]: segfault at afe80fc4 ip b7d0b19c sp afe80fc8 error 6 in libc-2.8.so[b7c9f000+134000]
dann sollte man mal VLC wie folgt aufrufen von der Kommandozeile aus:
vlc --reset-config
Posted at 11:00nachm. März 19, 2009 by cetixx in Tipps | Kommentare [0]
Kabel BW und Linksys WRT160N Wireless Router
Der vom Kabel BW mitgelieferte WLAN-Router D-Link DI-524 ist ja jetzt nicht so unbedingt der Hit, wenn man eine 32 MBit-Leitung hat. Mehr wie 500-600 KB/sec. war da nicht zu holen, obwohl man nur 3 Meter vom Router und freier Sicht mit dem Laptop weg ist.
Musste was Schnelleres her. Der Linksys WRT160N arbeitet perfekt mit Kabel BW. Ich habe ihn unter Linux eingerichtet. Die Windows-Software habe ich gar nicht ausprobiert. Den Laptop erstmal per Ethernet mit dem Router verbunden. Die Adresse des Routers ist 192.168.1.1. DHCP ist aktiviert, so das man auch gleich eine IP vom Router bekommt. Den dann erstmal einrichten. Dann im ausgeschalteten Zustand an das schwarze Motorola Kabelmodem anstöpseln. Dazu verbindet man einfach per Ethernet-Kabel den Ausgang mit der Bezeichnung "Internet" vom Router mit dem Modem. Dann das Modem vom Stromnetz trennen, 5 Sek. warten, das Modem erstmal hochkommen lassen und dann den Router einschalten. Das ist nötig, da sonst das Modem sich weigert, mit dem Router zu sprechen, da sich die MAC-Adresse geändert hat. Das sollte dann schon gewesen sein.
Und jetzt sieht's mit der Speed schon besser aus. Gleiche Entfernung wie vorher und 2.0-2.4 MByte/sec. und ohne Draft-N (kann mein Laptop nicht :-( ). Das macht aber schon mehr Spaß ;-)
Posted at 01:27vorm. März 19, 2009 by cetixx in Tipps | Kommentare [0]
Linux - Dateien aufteilen mit split
Will man eine Datei in mehrere kleinere Teile aufteilen, um sie z.B. irgendwo hochladen zu können und dort nur Dateien z.B. mit max. 200MB errlaubt sind, dann kann man split verwenden:
split -a 3 -d -b 199M file_to_split.bin splitted.bin.
Wenn die Ausgangsdatei file_to_split.bin also z.B. 600 MByte groß war, dann erhält man jetzt folgende Dateien mit jeweils 199 MByte Größe:
splitted.bin.000
splitted.bin.001
splitted.bin.002
Die Option -a 3 gibt an, das man einen dreistelligen Suffix anhängen möchte. -d gibt an, das dieser Suffix nummerisch sein soll und -b 199M würde in diesem Beispiel die aufgeteilten Dateien max. 199 MByte gross werden lassen. Dann gibt man noch die Datei an die man aufteilen möchte und wie die aufgeteilten Dateien heissen sollen - also den Prefix soz.
Posted at 12:35nachm. März 17, 2009 by cetixx in Tipps | Kommentare [0]
xorg.conf - Umstieg von 1.3 auf 1.5
Ein Gentoo-Entwickler hat hier ein Python-Skript abgelegt, mit dem man seine xorg.conf in eine HAL FDI Policy Datei umwandeln kann. Probleme gibt es hierbei hauptsächlich bezügl. Tastatur und Maus. Nachdem der X-Server jetzt HAL/EVDEV verwendet, um Tastatur und Maus automatisch zu erkennen, hatte ich erstmal das Problem, das das Tastaturlayout gar nicht mehr stimmte. Auch mit dem KDE Keyboard Manager war da nix zu machen. Erst als ich eine Policy in /etc/hal/fdi/policy/10-x11-input.fdi angelegt hatte und in der /etc/X11/xorg.conf alle InputSection's die was mit Tastatur, Maus oder Touchpad zu tun hatten, entfernt habe, lief die Sache wieder rund. Die 10-x11-input.fdi für meinen Dell D630 Laptop sieht z.B. so aus:
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
<match key="info.capabilities" contains="input.keys">
<merge key="input.xkb.rules" type="string">xorg</merge>
<!-- Option "XkbModel" "pc105" -->
<merge key="input.xkb.model" type="string">evdev</merge>
<merge key="input.xkb.layout" type="string">de</merge>
<merge key="input.xkb.options" type="strlist">grp:alt_shift_toggle</merge>
<append key="input.xkb.options" type="strlist">grp_led:scroll</append>
<merge key="input.xkb.variant" type="string">,nodeadkeys,</merge>
</match>
</deviceinfo>
Posted at 11:00nachm. März 12, 2009 by cetixx in Tipps | Kommentare [0]
KVM/Qemu: Wie konvertiert man eine VMware VMDK Datei zu einem KVM Image
Die Lösung ist relativ einfach. Entweder verwendet man qemu-img oder kvm-img (je nachdem welches Tool der Distribution beiliegt):
qemu-img convert -f vmdk -O qcow2 vmware-image.vmdk kvm-image.qcow2
Update 20090511: Das funktioniert aber nur solange man nur ein vmdk-File hat. Wenn das VMWare-Image auf mehrere Dateien aufgesplittet ist wie s001.vmdk, s002.vmdk, usw., dann muss man anders vorgehen. Man konvertiert alle diese Dateien ins RAW-Format und kopiert diese dann zusammen in ein File:
for I in *[0-9].vmdk; do kvm-img convert -f vmdk "$I" -O raw "tempdir/$I"; done
cat *.vmdk >> final_image.raw
Das final_image.raw kann man dann mit der KVM starten.
Posted at 08:44vorm. März 11, 2009 by cetixx in Tipps | Kommentare [0]
PostgreSQL - Warm-Standby Datenbank Recovery
Nachdem ich ja kürzlich beschrieben habe, wie man eine Warm-Standby Datenbank mit PostgreSQL einrichtet, hier nun der Teil wie man die Standby Datenbank in Betrieb nimmt, wenn die primäre Datenbank ausgefallen ist.
Gehen wir mal davon aus, das der Rechner mit der primären Datenbank ausgefallen ist und die Standby Datenbank soll übernehmen. Die Slave-DB (Standby) hängt der Master-DB 60 Sek. hinterher. Es fallen also auf jeden Fall alle Transaktionen unterm Tisch, die in den letzten 60 Sek. gelaufen und nicht abgeschlossen wurden!
Die Slave-DB befindet sich ja im Dauerrecoverymodus und spielt laufend die Transaktionslogs ein, die von der Master-DB rübergeschoben werden. Um die DB aus dem Recoverymodus zu bringen, wurde in /data/pgsql/data/$DBNAME/recovery.conf ein Trigger festgelegt im recovery_command und der sieht so aus: -t /tmp/pgsql.fin.$DBNAME ($DBNAME wie immer im vorhergehenden Artikel schon beschrieben durch den Instanznamen ersetzen).
D.h. wenn wir jetzt als User postgres(!) per touch /tmp/pgsql.fin.$DBNAME diesen Trigger anlegen, beendet das pg_standby Programm den Recovery-Modus und fährt die DB hoch. Das kann eine Weile dauern, bis die Transaktionslogs nachgefahren wurden. Am Besten beobachtet man dabei das Postgres-Logfile. Die Ausgabe sieht dann in etwa so aus:
LOG: could not open file "pg_xlog/000000010000003F000000A3"
(log file 63, segment 163): No such file or directory
LOG: redo done at 3F/A2007F80
LOG: last completed transaction was at log time 2009-03-03 14:23:30.134095+01
LOG: restored log file "000000010000003F000000A2" from archive
LOG: selected new timeline ID: 2
LOG: archive recovery complete
LOG: checkpoint starting: shutdown immediate
LOG: checkpoint complete: wrote 10 buffers (0.0%); 0 transaction log
file(s) added, 0 removed, 0 recycled; write=0.015 s, sync=0.001s, total=0.092 s
DEBUG: transaction ID wrap limit is 2147484026, limited by database "template1"
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
Die Meldung could not open file ... ist ok. Die Slave-DB hätte jetzt eigentlich das nächste Transaktionslog erwartet. Aber da die Master-DB das noch nicht geliefert hat, ist auch keines da und die DB macht einen Rollback auf das letzte Log 000000010000003F000000A2. Das Recovery selbst kann auch nochmal etwas dauern (ca. 1-2 Min.). Wenn database system is ready to accept connections im Log erscheint, ist die DB oben - aber noch nicht erreichbar über eine IP-Adresse.
Da in der Slave-DB in der postgresql.conf die listen_addresses vermutlich nur auf localhost stehen, kann man die DB auch nur vom DB-Rechner selbst aus erreichen. Man muss also nun erstmal ein Interface hochziehen, das die gleiche IP hat wie die Master-DB hatte (aber auch nur wenn der Master-Rechner wirklich nicht mehr am Netz hängt) und dann den Eintrag in der postgresql.conf entsprechend abändern. Dann die DB durchstarten und das war's dann eigentlich.
Sollte die DB auf dem Rechner bleiben, muss natürlich das Backup-Skript nachgezogen werden und was man sonst noch so Adimistratives braucht.
Nicht unerwähnt bleiben soll, das man diese Standby-Sache hier natürlich auch automatisieren kann und mittels Heartbeat dafür sorgen kann, das der Failover automatisch stattfindet, wenn die Master-DB ausfallen sollte. Aber das ist ein anderes Kapitel ;-)
Posted at 08:51vorm. März 10, 2009 by cetixx in Tipps | Kommentare [0]
Gentoo: KDE 4.2 beendet sich einfach nach ein paar Klicks
Schon toll, was so passiert, wenn man historische Sachen mit sich rumschleppt. Nachdem KDE 4.2 eine ganze Weile ohne Probleme lief, hatte ich plötzlich das Problem, das sich KDE einfach mal so beendete, nachdem ich z.B. auf File -> New Tab in Konsole geklickt hatte oder im Konquerer ein paar Buchstaben der URL eingegeben habe. Da kam dann irgendwas von wegen xprop und so (weiß die genaue Meldung nicht mehr).
Des Rätsels Lösung: /etc/X11/xorg.conf anpassen und folgende Option rausschmeissen:
Option "Backingstore" "true"
Diese Option war bei meiner Nvidia 8600 GTS gar nix gut. Drum raus damit. Dann tut's.
Posted at 03:15nachm. März 06, 2009 by cetixx in Tipps | Kommentare [0]