2台運用の状態取得
データベース2重化の状態は異常があった場合、dbredirector が指定されたログファイルと syslog に書き出されます。またクライアントの「(M00)マスターメニュー」に表示されるようになりました。
出力メッセージ
現在この画面に出るメッセージは、以下の通りです。
「リダイレクタ接続に失敗しました」と出る場合
dbredirector を使用すると設定してあり、dbredirector の設定項目がありながら、なんらかの理由で dbredirector への接続ができない場合です。
主に以下の原因が考えられます。
- dbredirector の設定(dbgroup.inc)がリダイレクト元のデータベースを指していてエラーチェックに引っかかった。
- dbredirector の使用portが別に使われていて、dbiredirector が起動できなかった。
- 何らかが原因で(例えば誰かが killした、バグにより落ちた) dbredirectorがダウンした。
dbredirector への接続ができないと不整合そのものの取得ができなくなるため、(当然ながら不整合状態になりますが、ログにも書かれない状態)早急に設定等を見直す必要があります。
「主従のデータベースに不整合が発生しています」と出る場合
dbredirector が従側のデータベースに障害を検知した場合に表示されます。
主に以下の原因が考えられます。
- 従のデータベースから(接続エラー以外の)エラーが返ってきた
- 従のデータベースと主のデータベースのチェックで相違があった
- 従のデータベースに接続待ち時間を過ぎても接続出来なかった
いずれの場合も dbreidirectorは従のデータベースとは切断し、ログ出力のみをするモードに切り替わります。
dbredirector のログには (デフォルトでは/var/lib/jma-receipt/dbredirector/orca.log)以下のように出力されます。
/* 2006/02/23/16:26:22/ ========== dbredirector start ========== */ (略) '01', 5, 0, 0, 0, 0, 0, '', '', '', '', '20060223', '20060223', '162817') ; /* 2006/02/23/16:29:29/ ========== DB synchronous failure ========== */ /* 2006/02/23/16:29:29/00000001 */ UPDATE tbl_adrs SET LPUBCD (略)
これは「DB synchronous failure」の次の行の UPDATE を実行中に不整合を検出したため、これ以降は更新出来なかったという意味になります。
あくまで、「DB synchronous failure」より前の従側への更新は成功したという意味であり、これ以前は整合は取れていたという意味ではないことに注意してください。
不整合状態になったらVer4.5.0から jma-dbsync.shを使用することにより再起動せずに整合を取ることが可能です。それ以前のバージョンでは停止してから整合を取ってください。
※現在では jma-receipt の再起動により不整合状態が解除されるので、再同期処理をおこなわずに jma-receiptを再起動した場合、画面では整合が取れているように見える場合があります。
やむをえず不整合状態のまま、 jma-receiptを再起動してしまうような場合は、orca.log を監視し、不整合後同期し直した後は orca.log を削除するかリネームしておくと再同期すべきか判断することが出来るようになります。
「リダイレクタ接続待ちです」と出る場合
従側のデータベースとの接続が失敗した場合に表示されます。
- 従のデータベースに接続出来なかったので、待ち状態に入った(従がまだ起動していないのに主を起動した場合)
- 従のデータベースとの接続が切れてしまった。(従だけリブートした、従とのネットワークが切れた等)
dbredirectorは再接続するようになっているため、dbredirector に更新要求が届いてから 1分に1回再接続を 3回繰り返します。その間に従側のデータベースとの接続が確立されれば、正常状態に戻ります。
その間に接続が出来なかった場合は、不整合状態とみなし「主従のデータベースに不整合が発生しています」という表示に変わります
いずれの場合も画面を出した状態で待っていても状態表示は変わるようにはなっていません。現状ではクライアントを立ち上げ直したり、一旦違う画面に遷移してから戻ってくると必要があります。
「同期処理中です。」と出る場合
jma-dbsync.shによりデータベースの同期処理をしています。重い処理が走っていますのでクライアントの操作は控えるようにしてください
「従サーバに接続しています。」と出る場合
dbredirectorが接続しているため従サーバーと判定されています。従サーバーだったマシンをメインにする場合は、主サーバーを停止して再起動をしてください。
表示が消えない場合は、何らかの原因でロックテーブルが残ってしまったことが考えられます。以下のようにして手動でテーブルを削除してください
$ sudo -u orca psql orca -c "drop table montsuqi_redirector_lock_table;"
上記コマンドの実行でも消えない場合があります
その場合は「fix_redl.tgz」をダウンロードして以下のように実行してください
$ tar xvzf fix_redl.tgz $ sudo bash ./fix_redl.sh
syslog出力メッセージ
syslog には状態が遷移と共にエラー内容等が出力されます。主従の状態を監視したい管理者は syslog を監視ツール等を使って監視することができます
MONTSUQIのsyslog 出力は panda/アプリケーション名 という形式で出力されます。dbredirector は panda/dbredirector[pid]: という形式で出力されるため、これを監視対象とするとよいでしょう。
以下は出力例です
起動時。
Feb 23 16:44:24 localhost panda/dbredirector[2485]: dbredirector start
データベース接続成功。
Feb 22 12:12:06 localhost panda/dbredirector[7543]: connect to database successed
データベース接続失敗。接続エラーメッセージがあった場合は、この後にエラーメッセージが出力されます。
Feb 23 17:35:06 localhost panda/dbredirector[3168]: connect to database failed
同期失敗。これ以降は従の更新はおこなわれません。
Feb 21 20:36:21 localhost panda/dbredirector[1394]: DB synchronous failure
同期失敗。従のデータベースにエラーがあった場合。
Feb 21 15:43:49 localhost panda/dbredirector[7291]: ERROR: relation "tbl_uketuke" does not exist Feb 21 15:43:49 localhost panda/dbredirector[7291]: DB synchronous failure