MariaDB-Galera auf dem Banana Pi installieren war gar nicht so einfach. Fertige Pakete mit Galera support habe ich nicht gefunden und wenn waren sie Jahre alt. Also habe ich mich daran gemacht MariaDB und Galera selbst zu übersetzen und zu installieren. Mein Ziel ist es auf meinem Banana-Pi-Cluster einen MariaDB-Cluster mit Galera und einem HAProxy zu installieren und zu schauen wie sich die Performance gegenüber einer einzelnen Installation verändert.
Die Voraussetzungen schaffen
Im ersten Schritt holen wir uns die Quelldateien mit
git clone https://github.com/mariadb/server
Code-Sprache: PHP (php)
. Danach haben wir die Dateien im Verzeichnis „server“. Dann werden die Quellen zu Galera mit
cd server; git checkout 10.0-galera
Code-Sprache: CSS (css)
herunter geladen und dann die Quellen zum Galera-Plugin an sich
cd..; git clone https://github.com/codership/galera.git
Code-Sprache: PHP (php)
Bevor wir jetzt mit der eigentlichen Übersetzung der Programme beginnen installieren wir noch die Abhängigkeiten für die beiden Pakete.
Maria DB benötigt die folgenden zusätzlichen Pakete:
apt-get install bison libncurses-dev libxml2-dev
Code-Sprache: JavaScript (javascript)
Galera benötigt die folgenden zusätzlichen Pakete:
apt-get install scons libboost-dev libboost-program-options-dev check
Code-Sprache: JavaScript (javascript)
MariaDB kompilieren und installieren
Jetzt übersetzen wir zuerst den Server. Dazu wechseln wir in das server Verzeichnis und setzen folgende Befehle ab:
cmake -DWITH_WSREP=ON -DWITH_INNODB_DISALLOW_WRITES=ON ./
make PREFIX=/usr/local
make PREFIX=/usr/local install
Code-Sprache: JavaScript (javascript)
Das dauert dann 1-2 Stunden.
Galera kompilieren und installieren
Danach wechseln wir in das galera-Verzeichnis und starten den Übersetzungsvorgang mit den Befehlen
export CXXFLAGS=-I/root/server/wsrep;scons
Code-Sprache: JavaScript (javascript)
Nach ca. 70 Minuten ist auch das Galera-Plugin übersetzt. Erfolgreich war der Vorgang, wenn die Datei libgalera_smm.so existiert.
Jetzt kopieren wir die Bibliothek noch in den zugehörigen MariaDB-Ordner
cp libgalera_smm.so /usr/local/mysql/lib/
.
MariaDB konfigurieren und starten
zuerst legen wir eine Gruppe und einen User für MariaDB an.
groupadd mysql; useradd -g mysql mysql
Dann initialisieren wir die Datenbank.
cd /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
Code-Sprache: JavaScript (javascript)
Die Datenbank wird im Verzeichnis /usr/local/mysql/data abgelegt.
Im nächsten Schritt passen wir die Berechtigungen der Verzeichnisse an.
chown -R mysql /usr/local/mysql
chgrp -R mysql /usr/local/mysql
Um die Datenbank beim Start des Banana Pi automatisch zu starten richten wir ein Start-Stop-Skript ein.
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld; update-rc.d mysqld defaults
update-rc.d mysqld enable
service mysqld start
Der letzte Befehl fügt das Skript zum Dienstmanager hinzu und sorgt dafür, dass mysql beim Start des Banana Pi automatisch gestartet wird.
Jetzt können wir schon mal testen, ob die Datenbank auch funktioniert. Einfach mit /usr/local/mysql/bin/mysql mit der Datenbank verbinden und z.B. ein „show databases;“ eingeben. Wenn das klappt stoppen wir die Datenbank wieder mit
service mysqld stop
MariaDB und Galery konfigurieren
Die Konfigurationsdatei liegt unter /etc/mysql/my.cnf und hat bei mir folgenden Inhalt:
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr/local/mysql datadir = /usr/local/mysql/data tmpdir = /tmp lc-messages-dir = /usr/local/mysql/share skip-external-locking Galera settings binlog_format=ROW bind-address=0.0.0.0 default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 innodb_buffer_pool_size=122M wsrep_on=ON wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so wsrep_provider_options="gcache.size=300M; gcache.page_size=300M" wsrep_cluster_name="BananaGalera" wsrep_cluster_address="gcomm://192.168.0.2, 192.168.0.3" wsrep_sst_method=rsync change the next two lines per node wsrep_node_name=Node1 wsrep_node_address="192.168.0.1" * Fine Tuning for Banana Pi key_buffer = 16M max_allowed_packet = 1M thread_stack = 192K thread_cache_size = 8 myisam-recover = BACKUP max_connections = 10 max_user_connections = 10 table_open_cache = 64 sort_buffer_size = 512k net_buffer_length = 8k read_buffer_size = 256k read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M query_cache_limit = 1M query_cache_size = 16M log_error = /var/log/mysql/error.log expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/
Galera starten
Um Galera zu starten verwendet man den Befehl
service mysqld bootstrap
Nach dem Start kann man testen, ob Galera auch läuft indem man zuerst /usr/local/mysql/bin/mysql aufruft und dann den Befehl
SHOW STATUS LIKE 'wsrep_%';
Code-Sprache: JavaScript (javascript)
eingibt. Man sieht dann alle Parameter, die für Galera hinterlegt sind. Wenn der Parameter wsrep_ready den Wert ON hat bedeutet das der Knoten ist betriebsbereit.
Der Parameter wsrep_local_state_comment sollte den Wert Synced haben und der Parameter wsrep_cluster_size gibt die Anzahl der Knoten im Cluster an.
MariaDB und Galera auf weiteren Knoten einrichten
Damit wir nicht auf jedem Knoten den ganzen stundenlangen Übersetzungsvorgang abwarten müssen machen wir uns jetzt ein Paket mit den benötigten Dateien, dass wir dann auf die anderen Knoten kopieren und auspacken.
tar cvzf mariadb-galera-node-package.tgz /usr/local/mysql /etc/mysql /etc/init.d/mysqld
Dann kopiert man die Datei auf die anderen Knoten (z.B. mit scp oder per ftp).
Und packen sie im root Verzeichnis wieder aus mit
tar xvzf mariadb-galera-node-package.tgz
Code-Sprache: CSS (css)
.
Zur endgültigen Einrichtung führen wir dann noch folgende Schritte auf jedem Knoten aus:
rm mariadb-galera-node-package.tgz
rm -rf /usr/local/mysql/data/*
groupadd mysql; useradd -g mysql mysql
cd /usr/local/mysql; /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
chown -R mysql /usr/local/mysql; chgrp -R mysql /usr/local/mysql
chmod +x /etc/init.d/mysqld; update-rc.d mysqld defaults; update-rc.d mysqld enable
# die Datei /etc/mysql/my.cnf editieren und die beiden Zeilen
# wsrep_node_name=Node1
# wsrep_node_address="192.168.0.1"
# auf jeden Node anpassen
# ACHTUNG die weiteren Knoten dürfen nicht mit bootstrap gestartet werden
service mysqld start
Wie oben beschrieben kann man durch Abfrage des Parameters wsrep_cluster_size feststellen wie viele Knoten mit dem Cluster verbunden sind und so überprüfen, ob sie auch jeder Knoten dem Verbund angeschlossen hat.
Den Cluster testen
Abschließend führen wir einen kleinen Test durch, um zu schauen, ob Tabellen wirklich auf jedem Knoten verfügbar sind.
Auf Knoten 1 starten wir /usr/local/mysql/bin/mysql und geben ein:
create database dbtest;
use dbtest;
create table table1 ( name int primary key, value varchar(30) ) ENGINE=InnoDB;
insert into table1 values(1,'Apfel');
insert into table1 values(2,'Birne');
Code-Sprache: PHP (php)
Dann melden wir uns auf den anderen Knoten an starten wiederum /usr/local/mysql/bin/mysql und schauen uns die Tabelle an mit:
use dbtest;
select * from table1;
Code-Sprache: PHP (php)
Werden uns die beiden angelegten Datensätze angezeigt, ist alles in Ordnung.
MariaDB-Galera auf dem Banana Pi installieren lies sich dann doch meistern. Man muss allerdings ein wenig Geduld bei den lagen Compile-Zeiten mitbringen und ein bisschen tüfteln.
Pingback: Einen Proxy für den Galera-Cluster