前書き
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サーバーでも新しいRedisサーバーでもよい*復元サーバー*で、 `+ 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`ドキュメントの例を参照することもできます。