前書き

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

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

前提条件

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

  • Ubuntu 14.04サーバー

  • Redisをインストールします。 https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04 [このRedis設定チュートリアル](マスタースレーブクラスターでも同様に機能します)

  • Redisサーバーが実行されていることを確認してください

  • Redisパスワードが設定されている場合(強くお勧めします)、手元に置いてください。 パスワードはRedis設定ファイルにあります-+ / etc / redis / redis.conf +

手順1-Redisデータディレクトリの検索

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

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

sudo locate *rdb

あるいは、 `+ redis-cli +`プロンプトから見つけることもできます。 これを行うには、次のように入力します。

redis-cli

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

出力

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

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

sudo service redis-server start

redis-cli

シェルプロンプトは次のように変わります。

127.0.0.1:6379>

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

auth

config get dir

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

出力

1) "dir"
2) ""

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

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

exit

これが正しいディレクトリであることを確認します。

ls /var/lib/redis

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

これら2つのファイルの違いについては、http://redis.io/topics/persistence [Redisの永続性に関するこの投稿]を参照してください。 基本的に、 `+ .rdb `ファイルは現在のスナップショットであり、 ` .aof +`ファイルはRedisの履歴を保持します。 両方ともバックアップする価値があります。

`+ .rdb +`ファイルのみで開始し、両方のファイルの自動バックアップで終了します。

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

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

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

redis-cli

認証する:

auth

サンプルデータを追加しましょう。 各ステップの後に「+ OK +」の応答が返されるはずです。

SET shapes:triangles "3 sides"

SET shapes:squares "4 sides"

データが追加されたことを確認します。

GET shapes:triangles

GET shapes:squares

出力は次のとおりです。

出力

"3 sides"

"4 sides"

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

save

終了できます:

exit

必要に応じて、今すぐダンプファイルの内容を確認できます。 マシンに優しい形式ではありますが、データが必要です。

sudo cat /var/lib/redis/dump.rdb

/var/lib/redis/dump.rdb

REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C

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

Redisデータの場所がわかったので、バックアップを作成します。 公式のhttp://redis.io/topics/persistence[Redisウェブサイト]からこの引用が来ています:

_
Redisは、データベースの実行中にRDBファイルをコピーできるため、データバックアップに非常に適しています。新しいスナップショットが完了したとき。
_

そのため、Redisサーバーの実行中にデータベースファイルをバックアップまたはコピーできます。 ホームフォルダーの下のディレクトリにバックアップする場合、そのバックアップの実行は次のように入力するだけです。

sudo cp /var/lib/redis/dump.rdb
  • Redisはここにコンテンツを_定期的に保存します。つまり、上記のコマンドを実行するだけで最新のバックアップが保証されないことを意味します。*最初にデータを保存する必要があります。

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

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

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

手順1の説明に従って認証します。

次に、次のように `+ save +`コマンドを発行します。

save

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

出力

OK
(1.08s)

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

これで、上記の `+ cp +`コマンドを実行して、バックアップが完全に最新のものであると確信できます。

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

手順4-rdiff-backupおよびCronを使用した自動更新の構成

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

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

`+ rdiff-backup`コマンドラインバックアップツール。 サーバーに「+ rdiff-backup +」がインストールされていない可能性が高いため、最初にインストールする必要があります。

sudo apt-get install -y rdiff-backup

インストールが完了したので、Redisデータをホームディレクトリのフォルダーにバックアップしてテストできます。 この例では、ホームディレクトリが `+ / home / +`であると仮定しています:

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

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

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

前述の「+ cp 」コマンドと同様に、これは1回限りのバックアップです。 変更されたのは、 ` / var / lib / redis `ディレクトリ全体を現在バックアップし、 ` rdiff-backup +`を使用していることです。

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

sudo crontab -e

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

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

crontab

このCronエントリは、毎日真夜中にRedisバックアップを実行します。 * –no-file-statistics *スイッチは、 `+ rdiff-backup-data `ディレクトリ内の ` file_statistics +`ファイルへの書き込みを無効にします。ディスクスペース。

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

一般的なCronの詳細については、https://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-on-a-vps [Cronに関する記事]。

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

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

ls -l /home//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に優しい形式を使用していることに留意してください。

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

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

出力

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

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

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

データ損失をシミュレートしましょう。これがバックアップから復元する理由になります。

Redisにログインします。

redis-cli

この一連のコマンドでは、Redisで承認し、 `+ shapes:triangles +`エントリを削除します。

auth

DEL shapes:triangles

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

GET shapes:triangles

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

出力

(nil)

保存して終了:

save

exit

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

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

このチュートリアルの目的のために、このhttps://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04の*ステップ1 *に従うだけです。 [Redis Cluster tutorial]。ただし、より洗練されたセットアップが必要な場合は、記事全体を読むことができます。

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

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

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データベースへのすべての書き込み操作を追跡します。 ただし、ポイントインタイムバックアップから復元しようとしているため、AOFファイルに保存されている操作をRedisで再作成したくないです。

https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04 [Redis Clusterチュートリアル]の指示からRedisサーバーをセットアップした場合、次にAOFが有効になります。

`+ / var / lib / redis / `ディレクトリの内容をリストすることもできます。 ` .aof +`ファイルが表示されている場合、AOFが有効になっています。

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

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

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

sudo nano /etc/redis/redis.conf

「+ AOF 」セクションで、「 appendonly +」ディレクティブを探し、「」から「」に変更します。 それはそれを無効にします:

/etc/redis/redis.conf

appendonly

dump.rdbファイルの復元

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

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

scp /home//redis/dump.rdb @:/home//dump.rdb

さて、元のRedisサーバーでも新しいR​​edisサーバーでもよい*復元サーバー*で、 `+ cp `を使用してファイルを ` / var / lib / redis +`フォルダーにコピーできます:

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

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

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

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

「+ -r +」オプションの詳細は、この記事の最後にあるプロジェクトのウェブサイトで入手できます。

dump.rdbファイルのアクセス許可を設定する

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

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

`+ / var / lib / redis / `ディレクトリにある ` dump.rdb +`ファイルのパーミッションを見てみましょう。

ls -la /var/lib/redis/

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

出力

-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

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

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

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

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

次に、 `+ / var / lib / redis / +`ディレクトリの内容をもう一度リストします。

ls -la /var/lib/redis/

これで、復元された `+ dump.rdb +`ファイルに正しいパーミッションが付与されました:

出力

-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

Redisの開始

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

sudo service redis-server start

データベースの内容の確認

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

Redisにログインします。

redis-cli

`+ shapes:triangles +`エントリを確認してください:

GET shapes:triangles

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

出力

"3 sides"

すばらしいです! 私たちの修復はうまくいきました。

出口:

exit

AOFを使用していない場合、完了です! 復元されたRedisインスタンスは通常に戻ります。

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

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

Redisにログインします。

redis-cli

AOFをオンにします。

BGREWRITEAOF

出力を取得する必要があります。

出力

Background append only file rewriting started

`+ info +`コマンドを実行します。 これにより、かなりの出力が生成されます。

info
  • Persistence セクションまでスクロールし、 aof エントリがここに表示されているものと一致することを確認します。 * aof_rewrite_in_progress *が 0 *の場合、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コマンドラインを終了できます。

exit

ファイルを再び `+ / var / lib / redis +`にリストできます:

ls /var/lib/redis

`+ dump.rdb `ファイルやその他のバックアップファイルとともに、 ` appendonly.aof `や ` redis-staging-ao.aof `などのライブの ` .aof +`ファイルが再び表示されるはずです。

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

sudo service redis-server stop

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

sudo nano /etc/redis/redis.conf

次に、 `+ appendonly `の値を ` yes +`に変更して、AOFを再度有効にします。

/etc/redis/redis.conf

appendonly

Redisを起動します。

sudo service redis-server start

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

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

結論

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

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

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

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