In diesem Abschnitt zeigen wir, wie man einen Cluster, der für normale TCP/IP-Kommunikation konfiguriert ist, auf SCI Sockets umstellt. Diese Dokumentation beruht auf der SCI Sockets-Version 2.3.0 auf dem Stand vom 1. Oktober 2004.
Voraussetzungen:
Alle Computer, die SCI Sockets nutzen sollen, müssen mit SCI-Karten ausgerüstet sein.
SCI Sockets können mit jeder beliebigen Version von MySQL Cluster benutzt werden. Es sind keine besonderen Builds erforderlich, da diese Technologie die ganz normalen Socketaufrufe verwendet, die in MySQL Cluster bereits zur Verfügung stehen. Allerdings werden SCI Sockets zurzeit nur von den Linux-Kernels 2.4 und 2.6 unterstützt. SCI Transporter wurden erfolgreich auch auf anderen Betriebssystemen getestet; wir selbst haben sie bisher allerdings nur auf Linux 2.4 erprobt.
Für SCI Sockets sind im Wesentlichen vier Dinge erforderlich:
Sie müssen die SCI Socket-Bibliotheken erstellen.
Sie müssen die Kernel-Bibliotheken von SCI Socket installieren.
Sie müssen eine oder zwei Konfigurationsdateien installieren.
Die Kernel-Bibliothek von SCI Socket muss entweder für den gesamten Computer oder für die Shell, in der MySQL Cluster-Prozesse gestartet werden, aktiviert sein.
Dieser Prozess muss für jeden Computer im Cluster wiederholt werden, auf dem SCI Sockets für die Kommunikation zwischen Knoten eigesetzt werden sollen.
Um SCI Sockets einsetzen zu können, müssen Sie zwei Packages beschaffen:
das Quellcode-Package mit den DIS-Support-Bibliotheken für die SCI Sockets-Bibliotheken
das Quellcode-Package für die SCI Socket-Bibliotheken selbst
Diese stehen gegenwärtig nur im Quellcodeformat zur Verfügung.
Die neuesten Versionen dieser Packages (zu dem Zeitpunkt, da
dies geschrieben wurde) sind
DIS_GPL_2_5_0_SEP_10_2004.tar.gz
und
SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz
. Diese
oder neuere Versionen finden Sie unter
http://www.dolphinics.no/support/downloads.html.
Installation der Packages
Wenn Sie die Bibliotheks-Packages bekommen haben, müssen Sie sie als Erstes in die passenden Verzeichnisse entpacken, wobei die SCI Sockets-Bibliotheken in ein Verzeichnis unterhalb des DIS-Codes gelegt werden müssen. Als Nächstes müssen Sie die Bibliotheken erstellen. Das folgende Beispiel zeigt, mit welchen Befehlen dies auf Linux/x86 getan wird:
shell>tar xzf DIS_GPL_2_5_0_SEP_10_2004.tar.gz
shell>cd DIS_GPL_2_5_0_SEP_10_2004/src/
shell>tar xzf ../../SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz
shell>cd ../adm/bin/Linux_pkgs
shell>./make_PSB_66_release
Diese Bibliotheken können auch für einige 64-Bit-Prozessoren erstellt werden. Um sie für Opteron-CPUs mit den 64-Bit-Erweiterungen einzurichten, führen Sie make_PSB_66_X86_64_release statt make_PSB_66_release aus. Wird der Build auf einem Itanium-Computer ausgeführt, verwenden Sie den Befehl make_PSB_66_IA64_release. Die X86-64-Variante müsste auf Intel EM64T-Architekturen funktionieren, wurde aber (unseres Wissens) noch nicht getestet.
Wenn der Build-Prozess abgeschlossen ist, liegen die
kompilierten Bibliotheken in einer gezippten tar-Datei namens
DIS-
.
Nun muss das Package noch am richtigen Ort installiert werden.
In diesem Beispiel legen wir die Installation in das Verzeichnis
<operating-system>
-time
-date
/opt/DIS
.
(Hinweis: Wahrscheinlich
müssen Sie die Anweisungen als Systembenutzer
root
ausführen.)
shell>cp DIS_Linux_2.4.20-8_181004.tar.gz /opt/
shell>cd /opt
shell>tar xzf DIS_Linux_2.4.20-8_181004.tar.gz
shell>mv DIS_Linux_2.4.20-8_181004 DIS
Netzwerkkonfiguration
Nun, da alle Bibliotheken und Binaries am richtigen Platz sind, müssen Sie noch dafür sorgen, dass die SCI-Karten die richtigen Knoten-IDs im SCI-Adressraum haben.
Außerdem müssen Sie eine Entscheidung über die Netzwerkstruktur treffen, ehe Sie fortfahren. In diesem Zusammenhang sind drei Arten von Netzwerkstrukturen möglich:
ein einfacher, eindimensionaler Ring
ein oder mehrere SCI-Switches mt einem Ring pro Switch-Port
ein zwei- oder dreidimensionaler Torus
Jede dieser Netzwerktopologien hat ihre eigene Methode, um Knoten-IDs zu liefern. Alle diese Methoden werden im Folgenden kurz erklärt.
Ein einfacher Ring verwendet IDs, die von Null verschiedene Vielfache von 4 sind: 4, 8, 12, ...
Die nächste Möglichkeit verwendet SCI-Switches. Ein SCI-Switch hat 8 Ports, von denen jeder einen Ring unterstützen kann. Sie müssen dafür sorgen, dass verschiedene Ringe verschiedene ID-Räume benutzen. In einer typischen Konfiguration nutzt der erste Port Knoten-IDs unter 64 (4 – 60), der nächste Port die nächsten 64 Knoten-IDs (68–124), und so weiter, sodass die Knoten-IDs 452–508 dem 8. Port zugewiesen werden.
Zwei- und dreidimensionale Torus-Netzwerktopologien nehmen Rücksicht darauf, wo der einzelne Knoten in welcher Dimension angesiedelt ist, indem sie für jeden Knoten in der ersten Dimension um 4 hochzählen, für jeden in der zweiten Dimension um 64 und (wenn vorhanden) für jeden in der dritten Dimension um 1024. Auf der Website von Dolphin finden Sie Genaueres zum Thema.
In unseren Tests haben wir Switches verwendet, obwohl die meisten großen Cluster-Installationen 2- oder 3-dimensionale Torusstrukturen verwenden. Switches haben den Vorteil, dass man mit dualen SCI-Karten und dualen Switches relativ einfach ein redundantes Netzwerk aufbauen kann, wobei die durchschnittlichen Ausfallzeiten im SCI-Netzwerk im Bereich von 100 Mikrosekunden liegen. Dies wird von dem SCI Transporter in MySQL Cluster unterstützt und auch für die SCI Socket-Implementierung zurzeit entwickelt.
Auch für den 2D-/3D-Torus ist eine Ausfallsicherung möglich, doch hierfür ist es erforderlich, an alle Knoten neue Routing-Indizes auszusenden. Dies nimmt allerdings nur circa 100 Millisekunden Zeit in Anspruch, was für die meisten Hochverfügbarkeitssysteme noch akzeptabel sein dürfte.
Indem Sie die Cluster-Datenknoten in der geswitchten Architektur sorgfältig platzieren, können Sie mit 2 Switches eine Struktur aufbauen, in der 16 Computer miteinander verbunden sind und nie mehr als einer von ihnen durch einen einzelnen Fehler ausfallen kann. Mit 32 Computern und 2 Switches können Sie den Cluster so konfigurieren, dass ein einzelner Absturz nie mehr als 2 Knoten betreffen kann und dass darüber hinaus bekannt wird, um welches Knotenpaar es sich handelt. Indem Sie diese beiden Knoten dann in separate Knotengruppen verlegen, können Sie sogar eine „sichere“ MySQL Cluster-Installation bekommen.
Um die Knoten-ID für eine SCI-Karte zu setzen, geben Sie
folgenden Befehl im Verzeichnis
/opt/DIS/sbin
ein. In diesem Beispiel ist
-c 1
die Nummer der SCI-Karte (diese ist immer
1, wenn nur eine Karte in den Computer eingebaut ist),
-a 0
ist der Adapter 0 und
68
ist die Knoten-ID:
shell> ./sciconfig -c 1 -a 0 -n 68
Wenn mehrere SCI-Karten in demselben Computer eingebaut sind,
können Sie mit folgendem Befehl ermitteln, welche Karte welchen
Steckplatz hat (wir gehen wieder davon aus, dass
/opt/DIS/sbin
das aktuelle
Arbeitsverzeichnis ist):
shell> ./sciconfig -c 1 -gsn
So erhalten Sie die Seriennummer der SCI-Karte. Diesen Vorgang
wiederholen Sie dann mit -c 2
und so weiter
für jede Karte im Computer. Sobald Sie jede Karte einem
Steckplatz zugeordnet haben, können Sie für alle Karten
Knoten-IDs einrichten.
Sobald die notwendigen Bibliotheken und Binaries installiert und
die SCI-Knoten-IDs gesetzt sind, ordnen Sie als Nächstes die
Hostnamen oder IP-Adressen den SCI-Knoten-IDs zu. Dies tun Sie
in der Konfigurationsdatei für SCI Sockets, die normalerweise
unter /etc/sci/scisock.conf
gespeichert
sein müsste. In dieser Datei ist jeder SCI-Knoten-ID über die
jeweilige SCI-Karte der Hostname oder die IP-Adresse zugeordnet,
mit der sie kommunizieren soll. Hier sehen Sie ein sehr
einfaches Beispiel für eine solche Konfigurationsdatei:
#host #nodeId alpha 8 beta 12 192.168.10.20 16
Sie können die Konfiguration auch so einschränken, dass sie
nur für einen Teil der verfügbaren Ports für diese Hosts
gilt. Hierfür können Sie eine zusätzliche Konfigurationsdatei
namens /etc/sci/scisock_opt.conf
verwenden:
#-key -type -values EnablePortsByDefault yes EnablePort tcp 2200 DisablePort tcp 2201 EnablePortRange tcp 2202 2219 DisablePortRange tcp 2220 2231
Treiberinstallation
Wenn die Konfigurationsdateien eingerichtet sind, können die Treiber installiert werden.
Als Erstes installieren Sie die Treiber der unteren Ebene und dann den SCI Socket-Treiber:
shell>cd DIS/sbin/
shell>./drv-install add PSB66
shell>./scisocket-install add
Auf Wunsch kann die Installation mit einem Skript überprüft werden, das nachschaut, ob auf alle Knoten in den SCI Socket-Konfigurationsdateien Zugriff besteht:
shell>cd /opt/DIS/sbin/
shell>./status.sh
Wenn Sie auf einen Fehler stoßen und die SCI Socket-Konfiguration ändern müssen, so tun Sie dies mit ksocketconfig:
shell>cd /opt/DIS/util
shell>./ksocketconfig -f
Das Setup testen
Mit dem Testprogramm latency_bench können
Sie sich vergewissern, dass auch tatsächlich die SCI Sockets
benutzt werden. Mit der Serverkomponente dieses Dienstprogramms
können sich die Clients mit dem Server verbinden, um die
Verbindungslatenz zu überprüfen. Wenn Sie die Latenz
beobachten, haben Sie schnell heraus, ob SCI aktiviert ist oder
nicht. (Hinweis: Bevor Sie
latency_bench sagen, müssen Sie die
Umgebungsvariable LD_PRELOAD
so einstellen,
wie es weiter unten in diesem Abschnitt gezeigt wird.)
Um einen Server einzurichten, tun Sie Folgendes:
shell>cd /opt/DIS/bin/socket
shell>./latency_bench -server
Um einen Client zu betreiben, führen Sie
latency_bench erneut aus, diesmal allerdings
mit der Option -client
:
shell>cd /opt/DIS/bin/socket
shell>./latency_bench -client
server_hostname
Die SCI Socket-Konfiguration sollte nun abgeschlossen und MySQL Cluster bereit für die Nutzung von SCI Sockets und SCI Transporter sein (siehe Abschnitt 16.4.4.10, „MySQL Cluster: SCI-Transportverbindungen“).
Den Cluster starten
Der nächste Schritt besteht darin, MySQL Cluster zu starten. Um
SCI Sockets einzuschalten, müssen Sie die Umgebungsvariable
LD_PRELOAD
einstellen, bevor Sie
ndbd, mysqld und
ndb_mgmd laufen lassen. Diese Variable sollte
auf die Kernel-Bibliothek von SCI Sockets verweisen.
Folgendermaßen wird ndbd in einer Bash-Shell gestartet:
bash-shell>export LD_PRELOAD=/opt/DIS/lib/libkscisock.so
bash-shell>ndbd
In einer tcsh-Umgebung erreichen Sie dasselbe mit:
tcsh-shell>setenv LD_PRELOAD=/opt/DIS/lib/libkscisock.so
tcsh-shell>ndbd
Hinweis: MySQL Cluster kann nur die Kernel-Variante von SCI Sockets nutzen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.