Root-Server im MySQL-Cluster
Posted: 2006-01-24 12:26
Ich versuche gerade 2 Rootserver in ein MySQL-Cluster einzubinden. Dabei gibt es leider nur ein Problem, fuer das ich keine Loesung finde. Der komplette bestehende Teil des Clusters wird auf LAN-IPs adressiert, waehrend die 2 Rootserver natuerlich "normale Internet-IPs" haben. Momentan habe ich fuer das Adressierungsproblem einen Workaround dadurch gefunden, dass ich einen weiteren Rootserver im gleichen RZ habe, der als zweite Management-Konsole dient. Ich kann mir allerdings nicht vorstellen, dass dies nicht auch mit einer einzigen Management-Konsole geht. Momentan sieht die Konfiguration der Management-Knoten wie folgt aus:
Um mein Problem etwas besser verstehen zu koennen, hier mal eine kurze Beschreibung der Teile des Netzwerks, die fuer das Cluster relevant sind:
Das komplette bestehende Cluster befindet sich in einem Server-Schrank, der zum Internet nur eine Leitung hat. Der Management-Knoten ist somit auch Router. Das Netzwerk im Schrank sieht also wie folgt aus... Der Rechner 192.168.1.1 (bei uns heisst er phoenix) ist Management-Knoten und Router, dessen zweite Netzwerkkarte am Switch des RZ haengt und darueber mit fester IP im Internet erreichbar ist. Insgesamt sind dem Router/Management-Server 5 verschiedene IPs zugewiesen, die dieser ueber virtuelle Interfaces aufloest. Das funktioniert z.B. fuer einen der API-Knoten mit den IPTables etwa so:
Auf diese Weise sind also alle Knoten des Clusters auch im Internet mit einer festen IP erreichbar, waehrend innerhalb des Schranks nur LAN-IPs genutzt werden.
Und an dieser Stelle sitzt mein Problem. Wollen naemlich die neuen Speicherknoten mit den alten kommunizieren und melden sich bei einem von diesen, bekommen sie die Antwort mit einer LAN-IP, die fuer sie natuerlich nicht gueltig ist, da sie die Anfrage ja an eine voellig andere IP gestellt haben. Ich habe auch schon die komplette Konfiguration auf die Internet-IPs umgestellt, aber auch das brachte nichts, da sich die Rechner im Schrank ja unter dieser IP garnicht kennen. Die kennen nur ihre LAN-IP, die "Aufloesung" der Internet-IPs macht ja der Router.
Problem dabei ist, dass diese Netzwerk-Konstruktion noch von meinem Vorgaenger stammt und ich nun hier bin um damit ein Cluster einzurichten. Da in dem Schrank auch noch Server stehen, die im Produktiv-Betrieb sind, kann ich aber auch nicht einfach den Serverschrank neu verkabeln. Ich weiss, dass dies die beste Loesung waere.
Vielleicht hat ja hier noch jemand eine Idee, was ich machen koennte um die Server aus dem Schrank dazu zu bewegen korrekt mit den Servern, die draussen stehen, zu kommunizieren.
Code: Select all
[NDBD DEFAULT]
NoOfReplicas=3
DataMemory=512M
IndexMemory=512M
MaxNoOfOrderedIndexes=6800
MaxNoOfUniqueHashIndexes=5200
MaxNoOfAttributes = 4000
RedoBuffer = 64M
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Management Nodes
[NDB_MGMD]
HostName=123.123..123.1 # "alte" Management-Konsole
[NDB_MGMD]
Hostname=133.133.133.1 # zusaetzliche Management-Konsole
# Storage Nodes
[NDBD]
HostName=192.168.1.5
DataDir=/var/lib/mysql-cluster
[NDBD]
HostName=192.168.1.4
DataDir=/var/lib/mysql-cluster
[NDBD]
HostName=192.168.1.101
DataDir=/var/lib/mysql-cluster
# Setup node IDs for MySQL API servers (clients of the cluster)
[MYSQLD]
[MYSQLD]
[MYSQLD]
[MYSQLD]
Das komplette bestehende Cluster befindet sich in einem Server-Schrank, der zum Internet nur eine Leitung hat. Der Management-Knoten ist somit auch Router. Das Netzwerk im Schrank sieht also wie folgt aus... Der Rechner 192.168.1.1 (bei uns heisst er phoenix) ist Management-Knoten und Router, dessen zweite Netzwerkkarte am Switch des RZ haengt und darueber mit fester IP im Internet erreichbar ist. Insgesamt sind dem Router/Management-Server 5 verschiedene IPs zugewiesen, die dieser ueber virtuelle Interfaces aufloest. Das funktioniert z.B. fuer einen der API-Knoten mit den IPTables etwa so:
Code: Select all
$IPTABLES -t nat -A POSTROUTING -s $IP_INT_ALBATROS -o eth0 -j SNAT --to-source $IP_EXT_ALBATROS
$IPTABLES -t nat -A POSTROUTING -s $IP_INT_ALBATROS -o eth1 -j SNAT --to-source $IP_EXT_ALBATROS
$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_ALBATROS -j DNAT --to-destination $IP_INT_ALBATROS
$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_ALBATROS -j DNAT --to-destination $IP_INT_ALBATROS
Und an dieser Stelle sitzt mein Problem. Wollen naemlich die neuen Speicherknoten mit den alten kommunizieren und melden sich bei einem von diesen, bekommen sie die Antwort mit einer LAN-IP, die fuer sie natuerlich nicht gueltig ist, da sie die Anfrage ja an eine voellig andere IP gestellt haben. Ich habe auch schon die komplette Konfiguration auf die Internet-IPs umgestellt, aber auch das brachte nichts, da sich die Rechner im Schrank ja unter dieser IP garnicht kennen. Die kennen nur ihre LAN-IP, die "Aufloesung" der Internet-IPs macht ja der Router.
Problem dabei ist, dass diese Netzwerk-Konstruktion noch von meinem Vorgaenger stammt und ich nun hier bin um damit ein Cluster einzurichten. Da in dem Schrank auch noch Server stehen, die im Produktiv-Betrieb sind, kann ich aber auch nicht einfach den Serverschrank neu verkabeln. Ich weiss, dass dies die beste Loesung waere.
Vielleicht hat ja hier noch jemand eine Idee, was ich machen koennte um die Server aus dem Schrank dazu zu bewegen korrekt mit den Servern, die draussen stehen, zu kommunizieren.