Debian系とRedHat系に共通したVPSサーバー間バックアップ自動化の方法

CentOS 9でVPSサーバー間バックアップをrsyncで完全自動化する方法

こんにちは!今回は、Debian系およびRedHat系Linuxで、VPSサーバー間のバックアップを自動化する方法を解説します。この記事は、rsyncを使ってリモートサーバーに手動でバックアップを覚えたばかりの初心者エンジニアの方に向けています。

手動でバックアップを行う場合、バックアップディレクトリが増えると手間がかかり、パスフレーズを何度も入力することの不便さに悩まされることがあります。この記事では、これらの問題を解決するために、rsyncを使ったサーバー間のバックアップを自動化する方法をステップバイステップでご紹介します。

バックアップはサーバー運用において非常に重要です。特に、新しく構築したVPSサーバーのデータを保護するために、効率的で確実なバックアップ方法を知りたい方にとって、このガイドは役立つでしょう。


前提条件

SSH鍵認証の設定

  • バックアップ元サーバーとバックアップ先サーバーの間でSSH鍵認証が設定されていること。
  • バックアップ元サーバーのユーザーのホームディレクトリにSSH秘密鍵が配置されていること。
  • バックアップ先サーバーのユーザーのホームディレクトリに公開鍵が配置され、適切な権限が設定されていること。

バックアップ先サーバーのディレクトリ構造

バックアップ先サーバーに必要なバックアップディレクトリが用意されていること。 以下のようなディレクトリ構造を事前に作成します。

backup/etc/
backup/home/
backup/www/
backup/mysql/
backup/log/

rsyncのインストールと設定

  • バックアップ元サーバーおよびバックアップ先サーバーにrsyncがインストールされていること。
  • 両方のサーバーでrsyncの動作確認が完了していること

RedHat系の場合:

sudo yum install rsync -y

Debian系の場合:

sudo apt-get install rsync -y

手順

ステップ1:バックアップリストの作成

バックアップ対象のディレクトリとリモートサーバーのバックアップ先ディレクトリを指定するリストを作成します。

ファイル例: /usr/local/bin/backup_list.txt

/etc user@remote-server:/backup/etc/
/home user@remote-server:/backup/home/
/var/www user@remote-server:/backup/www/
/var/lib/mysql user@remote-server:/backup/mysql/
/var/log user@remote-server:/backup/log/

ステップ2:バックアップスクリプトの作成

バックアップリストを読み込み、rsyncを使ってバックアップを行うスクリプトを作成します。

ファイル例: /usr/local/bin/backup.sh

#!/bin/bash

# バックアップリストファイル
BACKUP_LIST="/usr/local/bin/backup_list.txt"
LOG_FILE="/var/log/backup.log"
SSH_KEY="/home/user/.ssh/id_rsa"

# バックアップリストを読み込み
while IFS=" " read -r SOURCE_DIR DEST_DIR; do
    # ディレクトリが存在するか確認
    if [[ -d $SOURCE_DIR ]]; then
        # バックアップを実行
        rsync -avz --delete -e "ssh -i $SSH_KEY" $SOURCE_DIR $DEST_DIR >> $LOG_FILE 2>&1
    else
        echo "Warning: $SOURCE_DIR does not exist, skipping..." >> $LOG_FILE
    fi
done < $BACKUP_LIST

ステップ3:SSHエージェントの設定スクリプトの作成

SSHエージェントを起動し、パスフレーズを入力してSSHキーを追加するスクリプトを作成します。

ファイル例: /usr/local/bin/start_ssh_agent.sh

#!/bin/bash

# SSHエージェントを起動
eval "$(ssh-agent -s)"

# パスフレーズを使用してSSHキーを追加
/usr/local/bin/add_ssh_key.expect

# エージェントの環境変数をエクスポートしてbackup.shを実行
export SSH_AUTH_SOCK
export SSH_AGENT_PID
/usr/local/bin/backup.sh

ステップ4:パスフレーズを自動入力するexpectスクリプトの作成

expectを使ってパスフレーズを自動的に入力するスクリプトを作成します。

ファイル例: /usr/local/bin/add_ssh_key.expect

#!/usr/bin/expect -f

spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "dummy_passphrase\r"
interact

ステップ5:スクリプトのパーミッション設定

作成したスクリプトに実行権限を設定します。

sudo chmod 700 /usr/local/bin/start_ssh_agent.sh
sudo chmod 700 /usr/local/bin/add_ssh_key.expect
sudo chmod 700 /usr/local/bin/backup.sh

ステップ6:手動でスクリプトをテスト

手動でstart_ssh_agent.shスクリプトを実行して、正しく動作するか確認します。

sudo /usr/local/bin/start_ssh_agent.sh

ステップ7:cronジョブの設定

スクリプトが正常に動作することを確認した後、cronジョブを設定します。

例: 毎日午前2時に実行する設定

sudo crontab -e

以下の行を追加します。

0 2 * * * /usr/local/bin/start_ssh_agent.sh

バックアップ結果の確認

バックアップ先にデータが正しくコピーされているかを確認します。

ssh -i /home/user/.ssh/id_rsa user@remote-server "ls /backup/www"

まとめ

これで、Debian系およびRedHat系LinuxでVPSサーバー間のバックアップを自動化する設定が完了しました。rsyncを使ったバックアップの自動化は、データの保護にとても役立ちます。安心して運用できる環境を整えてください。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です