Redis CLI を使ったバックアップとリストア:データ保護の基本
Redis はインメモリデータストアとして知られていますが、その高速性と柔軟性から、キャッシュ、セッション管理、キューイングシステムなど、様々な用途で広く利用されています。Redis のデータは揮発性であり、デフォルトではシャットダウン時に失われます。したがって、Redis のデータ保護戦略は、データの安全性と可用性を確保するために不可欠です。この記事では、Redis CLI(コマンドラインインターフェース)を使用して Redis データをバックアップおよびリストアする方法について詳しく解説します。
1. なぜ Redis のバックアップが必要なのか?
Redis のバックアップは、以下のようなシナリオにおいて非常に重要です。
- データ損失からの保護: ハードウェア障害、ソフトウェアのバグ、人為的なミスなど、予期せぬ事態が発生した場合でも、バックアップがあればデータを失うことなく迅速に復旧できます。
- アプリケーションの安定性: 定期的なバックアップは、システム障害からの復旧時間を短縮し、アプリケーションのダウンタイムを最小限に抑えます。
- 災害復旧計画: バックアップは、災害が発生した場合に、別の場所にデータを復元し、事業継続性を確保するための重要な要素となります。
- データ移行: 新しいハードウェアやクラウド環境への移行時に、バックアップデータを使用して Redis インスタンスを簡単に移行できます。
- 監査とコンプライアンス: 特定の業界や規制では、データのバックアップと復元の手順を遵守することが義務付けられています。
- 開発とテスト: バックアップを使用して、本番環境のデータに基づいた開発およびテスト環境を構築し、リスクを軽減できます。
2. Redis CLI を使ったバックアップ方法
Redis CLI を使用して Redis データをバックアップする方法は主に2つあります。
- RDB(Redis DataBase)ファイルの作成:
SAVE
コマンドとBGSAVE
コマンドを使用します。 - AOF(Append Only File)の有効化:
appendonly yes
設定を使用し、コマンドログを記録します。
2.1 RDB ファイルの作成:SAVE
と BGSAVE
コマンド
RDB ファイルは、Redis データベースの特定時点のスナップショットをバイナリ形式で保存したものです。RDB ファイルは、コンパクトで復元が高速であるという利点があります。
SAVE
コマンド:
SAVE
コマンドは、Redis サーバーをブロックし、バックグラウンド処理を行わずに、メモリ内のデータを直接ディスクに書き込みます。これは、データベースのサイズによっては長時間を要し、その間 Redis サーバーは他のリクエストに応答できなくなるため、本番環境での使用は推奨されません。
bash
redis-cli SAVE
コマンドを実行すると、Redis サーバーはディスクへの書き込みが完了するまでブロックされ、CLI に “OK” が返されます。RDB ファイルは通常、Redis 設定ファイルで指定されたディレクトリに dump.rdb
という名前で保存されます。
BGSAVE
コマンド:
BGSAVE
コマンドは、バックグラウンドで RDB ファイルを作成します。Redis サーバーは、フォーク(fork)と呼ばれるプロセスを使用して子プロセスを作成し、子プロセスがディスクに書き込みを行います。これにより、Redis サーバーは、バックアップ処理中でも通常どおりリクエストに応答できます。
bash
redis-cli BGSAVE
コマンドを実行すると、Redis サーバーは子プロセスを起動し、バックアップを開始します。CLI に “Background saving started” が返されます。
RDB バックアップの構成:
RDB バックアップの動作を制御するために、Redis 設定ファイル (通常は redis.conf
) で以下の設定を構成できます。
dir
: RDB ファイルが保存されるディレクトリを指定します。デフォルトは Redis サーバーの実行ディレクトリです。dbfilename
: RDB ファイルの名前を指定します。デフォルトはdump.rdb
です。save
: RDB ファイルの自動保存条件を指定します。複数の条件を設定できます。
例えば:
dir /var/lib/redis
dbfilename my_redis_backup.rdb
save 900 1 # 900秒以内に少なくとも1つのキーが変更された場合
save 300 10 # 300秒以内に少なくとも10個のキーが変更された場合
save 60 10000 # 60秒以内に少なくとも10000個のキーが変更された場合
これらの設定は、Redis が自動的に RDB ファイルを作成する頻度を制御します。上記の例では、Redis は以下のいずれかの条件が満たされるたびに RDB ファイルを作成します。
- 900秒以内に少なくとも1つのキーが変更された場合
- 300秒以内に少なくとも10個のキーが変更された場合
- 60秒以内に少なくとも10000個のキーが変更された場合
save
設定をすべてコメントアウトすることで、自動 RDB バックアップを無効にすることができます。
2.2 AOF (Append Only File) の有効化:appendonly yes
AOF は、Redis へのすべての書き込み操作(コマンド)をログファイルに記録する永続化メカニズムです。AOF を有効にすると、Redis は起動時に AOF ファイルを再生することで、データベースの状態を復元できます。AOF は RDB に比べてデータの損失を防ぐ効果が高く、より強力な永続化メカニズムと見なされています。
AOF を有効にするには、Redis 設定ファイル (redis.conf
) で以下の設定を変更します。
appendonly yes
この設定を変更した後、Redis サーバーを再起動する必要があります。再起動後、Redis は AOF ファイル (appendonly.aof
) に書き込みを開始します。
AOF の構成:
AOF の動作を制御するために、Redis 設定ファイルで以下の設定を構成できます。
appendfilename
: AOF ファイルの名前を指定します。デフォルトはappendonly.aof
です。-
appendfsync
: ディスクへの書き込み頻度を制御します。 -
always
: 各書き込み操作ごとにディスクに書き込みます。最も安全ですが、パフォーマンスに影響を与えます。 everysec
: 1秒ごとにディスクに書き込みます。データ損失のリスクとパフォーマンスのバランスが取れています。no
: オペレーティングシステムに書き込みを委ねます。最も高速ですが、データ損失のリスクが最も高くなります。
appendfilename appendonly.aof
appendfsync everysec
- AOF リライト:
AOF ファイルは、Redis へのすべての書き込み操作を記録するため、時間の経過とともに肥大化する可能性があります。AOF リライトは、不要なコマンドを削除し、ファイルを最適化するプロセスです。Redis は、AOF リライトを自動的に実行するように構成できます。
auto-aof-rewrite-percentage
: AOF ファイルのサイズが最後にリライトされたサイズから何パーセント増加した場合に、自動リライトがトリガーされるかを指定します。auto-aof-rewrite-min-size
: AOF ファイルのサイズが何バイト以上の場合に、自動リライトがトリガーされるかを指定します。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
これらの設定により、AOF ファイルのサイズが最後にリライトされたサイズから100%増加し、かつ64MB以上になった場合に、自動リライトがトリガーされます。
手動で AOF リライトを実行するには、Redis CLI で BGREWRITEAOF
コマンドを使用します。
bash
redis-cli BGREWRITEAOF
RDB と AOF の比較:
特徴 | RDB | AOF |
---|---|---|
データ永続化 | スナップショット | コマンドログ |
データ損失リスク | 高い (最後にバックアップされてからのデータ損失) | 低い (設定による。always の場合はほぼゼロ) |
復元時間 | 高速 | 低速 |
ファイルサイズ | 小さい | 大きい |
CPU 使用率 | 高い (特に SAVE コマンド) |
低い (特に everysec 設定) |
構成の複雑さ | 簡単 | より複雑 |
一般的に、AOF は RDB よりもデータ損失のリスクが低く、より信頼性の高い永続化メカニズムと見なされています。しかし、AOF は RDB よりもファイルサイズが大きくなりやすく、復元時間も長くなる可能性があります。
最適な永続化戦略:
データ保護要件に応じて、最適な永続化戦略は異なります。
- 高いデータ保護が必要な場合: AOF を有効にし、
appendfsync
をeverysec
またはalways
に設定します。 - 高速な復元時間が必要な場合: RDB を使用します。
- データ損失のリスクを最小限に抑えつつ、復元時間も短くしたい場合: RDB と AOF の両方を有効にします。この場合、Redis は起動時に AOF ファイルを使用してデータベースを復元します。
3. Redis CLI を使ったリストア方法
Redis のバックアップファイルをリストアするには、以下の手順を実行します。
3.1 RDB ファイルのリストア
- Redis サーバーを停止します。
bash
redis-cli shutdown
- RDB ファイルを Redis のデータディレクトリにコピーします。
RDB ファイルは、Redis 設定ファイルで指定されたディレクトリに保存されます (デフォルトは dump.rdb
)。
bash
cp my_redis_backup.rdb /var/lib/redis/dump.rdb
- Redis サーバーを起動します。
bash
redis-server /etc/redis/redis.conf
Redis サーバーは起動時に RDB ファイルを読み込み、データベースを復元します。
3.2 AOF ファイルのリストア
- Redis サーバーを停止します。
bash
redis-cli shutdown
- AOF ファイルを Redis のデータディレクトリにコピーします。
AOF ファイルは、Redis 設定ファイルで指定されたディレクトリに保存されます (デフォルトは appendonly.aof
)。
bash
cp appendonly.aof /var/lib/redis/appendonly.aof
- Redis 設定ファイル (
redis.conf
) でappendonly
がyes
に設定されていることを確認します。
appendonly yes
- Redis サーバーを起動します。
bash
redis-server /etc/redis/redis.conf
Redis サーバーは起動時に AOF ファイルを読み込み、データベースを復元します。
3.3 バックアップファイルの破損への対処
バックアップファイルが破損している場合、リストアは失敗する可能性があります。
- RDB ファイルの場合:
redis-check-rdb
ツールを使用して、RDB ファイルの整合性を確認できます。破損している場合は、修復を試みることができますが、データ損失が発生する可能性があります。 - AOF ファイルの場合:
redis-check-aof
ツールを使用して、AOF ファイルの整合性を確認できます。破損している場合は、部分的に復元できる場合があります。
4. バックアップ戦略のベストプラクティス
効果的な Redis バックアップ戦略を確立するために、以下のベストプラクティスを考慮してください。
- 定期的なバックアップ: データの重要度と変更頻度に基づいて、定期的なバックアップスケジュールを設定します。
- 自動化: バックアッププロセスを自動化するために、スクリプトやツールを使用します。
- 複数のバックアップコピー: 複数のバックアップコピーを作成し、異なる場所に保存します。
- バックアップの検証: 定期的にバックアップをリストアして、バックアップが正常に機能することを確認します。
- 監視: バックアップの成功と失敗を監視し、問題が発生した場合に迅速に対応できるようにします。
- セキュリティ: バックアップファイルを安全に保管し、不正アクセスから保護します。
- ドキュメント: バックアップと復元の手順を詳細にドキュメント化します。
- テスト: バックアップと復元の手順を定期的にテストし、適切に機能することを確認します。
- バージョン管理: バックアップファイルのバージョン管理を行い、必要に応じて過去のバージョンを復元できるようにします。
- 暗号化: 機密データをバックアップする場合は、バックアップファイルを暗号化します。
5. Redis Enterprise のバックアップ機能
Redis Enterprise は、エンタープライズ向けの Redis ソリューションであり、高度なバックアップおよび復元機能を提供します。
- 自動バックアップ: Redis Enterprise は、自動的にバックアップを作成し、クラウドストレージやオンプレミスストレージに保存できます。
- ポイントインタイムリカバリ: Redis Enterprise は、特定の時点にデータベースを復元できるポイントインタイムリカバリ機能を提供します。
- 地理的に分散したバックアップ: Redis Enterprise は、地理的に分散した複数の場所にバックアップを保存できます。
- 暗号化: Redis Enterprise は、バックアップファイルを暗号化し、データを保護します。
6. その他のバックアップ方法
Redis CLI 以外にも、Redis データをバックアップするための様々な方法があります。
- Redis Enterprise: 上記で説明したように、Redis Enterprise は高度なバックアップおよび復元機能を提供します。
- サードパーティ製のバックアップツール: Redis データをバックアップするための様々なサードパーティ製のツールがあります。
- クラウドプロバイダーのバックアップサービス: AWS、Azure、GCP などのクラウドプロバイダーは、Redis データのバックアップおよび復元サービスを提供しています。
7. まとめ
Redis のバックアップは、データ損失から保護し、アプリケーションの安定性を確保するために不可欠です。Redis CLI を使用して RDB ファイルまたは AOF ファイルを作成することで、Redis データをバックアップできます。データ保護要件に応じて、最適な永続化戦略を選択し、定期的なバックアップ、自動化、複数のバックアップコピーの作成などのベストプラクティスに従ってください。Redis Enterprise を使用すると、高度なバックアップおよび復元機能を利用できます。
この記事で説明した手順とベストプラクティスに従うことで、Redis データを効果的にバックアップおよび復元し、データの安全性と可用性を確保することができます。