Skip to content

障害に耐えるために

本システムの実運用時(プロダクション環境)では、様々な理由による障害(誤操作や電源喪失、HW障害など)が生じる可能性を考慮する必要があります。
本章では、障害に耐えるための本システム運用時の注意点について説明します。

1. RDBのバックアップ

本システムは、RDBMSにPostgreSQLを使用しています。PostgreSQLは、データのバックアップを行う機能が標準で備わっており、これを利用することでデータのバックアップを簡単に行うことができます。

1-1. バックアップの作成

バックアップの作成には、pg_dumpコマンドを使用します。以下のコマンドを実行することで、データベースのバックアップを作成することができます。

bash
pg_dump -U 【ユーザ名】 -h 【ホスト名】 -d 【DB名】 > 【バックアップファイル名】

これを利用して、ホストOS上からバックアップコマンドを実行することで、データベースのバックアップを作成することができます。
このバックアップスクリプトを所定のディレクトリへ配置すれば、コンテナ内にこのスクリプトが自動的に配置されます。

bash
# ホストOS上の``/postgres_dump/backup.sh``へ配置してください。
# /postgres_dumpフォルダが存在しない場合は、作成してください。

#!/bin/bash

# PostgreSQLの設定
PGUSER="ユーザ名"         # PostgreSQLユーザー名
PGDATABASE="amdo_base"     # データベース名
PGHOST="localhost"             # データベースホスト(通常はlocalhost)
BACKUP_DIR="/pg_dump"   # バックアップファイルの保存先ディレクトリ

# バックアップファイル名
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.sql"

# pg_dumpコマンドでダンプ
pg_dump -U $PGUSER -h $PGHOST -d $PGDATABASE > $BACKUP_FILE

echo "Backup completed: $BACKUP_FILE"

1-2. バックアップの自動化

バックアップを自動化することで、定期的にバックアップを取得することができます。 バックアップスクリプトを動作させるのは、ホストOS側のcronなどのスケジューラを利用してください。

このステップは、上記1-1の作業が完了していることを前提としています。

上記の通り、作業を行ったことを前提としています。
バックアップスクリプトを違う名前で配置したときやコンテナ名が異なるときは、スクリプト内の変数を適宜変更してください。

以下は、cronを利用して毎時間(毎時10分)にバックアップを取得する設定例です。

bash
# crontabを編集
crontab -e
bash
# crontabの設定
# /etc/crontab

#
# 何かが
# ごちゃごちゃ記述されている(消さないように注意)
#

# この行を追加
10 * * * * /bin/bash /pg_dump/backup.sh

バックアップ間隔について

crontabの動作間隔は、1分単位で設定できます。
以下は、crontabの設定例です。

設定例1) 毎日のバックアップを取得する場合

bash
# crontabの設定
0 0 * * *

設定例2)
1時間おきにバックアップを取得する場合

bash
# crontabの設定
0 * * * *