Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - Datenbankadministration » Datenbankwartung » SQL Anywhere-Hochverfügbarkeitsoption

 

Praktische Einführung: Datenbankspiegelung bei mehreren Datenbanken mit gemeinsam genutzten Arbiterserver durchführen

Hinweis

Wenn Sie diese praktische Einführung auf Datenbankserver anwenden, die auf verschiedenen Computern ausgeführt werden, müssen Sie in den Verbindungszeichenfolgen die Referenzen auf localhost in den tatsächlichen Computernamen ändern.

In %SQLANYSAMP12%\SQLAnywhere\DBMirror finden Sie ein Beispiel für die Verwendung einer Datenbankspiegelung in Verbindung mit einem Scale-Out-System. Das Beispiel kann auf einem einzigen oder auf mehreren Computern ausgeführt werden.

In dieser Konfiguration hosten die Primär- und Spiegelserver jeweils drei einzelne Datenbanken, die an einem Spiegelungssystem teilnehmen. Alle drei Spiegelungssysteme kommunizieren mit demselben Arbiterserver. Jedes Spiegelungssystem verwendet eindeutige alternative Servernamen, die mithilfe der PRIMARY- und MIRROR-Klausel der CREATE MIRROR SERVER-Anweisung angegeben werden. Bei dieser Art von Konfiguration können die Primär-, Spiegel- und Arbiterserver jeweils auf separaten Computern laufen.

Diagramm des Spiegelungssystems.

Wenn der Primärserver ausfällt, findet ein Rollenwechsel statt und der Spiegelserver wird Eigentümer der Datenbanken. Der Spiegelserver wird zum Primärserver. Der Client muss wieder eine Verbindung zum Primärserver herstellen. Es muss nur der alternative Servername angegeben werden, um die Verbindung zum Primärserver wieder herzustellen. Die Konfiguration bietet auch Schutz vor dem Ausfall einer einzelnen Datenbank. Wenn eine Datenbank, die auf dem Primärserver läuft, ausfällt, findet ein Rollenwechsel statt und der Spiegelserver wird Eigentümer der ausgefallenen Datenbank. Der Spiegelserver wird nur für diese Datenbank zum Primärserver. Der Client muss eine Verbindung zum Primärserver für diese Datenbank unter Verwendung des alternativen Servernamens wieder herstellen.

 Einrichten eines Spiegelungssystems mit drei Datenbanken und einem Arbiterserver
  1. Erstellen Sie folgende Verzeichnisse:

    • c:\server1
    • c:\server2
    • c:\arbiter
  2. Führen Sie den folgenden Befehl aus:

    newdemo c:\server1\one.db
  3. Führen Sie den folgenden Befehl aus:

    newdemo c:\server1\two.db
  4. Führen Sie vom Verzeichnis c:\server1 aus den folgenden Befehl aus:

    newdemo c:\server1\three.db
  5. Starten Sie den Datenbankserver namens server_1:

    dbsrv12 -n server1 -x tcpip(PORT=6871) -su sql c:\server1\one.db -xp on c:\server1\two.db -xp on c:\server1\three.db -xp on

    Es wird empfohlen, dass Sie die Option -su angeben, um das Kennwort für die Dienstprogrammdatenbank anzugeben. Dann können Sie über die Dienstprogrammdatenbank den Datenbankserver herunterfahren oder nötigenfalls erzwingen, dass der Spiegelserver zum Primärserver wird. Siehe Einen Datenbankserver in einem Spiegelungssystem stoppen und Einen Datenbankserver zwingen, zum Primärserver zu werden.

  6. Stellen Sie von Interactive SQL aus eine Verbindung zur Datenbank "one" her und definieren Sie die erforderlichen Spiegelungsobjekte:

    dbisql -c "UID=DBA;PWD=sql;SERVER=server1;DBN=one"
    1. Definieren Sie server1 als Partnerserver für Datenbank "one":

      CREATE MIRROR SERVER server1
      AS PARTNER
      connection_string='SERVER=server1;host=localhost:6871'
      state_file='c:\\server1\\server1state.txt';
    2. Definieren Sie den Datenbankserver primary_one als logischen Primärserver für Datenbank "one":

      CREATE MIRROR SERVER primary_one
      AS PRIMARY
      connection_string='SERVER=primary_one;host=localhost:6871,localhost:6872';
    3. Definieren Sie server2 als Partnerserver für Datenbank "one":

      CREATE MIRROR SERVER server2
      AS PARTNER
      connection_string='SERVER=server2;host=localhost:6872'
      state_file='c:\\server2\\server2state.txt';
    4. Definieren Sie den Datenbankserver mirror_one als logischen Spiegelserver für die Datenbank "one":

      CREATE MIRROR SERVER mirror_one
      AS MIRROR
      connection_string='SERVER=mirror_one;host=localhost:6871,localhost:6872';
    5. Definieren Sie den Arbiterserver:

      CREATE MIRROR SERVER arbiter
      AS ARBITER
      connection_string='SERVER=arbiter;HOST=localhost:6870';
    6. Setzen Sie die Spiegelungsoptionen für das Datenbankspiegelungssystem:

      SET MIRROR OPTION authentication_string='abc';
    7. Trennen Sie die Verbindung zu Interactive SQL.

    8. Erstellen Sie eine Sicherungskopie der Datenbank im Verzeichnis c:\server2:

      dbbackup -c "UID=DBA;PWD=sql;SERVER=server1;DBN=one" c:\server2
  7. Stellen Sie von Interactive SQL aus eine Verbindung zur Datenbank "two" her und definieren Sie die erforderlichen Spiegelungsobjekte:

    dbisql -c "UID=DBA;PWD=sql;SERVER=server1;DBN=two"
    1. Definieren Sie server1 als Partnerserver für Datenbank "two":

      CREATE MIRROR SERVER server1
      AS PARTNER
      connection_string='SERVER=server1;host=localhost:6871'
      state_file='c:\\server1\\server1state.txt';
    2. Definieren Sie den Datenbankserver primary_two als logischen Primärserver für Datenbank "two":

      CREATE MIRROR SERVER primary_two
      AS PRIMARY
      connection_string='SERVER=primary_two;host=localhost:6871,localhost:6872';
    3. Definieren Sie server2 als Partnerserver für Datenbank "two":

      CREATE MIRROR SERVER server2
      AS PARTNER
      connection_string='SERVER=server2;host=localhost:6872'
      state_file='c:\\server2\\server2state.txt';
    4. Definieren Sie den Datenbankserver mirror_two als logischen Spiegelserver für die Datenbank "two":

      CREATE MIRROR SERVER mirror_two
      AS MIRROR
      connection_string='SERVER=mirror_two;host=localhost:6871,localhost:6872';
    5. Definieren Sie den Arbiterserver:

      CREATE MIRROR SERVER arbiter
      AS ARBITER
      connection_string='SERVER=arbiter;HOST=localhost:6870';
    6. Setzen Sie die Spiegelungsoptionen für das Datenbankspiegelungssystem:

      SET MIRROR OPTION authentication_string='def';
    7. Trennen Sie die Verbindung zu Interactive SQL.

    8. Erstellen Sie eine Sicherungskopie der Datenbank im Verzeichnis c:\server2:

      dbbackup -c "UID=DBA;PWD=sql;SERVER=server1;DBN=two" c:\server2
  8. Stellen Sie von Interactive SQL aus eine Verbindung zur Datenbank "three" her und definieren Sie die erforderlichen Spiegelungsobjekte:

    dbisql -c "UID=DBA;PWD=sql;SERVER=server1;DBN=three"
    1. Definieren Sie server1 als Partnerserver für Datenbank "three":

      CREATE MIRROR SERVER server1
      AS PARTNER
      connection_string='SERVER=server1;host=localhost:6871'
      state_file='c:\\server1\\server1state.txt';
    2. Definieren Sie den Datenbankserver primary_three als logischen Primärserver für Datenbank "three":

      CREATE MIRROR SERVER primary_three
      AS PRIMARY
      connection_string='SERVER=primary_three;host=localhost:6871,localhost:6872';
    3. Definieren Sie server2 als Partnerserver für Datenbank "three":

      CREATE MIRROR SERVER server2
      AS PARTNER
      connection_string='SERVER=server2;host=localhost:6872'
      state_file='c:\\server2\\server2state.txt';
    4. Definieren Sie den Datenbankserver mirror_three als logischen Spiegelserver für die Datenbank "three":

      CREATE MIRROR SERVER mirror_three
      AS MIRROR
      connection_string='SERVER=mirror_three;host=localhost:6871,localhost:6872';
    5. Definieren Sie den Arbiterserver:

      CREATE MIRROR SERVER arbiter
      AS ARBITER
      connection_string='SERVER=arbiter;HOST=localhost:6870';
    6. Setzen Sie die Spiegelungsoptionen für das Datenbankspiegelungssystem:

      SET MIRROR OPTION authentication_string='ghi';
    7. Trennen Sie die Verbindung zu Interactive SQL.

    8. Erstellen Sie eine Sicherungskopie der Datenbank im Verzeichnis c:\server2:

      dbbackup -c "UID=DBA;PWD=sql;SERVER=server1;DBN=three" c:\server2
  9. Starten Sie den Datenbankserver namens server_2:

    dbsrv12 -n server2 -x tcpip(PORT=6872) -su sql c:\server2\one.db -xp on c:\server2\two.db -xp on c:\server2\three.db -xp on
  10. Starten Sie den Arbiterserver.

    dbsrv12 -n arbiter -su sql -x tcpip(port=6870) -xf c:\arbiter\arbiterstate.txt -xa "AUTH=abc,def,ghi;DBN=one,two,three"

    Nach dem Start von server2 zeigt das Meldungsfenster des Datenbankservers server1 an, dass server1 der Primärserver im Spiegelungssystem für die Datenbanken eins, zwei und drei ist. Die Meldungen geben auch an, dass die Spiegeldatenbanken eins, zwei und drei (Partner) mit server1 verbunden sind.

    Die Meldungen des Arbiter zeigen an, dass server1 und server2 verbunden sind.

  11. Führen Sie den folgenden Befehl aus, um Interactive SQL zu starten und eine Verbindung zur Datenbank eins auf dem Primärserver herzustellen:

    dbisql -c "UID=DBA;PWD=sql;Server=primary_one;LINKS=TCPIP"
  12. Fügen Sie der SQL Anywhere-Beispieldatenbank Beispieldaten hinzu, indem Sie die folgenden Anweisungen ausführen:

    CREATE TABLE test (col1 INTEGER, col2 CHAR(32));
    INSERT INTO test VALUES(1, 'Hello from server1');
    COMMIT;
  13. Bestimmen Sie, mit welchem Datenbankserver Sie verbunden sind, indem Sie die folgende Anweisung ausführen:

    SELECT PROPERTY( 'ServerName' );

    Der Name des Primärservers wird angezeigt.

  14. Trennen Sie die Verbindung zu Interactive SQL.

  15. Initiieren Sie einen Failover. Sie erreichen dies, indem Sie den Primärserver stoppen, und zwar auf eine der folgenden Arten:

    • Klicken Sie im Meldungsfenster des Datenbankservers auf Herunterfahren.

    • Verwenden Sie den Windows Task-Manager, um die Anwendung zu beenden.

    • Führen Sie den folgenden Befehl aus:

      dbstop -y -c "UID=DBA;PWD=sql;Server=server1"

      Siehe Einen Datenbankserver in einem Spiegelungssystem stoppen.

    Wenn eine Warnmeldung angezeigt wird, dass der Datenbankserver weiterhin eine Verbindung hat, klicken Sie auf Ja, um ihn herunterzufahren.

    Das Meldungsfenster des Arbiter-Datenbankservers zeigt eine Meldung an, die angibt, dass die Verbindung zum Primärserver getrennt wurde.

    Das Meldungsfenster des Arbiter-Datenbankservers, das anzeigt, dass die Verbindung zu server1 getrennt ist.

    Das Meldungsfenster des Datenbankservers für server2 zeigt eine Meldung an, dass er der neue Primärserver ist.

    server2-Fenster "Datenbankservermeldungen"
  16. Starten Sie Interactive SQL erneut, indem Sie den folgenden Befehl ausführen:

    dbisql -c "UID=DBA;PWD=sql;Server=primary_one;LINKS=tcpip"
  17. Führen Sie die folgende Anweisung aus, um festzustellen, ob Sie nun mit server2 verbunden sind:

    SELECT PROPERTY ( 'ServerName' );
  18. Führen Sie die folgende Anweisung aus, um sicherzugehen, dass alle Transaktionen in der Spiegeldatenbank gespiegelt wurden:

    SELECT * FROM test;
  19. Trennen Sie die Verbindung zu Interactive SQL und klicken Sie anschließend auf Herunterfahren im Meldungsfenster des Datenbankservers für die Datenbankserver "arbiter", "" und "server2".

  20. (Optional) Löschen Sie die Verzeichnisse c:\server1, c:\server2 und c:\arbiter.