リナックス

rsync を使用して 2 つの Linux サーバー間でデータを効率的に同期する

choyeon
Choyeon
calendar_today
schedule 3 分で読める
visibility 190 閲覧
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 と組み合わせてファイル変更を監視できます。

共有

コメント

0

意見を投稿する

account_circle

ログインが必要です

ディスカッションに参加するには、ログインするか、登録してください。
chat_bubble_outline

コメントはありません

あなたの意見は貴重です。最初のコメントを投稿しましょう!