# 管理解説書

## udebug

目的

データベース・サーバー・プロセスに関連した Ubik プロセスの状況を報告します。

構文

    udebug -servers  <server machine>  [-port <IP port>]  [-long]  [-help]

    udebug -s  <server machine>  [-p <IP port>]  [-l]  [-h]

構文

udebug コマンドは、 -servers 引き数で指定されたデータベース・サーバー・マシンで実行中の、 -port 引き数で識別されるデータベース・サーバー・プロセスのライト・ウェイト Ubik プロセスの状況を表示します。出力では、ピア・データベース・サーバー・プロセスが実行しているマシンのうち、同期サイト (Ubik コーディネーター) となるもの、および、それらの間の接続状況が識別されます。

オプション

-servers
  状況情報を表示するプロセスを実行しているデータベース・サーバー・マシンを指定します。マシンの IP アドレスを小数点付き 10 進数の形式で指定してください。完全修飾のホスト名 (たとえば、 fs1.abc.com) か、他のマシンと区別できる形式であれば、ホスト名の短縮形を指定してください。短縮形が使用できるかどうかは、このコマンドを発行した時点での名前解決サービス (ドメイン・ネーム・サービス、ローカル・ホスト表など) の可用性によって異なります。

-port
  プロセス名またはポート番号のいずれかで状況情報を表示するデータベース・サーバー・プロセスを識別します。以下の値のいずれかを指定します。

    buserver または 7021 (バックアップ・サーバーの場合)

    kaserver または 7004 (認証サーバーの場合)

    ptserver または 7002 (保護サーバーの場合)

    vlserver または 7003 (ボリューム・ロケーション・サーバーの場合)

-long
  -servers 引き数で指定されたマシンのピアごとの追加情報を報告します。そのマシンが同期サイトである場合は、デフォルトで、この情報が表示されます。

-help
  このコマンドのオンライン・ヘルプを出力します。これ以外の有効なオプションはすべて無視されます。

出力

出力のメッセージには、 -servers 引き数で指定されたマシンでの Ubik プロセスに関する基本状況情報を提示しているものもあり、他には、主にデバッグ目的の場合に有用なものもあります。

基本 Ubik 状況を検査するには、データベース・サーバー・マシンごとにコマンドを順に発行します。それぞれの出力ごとに、以下のメッセージのいずれかが、出力の上部 3 分の 1 に表示されます。

       I am sync site . . . (#_sites servers)

       I am not sync site

同期サイトの場合、次のメッセージは、すべてのサイトのデータベースのバージョンが同じであることを示しています。これは、Ubik が正しく機能しているという意味です。 `1f` 以外の値の記述については、次を参照してください。

       Recovery state 1f

Ubik 操作が正しく実行されるためには、データベース・サーバー・マシンのクロックの時刻が合っていなければなりません。出力の 2 行目および 3 行目にある以下のメッセージは、データベース・サーバー・マシンのクロック、および udebug コマンドが発行されるマシンのクロックに従って、現在の日付および時刻を報告します。

       Host's IP_addr time is dbserver_date/time
       Local time is local_date/time (time differential skew secs)

skew は、データベース・サーバー・マシンのクロックとローカル・クロックの差です。差の絶対値は Ubik 機能に対して致命的なものではありませんが、データベース・サーバー・マシンの skew 値の間に 2 、3 秒以上の差があれば、クロックが同期していないことになり、 Ubik パフォーマンスが妨げられる可能性があります。

出力のすべてのメッセージについて、以下に説明します。記述のように、デバッグの場合、非常に有用であるし、 Ubik のインプリメンテーションについて理解しているユーザーには非常に分かりやすくなっています。

出力は、以下のメッセージで始まります。 1 番目のメッセージは、 -servers 引き数で指定されたマシンのオペレーティング・システムで構成されている IP アドレスを報告します。前述のように、 2 番目と 3 番目のメッセージは、データベース・サーバー・マシンと udebug コマンドが発行されるマシンのそれぞれのクロックに従って、現在の日付および時刻を報告します。出力内の後続のタイム・スタンプはすべて、データベース・サーバー・マシン・クロックではなく、ローカル・クロックで表されます。

       Host's addresses are: list_of_IP_addrs
       Host's IP_addr time is dbserver_date/time
       Local time is local_date/time (time differential skew secs)

skew が約 10 秒を超える場合、次のメッセージが表示されます。記述のように、これは、必ずしも Ubik の誤動作を意味する訳ではありません。データベース・サーバー・マシン間ではなく、データベース・サーバー・マシンとローカル・マシンの間のクロック・スキューを示します。

       ****clock may be bad

コーディネーター選出プロセス中に、udebug コマンドが発行され、投票がまだ開始されていない場合は、次のメッセージが表示されます。

       Last yes vote not cast yet

そうでない場合、出力は、以下のメッセージで始まります。

       Last yes vote for sync_IP_addr was last_vote secs ago (sync site);
       Last vote started vote_start secs ago (at date/time)
       Local db version is db_version

最初のメッセージは、この Ubik プロセスがコーディネーターとして最後に投票した、ピア (自分で自分自身を選出できる) および、どのくらい前に投票したのかを示しています。 2 番目のメッセージは、Ubik コーディネーターが、どのくらい前にセカンダリー・サイトからの投票の確認を要求したのかを示しています。通常、last_vote 値および vote_start 値は同じで、これらの値の差異は、 2 つのデータベース・サーバー・マシン間のクロック・スキューまたはスロー・ネットワーク接続を示している可能性があります。小さな差異は、問題ありません。 3 番目のメッセージは、この Ubik プロセスで保守されるデータベースの現行バージョン番号 db_version を報告します。この番号は、ピリオドで 2 つのフィールドに分かれています。ピリオドより前のフィールドは、最新のコーディネーター選出後、初めてデータベースが変更されたときに反映されるタイム・スタンプに基づくもので、ピリオドより後のフィールドは、選出以降変更された回数を示しています。

出力には、Ubik プロセスがコーディネーターであるか否かによって異なるメッセージが続きます。

- データベース・サーバー・マシンが 1 つしかない場合は、以下のメッセージで示されるように、それが、常に、コーディネーター (同期サイト) です。

         I am sync site forever (1 server)

- 複数のデータベース・サイトがあり、-servers 引き数でコーディネーター (同期サイト) を指定する場合、出力には、以下の 2 つのメッセージが続きます。

         I am sync site until expiration secs from now (at date/time) (#_sites servers)
         Recovery state flags

  最初のメッセージは、次に定足数を保持しようとして失敗しても、そのサイトがコーディネーターでいられる期間と定足数に参加しているサイトの数を報告します。 2 番目のメッセージの flags フィールドは、定足数の現在の状況を示す 16 進数です。値 `1f` は、完全なデータベース同期を示し、値 `f` は、コーディネーターのデータベースは正しいが、セカンダリー・サイトにもあるのかどうかを判別するために、すべてのセカンダリー・サイトにアクセスできる訳ではないことを示します。コーディネーターの選出時に、udebug コマンドが発行されると、低いほうの値が受け入れ可能となりますが、これが繰り返されれば、問題になります。個々のフラグの意味は、以下のとおりです。

  `0x1`
    このマシンはコーディネーターです。

  `0x2`
    コーディネーターが、最大バージョン番号のデータベースをもつサイトを判別しました。

  `0x4`
    コーディネーターに、最大バージョン番号のデータベースのコピーがあります。

  `0x8`
    データベースのバージョン番号が正しく更新されました。

  `0x10`
    すべてのサイトに、最大バージョン番号のデータベースがあります。

  コーディネーターがデータベースに変更を書き込んでいるときに、 udebug コマンドが発行されると、次の追加メッセージが表示されます。

         I am currently managing write transaction identifier

- -servers 引き数で、セカンダリー・サイトを指定すると、出力には、以下のメッセージが続きます。

         I am not sync site
         Lowest host lowest_IP_addr was set low_time secs ago
         Sync host sync_IP_addr  was set sync_time secs ago

  lowest_IP_addr は、 Ubik プロセスが最近メッセージを受け取ったピアの最も低い IP アドレスです。一方、sync_IP_addr は現行コーディネーターの IP アドレスです。これらの IP アドレスが異なる場合、最も低い IP アドレス のマシンは、現在、コーディネーターではありません。 Ubik プロセスは、マシン間で連絡がある限り、現行コーディネーターの投票を続行し、最大限の安定度を提供します。ただし、別にコーディネーターを選出するイベントで、この Ubik プロセスは、(連絡があると仮定して)、代わりに lowest_IP_addr サイトに投票します。これは、最低の IP アドレス のサイトに対して、選出で投票するようにしてあるためです。

同期サイトとセカンダリー・サイトの両方の場合は、出力に、以下のメッセージが続きます。最初のメッセージは、同期サイトにおけるデータベースのバージョン番号を報告します。これは、その前の `Local db version` メッセージにより報告されている db_version と一致している必要があります。 2 番目のメッセージは、任意のオペレーションまたは特に書き込みに対して現在ロックされている VLDB レコード数を示します。オペレーションの進行中に udebug コマンドが発行される場合、この値は非ゼロになります。

         Sync site's db version is db_version
       locked locked pages, writes of them for write

データベース・レコードについて読み取りも書き込みもロックされている場合に限り、以下のメッセージが次に表示されます。

       There are read locks held
       There are write locks held

同様に、udebug コマンドの発行時に、読み取りまたは書き込みトランザクションが実行中である場合に限り、以下のメッセージの 1 つまたは複数が次に表示されます。

       There is an active write transaction
       There is at least one active read transaction
       Transaction tid is tid

-servers 引き数で指定されたマシンがコーディネーターである場合、次のメッセージが、現在のコーディネーターが最後にデータベースを更新したのはいつかを報告します。

       Last time a new db version was labelled was:
                last_restart secs ago (at date/time)

-servers 引き数で指定されたマシンがコーディネーターである場合、出力の最後に、定足数に入っているセカンダリー・サイトごとの項目が以下の形式で出力されます。

       Server( IP_address ): (db db_version)
       last vote rcvd last_vote secs ago (at date/time),
       last beacon sent last_beacon secs ago (at date/time), last vote was { yes | no }
       dbcurrent={ 0 | 1 }, up={ 0 | 1 } beaconSince={ 0 | 1 }

1 行目では、サイトの IP アドレスとそれが保持しているデータベースのバージョン番号を報告します。 last_vote フィールドは、コーディネーターがそのサイトで Ubik プロセスから投票メッセージをどのくらい前に受け取ったのかを報告し、 last_beacon フィールドは、コーディネーターが投票メッセージを最後にどのくらい前に要求したのかを報告します。コーディネーター選出プロセス中に、udebug コマンドが発行されたのに、投票がまだ開始されていない場合は、次のメッセージが代わりに表示されます。

       Last vote never rcvd
       Last beacon never sent

各項目の最終行のフィールドの意味は以下のとおりです。

- `dbcurrent` は、最大バージョン番号のデータベースをもつサイトの場合は `1` で、そうでない場合は `0` です。
- `up` は、サイトの Ubik プロセスが正しく機能している場合は `1` で、そうでない場合は `0` です。
- `beaconSince` は、サイトがコーディネーターの最新の投票要求に応答している場合は `1` で、そうでない場合は `0` です。

-long フラグを組み込むと、 -servers 引き数がセカンダリー・サイトを指定するときに、ピア項目を作成しますが、その場合、IP_address フィールドのみ正しいことが保証されています。たとえば、db_version フィールドの値は、通常 `0.0` ですが、これは、セカンダリー・サイトがこの情報に関してピアを調査しないためです。 last_vote および last_beacon フィールドの値は、このサイトがコーディネーターとして最後に投票を受け取ったのはいつか、あるいは投票を要求したのはいつかを示します。これらの値は、通常、最新のコーディネーター選出がいつだったのかを示します。

例

この例では、同期サイトである、マシン afs1 上のボリューム・ロケーション・サーバーの Ubik プロセスの状況を検査します。

       % udebug afs1 vlserver
       Host's addresses are: 192.12.107.33
       Host's 192.12.107.33 time is Wed Oct 27 09:49:50 1999
       Local time is Wed Oct 27 09:49:52 1999 (time differential 2 secs)
       Last yes vote for 192.12.107.33 was 1 secs ago (sync site);
       Last vote started 1 secs ago (at Wed Oct 27 09:49:51 1999)
       Local db version is 940902602.674
       I am sync site until 58 secs from now (at Wed Oct 27 09:50:50 1999) (3 servers)
       Recovery state 1f
       Sync site's db version is 940902602.674
       0 locked pages, 0 of them for write
       Last time a new db version was labelled was:
                129588 secs ago (at Mon Oct 25 21:50:04 1999)

       Server( 192.12.107.35 ): (db 940902602.674)
           last vote rcvd 2 secs ago (at Wed Oct 27 09:49:50 1999),
           last beacon sent 1 secs ago (at Wed Oct 27 09:49:51 1999), last vote was yes
           dbcurrent=1, up=1 beaconSince=1

       Server( 192.12.107.34 ): (db 940902602.674)
           last vote rcvd 2 secs ago (at Wed Oct 27 09:49:50 1999),
           last beacon sent 1 secs ago (at Wed Oct 27 09:49:51 1999), last vote was yes
           dbcurrent=1, up=1 beaconSince=1

この例では、セカンダリー・サイトである、IP アドレス 192.12.107.34 のマシン上の認証サーバーの状況を検査します。ローカル・クロックは、データベース・サーバー・マシンのクロックよりも約 4 分遅れています。

       % udebug 192.12.107.34 7004
       Host's addresses are: 192.12.107.34
       Host's 192.12.107.34 time is Wed Oct 27 09:54:15 1999
       Local time is Wed Oct 27 09:50:08 1999 (time differential -247 secs)
       ****clock may be bad
       Last yes vote for 192.12.107.33 was 6 secs ago (sync site);
       Last vote started 6 secs ago (at Wed Oct 27 09:50:02 1999)
       Local db version is 940906574.25
       I am not sync site
       Lowest host 192.12.107.33 was set 6 secs ago
       Sync host 192.12.107.33 was set 6 secs ago
       Sync site's db version is 940906574.25
       0 locked pages, 0 of them for write

必要となる特権

関連情報

buserver

kaserver

ptserver

vlserver

[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]

(C) IBM Corporation 2000. All Rights Reserved