CentOS 7 バックアップ(予備サーバへ)

バックアップ(予備サーバへ)

■クライアント側でのRsync によるバックアップ
  (Linuxメインサーバー⇒Linux予備サーバー)

ここでは rsync を使用して、予備サーバーの起動時にメインサーバーのhtmlデータを予備サーバーに自動でバックアップする。rsync はアクセス権限や所有者情報もあわせてバックアップできる為、CGI等のパーミッションや所有者情報の設定をせずに即実行できる。また、rsync コマンドは、2回目以降は更新分のみバックアップしたり、バックアップ元から削除されたファイルをバックアップ先からも削除するなど同期を行うことも可能。データを同期させておけば、メインサーバーにトラブルが発生しても、すぐに予備のサーバーに切り替えることが出来る。
SSH を利用して予備サーバーからメインサーバーに対して rsync を自動実行するようにする。尚作業はメインサーバー、予備サーバーともrootで行う。

まず、バックアップサーバにrsyncをインストールしておき、rsyncコマンドが使える状態にしておく。

[root@server2 ~]# yum install rsync
[root@server2 ~]# rpm -qa | grep rsync
    rsync-3.0.9-15.el7.x86_64

1.鍵の作成
先ずは、予備サーバーのほうで鍵の作成。Enterと書いてある部分は、何も入力せずにEnterキーを押せばOK。

[root@server2 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): → そのままEnter
Enter passphrase (empty for no passphrase): → そのままEnter
Enter same passphrase again: → そのままEnter
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
35:c4:62:b1:e5:b8:8a:a7:cf:b9:ff:3e:52:9a:e5:d1 root@server2.yokensaka.com
The key's randomart image is:
+--[ RSA 2048]----+
|        .oo      |
|        o*.      |
|       .o.+      |
|         o .     |
|        S  .     |
|     . .  + E    |
|    . o  * .     |
|     + .+ o      |
|    ..=o.+o.     |
+-----------------+

2.公開鍵の抜き取り・コピー
公開鍵は/root/.ssh/id_rsa.pub、秘密鍵は/root/.ssh/id_rsaに保存される。このうち公開鍵をメインサーバにscp経由でコピーする。

[root@server2 ~]# scp /root/.ssh/id_rsa.pub 192.168.1.4:/root/.ssh/
id_rsa.pub                                                        100%  408     0.4KB/s

メインサーバーの/root/.ssh/に公開鍵がコピーされたので、これを/root/.ssh/authorized_keyに登録。

[root@server1 ~]# mkdir .ssh
[root@server1 ~]# cat id_rsa.pub >> /root/.ssh/authorized_keys

続いて、authorized_keys2のパーミッションの変更。
[root@server1 ~]# chmod 600 /root/.ssh/authorized_keys

次にメインサーバーのほうのsshd_configを編集して、rootでのログインを許可。

[root@server1 ~]# vi /etc/ssh/sshd_config
PermitRootLogin no
↓
PermitRootLogin yes

この変更を終えたら、メインサーバーのSSHを再起動しておく。
[root@server1 ~]# service sshd restart

以上で、予備サーバーからメインサーバーへのSSH接続は、パスワード等を入力することなく
接続できるようになっている。試しに予備サーバーから、メインサーバーにSSHで接続してみる。

[root@server2 ~]# ssh 192.168.1.4
Last login: Sat Dec 20 17:32:28 2014
[root@server1 ~]#  ← メインサーバーへパスワード応答なしでログインできた
[root@server1 ~]# exit ← メインサーバーからログアウト
logout
Connection to 192.168.1.4 closed.
[root@server2 ~]# ← メインサーバーからログアウトした

これでパスワードなどを入力することなく、メインサーバーに接続できる。

3.バックアップスクリプト作成(クライアント側)
すでに作成されてるサーバーのバックアップファイルと/var/www/html/にあるファイルを予備サーバーに rsync でダウンロードするスプリクト作成。

バックアップ先ディレクトリ作成

[root@server2 ~]# mkdir /backuprsync

スプリクト作成

[root@server2 ~]# vi backuprsync.sh
#!/bin/sh
RSYNC='rsync -avz -e ssh --delete'
$RSYNC 192.168.1.4:/var/www/html/ /var/www/html/ >> /var/log/backup.log
$RSYNC 192.168.1.4:/backup/backup.tar.bz2 /backuprsync/backup.tar.bz2 >> /var/log/backup.log
$RSYNC 192.168.1.4:/backup/fedoradump.sql /backuprsync/fedoradump.sql >> /var/log/backup.log
$RSYNC 192.168.1.4:/backup/blogdump.sql /backuprsync/blogdump.sql >> /var/log/backup.log
$RSYNC 192.168.1.4:/backup/takadump.sql /backuprsync/takadump.sql >> /var/log/backup.log
$RSYNC 192.168.1.4:/backup/centosdump.sql /backuprsync/centosdump.sql >> /var/log/backup.log
※サーバー側の/var/www/html/にあるファイルを、クライアント側の/var/www/html/へ上書きコピー
※サーバー側の/backup/の中にある個別のファイルをクライアント側の/root/backuprsync/にバックアップ

ファイルサーバーのデータのバックアップスクリプト作成。

[root@server2 ~]# vi backupshare.sh
#!/bin/sh
RSYNC='rsync -avz -e ssh --delete'
$RSYNC 192.168.1.4:/home/share/Application/ /home/share/Application/ >> /var/log/backup.log
$RSYNC 192.168.1.4:/home/share/Construction/ /home/share/Construction/ >> /var/log/backup.log
$RSYNC 192.168.1.4:/home/share/Dpro/ /home/share/Dpro/ >> /var/log/backup.log
$RSYNC 192.168.1.4:/home/share/SO-02G/ /home/share/SO-02G/ >> /var/log/backup.log
$RSYNC 192.168.1.4:/home/share/pine/ /home/share/pine/ >> /var/log/backup.log

作成したバックアップスクリプトへ実行権限付加

[root@server2 ~]# chmod +x backuprsync.sh
[root@server2 ~]# chmod +x backupshare.sh

※mysqldump.sqlについてはメインサーバーの情報等が入っているのでクライアント側にリストアするとトラブルになる。mysqldump.sqlはクライアント側にはバックアップしない。あくまで個別のデータのみバックアップする。
※ 誤って予備サーバーのデーターをメインサーバーに上書きする可能性があるのでメインサーバーにはこのスプリプトは置かないこと!!

4.バックアップスクリプト確認(クライアント側)

[root@server2 ~]# /root/backuprsync.sh ← バックアップスクリプト実行
[root@server2 ~]# ll /var/www/html/ ← バックアップ結果確認
※メインサーバーと同じ物がバックアップされてるはず
[root@server2 ~]# ll /backuprsync ← バックアップ結果確認
合計 3399308
-rw-r--r-- 1 root root 3460677998  12月 23 03:04 backup.tar.bz2
-rw-r--r-- 1 root root   13692391  12月 23 02:00 blogdump.sql
-rw-r--r-- 1 root root    3783663  12月 23 02:00 centosdump.sql
-rw-r--r-- 1 root root     816538  12月 23 02:00 fedoradump.sql
-rw-r--r-- 1 root root     792233  12月 23 02:00 takadump.sql

※メインサーバーのバックアップファイルが/root/にバックアップされている

5.バックアップスクリプト自動実行設定

[root@server2 ~]# echo "30 3 * * * root /root/backuprsync.sh" > /etc/cron.d/backuprsync

6.データベースを予備サーバーへ復元
htmlファイルは直に上書きしているが、データベースファイルは予備サーバー側で以下のコマンドを実行すれば各データベースが復元される

# mysql -uroot -pパスワード fedora --default-character-set=binary < /backuprsync/fedoradump.sql
# mysql -uroot -pパスワード blog --default-character-set=binary < /backuprsync/blogdump.sql
# mysql -uroot -pパスワード taka --default-character-set=binary < /backuprsync/takadump.sql
# mysql -uroot -pパスワード centos --default-character-set=binary < /backuprsync/centosdump.sql

7.データベースを予備サーバーへ復元するスプリクトを作成

[root@server2 ~]# vi restore.sh
#!/bin/bash
mysql -uroot -pパスワード fedora --default-character-set=binary < /backuprsync/fedoradump.sql
mysql -uroot -pパスワード blog --default-character-set=binary < /backuprsync/blogdump.sql
mysql -uroot -pパスワード taka --default-character-set=binary < /backuprsync/takadump.sql
mysql -uroot -pパスワード centos --default-character-set=binary < /backuprsync/centosdump.sql
作成したリストアスクリプトへ実行権限付加
[root@server2 ~]# chmod 700 restore.sh
リストアスクリプトを実行してみる
[root@server2 ~]# ./restore.sh

※ 誤って古いデーターを上書きする可能性があるのでメインサーバーにはこの設定はしないこと!!

8.リストアスクリプト自動実行設定

[root@server2 ~]# echo "30 5 * * * root /root/restore.sh" > /etc/cron.d/restore

ちなみに予備サーバの自動実行設定は以下のようになっている。
/etc/cron.dには時間指定のスクリプトを入れておき、特に時間指定しなくても良さそうなものは/etc/cron.dailyにスクリプトを入れておく。

[root@server2 ~]# echo "30 3 * * * root /root/backuprsync.sh" > /etc/cron.d/backuprsync
[root@server2 ~]# echo "30 4 * * * root /root/backupshare.sh" > /etc/cron.d/backupshare
[root@server2 ~]# echo "30 5 * * * root /root/restore.sh" > /etc/cron.d/restore
[root@server2 ~]# echo "0 6 * * * root /root/mysqldump.sh" > /etc/cron.d/mysqldump
[root@server2 ~]# echo "15 6 * * * root /root/mysqlbackup.sh" > /etc/cron.d/mysqlbackup
[root@server2 ~]# echo "30 6 * * * root /root/backup.sh" > /etc/cron.d/backup
[root@server2 ~]# mv chkrootkit /etc/cron.daily/
[root@server2 ~]# mv clamscan /etc/cron.daily/

■その他のバックアップコマンド
下のコマンドでメインサーバーの/home配下にあるファイルとフォルダが予備サーバーの/home/userに丸ごとコピーされる。

[root@server2 ~]# rsync -avz -e ssh 192.168.1.4:/home/ /home/user

rsyncコマンドで使用されるオプションには以下のものがある。
rsnyc のオプション一覧
-v バックアップ時にバックアップしているファイル名を表示する
-r 指定したディレクトリ以下の各ディレクトリも再帰的にバックアップする
-l シンボリック・リンクをそのままにバックアップする
-H ハード・リンクをそのままにバックアップする
-p パーミッション属性を保存したままバックアップする
-o 所有者属性を保存したままバックアップ(root のみ可能)
-g グループ属性を保存したままバックアップ
-t タイムスタンプを保存したままバックアップ
-D デバイスファイルを保存したままバックアップ(root のみ可能)
-z データーを圧縮して転送する
-u 追加されたファイルだけバックアップする
--delete バックアップ元で削除されたファイルはバックアップ先でも削除する
-e ssh SSHの使用
--password-file パスワードファイルの指定
--existing 更新されたファイルだけをバックアップし、追加されたファイルはバックアップしない
-a 上記のオプションのうち rlptgoD を指定する