序章

Redisは、メモリ内のKey-Valueキャッシュおよびストア(つまり、データベース)であり、ディスクに永続化(永続的に保存)することもできます。 この記事では、Ubuntu14.04サーバーでRedisデータベースをバックアップする方法を説明します。

デフォルトでは、Redisデータはディスクに保存されます。 .rdb ファイル。これは、Redisデータセットの特定の時点のスナップショットです。 スナップショットは指定された間隔で作成されるため、バックアップに最適です。

前提条件

このチュートリアルの手順を完了するには、次のものが必要です。

  • Ubuntu14.04サーバー
  • Redisをインストールします。 このRedisセットアップチュートリアルからマスターセットアップに従うことができます(ただし、マスタースレーブクラスターでも同様に機能します)
  • Redisサーバーが実行されていることを確認してください
  • 強く推奨されるRedisパスワードが設定されている場合は、それを手元に用意してください。 パスワードはRedis構成ファイルにあります- /etc/redis/redis.conf

ステップ1—Redisデータディレクトリを見つける

Redisは、そのデータをサーバー上のディレクトリに保存します。これは、バックアップしたいものです。 まず、それがどこにあるかを知る必要があります。

Ubuntuおよびその他のLinuxディストリビューションでは、Redisデータベースディレクトリは /var/lib/redis. ただし、継承したサーバーを管理していて、Redisデータの場所が変更された場合は、次のように入力してサーバーを見つけることができます。

  1. sudo locate *rdb

または、 redis-cli 促す。 これを行うには、次のように入力します。

  1. redis-cli

Redisサーバーが実行されていない場合、応答は次のようになります。

出力
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

その場合は、Redisを起動し、次のコマンドを使用して再接続します。

  1. sudo service redis-server start
  2. redis-cli

シェルプロンプトは次のように変更されます。

127.0.0.1:6379>

Redisに接続している間、次の2つのコマンドはRedisに認証され、データディレクトリを取得します。

  1. auth insert-redis-password-here
  2. config get dir

最後のコマンドの出力は、Redisデータディレクトリになります。

出力
1) "dir"
2) "/var/lib/redis"

Redisディレクトリをメモします。 表示されているディレクトリと異なる場合は、チュートリアル全体でこのディレクトリを使用してください。

ここでデータベースコマンドラインインターフェイスを終了できます。

  1. exit

これが正しいディレクトリであることを確認してください。

  1. ls /var/lib/redis

あなたは見るべきです dump.rdb ファイル。 これがRedisデータです。 もしも appendonly も有効になっている場合は、 appendonly.aof または別の .aof サーバーが受信したすべての書き込み操作のログを含むファイル。

これら2つのファイルの違いについては、Redisの永続性に関するこの投稿を参照してください。 基本的に、 .rdb ファイルは現在のスナップショットであり、 .aof ファイルはRedisの履歴を保持します。 どちらもバックアップする価値があります。

まずは .rdb ファイルを作成し、両方のファイルの自動バックアップで終了します。

(オプション)ステップ2 —サンプルデータの追加

このセクションでは、Redisデータベースに保存するサンプルデータを作成できます。 サーバーにすでにデータがある場合は、既存のコンテンツをバックアップするだけです。

データベースのコマンドラインインターフェイスにログインします。

  1. redis-cli

認証する:

  1. auth insert-redis-password-here

サンプルデータを追加してみましょう。 あなたはの応答を得る必要があります OK 各ステップの後。

  1. SET shapes:triangles "3 sides"
  2. SET shapes:squares "4 sides"

データが追加されたことを確認してください。

  1. GET shapes:triangles
  2. GET shapes:squares

出力は以下に含まれています:

出力
"3 sides"

"4 sides"

これらの変更をにコミットするには /var/lib/redis/dump.rdb ファイル、それらを保存します:

  1. save

終了できます:

  1. exit

必要に応じて、ここでダンプファイルの内容を確認できます。 マシンフレンドリーな形式ではありますが、データが含まれている必要があります。

  1. sudo cat /var/lib/redis/dump.rdb
/var/lib/redis/dump.rdb
REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C

ステップ3—Redisデータのバックアップ

Redisデータの場所がわかったので、次にバックアップを作成します。 公式のRedisWebサイトから、次の引用があります。

Redisは、データベースの実行中にRDBファイルをコピーできるため、データのバックアップに非常に適しています。RDBは、作成後に変更されることはなく、作成中は一時的な名前を使用し、rename(2)のみを使用してアトミックに最終的な宛先に名前が変更されます。新しいスナップショットが完了したとき。

そのため、Redisサーバーの実行中にデータベースファイルをバックアップまたはコピーできます。 ホームフォルダの下のディレクトリにバックアップしていると仮定すると、そのバックアップの実行は次のように入力するのと同じくらい簡単です。

  1. sudo cp /var/lib/redis/dump.rdb /home/sammy/redis-backup-001

Redisはここにコンテンツを定期的に保存します。つまり、上記のコマンドを実行するだけでは、最新のバックアップが保証されません。最初にデータを保存する必要があります。

ただし、潜在的に少量のデータ損失が許容できる場合は、この1つのファイルをバックアップするだけで機能します。

データベースの状態を保存する

Redisデータのより新しいコピーを取得するには、アクセスするのがより良いルートです。 redis-cli、Redisコマンドライン。

手順1で説明したように認証します。

次に、 save そのようなコマンド:

  1. save

出力は次のようになります。

出力
OK
(1.08s)

データベースを終了します。

今、あなたは実行することができます cp 上記のコマンドを使用して、バックアップが完全に最新であることを確認してください。

ながら cp コマンドはデータベースの1回限りのバックアップを提供します。最善の解決策は、プロセスを自動化するcronジョブを設定し、増分更新を実行し、必要に応じてデータを復元できるツールを使用することです。

ステップ4—rdiff-backupとCronを使用した自動更新の構成

このセクションでは、両方のデータファイルを含むRedisデータディレクトリ全体をバックアップする自動バックアップを構成します。

利用可能な自動バックアップツールがいくつかあります。 このチュートリアルでは、と呼ばれる新しい、ユーザーフレンドリーなツールを使用します rdiff-backup.

rdiff-backup コマンドラインバックアップツール。 おそらく rdiff-backup サーバーにインストールされていないため、最初にインストールする必要があります。

  1. sudo apt-get install -y rdiff-backup

インストールされたので、Redisデータをホームディレクトリのフォルダにバックアップしてテストできます。 この例では、ホームディレクトリが /home/sammy:

ターゲットディレクトリが存在しない場合は、スクリプトによって作成されることに注意してください。 つまり、自分で作成する必要はありません。

–preserve-numerical-ids を使用すると、ソースフォルダーと宛先フォルダーの所有権は同じになります。

  1. sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home/sammy/redis

以下のような cp 以前のコマンドでは、これは1回限りのバックアップです。 変更されたのは、全体をバックアップしていることです /var/lib/redis 今ディレクトリを使用して、 rdiff-backup.

次に、cronを使用してバックアップを自動化し、設定された時間にバックアップが実行されるようにします。 これを行うには、システムのcrontabを開きます。

  1. sudo crontab -e

(このサーバーで以前にcrontabを使用したことがない場合は、プロンプトでお気に入りのテキストエディタを選択してください。)

filekの下部に、以下に示すエントリを追加します。

crontab
0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis

このCronエントリは、毎日深夜にRedisバックアップを実行します。 –no-file-statistics スイッチは、への書き込みを無効にします file_statistics のファイル rdiff-backup-data ディレクトリ、これは rdiff-backup より速く実行し、少し少ないディスク容量を使用します。

または、このエントリを使用して、毎日のバックアップを作成することもできます。

  1. @daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis

一般的なCronの詳細については、Cronに関するこのの記事をお読みください。

現状では、バックアップは1日1回行われるため、明日戻って最終テストを行うことができます。 または、バックアップの頻度を一時的に増やして、機能していることを確認することもできます。

ファイルはredisシステムユーザーが所有しているため、このコマンドを使用してファイルが配置されていることを確認できます。 (バックアップが実際にトリガーされるまで待つようにしてください):

  1. ls -l /home/sammy/redis

出力は次のようになります。

出力
total 20
-rw-rw---- 1 redis redis    70 Sep 14 13:13 dump.rdb
drwx------ 3 root  root  12288 Sep 14 13:49 rdiff-backup-data
-rw-r----- 1 redis redis   119 Sep 14 13:09 redis-staging-ao.aof

これで、Redisデータの毎日のバックアップが作成され、同じサーバーのホームディレクトリに保存されます。

ステップ5—バックアップからのRedisデータベースの復元

Redisデータベースをバックアップする方法を確認したので、この手順では、データベースを dump.rdb バックアップファイル。

バックアップを復元するには、アクティブなRedisデータベースファイルを復元ファイルに置き換える必要があります。 これは潜在的に破壊的であるため、可能であれば新しいRedisサーバーに復元することをお勧めします。

より問題のある復元でライブデータベースを上書きしたくないでしょう。 ただし、現在のファイルを削除するのではなく名前を変更すると、同じサーバーに復元する場合でもリスクが最小限に抑えられます。これが、このチュートリアルで示す戦術です。

復元ファイルの内容を確認する

まず、内容を確認してください dump.rdb ファイル。 必要なデータが含まれていることを確認してください。

ダンプファイルの内容を直接確認できますが、人間にわかりやすいフォーマットではなく、Redisに適したフォーマットを使用していることに注意してください。

  1. sudo cat /home/gilly/redis/dump.rdb

これは小さなデータベース用です。 出力は次のようになります。

出力
REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,?

最新のバックアップにデータがない場合は、復元を続行しないでください。 コンテンツがそこにある場合は、続行します。

オプション:データ損失のシミュレーション

バックアップから復元する理由となるデータ損失をシミュレートしてみましょう。

Redisにログインします。

  1. redis-cli

この一連のコマンドでは、Redisで承認し、 shapes:triangles エントリ:

  1. auth insert-redis-password-here
  2. DEL shapes:triangles

次に、エントリが削除されたことを確認しましょう。

  1. GET shapes:triangles

出力は次のようになります。

出力
(nil)

保存して終了:

  1. save
  2. exit

オプション:新しいRedisサーバーのセットアップ

ここで、新しいRedisサーバーに復元する場合は、新しいRedisサーバーが稼働していることを確認してください。

このチュートリアルでは、この RedisClusterチュートリアルステップ1のみを実行しますが、より高度なセットアップが必要な場合は、記事全体を実行できます。

パスワードを追加してAOFを有効にするステップ2に従う場合は、復元プロセスでそのことを考慮してください。

を実行して、Redisが新しいサーバーで稼働していることを確認したら redis-benchmark -q -n 1000 -c 10 -P 5、続行できます。

Redisの停止

Redisダンプファイルを置き換える前に、現在実行中のRedisのインスタンスを停止する必要があります。 Redisを停止すると、データベースはオフラインになります。

sudo service redis-server stop

出力は次のようになります。

出力
Stopping redis-server: redis-server

実際に停止していることを確認してください。

sudo service redis-server status
出力
redis-server is not running

次に、現在のデータベースファイルの名前を変更します。

現在のdump.rdbの名前を変更

Redisはその内容を dump.rdb ファイル。 復元ファイルに道を譲るために、現在の名前を変更しましょう。

sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old

復元できることに注意してください dump.rdb.old 現在のバージョンがバックアップファイルよりも優れていると判断した場合。

AOFが有効になっている場合は、オフにします

AOFは、Redisデータベースへのすべての書き込み操作を追跡します。 ただし、ポイントインタイムバックアップから復元しようとしているため、RedisにAOFファイルに保存されている操作を再作成させたくありません。

Redis Clusterチュートリアルの手順からRedisサーバーをセットアップすると、AOFが有効になります。

の内容を一覧表示することもできます /var/lib/redis/ ディレクトリ。 あなたが見たら .aof そこにファイルがあり、AOFが有効になっています。

名前を変更しましょう .aof 一時的に邪魔にならないようにファイルします。 これにより、で終わるすべてのファイルの名前が変更されます .aofしたがって、複数のAOFファイルがある場合は、ファイルの名前を個別に変更する必要があり、次のコマンドを実行しないでください。

  1. sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old

Redis構成ファイルを編集して、AOFを一時的にオフにします。

  1. sudo nano /etc/redis/redis.conf

の中に AOF セクション、を探します appendonly ディレクティブとそれをから変更します yesno. それはそれを無効にします:

/etc/redis/redis.conf
appendonly no

dump.rdbファイルの復元

次に、復元ファイルを使用します。このファイルは、次の場所に保存する必要があります。 /home/sammy/redis/dump.rdb このチュートリアルの前の手順に従った場合。

新しいサーバーに復元する場合は、今度はバックアップサーバーから新しいサーバーにファイルをアップロードします。

  1. scp /home/sammy/redis/dump.rdb sammy@your_new_redis_server_ip:/home/sammy/dump.rdb

これで、元のRedisサーバーまたは新しいサーバーである復元サーバーを使用できます。 cp ファイルをにコピーするには /var/lib/redis フォルダ:

  1. sudo cp -p /home/sammy/redis/dump.rdb /var/lib/redis

(ファイルをにアップロードした場合 /home/sammy/dump.rdb、コマンドを使用します sudo cp -p /home/sammy/dump.rdb /var/lib/redis 代わりにファイルをコピーします。)

または、使用する場合 rdiff-backup、以下に示すコマンドを実行します。 これは、設定したフォルダから復元する場合にのみ機能することに注意してください rdiff-backup 元は。 と rdiff-backup、宛先フォルダ内のファイルの名前を指定する必要があります。

  1. sudo rdiff-backup -r now /home/sammy/redis/dump.rdb /var/lib/redis/dump.rdb

についての詳細 -r オプションは、この記事の最後にあるプロジェクトのWebサイトで入手できます。

dump.rdbファイルの権限の設定

バックアップを作成したのと同じサーバーに復元する場合は、おそらくすでに正しいアクセス許可を持っています。

バックアップファイルを新しいサーバーにコピーした場合は、ファイルのアクセス許可を更新する必要があります。

の権限を見てみましょう dump.rdb のファイル /var/lib/redis/ ディレクトリ。

  1. ls -la /var/lib/redis/

このようなものが表示された場合:

出力
-rw-r-----  1 sammy sammy   70 Feb 25 15:38 dump.rdb
-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

ファイルがredisユーザーとグループによって所有されるように、アクセス許可を更新する必要があります。

  1. sudo chown redis:redis /var/lib/redis/dump.rdb

グループでも書き込み可能になるようにファイルを更新します。

  1. sudo chmod 660 /var/lib/redis/dump.rdb

次に、の内容を一覧表示します /var/lib/redis/ 再びディレクトリ:

  1. ls -la /var/lib/redis/

今あなたの復元 dump.rdb ファイルには正しい権限があります:

出力
-rw-rw----  1 redis redis   70 Feb 25 15:38 dump.rdb
-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

ファイルを復元する前にRedisサーバーデーモンが実行されていて、現在は起動しない場合は、次のようなメッセージが表示されます。 Could not connect to Redis at 127.0.0.1:6379: Connection refused —Redisのログを確認します。

ログに次のような行が表示された場合 Fatal error loading the DB: Permission denied. Exiting.、次に、の権限を確認する必要があります dump.rdb このステップで説明されているように、ファイル。

Redisを起動しています

次に、Redisサーバーを再起動する必要があります。

sudo service redis-server start

データベースの内容を確認する

復元が機能したかどうかを見てみましょう。

Redisにログインします。

  1. redis-cli

チェックしてください shapes:triangles エントリ:

  1. GET shapes:triangles

出力は次のようになります。

出力
"3 sides"

素晴らしい! 私たちの修復はうまくいきました。

出口:

  1. exit

AOFを使用していない場合は、これで完了です。 復元されたRedisインスタンスは通常の状態に戻るはずです。

(オプション)AOFの有効化

データベースへのすべての書き込みを追跡するためにAOFの使用を再開または開始する場合は、次の手順に従ってください。 AOFファイルはRedisコマンドラインから再作成する必要があります。

Redisにログインします。

  1. redis-cli

AOFをオンにします。

  1. BGREWRITEAOF

次の出力が得られるはずです。

出力
Background append only file rewriting started

を実行します info 指図。 これにより、かなりの量の出力が生成されます。

  1. info

Persistence セクションまでスクロールし、aofエントリがここに表示されているものと一致することを確認します。 aof_rewrite_in_progress0の場合、AOFファイルの再作成は完了しています。

出力
# Persistence

. . .

aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:0
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

AOFファイルの再作成が完了したことが確認されたら、Redisコマンドラインを終了できます。

  1. exit

次のファイルを一覧表示できます /var/lib/redis また:

  1. ls /var/lib/redis

あなたはライブを見る必要があります .aof 次のようなファイルを再度作成します appendonly.aof また redis-staging-ao.aof、 一緒に dump.rdb ファイルおよびその他のバックアップファイル。

それが確認されたら、Redisサーバーを停止します。

  1. sudo service redis-server stop

ここで、AOFを再度オンにします。 redis.conf ファイル:

  1. sudo nano /etc/redis/redis.conf

次に、の値を変更してAOFを再度有効にします。 appendonlyyes:

/etc/redis/redis.conf
appendonly yes

Redisを起動します:

  1. sudo service redis-server start

データベースの内容をもう一度確認したい場合は、データベースの内容の確認セクションをもう一度実行してください。

それでおしまい! 復元されたRedisインスタンスは通常の状態に戻るはずです。

結論

この記事に記載されている方法でRedisデータをバックアップすることは、同じサーバー上のディレクトリにデータをバックアップすることを気にしない場合に適しています。

もちろん、最も安全なアプローチは、別のマシンにバックアップすることです。 バックアップに関する次の記事を読むことで、より多くのバックアップオプションを調べることができます。

これらのバックアップ方法の多くは、同じファイルで使用できます。 /var/lib/redis ディレクトリ。

Redisの移行と復元に関する今後の記事に注目してください。 また、参照することもできます rdiff-backup 使用方法に関するドキュメントの例 rdiff-backup 効果的に: