トップ > 日医標準レセプトソフト > 運用のための各種設定 > 2台運用の設定(日レセ5.2以降)

2台運用の設定(日レセ5.2以降)

 本ページは日レセ5.2以降を対象としています。日レセ5.1以前についてはこちらを参照してください。

メニュー


2台運用の概要

 日医標準レセプトソフトでは、業務を安全に運用できるように、マスタとスタンバイの2台のサーバを使った運用を推奨しています。
平常時はマスタサーバで日レセの運用を行い、ハードウェア故障などの障害発生時にスタンバイサーバに切り替えて運用(フェイルオーバ)を行うことを想定しています。

マスタサーバのみの運用でもデータベース(以降DBと省略)のバックアップがあれば、別のサーバをセットアップして運用の切り替えが可能ですが、2台運用体制で事前にスタンバイサーバを用意しておくことで運用停止時間を短くすることができます。

注意点

2台運用はサーバのハードウェア障害に備えるための概念であり、データのバックアップ用意とは多少異なります。2台運用を行っていてもオペレーションミス等によるDBの論理的破損(患者情報の削除など)は防止できません。(破損状態もスタンバイに同期されてしまうためです)。DBや重要ファイルのバックアップは2台運用とは別に用意することをお薦めします。

  • DBダンプ、重要ファイルの定期的な外部媒体へのコピー等

2台運用の仕組み

 マスタサーバのDBをスタンバイサーバのDBに同期(レプリケーション)します。DBのレプリケーションはPostgreSQLの機能で行うためマスタサーバとスタンバイサーバのPostgreSQLバージョン(=Ubuntu OSバージョン)が一致していることが動作条件となります。

また日レセパッケージ、プログラム更新、プリンタ設定等のDB以外の部分については別途手動でスタンバイサーバに設定する必要があります。

DBレプリケーションの設定

説明のための前提条件

 説明のためマスタサーバ、スタンバイサーバの状態は以下とします。

 IPアドレス
OS
PostgreSQL
 マスタサーバ 192.168.56.101 Ubuntu 20.04 12.5
 スタンバイサーバ 192.168.56.102 Ubuntu 20.04 12.5

 

マスタサーバの設定

レプリケーションユーザ作成

以下のコマンドでPostgreSQLのレプリケーションユーザを作成します。 WITH PASSWORD ''で囲まれた部分がパスワードとなります。ここではpasswordとしていますが適切なパスワードを設定してください。

 $ sudo -u postgres psql -c "CREATE USER replication WITH PASSWORD 'password' REPLICATION;"

postgresql.confの編集

 レプリケーションを動作させるために /etc/postgresql/12/main/postgresql.conf の以下の設定を編集します。コメントアウトされている設定はコメントを解除(先頭#を削除)した上で値を変更してください。

Ubuntu 18.04の場合は /etc/postgresql/10/main/postgresql.conf となります。以降適宜読み替えてください。

listen_addresses = '*'
max_wal_senders = 2
wal_keep_segments = 32
max_wal_size = 1GB
min_wal_size = 80MB
wal_level = replica

pg_hba.confの編集

スタンバイサーバからレプリケーションユーザが接続できるよう/etc/postgresql/12/main/pg_hba.confを編集します。最下部に以下の行を追加します。

host    replication     all             192.168.56.102/32       md5

4列目にスタンバイサーバのIPアドレスを指定します。 

PostgreSQLの再起動

以下のコマンドでPostgreSQLを再起動します。

 $ sudo systemctl restart postgresql 

スタンバイサーバの設定

postgresql.confの編集

以下の設定項目を編集します。この設定を行うとDBに参照専用としてアクセスが可能となります。(更新はできません。)

max_wal_senders = 2
hot_standby = on

PostgreSQLの停止

以下のコマンドでPostgreSQLを停止します。

 $ sudo systemctl stop postgresql 

コマンドによる同期

以下のコマンドでマスタサーバと同期を行います。最初のコマンドでPostgreSQLデータディレクトリの削除を行い、2番目のコマンドでDBの同期を行います。-hオプションの後にマスタサーバのIPアドレスを指定します。またコマンド実行時にパスワードの入力を求められるのでマスタサーバで作成したレプリケーションユーザのパスワードを入力します。PostgreSQLデータディレクトリの規模によっては実行に多少時間がかかります。

$ sudo rm -rf /var/lib/postgresql/12/main
$ sudo -u postgres pg_basebackup -R -h 192.168.56.101 -p 5432 -U replication -D /var/lib/postgresql/12/main/ -W
Password:

エラーが発生した場合は以下を確認してください。

  • コマンドの-hオプションのIPアドレスが正しいか
  • マスタサーバのPostgreSQL設定が正しいか
  • マスタサーバでPostgreSQLが起動しているか
  • スタンバイサーバのPostgreSQLデータディレクトリを正しく削除できているか
  • レプリケーションユーザのパスワードが正しいか

PostgreSQLの起動

 以下のコマンドでPostgreSQLを起動します。特にエラーが発生しなければ同期が開始されています。
$ sudo systemctl start postgresql 

同期の確認

マスタサーバで以下のコマンドを実行します。

$ sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"

  pid   | usesysid |   usename   | application_name |  client_addr   | client_hostname | client_port |         backend_start         | backend_xmin |   state   |  sent_lsn  | write_lsn  | flush_lsn  | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state |          reply_time
--------+----------+-------------+------------------+----------------+-----------------+-------------+-------------------------------+--------------+-----------+------------+------------+------------+------------+-----------+-----------+------------+---------------+------------+-------------------------------
 346814 |    24565 | replication | 12/main          | 192.168.56.102 |                 |       59350 | 2021-02-02 10:46:08.148397+09 |              | streaming | 0/33000148 | 0/33000148 | 0/33000148 | 0/33000148 |           |           |            |             0 | async      | 2021-02-02 10:46:48.283679+09
(1 row)

sent_lsnとwrite_lsn、flush_lsn、replay_lsnあたりの値が同一であれば同期されている状態です。

またマスタサーバでDB更新操作(日レセ登録処理など)を行い、スタンバイサーバのDBを参照して更新を確認するといった方法でも同期が確認できます。

スタンバイサーバ側でも以下のコマンドで最終の同期時刻が確認できます。ただし同期直後でマスタサーバの更新がない場合は以下のレコードがない場合もあります。

$ sudo -u postgres psql -c "SELECT pg_last_xact_replay_timestamp();"
 pg_last_xact_replay_timestamp
-------------------------------
 2021-02-02 16:03:27.546964+09
(1 row)

他には以下のコマンドでスタンバイサーバの同期プロセスのプロセスIDが確認できます。

$ sudo -u orca psql -Aqntc "SELECT pid from pg_stat_wal_receiver;"
2046

障害発生時の切り替え

マスタサーバで障害が発生し、スタンバイサーバに運用を切り替える際は以下の手順で行います。(クライアント接続先変更やプリンタ設定の確認は前後しても構いません。)

  1. データベースのマスタ昇格
  2. プリンタ設定などの確認
  3. 日レセクライアントの接続先変更
  4. 日レセの起動
  5. プログラム更新
  6. プラグイン更新

データベースのマスタ昇格

以下のコマンドを実行してPostgreSQLのマスタ昇格を行います。マスタ昇格後はデータベース更新可能となります。また障害発生前のマスタサーバとの同期設定は自動的に解除されます。

$ sudo -u postgres /usr/lib/postgresql/12/bin/pg_ctl promote -D /var/lib/postgresql/12/main/
waiting for server to promote.... done
server promoted

マスタサーバ復旧後の2台運用の再設定

マスタサーバの障害が解消し、再度2台運用を設定する場合は、マスタ昇格したスタンバイサーバをそのまま新マスタサーバとし、復旧した旧マスタサーバをスタンバイとして設定することを推奨します。(マスタサーバの入れ替えは誤って古いマスタデータを同期してしまう懸念があるためです。)

メンテナンス

 マスタサーバは通常の日レセメンテナンス方法となりますが、スタンバイサーバのメンテナンスは一部手順が異なります。

プログラム更新

通常時はマスタサーバのみ行います。スタンバイサーバでは行いません。

スタンバイサーバでは、障害発生時にマスタに昇格した際にプログラム更新を行います。(レプリケーション状態ではDB更新ができずプログラム更新処理がエラーとなるためです。)

プラグイン更新

通常時はマスタサーバのみ行います。スタンバイサーバでは行いません。

スタンバイサーバでは、障害発生時にマスタに昇格した際にプラグイン画面から組み込みをし直します。DB上はプラグインがインストールされていますが、プラグインの実体が存在しないためそのままでは動作しません。プラグイン管理画面で「インストール済み」が「NOT FOUND」となっているプラグインを選択して、一旦削除してから、再度組み込みを行います。

マスタ更新

マスタサーバのみ行います。スタンバイサーバでは行いません。(レプリケーションにより同期されるためマスタ更新は不要です。 )

トップ > 日医標準レセプトソフト > 運用のための各種設定 > 2台運用の設定(日レセ5.2以降)

このページのトップへ