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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー データベース管理 » データベースのメンテナンス » SQL Anywhere の高可用性

 

チュートリアル:監視サーバーを共有する複数のデータベースでデータベースミラーリングを使用する

注意

異なるコンピューターで実行されているデータベースサーバーでこのチュートリアルを使用する場合は、接続文字列内のローカルホストへの参照を、実際のコンピューター名に変更する必要があります。

%SQLANYSAMP12%\SQLAnywhere\DBMirror に、スケールアウトシステムでデータベースミラーリングを使用するサンプルがあります。このサンプルは、1 台のコンピューターまたは複数のコンピューターで実行できます。

この構成では、プライマリサーバーとミラーサーバーのそれぞれが、ミラーリングシステムに参加している 3 つの個別データベースを実行します。3 つのミラーリングシステムはすべて同じ監視サーバーと通信します。各ミラーリングシステムでは、CREATE MIRROR SERVER 文の PRIMARY 句と MIRROR 句で指定された一意の代替サーバー名が使用されます。このような構成では、プライマリサーバー、ミラーサーバー、監視サーバーを、それぞれ別のコンピューターで実行することができます。

ミラーリングシステムを示す図。

プライマリサーバーが使用できなくなった場合は、ロールの切り替えが発生し、ミラーサーバーがデータベースの所有権を取得します。そのミラーサーバーがプライマリサーバーになります。クライアントはプライマリサーバーへの接続を再確立する必要があります。プライマリサーバーへの接続を再確立するために指定する必要があるのは、代替サーバー名だけです。また、この構成には、1 つのデータベースに発生した障害からの保護機能もあります。プライマリサーバーで実行されているデータベースが使用できなくなると、ロールの切り替えが行われ、障害が発生したデータベースの所有権をミラーサーバーが取得します。このデータベースに対してのみ、ミラーサーバーがプライマリサーバーになります。クライアントは代替サーバー名を使用して、このデータベースのプライマリサーバーに対する接続を再確立する必要があります。

 ♦ 3 つのデータベースと 1 つの監視サーバーで構成されるミラーリングシステムの設定
  1. 次のディレクトリを作成します。

    • c:\server1
    • c:\server2
    • c:\arbiter
  2. 次のコマンドを実行します。

    newdemo c:\server1\one.db
  3. 次のコマンドを実行します。

    newdemo c:\server1\two.db
  4. c:\server1 ディレクトリから、次のコマンドを実行します。

    newdemo c:\server1\three.db
  5. server1 という名前のデータベースサーバーを起動します。

    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

    -su オプションを使用して、ユーティリティデータベースのパスワードを指定することをおすすめします。これにより、ユーティリティデータベースを使用してデータベースサーバーをシャットダウンしたり、必要に応じてミラーサーバーを強制的にプライマリサーバーにしたりできるようになります。ミラーリングシステムのデータベースサーバーの停止データベースサーバーの強制プライマリサーバー化を参照してください。

  6. Interactive SQL からデータベース one に接続し、必要なミラーリングオブジェクトを定義します。

    dbisql -c "UID=DBA;PWD=sql;SERVER=server1;DBN=one"
    1. server1 をデータベース one のパートナーサーバーとして定義します。

      CREATE MIRROR SERVER server1
      AS PARTNER
      connection_string='SERVER=server1;host=localhost:6871'
      state_file='c:\\server1\\server1state.txt';
    2. データベースサーバー primary_one をデータベース one の論理プライマリサーバーとして定義します。

      CREATE MIRROR SERVER primary_one
      AS PRIMARY
      connection_string='SERVER=primary_one;host=localhost:6871,localhost:6872';
    3. server2 をデータベース one のパートナーサーバーとして定義します。

      CREATE MIRROR SERVER server2
      AS PARTNER
      connection_string='SERVER=server2;host=localhost:6872'
      state_file='c:\\server2\\server2state.txt';
    4. データベースサーバー mirror_one をデータベース one の論理ミラーサーバーとして定義します。

      CREATE MIRROR SERVER mirror_one
      AS MIRROR
      connection_string='SERVER=mirror_one;host=localhost:6871,localhost:6872';
    5. 監視サーバーを定義します。

      CREATE MIRROR SERVER arbiter
      AS ARBITER
      connection_string='SERVER=arbiter;HOST=localhost:6870';
    6. データベースミラーリングシステムのミラーリングオプションを設定します。

      SET MIRROR OPTION authentication_string='abc';
    7. Interactive SQL との接続を切断します。

    8. c:\server2 ディレクトリにデータベースのバックアップコピーを作成します。

      dbbackup -c "UID=DBA;PWD=sql;SERVER=server1;DBN=one" c:\server2
  7. Interactive SQL からデータベース two に接続し、必要なミラーリングオブジェクトを定義します。

    dbisql -c "UID=DBA;PWD=sql;SERVER=server1;DBN=two"
    1. server1 をデータベース two のパートナーサーバーとして定義します。

      CREATE MIRROR SERVER server1
      AS PARTNER
      connection_string='SERVER=server1;host=localhost:6871'
      state_file='c:\\server1\\server1state.txt';
    2. データベースサーバー primary_two をデータベース two の論理プライマリサーバーとして定義します。

      CREATE MIRROR SERVER primary_two
      AS PRIMARY
      connection_string='SERVER=primary_two;host=localhost:6871,localhost:6872';
    3. server2 をデータベース two のパートナーサーバーとして定義します。

      CREATE MIRROR SERVER server2
      AS PARTNER
      connection_string='SERVER=server2;host=localhost:6872'
      state_file='c:\\server2\\server2state.txt';
    4. データベースサーバー mirror_two をデータベース two の論理ミラーサーバーとして定義します。

      CREATE MIRROR SERVER mirror_two
      AS MIRROR
      connection_string='SERVER=mirror_two;host=localhost:6871,localhost:6872';
    5. 監視サーバーを定義します。

      CREATE MIRROR SERVER arbiter
      AS ARBITER
      connection_string='SERVER=arbiter;HOST=localhost:6870';
    6. データベースミラーリングシステムのミラーリングオプションを設定します。

      SET MIRROR OPTION authentication_string='def';
    7. Interactive SQL との接続を切断します。

    8. c:\server2 ディレクトリにデータベースのバックアップコピーを作成します。

      dbbackup -c "UID=DBA;PWD=sql;SERVER=server1;DBN=two" c:\server2
  8. Interactive SQL からデータベース three に接続し、必要なミラーリングオブジェクトを定義します。

    dbisql -c "UID=DBA;PWD=sql;SERVER=server1;DBN=three"
    1. server1 をデータベース three のパートナーサーバーとして定義します。

      CREATE MIRROR SERVER server1
      AS PARTNER
      connection_string='SERVER=server1;host=localhost:6871'
      state_file='c:\\server1\\server1state.txt';
    2. データベースサーバー primary_three をデータベース three の論理プライマリサーバーとして定義します。

      CREATE MIRROR SERVER primary_three
      AS PRIMARY
      connection_string='SERVER=primary_three;host=localhost:6871,localhost:6872';
    3. server2 をデータベース three のパートナーサーバーとして定義します。

      CREATE MIRROR SERVER server2
      AS PARTNER
      connection_string='SERVER=server2;host=localhost:6872'
      state_file='c:\\server2\\server2state.txt';
    4. データベースサーバー mirror_three をデータベース three の論理ミラーサーバーとして定義します。

      CREATE MIRROR SERVER mirror_three
      AS MIRROR
      connection_string='SERVER=mirror_three;host=localhost:6871,localhost:6872';
    5. 監視サーバーを定義します。

      CREATE MIRROR SERVER arbiter
      AS ARBITER
      connection_string='SERVER=arbiter;HOST=localhost:6870';
    6. データベースミラーリングシステムのミラーリングオプションを設定します。

      SET MIRROR OPTION authentication_string='ghi';
    7. Interactive SQL との接続を切断します。

    8. c:\server2 ディレクトリにデータベースのバックアップコピーを作成します。

      dbbackup -c "UID=DBA;PWD=sql;SERVER=server1;DBN=three" c:\server2
  9. server2 という名前のデータベースサーバーを起動します。

    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. 監視サーバーを起動します。

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

    server2 を起動した後、server1 のデータベースサーバーメッセージウィンドウに、server1 がデータベース one、two、three のミラーリングシステムにおけるプライマリサーバーであることが表示されます。また、メッセージには、one、two、three のミラーデータベース (パートナー) が server1 に接続されていることも表示されます。

    arbiter のメッセージは、server1 と server2 の両方が接続されていることを示します。

  11. 次のコマンドを実行して、Interactive SQL を起動し、プライマリサーバーにあるデータベース one に接続します。

    dbisql -c "UID=DBA;PWD=sql;Server=primary_one;LINKS=TCPIP"
  12. 次の文を実行して、サンプルデータを SQL Anywhere サンプルデータベースに追加します。

    CREATE TABLE test (col1 INTEGER, col2 CHAR(32));
    INSERT INTO test VALUES(1, 'Hello from server1');
    COMMIT;
  13. 次の文を実行して、接続したデータベースサーバーを確認します。

    SELECT PROPERTY( 'ServerName' );

    プライマリサーバーの名前が出力されます。

  14. Interactive SQL との接続を切断します。

  15. フェールオーバーを開始します。これを行うには、次のいずれかの方法でプライマリサーバーを停止します。

    • データベースサーバーメッセージウィンドウで [シャットダウン] をクリックします。

    • Windows のタスク マネージャーを使用してタスクを終了します。

    • 次のコマンドを実行します。

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

      ミラーリングシステムのデータベースサーバーの停止を参照してください。

    データベースサーバーの 1 つの接続が有効であるという警告メッセージが表示された場合は、[はい] をクリックしてシャットダウンします。

    arbiter のデータベースサーバーメッセージウィンドウに、プライマリサーバーが切断されたことを示すメッセージが表示されます。

    server1 が切断されたことを示す arbiter のデータベースサーバーメッセージウィンドウ。

    server2 のデータベースサーバーメッセージウィンドウには、server2 が新しいプライマリサーバーであることを示すメッセージが表示されます。

    server2 のデータベースサーバーメッセージウィンドウ。
  16. 次のコマンドを実行して、Interactive SQL を再起動します。

    dbisql -c "UID=DBA;PWD=sql;Server=primary_one;LINKS=tcpip"
  17. 次の文を実行して、server2 に接続されているかどうかを確認します。

    SELECT PROPERTY ( 'ServerName' );
  18. 次の文を実行して、すべてのトランザクションがミラーデータベースにミラーリングされたかどうかを確認します。

    SELECT * FROM test;
  19. Interactive SQL から切断し、arbiter と server2 のデータベースサーバーメッセージウィンドウで [シャットダウン] をクリックします。

  20. (任意) c:\server1c:\server2c:\arbiter の各ディレクトリを削除します。