Mysql cluster Installation / Einfache Grundinstallation

Aus bknowledgebase
Zur Navigation springen Zur Suche springen

Vorabinfo - Voraussetzungen etc.[Bearbeiten]

Hier wird eine einfache Basisinstallation vorgenommen um vor allem das Zusammenspiel der Komponenten und ihre Aufgaben zu verstehen etc.

Ich habe hier folgende Umgebung verwendet:

  • 4 Virtuelle Maschinen mit VM-Ware
  • 4 Debian 8 Installationen

Die 4 Maschinen haben folgende Grundvorraussetzungen:

Zweck Hostname IP Adresse Netmask Gateway
Datanode - Hier liegen die Daten NodeA 192.168.0.251 255.255.255.0 192.168.0.1
Datanode - Hier liegen die Daten NodeB 192.168.0.252 255.255.255.0 192.168.0.1
SQL-Node - Hierüber greifen die clients zu SQLNode 192.168.0.156 255.255.255.0 192.168.0.1
Management-Node - Steuert den cluster MNGMT 192.168.0.33 255.255.255.0 192.168.0.1

Auf den Data Nodes - also den Servern die tatsächlich die Daten halten - kann entweder der ndbd->MySQL Cluster Data Node Daemon (Single-Threaded) oder der ndbmtd->MySQL Cluster Data Node Daemon (Multi-Threaded) als Dienst laufen.

Für den Management Server gibt es den: ndb_mgm — The MySQL Cluster Management Client und den ndb_mgmd — The MySQL Cluster Management Server Daemon

Die SQL-Nodes laufen mit dem SQL-Server "mysqld" bzw. mysql.server deamon. Deshalb ist es wie zu sehen sein wird auch nur hier notwendig den Installer -> "mysql_install_db" auszuführen

SSH installiert für Putty[Bearbeiten]

apt-get install ssh

dazu habe ich noch ssh Zugriff über root erlaubt weil es mich nervt :)

nano /etc/ssh/sshd_config

suchen nach "root" und den Eintrag:

"PermitRootLogin yes"

setzen.

In produktivumgebungen sollte das nicht gesetzt werden.

alles auf den neuesten Update Stand[Bearbeiten]

Das übliche:

apt-get update apt-get upgrade

Ordner Anlegen[Bearbeiten]

Auf allen Maschinen MUSS es den Ordner /usr/local/mysql geben. In dem alle notwendigen Dateien aus den Heruntergeladenen Paketen landen.

Das heißt später gibt es in diesem Ordner die Unterordner data, bin usf..


Download der Software von Mysql.Org[Bearbeiten]

Es gibt die Entsprechenden Pakete im Internet zum Download. Das Paket heißt in etwa

mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz

je nach Version.

Diese Datei wird nun auf allen Virtuellen Maschinen heruntergeladen.

Bsp:

cd /usr/local/mysql && wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz

Datei entpacken[Bearbeiten]

tar -C /usr/local/mysql -xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz

Daten in den übergeordneten ordner verschieben

mv mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64/* ./

Mysql-User & Gruppe anlegen[Bearbeiten]

shell> groupadd mysql
shell> useradd -g mysql mysql

Installation der SQL Nodes[Bearbeiten]

Vorab[Bearbeiten]

Die Installation in Debian ist stets mit Fehlern abgebrochen, da die "shared libraries - libaio.so.1" können nicht gefunden werden.

Deshalb zunächst die fehlenden Libs nachinstallieren

apt-get install libaio1 libaio-dev

Dann kann es weitergehen

mysqld Initialisierung[Bearbeiten]

Wenn ich nun versuche die Installation zu starten: (Vorsicht es MUSS hierbei einen Ordner /usr/local/mysql geben)

 cd mysql
 entweder -> bin/mysqld --initialize --user=mysql (Initialisiert die DB und Erzeugt ein random Passwort)
 oder -> bin/mysqld --initialize-insecure --user=mysql (Ohne Passwort)

Bei späteren Problemen, dass bestimmte Files/Ordner nicht gefunden werden kann auch folgendes Verwendet werden um "Basedir und Datadir" bereits am Anfang fix zu definieren:

 bin/mysqld --initialize --user=mysql
            --basedir=/opt/mysql/mysql
            --datadir=/opt/mysql/mysql/data

(https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html)


Hier gebe ich direkt an unter welchem User die Mysql Prozesse ausgeführt werden sollen und welches das Installationsverzeichnis ist. Letzteres finde ich auch sehr wichtig, damit man sich auch vollends darüber bewusst ist wo sich dieses befindet, wenn man später Konfigurationseinstellungen machen möchte.

Notwendige Rechte setzen[Bearbeiten]

 cd /usr/local/mysql
 chown -R root .
 chown -R mysql data
 chgrp -R mysql .

mysql startup script einbauen/ quasi als Service[Bearbeiten]

In init.d kopieren

cp support-files/mysql.server /etc/init.d/

Ausführbar machen

chmod +x /etc/init.d/mysql.server

Service zum "autostart" hinzufügen

update-rc.d mysql.server defaults

Installation der Data Nodes[Bearbeiten]

Im Prinzip müssen hier "nur" die 2 Programme "ndbd und ndbmtd" aus dem heruntergeladenen Softwarepaket kopiert werden, je nachdem welches man nutzen möchte. Ich werde dann "ndbmtd" nutzen, da es Multithreading unterstützt. Wir kopieren es nach "usr/local/bin" da Linux dann die Programme automatisch findet egal wo man sich im Dateisystem befindet, wenn man dann einfach "ndbd/ndbmtd" in die Konsole eintippt.

cd /usr/local/mysql/bin

cp ndbd /usr/local/bin/ndbd

cp ndbmtd /usr/local/bin/ndbmtd

In das Verzeichnis springen in das die Dateien kopiert wurden und die Dateien Ausführbar machen

cd /usr/local/bin

chmod +x ndb*

Installation der Management Nodes[Bearbeiten]

Zum Verzeichnis mit den Binary Files wechseln

cd /usr/local/mysql/bin

In geeignetes Verzeichnis kopieren z.B.

cp ndb_mgm* /usr/local/bin

und die Files Ausführbar machen

cd /usr/local/bin chmod +x ndb_mgm*

Erstkonfiguration des MySQL-Clusters[Bearbeiten]

In diesem Beispiel wurden 4 Clusterknoten verwendet. Hier müssen bei der manuellen Installation auch zunächst 4 Konfigurationsdateien angepasst werden.

Data Nodes & SQL Node(s)[Bearbeiten]

Hier benötigen wir die Datei "my.cnf" (anlegen wenn sie nicht existiert!)

Es muss mindestens der "Connectionstring" festgelegt werden, der den Datenknnoten sagt wo der Management Node zu erreichen ist und dass die "ndbcluster storage engine" genutzt werden soll.

nano /etc/my.cnf

Folgendes sollte als Inhalt in der Datei stehen

[mysqld]
# Options for mysqld process:
ndbcluster                      # run NDB storage engine
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

[mysql_cluster]
# Options for MySQL Cluster processes:
ndb-connectstring=192.168.0.33  # location of management server


WICHTIGER HINWEIS: Um Probleme vor allem auf dem SQL Node zu vermeiden sollten unbeding alle "anderen my.cnf" Dateien auf dem Server gelöscht bzw. umbenannt werden. Dies hat mir schon Tagelange arbeit gemacht da nicht immer ganz klar war welche jetzt gelesen wird. Am besten es gibt nur die in "etc/" dann gibts keinen Streit :). Das mitgeben der my.cnf an "mysqld" hat so gut wie nie funktioniert.

Management Nodes[Bearbeiten]

Hier benötigen wir die "config.ini" um festzulegen wie viele Replikas(Data Nodes) es gibt, wie viel RAM für Daten und Indizes genutzt werden soll, wo genau die Datenabgelegt werden sollen und wie die SQL-Nodes zu erreichen sind.

Erstmal die Datei selbst erstellen:

 mkdir /var/lib/mysql-cluster
 cd /var/lib/mysql-cluster
 nano config.ini

Die "config.ini" sollte in etwa folgenden Inhalt haben:

[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2    # Number of replicas
DataMemory=80M    # How much memory to allocate for data storage
IndexMemory=18M   # How much memory to allocate for index storage
                  # For DataMemory and IndexMemory, we have used the
                  # default values. Since the "world" database takes up
                  # only about 500KB, this should be more than enough for
                  # this example NDB Cluster setup.
ServerPort=2202   # This the default value; however, you can use any
                  # port that is free for all the hosts in the cluster
                  # Note1: It is recommended that you do not specify the port
                  # number at all and simply allow the default value to be used
                  # instead
                  # Note2: The port was formerly specified using the PortNumber 
                  # TCP parameter; this parameter is no longer available in NDB
                  # Cluster 7.5.

[ndb_mgmd]
# Management process options:
HostName=192.168.0.10           # Hostname or IP address of MGM node
DataDir=/var/lib/mysql-cluster  # Directory for MGM node log files

[ndbd]
# Options for data node "A":
                                # (one [ndbd] section per data node)
HostName=192.168.0.30           # Hostname or IP address
NodeId=2                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[ndbd]
# Options for data node "B":
HostName=192.168.0.40           # Hostname or IP address
NodeId=3                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[mysqld]
# SQL node options:
HostName=192.168.0.20           # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)

Cluster Starten und in Betrieb nehmen[Bearbeiten]

1. Zunächst Management Node Dienste starten

Beim 1. Start muss man dem Dienst natürlich mitteilen wo genau die config.ini liegt. "-f" ist dabei die (config-)File Option.

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

2. Auf jedem Data Node Dienste starten

Simple mit:

ndbmtd

Wenn ein Fehler kommt, dass nicht zum Datadir gewechselbt werden kann, muss man dieses noch anlegen.

 mkdir /usr/local/mysql/data

3. Ggf. noch SQL-Server restarten

4. Check ob alles läuft auf Management Node mit: (das dauert manchmal n moment bis es geht)

 ndb_mgm
 SHOW

WICHTIG:

Man kann nun den mysql-client auf der SQL-Node installieren.

Beim 1. Versuch den Logins/Anmelden am MySQL-Server via MySQL Client sollte

mysql -h 127.0.0.1 -u root

Hier braucht man jetzt das Initialpasswort was bei mysqld --initialize erzeugt wurde. Außerdem funktioniert es anfangs NUR mit 127.0.0.1, NICHT mit localhost oder irgendeiner anderen Angabe das muss erst noch konfiguriert werden.

Außerdem kann es sein, das es auch mit dem Temporären Passwort nicht funktioniert. Dann dieses mit:

/usr/local/mysql/bi/mysqladmin -h 127.0.0.1 -u root -p password

Dann muss erstmal ein user außer root angelegt werden, da root sich gar nicht erst von remote aus anmelden soll.

Dies kann man machen via:

GRANT ALL ON *.* TO username@'%' IDENTIFIED BY 'Password'

Dabei steht "%" für alle hosts. Man könnte auch bestimmte IPs angeben oder "localhost" oder "*.domail.com" oder ähnliches.

Anschließend wird noch der Eintrag

 bind-address = 192.168.0.156 (z.B)

in die my.cnf

hinzugefügt um dem Server zu sagen, das er auf dieser IP-Adresse nach außen hin überhaupt lauschen soll.

Troubleshooting[Bearbeiten]

SQLNode.pid kann nicht geändert werden[Bearbeiten]

Wenn diese Fehlermeldung kommt, einfach die Datei suchen und die entsprechenden Rechte vergeben. Die Datei wird dann scheinbar ohnehin anschließend gelöscht.

ndbinfo kann nicht gelesen werden (oder sonst eine Tabelle)[Bearbeiten]

Überprüfe einfach die Rechte der Ordner in der "datadir". Es gibt z.B. einen Ordner für die Datenbank "ndbinfo" wenn hier der User "mysql" bzw. eben der User der die Abfrage macht nicht die Rechte hat hier zu lesen, ist die Anzeige der Daten nicht möglich.

Fazit[Bearbeiten]

Wir haben hier nun eine relativ saubere Grundinstallation des MySQL-Clusters. Sie ist noch rudimentär und sicher nicht perfekt. Je nach Anwendungsfeld können nun viele Einstellungen getätigt werden, Knoten hinzugefügt werden uvm.

viel Spass bei der Nutzung des Clusters für verschiedene Zwecke.

Happy Hacking!!!