In Verbindung zu meinem Blog-Beitrag vom 6. September 2017 wurde eine Möglichkeit gesucht, Datenbankabfragen auf verschiedene Server zu verteilen.

Auch hier wurde ich auf das Produkt von Galera aufmerksam.

Meine Erfahrung zeigt, dass die Ansprüche, die an ein Monitoring-System gestellt werden, von Zeit zu Zeit drastisch steigen. Immer mehr Dienste müssen überwacht werden. Das hat zur Folge, dass viel mehr Datenbankabfragen abgearbeitet werden müssen und dadurch mehr Speicherplatz benötigt wird.

Vor diesem Hintergrund braucht es eine Möglichkeit jederzeit Ressourcen, in Form von bspw. neuen Servern, hinzufügen oder entfernen zu können.

Installation MySQL

Debian 9 (stretch)

Installation MySQL
# apt-get -y install mariadb-server

Debian 8 (jessi)

Installation MySQL
# apt-get -y install mysql-server

Konfiguration MySQL

Üblicherweise lässt es MySQL nicht zu, dass von anderen Servern auf die Datenbank zugriffen wird.

Um von anderen Servern Zugriff auf die Datenbank zu erlangen muss die MySQL-Konfiguration angepasst werden.
Die Konfigurationsdatei liegt von System zu System an verschiedenen Orten. Üblicherweise liegt die Datei unterhalb /etc/mysql.

Ab Debian 9 stretch kann man die Datei unter /etc/mysql/mariadb.conf.d/50-server.cnf finden
Ältere Debian Versionen speichern die Datei unter /etc/mysql/my.cnf
Solltet ihr die Datei dennoch nicht finden können, könnt ihr folgenden Befehl verwenden:

Konfiguration MySQL
Befehl: grep -r  bind-address /etc/mysql/
Ausgabe: /etc/mysql/mariadb.conf.d/50-server.cnf:#bind-address = 127.0.0.1

Meine Datei befindet sich also in dem Ordner /etc/mysql/mariadb.conf.d/.

Wir öffnen also die Datei /etc/mysql/mariadb.conf.d/50-server.cnf und kommentieren den Konfigurationsparameter bind-address aus oder ändern den Wert auf 0.0.0.0 ab.

Diese Änderung muss auf allen Systemen geändert werden.

Anschließend mit folgendem Befehl den MySQL-Server neustarten:

Konfiguration MySQL
# /etc/init.d/mysql restart

Außerdem muss auf jedem MySQL-Server die Verbindung von externen Servern erlaubt werden.
Dazu muss der Datenbankeintrag des Benutzers mit dem man von einem anderen System aus zugreifen möchte angepasst werden.

Konfiguration MySQL
# mysql -u root -p
# use mysql;
# CREATE USER 'root'@'%' IDENTIFIED BY 'P@ssw0rd';
# GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' WITH GRANT OPTION;
# FLUSH PRIVILEGES;

In meinem Beispiel verwende ich den root User.
Mit dem folgenden Befehl kann man die Verbindung von einem anderen Client aus testen:

Konfiguration MySQL
# mysql -h Server_IP -u root -p



Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 10.1.29-MariaDB-6 Debian buildd-unstable

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Einrichtung eines Galera Load Balancers

1. Es müssen folgende Pakete installiert werden

Installation Galera Load Balancer
# apt-get install mysql-server
# apt-get install git
# apt-get install autoconf
# apt-get install dh-autoreconf

2. Clonen des Git-Repositories:

Installation Galera Load Balancer
# cd /tmp
# git clone https://github.com/codership/glb

3. In das Verzeichnis glb/ wecheseln und die Software installieren

Installation Galera Load Balancer
# cd glb/ 
# ./bootstrap.sh
# ./configure 
# make 
# make install

4. Anschließend das init-Skript sowie die Konfigurations-Datei kopieren

Installation Galera Load Balancer
# cp files/glbd.sh /etc/init.d/glb
# cp files/glbd.cfg /etc/default/glbd

5. Danach muss die Konfiguration angepasst werden

# LISTEN_ADDR beschreibt den Port, der Galera für die eingehende Clientverbindung benutzt
LISTEN_ADDR="8010"
CONTROL_ADDR="127.0.0.1:8011"
CONTROL_FIFO="/var/run/glbd.fifo"
THREADS="4"
MAX_CONN=256
# DEFAULT_TARGETS=IP_1:PORT:GEWICHTIGKEIT/GEWICHTUNG
DEFAULT_TARGETS=192.168.1.2:3306:1 192.168.1.3:3306:1"
# OTHER_OPTIONS werden weiter unten beschrieben
OTHER_OPTIONS="--random"

6. Zuletzt muss der Daemon enabled und gestartet werden

Aktivieren des Galera Load Balancers
# systemctl enable glb
# service glb start

Testen des Load Balancers

1. Status des LoadBalancers ermitteln

root@debian:~# service glb getinfo
Router:
------------------------------------------------------
Address : weight usage map conns
192.168.1.2:3306 : 1.000 0.000 0.500 0
192.168.1.3:3306 : 1.000 0.000 1.000 0
------------------------------------------------------
Destinations: 2, total connections: 0 of 256 max

2. MySQL-Verbindung herstellen

root@debian:~# mysql -uroot -pinit2pwd -h127.0.0.1 -P8010

mysql> SELECT @@wsrep_node_name;
+------------------------------+
| @@wsrep_node_name |
+------------------------------+
| node_one |
+----------------------------- +
1 row in set (0.00 sec)

3. MySQL-Session verlassen und erneut öffnen

root@debian:~# mysql -uroot -pinit2pwd -h127.0.0.1 -P8010

mysql> SELECT @@wsrep_node_name;
+--------------------------------+
| @@wsrep_node_name |
+--------------------------------+
| node_two |
+--------------------------------+
1 row in set (0.00 sec)

Load Balancer Algorithmen

Algorithmus Definition
–random Knoten wird zufällig gewählt
–round Knoten werden abwechselnd gewählt
–single Alle Verbindungen werden dem Knoten mit der höheren Gewichtung übermittelt
–source Verbindungen werden weitergeleitet solange der Knoten zur Verfügung steht.
Christian Fuck

Christian Fuck

Help Desk

Wenn er nicht digitalen Träumen nachjagt oder das Internet durchwandert, kann man ihn im Fitnessstudio antreffen oder mit dem Zwergspitz eine Runde um den Block in Deep Down Völklingen drehen sehen. Christians Vorliebe für Drums und Snare geht unter die Haut. Auf Pulverschnee braucht er nur ein Brett unter den Füßen um King of the Hill zu sein. Für Braintower blogt Christian über das SMS Gateway und teilt sein breites Fachwissen über Lösungen mit technischen Problemen.

Gefällt dir der Artikel? Bitte teile ihn!
Share on Facebook
Facebook
0Share on LinkedIn
Linkedin
Email this to someone
email
Tweet about this on Twitter
Twitter