MariaDB-Galera auf dem Banana Pi installieren

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

. Danach haben wir die Dateien im Verzeichnis „server“. Dann werden die Quellen zu Galera mit

cd server; git checkout 10.0-galera

herunter geladen und dann die Quellen zum Galera-Plugin an sich

cd..; git clone https://github.com/codership/galera.git

 

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

Galera benötigt die folgenden zusätzlichen Pakete:

apt-get install scons libboost-dev libboost-program-options-dev check

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  

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

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

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 Konfiguratio9nsdatei 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_%';

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

.

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');

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;

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.

Keine Antworten

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

    :bye: 
    :good: 
    :negative:  
    :scratch: 
    :wacko:  
    :yahoo: 
    B-) 
    mehr...
     

       Mit der Nutzung dieses Formulars erklärst Du Dich mit der Speicherung und Verarbeitung Deiner Daten durch diese Website einverstanden. Mehr Informationen dazu findest Du in der Datenschutzerklärung.

    ALL-INKL.COM - Webhosting Server Hosting Domain Provider

    Diese Seite verwendet Cookies. Mit der Nutzung von tuxlog erklärst Du Dich mit der Verwendung von Cookies einverstanden. Detaillierte Informationen über die Verwendung von Cookies auf dieser Website findest Du in der Datenschutzerklärung.