この構成では、プライマリ・サーバとミラー・サーバのそれぞれが、ミラーリング・システムに参加している 3 つの個別データベースを実行します。3 つのミラーリング・システムはすべて同じ監視サーバと通信します。各ミラーリング・システムは、-sn オプションで指定されたユニークな代替サーバ名を使用します。このような構成では、プライマリ・サーバ、ミラー・サーバ、監視サーバを、それぞれ別のコンピュータで実行することができます。
プライマリ・サーバが使用できなくなった場合は、ロールの切り替えが発生し、ミラー・サーバがデータベースの所有権を取得します。そのミラー・サーバがプライマリ・サーバになります。クライアントはプライマリ・サーバへの接続を再確立する必要があります。プライマリ・サーバへの接続を再確立するために指定する必要があるのは、代替サーバ名だけです。また、この構成には、1 つのデータベースに発生した障害からの保護機能もあります。プライマリ・サーバで実行されているデータベースが使用できなくなると、ロールの切り替えが行われ、障害が発生したデータベースの所有権をミラー・サーバが取得します。このデータベースに対してのみ、ミラー・サーバがプライマリ・サーバになります。クライアントは代替サーバ名を使用して、このデータベースのプライマリ・サーバに対する接続を再確立する必要があります。
次のディレクトリを作成します。
c:\server1 ディレクトリから、次のコマンドを実行します。
dbinit one.db |
dbinit two.db |
dbinit three.db |
次のコマンドを実行して、各データベース用のトランザクション・ログを作成します。
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" |
c:\server1 ディレクトリから c:\server2 ディレクトリにデータベースをコピーします。
監視サーバを起動します。
dbsrv11 -x tcpip(port=2640) -n arbiter -xa "AUTH=abc,def,ghi;DBN=one,two,three" -xf c:\arbiter\arbiterstate.txt -su sql |
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" |
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 の両方が接続されていることを示します。
次のコマンドを実行して、Interactive SQL を起動し、プライマリ・サーバにあるデータベース one に接続します。
dbisql -c "UID=DBA;PWD=sql;ENG=mirrortutorial_one;LINKS=TCPIP" |
次の文を実行して、サンプル・データを SQL Anywhere サンプル・データベースに追加します。
CREATE TABLE test (col1 INTEGER, col2 CHAR(32)); INSERT INTO test VALUES(1, 'Hello from server1'); COMMIT; |
次の文を実行して、接続したデータベース・サーバを確認します。
SELECT PROPERTY( 'ServerName' ); |
プライマリ・サーバの名前が出力されます。
Interactive SQL との接続を切断します。
フェールオーバを開始します。これを行うには、次のいずれかの方法でプライマリ・サーバを停止します。
データベース・サーバ・メッセージ・ウィンドウで [シャットダウン] をクリックします。
Windows のタスク マネージャを使用してタスクを終了します。
次のコマンドを発行します。
dbstop -y -c "UID=DBA;PWD=sql;ENG=server1" |
データベース・サーバの 1 つの接続が有効であるという警告メッセージが表示された場合は、[はい] をクリックしてシャットダウンします。
arbiter のデータベース・サーバ・メッセージ・ウィンドウに、プライマリ・サーバが切断されたことを示すメッセージが表示されます。
server2 のデータベース・サーバ・メッセージ・ウィンドウには、server2 が新しいプライマリ・サーバであることを示すメッセージが表示されます。
次のコマンドを実行して、Interactive SQL を再起動します。
dbisql -c "UID=DBA;PWD=sql;ENG=mirrortutorial_one;LINKS=tcpip" |
次の文を実行して、ミラー・サーバに接続されているかどうかを確認します。
SELECT PROPERTY ( 'ServerName' ); |
次の文を実行して、すべてのトランザクションがミラー・サーバにミラーリングされたかどうかを確認します。
SELECT * FROM test; |
Interactive SQL から切断し、arbiter と server2 のデータベース・サーバ・メッセージ・ウィンドウで [シャットダウン] をクリックします。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |