とりあえずの記録

はじめは同学科の人向けのナレッジまとめでした

サーバAからサーバBに自動でバックアップをとる

某科には2つの演習サーバがありますが,そのうち一方はそろそろ寿命を迎えます.

新しい方に乗り換えたいところですが,独自の提出用コマンドが旧サーバでしか効かない,Web系の演習は片方のサーバでしかできないなどの事情があり,未だ難しいのが現状です.

ただ,現状のサーバでは過去に何度かデータが吹き飛びかけていますので,このまま何もせず使い続けるのは怖いです.
今回は,自動で新サーバに定期的にバックアップをとるように設定する方法をまとめてみることにします.

SSH設定

まず,同期や自動実行に必要となる準備を行います.

サーバA(古い方)からサーバB(新しい方)に,キーペアを用いた公開鍵暗号方式SSH接続できるようにしておきましょう.

 

詳しくは以下の記事で解説しています.

"手元のMac""サーバA(古い方)"
"サーバ""サーバB(新しい方)" と読み替えて,実行してください.

tamasan238.hatenablog.com

コマンド生成

できたら,実際にバックアップに使用するコマンドを準備します.

方法はいろいろありますが,今回は rsync というものを使ってみることにしましょう.

 

まず,バックアップしたい場所のパスを確認しましょう.

サーバA(古い方)に接続して,

pwd

と実行し,その出力をメモしておきます.

今回は, /home/tamasan238 と出力されたことにしておきます.

 

次に,バックアップ先として使用するディレクトリ名を決めておきましょう.

今回は, apr_backup とすることにします.

 

ここまでできたら,実際にバックアップを行うコマンドにまとめてみます.

rsync -a バックアップしたいディレクトリ/ サーバBの,自分で決めた短い名前:~/バックアップ先として使用するディレクトリ名

 

わかりにくいので,これまでの例を用いて示してみます.
(サーバBの,自分で決めた短い名前を garden としておきます.これはサーバAの~/.ssh/configで設定したものです.)

rsync -a /home/df20hoge/ garden:~/apr_backup

 

こんな感じです.

スラッシュやスペースの有無,位置に十分注意してください.
1つズレているだけで,大きく結果が変わります.

 

ここまでできたら,試しにサーバA(古い方)で実行してみてください.

終わったら,サーバB(新しい方)にSSH接続して,lsしてみると,apr_backupというディレクトリの中にサーバA(古い方)のデータがコピーされているはずです.

定期実行設定

うまくいったら,このコマンドが自動的に定期実行されるようにします.

これには,Linuxに備わっているcronという仕組みを利用します.

 

設定を手書きしてもよいのですが,初めて触る人にとってはなかなかとっつきにくい書き方をしなければなりません.
そこで,設定内容を入力することで自動的に適切な設定文を書き出してくれる Crontab Generator というものを使います.

crontab-generator.org

 

デフォルトだと,毎分実行するという恐ろしいものになってしまいますので,適切な間隔に調整していきます.

今回は,毎日早朝の時間に1回実行されるようにしてみます.

 

あまり回数が頻繁だと,サーバやネットワークに不必要な負荷をかけてしまいます.
多くとも1日数回に留めておきましょう.

 

Weekday, Months, DaysEvery〜 のまま

Hours自分があまりアクセスしない時間帯を1つ選ぶ (例:5am, 6am)

Minutes1~59の中から,適当に1つ選ぶ (例:3, 7, 13)

 

Minutesについて補足しておきます.
0のままでも良さそうに思えるところですが,これは望ましくありません.
多くの人が同時に実行すると,サーバやネットワークに負荷がかかるためです.
きっかり0分に実行されなければ困る...!というものでなければ,今回のように若干ズラすことで,負荷を分散させるというわけです.

ここまで入力できたら,次は Command To Execute に先ほど生成した rsync〜のコマンドを貼り付けます.

 

終えたら,Generate Crontab Line をクリックして設定文を生成します.

例えば,毎日5:03に上述のサンプルコマンドを実行するという設定をした場合,出力結果は以下のようになります.

3 5 * * * rsync -a /home/df20hoge/ garden:~/apr_backup >/dev/null 2>&1

 

それでは,実際にcronに上記設定文を登録してみましょう.

サーバA(古い方)にログインして,

crontab -e

と実行します.

注:ここで誤って crontab -r と実行してしまうと,設定されている項目が全て吹っ飛びます.
自分のアカウントであれば特に問題は無いかと思いますが,業務で使用しているようなもの,複数人で共有しているアカウントなどであればこの方法は厳禁とされることも...
気になった人は,以下の記事をぜひ.

qiita.com

 

vimが起動しますので,今生成したcron用の設定文をコピペします.

終わったら,:wqで保存して終了しましょう.

crontab: installing new crontab

と出力されていれば,問題なく設定できています.

 

これで,自動的にサーバAのデータがサーバBにバックアップされるようになりました.
2回目からは,変更があったファイルのみ転送されるようになります.

 

【追記】

cronはこんな使い方もできます.(こっちはCrontab Generatorのスクショなんかも載せてます.)

tamasan238.hatenablog.com