rsync を使用して 2 つの Linux サーバー間でデータを効率的に同期する
rsync を使って2台の Linux サーバー間でデータを効率的に同期する
日々の運用作業では、複数のサーバー間でファイルやディレクトリを同期する必要がよくあります。重要なデータのバックアップ、静的リソースのデプロイ、開発環境と本番環境の一貫性維持など、rsync は強力かつ信頼性の高いツールです。本記事では、2台の Linux サーバー間で rsync を使って安全かつ効率的にファイルを同期する方法を詳しく解説します。
rsync とは?
rsync(remote sync)は、ローカルまたはリモートでファイルやディレクトリを同期するためのコマンドラインツールです。「差分転送アルゴリズム」を採用しており、ソースと宛先の差分部分のみを転送するため、ネットワーク帯域の消費と同期時間をおさえられます。また、圧縮、権限保持、シンボリックリンク処理、中断再開などの高度な機能もサポートしています。
前提条件
以下の2台のサーバーがあると仮定します:
- ソースサーバー(Source):192.168.1.10、同期対象データ
/data/www - 宛先サーバー(Destination):192.168.1.20、データを
/backup/wwwに同期
両サーバーは Linux(例:CentOS、Ubuntu)を実行しており、rsync および openssh-server がインストール済みです。
rsync が未インストールの場合:
- Ubuntu/Debian:
sudo apt install rsync- CentOS/RHEL:
sudo yum install rsync
同期アーキテクチャ図
graph TD
Source[ソースサーバー 192.168.1.10] -->|rsync over SSH| Destination[宛先サーバー 192.168.1.20]
SSH パスワードなしログイン設定フロー
自動化同期を実現するには、ソースサーバーから宛先サーバーへの SSH 公開鍵認証を設定することを推奨します。
graph TD
A[SSH 鍵ペアを生成] --> B[公開鍵を宛先サーバーにコピー]
B --> C[パスワードなしログインをテスト]
C --> D{ログイン成功?}
D -- はい --> E[rsync 設定を続行]
D -- いいえ --> F[authorized_keys の権限を確認]
F --> B
自動同期実行フロー
sequenceDiagram
participant Admin as 運用担当者
participant Src as ソースサーバー
participant Dst as 宛先サーバー
Admin->>Src: 同期スクリプト sync-www.sh を作成
Admin->>Src: cron タスクを設定
Src->>Dst: 毎日深夜に rsync を自動実行
Dst-->>Src: 同期結果を返す
Src->>Admin: /var/log/rsync-www.log にログ記録
ステップ1:SSH パスワードなしログインの設定(推奨)
自動同期を実現するには、ソースサーバーから宛先サーバーへの SSH 公開鍵認証を設定します。
# ソースサーバーで実行
ssh-keygen -t rsa -b 4096
ssh-copy-id user@192.168.1.20
ssh user@192.168.1.20 # パスワード不要で接続できるはず
ステップ2:基本的な rsync 同期コマンド
rsync -avz /data/www/ user@192.168.1.20:/backup/www/
注意:ソースパス末尾の
/は「ディレクトリの中身」を同期するかどうかを決定します。
ステップ3:よく使うオプション
| オプション | 説明 |
|---|---|
-a |
アーカイブモード(権限・タイムスタンプなどを保持) |
-v |
詳細出力 |
-z |
転送時に圧縮 |
--delete |
宛先側の余分なファイルを削除 |
--exclude='*.log' |
ログファイルを除外 |
-P |
進捗表示 + 中断再開 |
ステップ4:自動化スクリプト + cron
スクリプト /usr/local/bin/sync-www.sh を作成:
#!/bin/bash
rsync -avz --delete --exclude='*.log' /data/www/ user@192.168.1.20:/backup/www/ >> /var/log/rsync-www.log 2>&1
echo "[$(date)] Sync completed." >> /var/log/rsync-www.log
cron タスクを設定:
0 2 * * * /usr/local/bin/sync-www.sh
まとめ
rsync + SSH + cron の組み合わせにより、軽量で信頼性の高い自動同期システムを構築できます。Mermaid 図表と組み合わせることで、全体の流れが視覚的に理解しやすくなり、チームでのナレッジ共有にも役立ちます。
ヒント:リアルタイム同期が必要な場合は、
inotifywaitと組み合わせてファイル変更を監視できます。