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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - データベース管理 » データベースの保守 » SQL Anywhere の高可用性

 

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

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

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

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

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

    • c:\server1
    • c:\server2
    • c:\arbiter
  2. c:\server1 ディレクトリから、次のコマンドを実行します。

    dbinit one.db
    dbinit two.db
    dbinit three.db
  3. 次のコマンドを実行して、各データベース用のトランザクション・ログを作成します。

    dbping -d -c "UID=DBA;PWD=sql;DBF=c:\server1\one.db"
    dbping -d -c "UID=DBA;PWD=sql;DBF=c:\server1\two.db"
    dbping -d -c "UID=DBA;PWD=sql;DBF=c:\server1\three.db"
  4. c:\server1 ディレクトリから c:\server2 ディレクトリにデータベースをコピーします。

  5. 監視サーバを起動します。

    dbsrv11 
    -x tcpip(port=2640) 
    -n arbiter 
    -xa "AUTH=abc,def,ghi;DBN=one,two,three" 
    -xf c:\arbiter\arbiterstate.txt 
    -su sql
  6. server1 でデータベースを起動します。

    dbsrv11 
    -n server1 
    -x tcpip(PORT=2638) 
    -xf c:\server1\server1state.txt 
    -su sql 
    c:\server1\one.db 
    -sn mirrortutorial_one 
    -xp "partner=(ENG=server2;LINKS=tcpip(PORT=2639;TIMEOUT=1));
    auth=abc;arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2640;TIMEOUT=1));
    mode=sync" 
    c:\server1\two.db 
    -sn mirrortutorial_two 
    -xp "partner=(ENG=server2;LINKS=tcpip(PORT=2639;TIMEOUT=1));
    auth=def;arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2640;TIMEOUT=1));
    mode=sync" 
    c:\server1\three.db 
    -sn mirrortutorial_three 
    -xp "partner=(ENG=server2;LINKS=tcpip(PORT=2639;TIMEOUT=1));
    auth=ghi;arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2640;TIMEOUT=1));
    mode=sync"
  7. server2 でデータベースを起動します。

    dbsrv11 
    -n server2 
    -x tcpip(PORT=2639) 
    -xf c:\server2\server2state.txt 
    -su sql 
    c:\server2\one.db 
    -sn mirrortutorial_one 
    -xp "partner=(ENG=server1;LINKS=tcpip(PORT=2638;TIMEOUT=1));
    auth=abc;arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2640;TIMEOUT=1));
    mode=sync" 
    c:\server2\two.db 
    -sn mirrortutorial_two 
    -xp "partner=(ENG=server1;LINKS=tcpip(PORT=2638;TIMEOUT=1));
    auth=def;arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2640;TIMEOUT=1));
    mode=sync" 
    c:\server2\three.db 
    -sn mirrortutorial_three 
    -xp "partner=(ENG=server1;LINKS=tcpip(PORT=2638;TIMEOUT=1));
    auth=ghi;arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2640;TIMEOUT=1));
    mode=sync"

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

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

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

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

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

    SELECT PROPERTY( 'ServerName' );

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

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

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

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

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

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

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

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

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

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

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

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

    dbisql -c "UID=DBA;PWD=sql;ENG=mirrortutorial_one;LINKS=tcpip"
  14. 次の文を実行して、ミラー・サーバに接続されているかどうかを確認します。

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

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