を自動化している。 rsyncバックアップ失敗を回避し、リカバリーを予測可能にする。明確な クーロン・ジョブズSSHトランスポートとインクリメンタルランで、ウェブサーバー、データベース、コンフィギュレーションを効率的にセキュアにしています。
中心点
- オートメーション時間管理されたジョブは、エラーと労力を削減します。
- 効率性デルタ転送は帯域幅とメモリを節約する。
- セキュリティSSH、鍵管理、オフサイト・ターゲット。
- 戦略GFSの保持と明確なRPO/RTO目標。
- 透明性ロギング、モニタリング、リストアテスト
バックアップを自動化する理由
私は一貫して生産性の高いシステムを確保している。 空室状況 を保証したい。02:00に実行されるスケジュールされたバックアップは、エラーを起こしやすい手作業に取って代わり、クリーンなデータ状態を保証します。私は各サーバーに明確な目標を設定しています:どの程度のデータ損失を許容できるか(RPO)と、どの程度の時間でリカバリを行うか(RTO)です。これらの目標は、スケジュール、ストレージ目標、オプションに影響し、確実に運用を保護できるようにします。特にウェブサーバーについては、ハードウェアの不具合、ランサムウェア、偶発的な削除などのリスクを計算可能な範囲で最小限に抑えます。
rsyncの簡単な説明:機能と長所
rsync は変更のみを転送し、効率的な デルタ・トランスファー また、不要なコピーを避けることができる。これにより、実行時間、ネットワーク負荷、ターゲットシステム上のIOが大幅に削減される。私は、パーミッション、時間、所有者、シンボリックリンクが一貫性を保つように、アーカイブモード(-a)で作業する。ミラーは-deleteで最新に保つが、使用目的に注意し、バージョン管理のために別ディレクトリと組み合わせる。トランスポートにはSSHを使い、ローカルジョブにはダイレクトパスを使い、必要に応じて圧縮(-z)と帯域幅制限(-bwlimit)を追加する。
Cronによる自動化:ステップ・バイ・ステップ
私はシンプルなスクリプトから始める。 ベースライン は後で拡張できる。まずrsyncをインストールし、ログとステータス用に安全な作業ディレクトリを作成する。次に、ソース、ターゲット、除外を含むオプションでスクリプトを作成する。cronjobはRPOに応じて毎日または1時間ごとに実行され、評価とアラート用にログファイルを書き出す。最初の生産的な実行の前にドライラン(-n)を行うことで、不要な削除を防ぐことができる。
#のインストール (Debian/Ubuntu)
sudo apt-get install rsync
# ローカルでの最小実行
rsync -a /data/www/ /backup/www/
# SSH経由のリモートミラー(削除あり
rsync -a --delete -e "ssh -i /root/.ssh/backup_key" /data/www/ backup@backuphost:/srv/backups/www/バックアップホスト
# クロン:毎日午前02時00分
0 2 * * * /usr/local/bin/rsync-backup.sh >> /var/log/rsync-backup.log 2>&1
SSHバックアップを安全に設定する
私はSSHキーを制限付きで使用している。 キーマネージメント 攻撃対象が減る。ターゲット・システム上では、authorised_keyを使ったコマンドを制限し、別のバックアップ・ユーザーを使う。Fail2ban、ファイアウォールのルール、制限的なSSHオプション(PasswordAuthentication noなど)でセキュリティを高めている。私は、中間者(man-in-the-middle)にチャンスがないようにホスト鍵を保存しています。もし構造化されたスタートをお探しなら、以下のサイトで試行錯誤されたアイデアを見つけることができます。 バックアップの自動化.
プッシュではなくプル:セキュリティー上の利点
可能な限り バックアップサーバーのロールアップ 本番サーバーにプッシュするのではな い。これにより、本番システムには発信鍵がなくなり、侵害されたウェブサーバーはオフサイト・バックアップを削除できなくなる。ターゲット上では、authorised_keysで制限オプションと強制コマンドを使ってキーを制限している。
# バックアップターゲットのauthorised_keysの例
from="10.0.0.10",エージェント転送なし,pty転送なし,ポート転送なし,X11転送なし,command="/usr/local/bin/rsync-serve-backups"
/ホーム/バックアップ/.ssh/authorised_keys
呼び出されたスクリプトは、rsyncサーバーの呼び出しのみを許可し、パスの制限を設定する。このようにして 最小限の権利の原則操作を複雑にすることなく。
ハードリンクによるバージョン管理と保存
いくつかのスタンドでは、-link-destを使って毎日、毎週、毎月フォルダを作成している。 ハードリンク メモリを節約し、リストアを簡素化します。新しいファイルや変更されたファイルは、物理的に新しいフォルダに保存されます。これによって、適度なストレージ要件で多くのリストアポイントを達成することができます。私は、データの一貫性を危険にさらすことなく、単純なローテーションスクリプトで古い世代を削除します。固定されたスケジュール(7日、4週間、6ヶ月など)により、ストレージ計画は明確で透明性が保たれます。
リソースを制御する:帯域幅、CPU、I/O
私は-bwlimitでデータスループットを制限している。 生産的負荷 は安定しており、ユーザーは損失を経験していません。私はniceとioniceを使ってバックアップ処理の優先順位を決めています。低速ネットワークでは圧縮(-z)をオンにし、高速ローカルメディアではオフのままにしています。大きなファイルの場合は、-partialを選択して、キャンセルされた転送を継続できるようにしています。ローカルミラーの場合、デルタアルゴリズムには利点がないので、-whole-fileを使うことが多い。
一貫したデータステータス:スナップショットとデータベース
ファイルを開いているにもかかわらず、一貫したバックアップを維持するために、私は スナップ写真 またはアプリケーション・フック。LVM、ZFS、Btrfsなどのファイルシステムでは高速スナップショットが可能で、私はこれをrsyncのソースとして使っている。これにより、サービスを長時間ブロックすることなく、データの状態を論理的にフリーズさせることができる。
# 例:一貫性のあるソースとしての LVM スナップショット
lvcreate -L 10G -s -n data_snap /dev/vg0/data
mount /dev/vg0/data_snap /mnt/data_snap
rsync -a --delete /mnt/data_snap/www/ backup@host:/srv/backups/www/
umount /mnt/data_snap
lvremove -f /dev/vg0/data_snap
のために データベース ロジックとファイルは分けています。MySQL/MariaDBはdumpかPercona/Xtraソリューションで、PostgreSQLはpg_dumpかbasebackupsでバックアップしています。まず一貫性のあるダンプを作成し、次にrsyncでダンプのパスを転送します。これにより、バックアップに中途半端なファイルが書き込まれるのを防ぐことができます。
典型的なエラーの原因とその回避方法
最も一般的なつまずきは、パスの末尾のスラッシュである。 パスの詳細 double: /src/ vs. /src。dry-runと-itemise-changesで除外をテストし、効果を確認しています。空白を含むパターンを正しく引用し、除外ファイルをリポジトリに残しておく。マウントされていないターゲットは不要な削除につながる可能性があるため、-deleteの前にマウントをチェックします。最後に、エラーをすぐに確認できるように、リターンコードをログに記録し、アラームを作動させる。
バックアップ戦略:GFSとリカバリターゲット
まずRPO/RTOを設定する。 目標 頻度、保存場所、保存期間に関するすべての決定を導く。一般的なスキームはGFS:日次差分、週次フルまたはハードリンクによるマージ、月次長期。コンプライアンス要件は保存期間に影響するので、私は短期間の運用データと長期アーカイブを分けている。重要なシステムについては、ローカル・コピーに加えてオフサイト・バックアップも計画する。この組み合わせにより、サイトの障害から保護し、高速かつリモートでのリストアが可能になる。
Cronまたはsystemd-timer: 信頼性の高いプランニング
Cronはシンプルで堅牢です。時々スリープしたり再起動したりするホストには systemd-timer を、依存関係やミスランの処理とともに使用する。これにより、リブート後にランが失敗することがなく、シーケンスが正しいことが保証される(ネットワークの回復後など)。
# /etc/systemd/system/rsync-backup.service
[ユニット]
説明=Rsync バックアップ
After=network-online.target
Wants=network-online.target
[サービス]
タイプ=ワンショット
実行開始=/usr/local/bin/rsync-backup.sh
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
# /etc/systemd/system/rsync-backup.timer
単位
説明=毎日の Rsync バックアップタイマー
[タイマー]
OnCalendar=02:00
持続=true
[インストール]
WantedBy=timers.target
表:日常生活で重要な rsync オプション
いくつか使っているが、効果的なのは オプション私は各ジョブとバージョンについてレポに記録している。アーカイブモードが基本で、設定ミスを減らす。私は-deleteを使ってミラーをクリーンな状態に保っているが、正しいターゲットチェックのときだけ使うようにしている。バージョニングについては、-link-destとローテーションプランを組み合わせている。以下の表に、最も重要なスイッチとその使い方を示す。
| オプション | 目的 | ヒント |
|---|---|---|
| -a | アーカイブ・モード | 権利、時間、所有権 一貫性 |
| -z | 圧縮 | WANでは便利だが、ローカルでは省略されることが多い。 |
| -削除 | 削除されたレガシーファイルの削除 | ミラーを使用する場合のみ、事前にドライ・ランを行うこと |
| -bwlimit=KBPS | スロットル帯域幅 | 保護 生産システム 負荷ピークから |
| -link-dest=DIR | ハードリンクによるバージョン管理 | 経済的な世代別フォルダ |
| -e "ssh ..." | 安全輸送 | 鍵、ホスト鍵、制限ユーザー |
| -n / -dry-run | 変更なしのテスト実行 | 計画された行動を事前に示す |
リカバリーのテスト:練習の復元
私は定期的にリストアをテストしています。 外観 です。サンプルについては、ステージング環境で個々のファイルやウェブルート全体をリストアしています。データベースはダンプで個別にバックアップし、テスト的にインポートして整合性をチェックします。チェックサムによって整合性を確認し、サイレントビットエラーを認識します。各テストの後、次の緊急事態がより迅速に実行できるように、ドキュメント、スクリプト、プレイブックを修正します。
ベアメタルとシステムのバックアップ:特別な機能
システムやベアメタルのバックアップの場合、私はrsyncのオプションを次のように拡張している。 ACL、xattrs、ハードリンク を持っていくことができる。Linuxでは、-aAXHと-numeric-idsがその価値を証明している。私は、/proc、/sys、/run、/dev/ptsなどの擬似ファイルシステムを除外し、ブートファイルと設定ファイルを別々にバックアップしている。
# システム関連のバックアップ(例)
rsync -aAXH --numeric-ids \
--exclude={"/proc/*","/sys/*","/run/*","/dev/pts/*","/tmp/*"}\
/ root@backup:/srv/backups/hostA/current/
#リストア(簡易、ライブ・メディアから)
rsync -aAXH --numeric-ids /srv/backups/hostA/current/ /mnt/target/
chroot /mnt/target update-initramfs -u
grub-install /dev/sda && update-grub
このようなリストアにはもっと時間をかけ、シーケンスを文書化し、ブートローダーの手順を手元に置いておく。こうすることで、緊急時のストレスが大幅に軽減されます。
Pleskとの統合:パネルジョブを巧みに組み合わせる
私はPleskタスクとrsyncを組み合わせて、次のようにしています。 パネルのバックアップ とオフサイトコピーは連動する。ポストバックアップフックは、新鮮なバックアップを直ちに外部ストレージに転送します。スケジュールはメンテナンスウィンドウと一致するため、デプロイメントとバックアップが互いに干渉することはありません。パネル内とターゲットシステム上のログローテーションにより、ログディレクトリの肥大化を防ぐ。良い出発点は Pleskのベストプラクティス 繰り返し可能なプロセスに重点を置いている。
cPanelの統合: ホームディレクトリとデータベース
その後、cPanelのバックアップをrsyncで外部ホストに取り込みます。 オフサイト・プロテクション が追加負荷なしに残る。ディレクトリ構造は、個々のアカウントの選択的なリストアを容易にします。大規模なリセラーのセットアップでは、夜間に差分を実行し、週末にフルスタンドを計画します。クォータとローテーションを組み合わせることで、ストレージ要件を透明にしています。実用的な追加項目は cPanelバックアップ 日々の堅実な運営のために。
スケーリングと構造:多数のジョブをクリーンに管理
環境が大きくなると、私はソースと除外を一元的に構成する。で -ファイル・フロム 私はレポでバージョンアップしたリストを転送している。こうすることで、スクリプトに触れることなくレコードを変更し、場所の一貫性を保つことができる。
#ファイル-例より
/etc/backup/www.list
/data/www/
/etc/nginx/
/var/www/html/
rsync -a --delete --files-from=/etc/backup/www.list / backup@host:/srv/backups/www/.
パスの責任を明確に分けることで、重複を避けている(例えば、ウェブルートとログは別々にしている)。大規模なセットの場合は、意識的に並列処理を計画します。何十もの競合するプロセスよりも、少数のタイミングが良いジョブの方が良いのです。
操作における堅牢性:ロック、リトライ、タイムアウト
重複を避けるために 群れ またはロックファイル。Retryと-partialでネットワークの問題を遮断する。timeoutを使うと、ハングアップしているコネクションをきれいに切断し、アラームを出すことができる。
# /usr/local/bin/rsync-backup.sh (抜粋)
#!/usr/bin/env bash
set -euo pipefail
exec 9> /var/lock/rsync-backup.lock
flock -n 9 || { echo "バックアップはすでに実行中です"; exit 1; }.
LOG=/var/log/rsync-backup.log
SRC=/data/www/
DST=backup@backuphost:/srv/backups/www/
for i in {1..3}; do
if rsync -a --delete --partial --timeout=600 -e "ssh -i /root/.ssh/backup_key" "$SRC" "$DST"; then
echo "OK"; exit 0
fi
echo "$iを再試行" | tee -a "$LOG"
sleep 60
完了
echo "再試行後のエラー" >> "$LOG"; exit 1
特殊な場合のためのオプション:ACL、xattrs、スパース、原子性
データの種類によってrsyncを適応させている。ウェブとシステムのパスについては、次のようにバックアップしている。 ACLとxattrs を -A -X で使用する。大容量で使用頻度の低いファイル(VMイメージ、データベース)には -疎.と一緒に -遅延更新 そして -削除遅延 中間状態を最小化し、ターゲット上で準アトミック更新を実現する。センシティブなデータについては、-inplaceを避け、欠陥のある転送が最後の良いコピーを上書きしないようにする。
# 広範なメタデータの例
rsync -aAXH --sparse --delete-delay --delay-updates SRC/ DST/
絶対にアトミックなディレクトリが必要な場合(ステージング用など)、一時的なターゲットに同期して 走る その後、mvを使ってライブ・ディレクトリに切り替える。
確実な削除制限と妥当性チェック
設定ミスによる災害を防ぐために、私は次のように設定した。 -最大削除 Guardrailよりもね。また、実行前にマウント、空きメモリ、inodeをチェックしています。最後に成功したバックアップのログを取り、異常値(極端な削除率や変更率)には警告を出すようにしています。
# 大量削除からの保護
rsync -a --delete --max-delete=5000 SRC/ DST/
# 妥当性チェック (単純)
df -h /srv/backups
df -i /srv/backups
簡単にまとめると私はこのように進めている
私はRPO/RTOを最初に定義する。 優先順位 すべての技術的な選択を導く。そして無駄のないスクリプトを書き、-dry-runでテストし、すべての実行ログを取る。SSHキー、帯域幅の制限、バージョン管理によって、効率的かつ追跡可能なバックアップを取る。オフサイトのバックアップ先がローカルのコピーを補完し、定期的なリストアの練習で適切さを確認する。そのため、私のrsyncバックアップは信頼性が高く、高速で、いつでも使える状態を保っている。


