Aufbau Datenbanksystem
From RootForum Community » Wiki
Contents |
Entscheidung Betriebsart Datenbank
Wie immer, die Frage, wieviel Performance benötige ich? Theoretisch kann man viele Datenbanksysteme (ich gehe hier von einem typischen LAMPP aus) in 3 Betriebsarten betreiben.
1. Master Slave Replikation 2. Master Master Replikation 3. DRBD Heartbeat Betrieb
Gleich vorweg, als DBA where ich mich gegen Variante 2. Dies ist zu problematisch, als dass man dies empfehlen kann. Sicherlich hängt dies auch von der eingesetzten DMBS ab. Es steht hier aber nicht zur Diskussion.
Variante 1 hat den Vorteil, dass Lese und Schreiblast gut verteilt werden kann. Allerdings muss die Replikation überwacht werden und zur Sicherheit, z.B. bei Mysql die Slave readonly bleiben also ein write Lock gesetzt werden. Nachteil ist hier, dass es u.U. zu Differenzen zwischen Master und Slave kommen kann. Gerade, wenn hohe Operationsdichte besteht. Der Slave hinkt dem Master dann hinterher.
Variante 2 ist ein richtiger Clusterbetrieb, wessen Failover durch Heartbeat angetriggert wird. Ein Failover erfolgt meist Transparent und ist zuverlässiger, da der Storage binaridentisch gesynct wird. Gerade bei sehr seniblen Datenstämmen kann es je nach eingesetzter DBMS zu unterschieden im Datenstamm führen, die ggf. nicht gewünscht sind.
In diesem Tutorial verfolge ich erstmal Variante 1.
Installation Mysql Master Slave Betrieb
Grundsätzlich werde ich den Build oder Installation der Binaries nicht weiter beschreiben. Das sollte ein Linux Admin allein hin bekommen. Auch sollte der Admin in der Lage sein, sein 2. Netzwerkinterface zu konfigurieren. Ich kann an der Stelle nicht auf alle Distributionen und Provider ein gehen.
man führt also
apt-get install mysql-server
oder
yum install mysql-server
aus.
Wer sein Paket komplett neu bauen möchte oder aktuellere Binaries als die der Distribution benötigt, kann die Quellen oder Binaries bei http://www.mysql.com herunter laden.
Wir erinnern uns an das Schaubild und denken nochmals daran, die eigenen IP Adressen und Hostnamen ein zu tragen. ( Bitte bedenkt, dass ihr euch für die vlan IPs eigene Hostnamen verwendet. z.B. dbmaster, dbslave)
Mysql Master
Achtung, DB Optimierung ist nicht Bestandteil dieses Dokumentes!
Wir fügen der /etc/my.cnf folgende Parameter auf dem dbmaster hinzu bzw. ändern diese ab:
bind-address = 10.10.0.14 # IP des DB Masters #skip-networking server-id = 1 relay-log = mysql-relay-bin
Danach legen wir einen Benutzer für die Replikation an:
GRANT REPLICATION SLAVE ON *.* TO '<username>'@'10.10.0.15' IDENTIFIED BY '<password>';
!Bitte daran denken, Benutzername und Passwort zu ersetzen.
Mysql Slave
Auf dem Slave
Wir fügen in der /etc/my.cnf folgendes ein oder ändern es ab:
bind-address = 10.10.0.15 #skip-networking server-id = 2 master-host = dbmaster master-user = <username> master-password = <password> master-port = 3306 skip-slave-start = 1
Initial stoppen wir den Master und Slave Datenbank und kopieren die DB Files der Masterdatenbank zum Slave. Jetzt können wir beide Datenbanken starten.
Auf dem Slave Verbinden wir uns mit der mysql Console an die Datenbnak und starten die Replikation manuell.
start slave;
Folgende Ausgabe sollten wir bekommen:
mysql> start slave; Query OK, 0 rows affected, 1 warning (0.00 sec)
wir prüfen die Replikation mit: show slave status; Und sollten ein Ergebnis wie folgt bekommen:
mysql> show slave Status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: dbmaster
Master_User: repl4mysql
Master_Port: 3306
Connect_Retry: 0
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 00000001
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 0000001
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 777666966
Relay_Log_Space: 777667310
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
ERROR:
No query specified
Uns interessieren 5 Werte:
Last_Errno: 0 Last_Error: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
Die Replikation läuft, die Datenbank ist eingerichtet.