主従の同期
日医標準レセプトソフトの2台運用の設定をした状態で主従のデータベースの同期を取る整合ツールの説明をします
Ver.4.5.0より主、従とも日レセサーバ、データベースを停止することなく同期を取ることが出来るようになりました
※同期処理中もクライアントの切断はしませんが、同期処理中はサーバに多くの負荷が掛かるのでクライアントは停止しておくことを推奨します。
従サーバのPostgreSQLの設定変更
同期処理ツールを使用するために、Debian Etch版のインストールドキュメントとUbuntu Hardy版のインストールドキュメント第5版までの通りに従サーバを設定している場合は、以下の箇所を変更してください。
/etc/postgresql/8.*/main/pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD host orca orca 192.168.1.11/32 password ↓ host all orca 192.168.1.11/32 md5
(192.168.1.11は主サーバのアドレス例です。)
設定後、PostgreSQLを再起動します。
従来通り、/etc/jma-reciept/dbgroup.incを設定し、二重化出来ていることを確認してください。
jma-dbsync.shの使用方法
「主従のデータベースに不整合が発生しています」と出た場合の整合の取り方
主従のデータベースの内容がずれてしまったときには Ver.4.5.0からサーバーを停止することなく同期を取ることができます(整合を取るには大きな負荷が掛かりますので、クライアントは出来るだけ停止してください)
- 不整合になった原因をチェックし従側のデータベースが起動していることを確認します。
- 主従の同期を取るツールを実行するには、「主サーバ」から 「orca」ユーザ権限で /usr/lib/jma-receipt/bin/jma-dbsync.sh というコマンドを実行します。
$ sudo -u orca /usr/lib/jma-receipt/bin/jma-dbsync.sh [sudo] password for oruser: [実行ユーザ(oruser)のパスワードを入力してください]
/etc/jma-receipt/dbgroup.incの記述を元に主従のデータベースの比較をし、不整合であった場合には整合を取ります。 - 主従のデータベースをチェックし整合が取られます。このときコマンドを実行したコンソール画面には
2010/03/16/18:27:21 P:dbsync.c:498:Synchronous begin.
というメッセージが表示され、メニュー画面には「同期処理中です。」と表示されます(表示が遅れる場合があります。その場合は一旦違う画面に遷移し戻ってください)。 - 同期処理が終わるとコンソール画面には
Success all sync 2010/03/16/18:27:30 L:dbsync.c:505:Synchronous end. processing time 00:00:09
というメッセージが表示され、メニュー画面の表示は正常に戻りメッセージが消えます。 - そのまま使用可能になります。
jma-dbsync.shのオプション
- [-v]
- 動作のより詳細な出力をします。
- [-allsync]
- DBの比較をせずに同期処理をおこないます
動作詳細
jma-dbsync.sh は /usr/lib/panda/bin/dbsyncを呼び出しています。dbsyncは以下のような動作をおこないます。
- dbsyncは dbredirector にDB比較をすることを宣言します。
- dbredirector は主従の同期が取れているタイミングが取れたタイミングで dbsyncに返します。
- dbsync はトランザクションを開始し、データベースの比較をします。データベースの比較は現在のところ各テーブルのレコード数を比較します。
- dbsync は不整合があった場合に同期モードにするようにdbredirectorに送ります。
- dbredirectorは再度タイミングをはかり、同期モードに移行し、従サーバへの更新をメモリに貯めておきます。
- dbsync は同期を取ります。これは内部でpg_dumpを起動し、psqlでリストアする動作を取ります。現在では主従のデータベースの差異が少しでもデータベースの全てのテーブルを同期します。
- dbsync は同期処理が終わったことをdbredirectorに通知します。
- dbredirectorは従サーバに再接続し、貯めておいた更新処理を開始します。
- 正常に更新できれば通常モードに移行します