logo_header

icon_bubbles Forum

icon_bubbles Wiki

icon_bubbles Planet

RootForum Community » Wiki

Aufbau Datenbanksystem

From RootForum Community » Wiki

Jump to:navigation, search

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.