Die Leute von fromdual haben nun ein deutlich besseres Plugin fuer das Galera Monitoring bereitgestellt. Bekommen kann man es unter http://www.fromdual.com/download. Teil 3 zum Thema Galera MySQL mit Pacemaker ist in Arbeit.
MySQL Slave read only
Je nach System und Einsatzzweck, bietet sich die Option:
read_only=1
in der my.cnf beim MySQL Slave an. Der Replikationuser sollte das Super Recht haben, um trotzdem schreiben zu dürfen. „Eigentlich“ sollten die Slave Rechte ausreichen, also lieber mal testen.
Galera cluster_size Nagios check
Ein kleiner Nagios Check für MySQL / Galera. Die Variable wsrep_cluster_status habe ich nur als zusätzliche Information mit rein genommen. Sobald mehr Zeit, erweitere ich das um die anderen wichtigen Variablen ( wsrep_ready, wsrep_connected, wsrep_flow_control_paused usw.) und unterscheide ein paar mehr Fälle. Natürlich sind mit dem Skript kaum Fälle abgefangen, aber für so auf die schnelle funktioniert es. Nett wäre es, wenn die Galera Leute direkt ein Plugin zur Verfügung stellen würden, die kennen sich immerhin am besten damit aus.
#!/bin/bash if [ $# != 1 ]; then echo "Bitte Anzahl der erwarteten MySQL Galera Nodes angeben" exit 1 else mysqlhost=127.0.0.1 port=3306 mysqluser=mysqluser password=mysqlpassword gstat1=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -e "show status like 'wsrep_cluster_size'"|grep wsrep_cluster_size|cut -f 2) gstat2=$(mysql -h$mysqlhost -P$port -u$mysqluser -p$password -e "show status like 'wsrep_cluster_status'"|grep wsrep_cluster_status|cut -f 2) if [ $gstat2 == "Primary" ] then if [ "$gstat1" == "$1" ] then echo "OK wsrep_cluster_size:$gstat1 wsrep_cluster_status:$gstat2" exit 0 else echo "Achtung wsrep_cluster_size:$gstat1 wsrep_cluster_status:$gstat2" exit 1 fi else echo "Achtung wsrep_cluster_status:$gstat2" exit 2 fi fi
Link:
http://www.codership.com/wiki/doku.php?id=monitoring&s[]=monitoring
Galera Cluster mit Ubuntu 12.04 64bit und MySQL 5.5 – Teil 2 Loadbalancer/Proxy
Nun da Galera mittlerweile auf vier Nodes läuft, wäre ein Loadbalancer eine gute Sache. HAProxy fand ich etwas zu mächtig für mein Anliegen, obwohl er von vielen Benutzern als Option präferiert wird . Getestet habe ich mysql-proxy direkt von Mysql und glbd von Galera. Beides scheint größtenteils problemlos zu laufen. Bei einfachen Benchmarks, konnte ich bisher keine gravierenden Unterschiede erkennen, dazu aber mehr in Teil 4. Mysql-proxy ist seit längerer Zeit im Alphastatus und glbd liegt in der Version 0.7.5 vor. Also beides ausbaufähig ;-). Mein Favorit ist glbd, weil er genau das tut, was er soll und nicht unnötig viele Einstellung benötigt oder bietet. Die Syntax ist recht einfach:
glbd --daemon --threads 8 --control 127.0.0.1:4041 123.123.123:4040 node1:3306:3 node2:3306:3 node3:3306:3 node4:3306:1
Ein –help zeigt alle Optionen:
glbd --help Usage: glbd [OPTIONS] LISTEN_ADDRESS [DESTINATION_LIST] OPTIONS: --help this help message. --daemon run as a daemon. --fifo <fifo name> name of the FIFO file for control. --control [HOST:]PORT listen for control requests on this address. --threads N number of working threads (connection pools). --source_tracking turn on source tracking: route connections from one source to the same destination. --verbose turn on verbose reporting. --version print program version. LISTEN_ADDRESS: [IP:]PORT where to listen for incoming TCP connections. DESTINATION_LIST: [H1[:P1[:W1]]] [H2[:P2[:W2]]]... - a space-separated list of destinations in the form address:port:weight.
Die Optionen nach Bedarf anpassen. Meiner Meinung nach empfiehlt es ich das weight eines nodes relativ niedrig anzusetzen. Dieser kann dann primär für Backups oder als Donor fuer zusätzliche Nodes dienen, da er während des Syncs mit einem neuen Node im readonly mode ist. Statusabfragen von glbd macht man z.B. mit:
# echo "getinfo" | nc -q 1 127.0.0.1 4041 Router: ---------------------------------------------------- Address : weight usage conns node1:3306 : 3.000 0.000 0 node2:3306 : 3.000 0.000 0 node3:3306 : 3.000 0.000 0 node4:3306 : 1.000 0.000 0 ---------------------------------------------------- Destinations: 4, total connections: 0
Weiter Informationen finden sich im Readme. Sehr gute Informationen und eine deutlich detaillierte Anleitung zu glbd findet man unter fromdual.com/mysql-and-galera-load-balancer. Dort ist auch ein Skript hinterlegt um glbd zu administrieren. Bricht ein Node weg, leitet glbd die Anfrage transparent an einen verfügbaren Node weiter. Leider ist die Dokumentation von glbd etwas dürftig, daher werden sich viele Verhaltensweisen erst im Laufe von diversen Tests zeigen. Probleme können eventuell auftauchen wenn man mit Pacemaker/Corosync arbeitet, da glbd sich (zu Recht) weigert, an ein nicht existierendes Interface gebunden zu werden (Stichwort „crm colocation“), dazu mehr in Teil 3.
Mysql-Proxy ist als Paket bei Ubuntu 12.04 dabei, zwar „nur“ die 0.8.1, dafür genießt man die Vorteile der Paketverwaltung. Konfiguriert wird mysql-proxy in der
/etc/default/mysql-proxy:
ENABLED="true" OPTIONS="--proxy-skip-profiling --proxy-address=123.123.123.123:4040 --proxy-backend-addresses=node1:3306 --proxy-backend-addresses=node2:3306 --proxy-backend-addresses=node3:3306 --proxy-backend-addresses=node4:3306 --admin-username=superadmin --admin-password=imnotshyijustdontlikeu --admin-lua-script=/usr/lib/mysql-proxy/lua/admin.lua"
Damit läuft erst mal die Proxyfunktion. Mysql-proxy kann deutlich mehr als nur Proxy sein. So kann er zum Beispiel die Mysqlanfragen nach read-write selektieren und mit der --proxy-read-only-backend-addresses
Option auf dedizierte Readonly „Slaves“ leiten. Die Dokumentation ist sehr gut, dank auch der MySQL Integration. MySQL Anfragen können mit Hilfe von Lua Skripten direkt manipuliert werden. Zum lesen nochmal zwei Links zu mysql-proxy, hier und hier. Der Beitrag von mysqlperformanceblog.com ist von Juni 2009, daher wurde noch die 0.7.1 getestet. Zu eigenen Benchmarks komme ich in Teil 4.
Ob nun glbd, mysql-proxy, pen oder haproxy, hängt vom Einsatzzweck und System ab. Sicherlich gibt es noch etliche andere Lösungen für ein Mysql Proxy/Loadbalancer Szenarien. Schaut man sich kommerzielle Anbieter an, wird man sicherlich hinter all den Webinterfaces, Firmenlogos und Gedöhns, häufig ein Programm aus der Open Source Welt finden, was dort still und unscheinbar seinen Dienst verrichtet. Teil 3 handelt von Pacemaker und IP Failover und Teil 4 schließlich von Benchmaks zu unterschiedlichen Konfigurationen. Ein wesentlicher Faktor beim Einrichten einer solchen Umgebungen ist natürlich die Zeit, die man dafür zur Verfügung hat. Sollte ich komplett auf dem Holzweg sein, sind Kommentare natürlich willkommen, ansonsten natürlich auch.
Link zu Teil 1:
http://exdc.net/2012/08/06/galera-cluster-mit-ubuntu-12-04-64bit-und-mysql-5-5-teil-1/
Ring verloren
Sollte jemand am East Matunuck State Beach im Atlantik einen Ring finden, bitte bei mir melden.
Galera Cluster mit Ubuntu 12.04 64bit und MySQL 5.5 – Teil 1
Warum Ubuntu? Weil ich mal etwas einigermaßen aktuelles Testen wollte ;-). Tatsächlich lief mein erster Test mit Galera und MySQL 5.1 unter drei Debian Nodes ohne großen Aufwand. Ich beschränke mich auf die Installation des ersten Nodes, da die Installation eines weiteren Nodes nur minimal abweicht. Zum Testen sollte man 3-4 Maschinen zur Verfügung haben.
Einige Daten über Galera von der Entwicklerseite:
MySQL/Galera is synchronous multi-master cluster for MySQL/InnoDB database, having features like:
- Synchronous replication
- Active-active multi-master topology
- Read and write to any cluster node
- Automatic membership control, failed nodes drop from the cluster
- Automatic node joining
- True parallel replication, on row level
- Direct client connections, native MySQL look & feel
Benefits
These features yield un-seen benefits for a DBMS clustering solution:
- No slave lag
- No lost transactions
- Both read and write scalability
- Smaller client latencies
Von codership.com/products/mysql_galera die benötigten Pakete laden, zur Zeit:
galera-23.2.1-amd64.deb
mysql-server-wsrep-5.5.23-23.6-amd64.deb
Das System vorbereiten:
aptitude install libaio1 libssl0.9.8 libdbi-perl libdbd-mysql-perl mysql-client libmysqlclient18 mysql-common libplrpc-perl libnet-daemon-perl
Galera und Mysql installieren:
dpkg -i galera-23.2.1-amd64.deb mysql-server-wsrep-5.5.23-23.6-amd64.deb
In der /etc/mysql/my.cnf
bind-address = 127.0.0.1
anpassen bzw. auskommentieren.
Mysql starten
/etc/init.d/mysql start mysqladmin -u root password 'superpassword' mysqladmin -u root -p -h hostname password 'superpassword'
Ich habe einen User fuer die Repliaktion auf jedem Node angelegt. Zum testen kann man natürlich auch einfach den Mysqladminuser nehmen
mysql> SET wsrep_on = OFF; grant all on *.* to replikator@'%' identified by 'thisisnotfacebookandimnotyourfriend';
In der /etc/mysql/conf.d/wsrep.cnf
# Full path to wsrep provider library or 'none' #wsrep_provider=none wsrep_provider=/usr/lib/galera/libgalera_smm.so # Logical cluster name. Should be the same for all nodes. wsrep_cluster_name="imnotshyijusdontlikeyou_cluster" # Group communication system handle wsrep_cluster_address="gcomm://" #Dies nur beim ersten Server, bei den anderen trägt man dort die Adresse eines anderen Nodes ein. Spaeter sollte man die IP auch beim ersten Node anpassen # Group communication system handle# SST authentication string. This will be used to send SST to joining nodes. # Depends on SST method. For mysqldump method it is root: wsrep_sst_auth=replikatior:thisisnotfacebookandimnotyourfriend #hier muss natuerlich ein user mit den benötigten Rechten eingetragen werden, im Zweifel root
wsrep_cluster_address sollte später nicht leer bleiben.
Danach
/etc/init.d/mysql restart
Am besten tail -f /varlog/syslog auf den einzelnen Maschinen laufen lassen um zu schauen ob Fehler auftauchen. Zum testen Datenbanken auf den einzelnen Nodes anlegen und mit Daten füllen.
Größtenteils habe ich mich an http://blog.causal.ch/2012/02/installing-mysql-galera-on-debian-60.html orientiert. Empfehlen kann man natürlich generell die Galera Seite und den Artikel im Admin -Magazin 04/2012 über Galera Cluster für Mysql. Die einzelnen Optionen in der/etc/mysql/conf.d/wsrep.cnf sollte man sich nochmal genauer anschauen. Teil 2 folgt dann (hoffentlich) mit garbd, pen, HAproxy, Splitbrain Problem und ein-zwei mehr Erfahrungen.
Unterwegs 2012
Dies Jahr waren wir zum zweiten mal in den USA. Diesmal aber im Norden um meinen Bruder & Familie zu besuchen. Fotos muessen noch durchgeschaut werden.
urlaub2012 auf einer größeren Karte anzeigen
Mediawiki Update auf 1.19 und rev_sha1
Wer sein 1.17er oder 1.18er Wiki auf 1.19 bringen will und danach die Meldung
A database query syntax error has occurred. This may indicate a bug in the software. The last attempted database query was:
(SQL query hidden)
from within function "Revision::fetchFromConds". Database returned error "1054: Unknown column 'rev_sha1' in 'field list' (dbserver)".
auf der Startseite des Wikis bekommt, sollte einfach mal probieren anstatt von
php5 maintenance/update.php
das Update via Webinterface zu machen. Zu finden unter
http://wtfismywiki.net/mw-config/index.php
Hat man nur 1-2 Wikis, sicherlich kein Problem, bei einer groesseren Anzahl, leider etwas schwieriger.
Ursache ist wohl, dass die column rev_sha1 im table revisions von update.php nicht mit angelegt wird. Vielleicht betrifft dies Problem auch nur meine Installationen.
Ruckeln beim Fensterverschieben mit Ubuntu 12.04 und compiz
Ich nutze unter anderem eine GT 9800. Nachdem Upgrade auf 12.04 ruckelten plötzlich die Fenster beim verschieben. Geholfen hat ein deaktivieren der Option „Mit VBLANK synchronisieren“ unter dem Compizsettings Manager -> Allgemeine Optionen. Generell hat 12.04 bei mir sehr viele Probleme mitgebracht, z.B. gibt es mit einer TI 550 sehr häufig freezes. Das Problem ist wohl bekannt, aber bisher wurde noch keine Lösung Angeboten.
Postfix Virtual Domain Hosting
Braucht man immer wieder mal,
/etc/postfix/main.cf: virtual_alias_domains = example.com ...other hosted domains... virtual_alias_maps = hash:/etc/postfix/virtual /etc/postfix/virtual: postmaster@example.com postmaster info@example.com joe sales@example.com jane # Uncomment entry below to implement a catch-all address # @example.com jim ...virtual aliases for more domains...
postmap /etc/postfix/virtual
/etc/init.d/postfix reload
findet man alles gut erklaert unter http://www.postfix.org/VIRTUAL_README.html
omreport chassis pwrmonitoring
Nachdem ich essen war, liefert omreport ploetzlich:
#omreport chassis pwrmonitoring Power Consumption Information Error : Current probes not found
Wodurch auch der check_openmanage Check von Nagos Fehler meldet. Auch blacklisting diverser Checks von check_openmanage hat nichts gebracht. Also im check_openmanage Skript folgendes auskommentiert:
# else { # @output = @{ run_omreport("$omopt_chassis pwrmonitoring") }; # }
Gleichzeitig gab es in Goettingen einen Brand mit involvierter Starkstromleitung, ein seltsamer Zufall.
omreport sollte beim Aufruf eigentlich so etwas liefern
#omreport chassis pwrmonitoring Power Consumption Information Power Consumption Index : 2 Status : Ok Probe Name : System Board System Level Reading : 175 W Warning Threshold : 917 W Failure Threshold : 966 W Amperage PS 1 Current : 0.4 A PS 2 Current : 0.4 A Power Headroom System Instantaneous Headroom : 796 W System Peak Headroom : 652 W Power Tracking Statistics Statistic : Energy Consumption Measurement Start Time : Fri Mar 25 19:14:50 2011 Measurement Finish Time : Mon Mar 19 13:54:03 2012 Reading : 301.8 KWh Statistic : System Peak Power Measurement Start Time : Fri Mar 25 18:58:46 2011 Peak Time : Fri Mar 25 19:21:18 2011 Peak Reading : 320 W Statistic : System Peak Amperage Measurement Start Time : Fri Mar 25 18:58:46 2011 Peak Time : Fri Mar 25 19:20:07 2011 Peak Reading : 1.4 A
Mal schauen ob man raus finden kann, was da genau im System den Geist aufgegeben hat.
update: Der Brand war Schuld, anscheinend gab s ein „kurzes“ Flackern im Stromnetz.
Breaking Bad
Die Vorteile von krank sein und den ganzen Tag im Bett vor sich hin zu vegetieren sind…
Unterschiedliche ssh keys
Host *.home.lan IdentityFile ~/.ssh/id_dsa.home User rudolfrichter
PDFs exportieren unter Dokuwiki
Das Plugin dw2pdf herunterladen und installieren. Nutzt man als Template Arctic kann man einfach in die main.php
<form method="get" action="<?php wl($ID)?>"> <div> <button type="submit"> <img src="<?php echo DOKU_BASE?>lib/images/fileicons/pdf.png" alt="PDF Export" /> Export to PDF </button> <input type="hidden" name="do" value="export_pdf" /> <input type="hidden" name="id" value="<?php echo $ID?>" /> </div> </form>
einfügen und gut ist. Ich habe es unterhalb von
<div class="left_sidebar"> <?php if(!tpl_sidebar_hide()) { ?>
eingetragen (hängt natürlich von der jeweiligen Konfiguration ab) und finde es sieht ganz brauchbar aus . Wozu man PDF Export im Wiki braucht ist eine andere Frage.
update (12.06.2013):
Ansonsten geht auch
<html><a href='?do=export_pdf'>Aktuelle Seite als PDF exportieren</a></html>
irgendwo einfügen.