このチュートリアルでは、Unisonを使用して2台のDebian10サーバー間でファイル同期を設定する方法を示します。 Unisonはrsyncに似たファイル同期ツールです。大きな違いは、両方向の変更を追跡/同期することです。つまり、server1で変更されたファイルはserver2に複製され、その逆も同様です。
1予備メモ
このチュートリアルでは、次の2つのDebianサーバーを使用します。
- IPアドレス192.168.0.100のserver1.example.com
- IPアドレス192.168.0.101のserver2.example.com
2つのサーバー間でディレクトリ/var/wwwを同期させたい。このチュートリアルでは、Unisonをrootユーザーとして実行し、Unisonがユーザーとグループのアクセス許可を同期するのに十分なアクセス許可を持つようにします。
このチュートリアルのすべてのコマンドは、rootユーザーとして実行されます。ルートとしてシェル上の両方のサーバーにログインし、ステップ2「ユニゾンのインストール」から開始します。 "。
2Unisonのインストール
server1 / server2:
Unisonはserver1とserver2にインストールする必要があります。 SSHを使用してserver1からserver2に接続するため、SSHパッケージも必要です。ファイル編集用のnanoエディターをシェルにインストールします。これは次のように実現できます:
apt-get -y install unison openssh-server ssh nano
3サーバー1での秘密鍵と公開鍵のペアの作成
server1:
次に、server1.example.comに秘密鍵と公開鍵のペアを作成します。
ssh-keygen -t dsa
[メールで保護]:〜#ssh-keygen -t dsa
public / private dsa key pairを生成しています。
キーを保存するファイルを入力してください(/root/.ssh/id_dsa):<- ENTER
作成したディレクトリ'/root/.ssh'。
パスフレーズを入力します(パスフレーズがない場合は空):<-ENTER
同じパスフレーズをもう一度入力します:<-ENTER
Your IDは/root/.ssh/id_dsaに保存されています。
公開鍵は/root/.ssh/id_dsa.pubに保存されています。
鍵の指紋は次のとおりです。
ba:82 :e1:a1:42:9b:d4:c8:99:c8:bd:8b:7d:4d:d4:66[メール保護]
キーのランダムアートイメージは次のとおりです:
+ --- [DSA 1024] ---- +
| |
| |
| 。 |
| 。 E |
|+*。 S |
| .Ooo o |
|ooo+。 + |
| oo =... o |
| .. oo .. |
+ ----------------- +
[メール保護]:〜#
パスフレーズを入力しないことが重要です。入力しないと、人間の操作なしではミラーリングが機能しないため、Enterキーを押すだけです。
次に、公開鍵をserver2.example.comにコピーします:
ssh-copy-id -i $ HOME / .ssh /id_dsa.pub[メール保護]
#ssh-copy-id -i $ HOME / .ssh /id_dsa.pub[メール保護]
ホスト「192.168.1.102(192.168.0.101)」の信頼性を確立できません。
ECDSAキーのフィンガープリントは2b:3c:35:ad:3d:e2:fc:16:2f:55です。 :5c:e1:2c:d7:3d:a9。
接続を続行してもよろしいですか(はい/いいえ)? <-はい(これは、server2に初めて接続する場合にのみ表示されます)
/ usr / bin / ssh-copy-id:情報:新しいキーでログインしようとしています。すでにインストールされているものを除外するには
/usr / bin / ssh-copy-id:情報:1つのキーがまだインストールされていません-プロンプトが表示されたら、新しいキーをインストールします
[メール保護]のパスワード:<-server2 root password
追加されたキーの数:1
次に、 "ssh'[email protected]'"
を使用してマシンにログインし、必要なキーのみが追加されていることを確認します。
次に、server1の公開鍵が正しく転送されているかどうかserver2を確認します。
server2:
cat $ HOME / .ssh / authorized_keys<前> [電子メールの保護]:/ホーム/管理者の#猫の$ HOME /の.ssh / authorized_keysに
のssh-DSS AAAAB3NzaC1kc3MAAACBAKHLdAztIr8muZIlQYuE / 4f75kmgTwWqJRZJ1dTqHDnHWsy48emDU8v85hxAPg43k9aF7 / zAwpA0MNNNk5T9Tx / DyUkK / KcyVP2f4p8tvovrkUvoxsZACkTUmFqKdq2x6 / AGfjsCRmkpLhZuad7r5rKEXHRh8KYGHqD1Id8wcpy5AAAAFQCww3OekKcKMshMAwBK3XQmmYEGUwAAAIEAgjztlwh8OFYxwQve / RrhI2sceCXwS / yjQyH7q0zdWB9Fr4s / 16T2PLBT + 7M3vb + JlPDO3JRqgaYbel1kS2F2iKrY0EX0FI3 / 9fVDfWoz3mhCscPLriqy5AcsHitxQNfiZgA5wDiSjWpk1v + FbIC + VuqbKdQuE4MBKj19N9YALIUAAACABQ4NDsa2UBc8jsxvghjoLhUWF7HChaCksXQcL6i98VNRcemtPC6wpIri75iR4Uhv1666bDOBAdmIBX9Qf7A / + czPKPaj4CGI1hVy1pgYMa3btnEvoSnH / ONtjpOz9q + 3up1OOOn + 5fud7xjJn + Fq8WoGROgarBpCbQU3w2GUUnM =[Eメール保護]
4ランニングユニゾン
server1:
これで、初めてUnisonを実行して、両方のサーバーの/ var/wwwディレクトリを同期できるようになりました。 server1で実行:
unison / var / www ssh://192.168.0.101//var/www
出力はこれに似ています-ユニゾンが実行されるのはこれが初めてなので、いくつかの質問に答える必要があるかもしれません:
[メール保護]:/ var / www#unison / var / www ssh://192.168.0.101//var/www
サーバーに接続しています...
接続済み[//server1 // var / www-> // server2 // var / www]
変更を探しています
警告:これらのルートのアーカイブファイルは見つかりませんでした。正規名は次のとおりです。
/ var / www
// server2 // var / www
これは、
これらのルートを同期するのが初めてであるか、
ユニゾンを新しいバージョンにアップグレードしたために発生する可能性があります。別の
アーカイブ形式。
レプリカが
大きい場合、この実行では更新の検出に時間がかかる場合があります。
ユニゾンは、両方のレプリカの「最後に同期された状態」が
完全に空であると想定します。これは、異なるファイルは
競合として報告され、一方のレプリカにのみ存在するファイルは
新規と判断され、もう一方のレプリカに伝播されることを意味します。
2つの場合レプリカは同一であるため、変更は報告されません。
このメッセージが繰り返し表示される場合は、マシンの1つがDHCPからアドレスを取得していることが原因である可能性があります。これにより、同期間でホスト名が変更されます。
これを修正する方法については、UNISONLOCALHOSTNAME
環境変数のドキュメントを参照してください。
ユニゾンプロジェクトへの寄付はありがたいことに受け入れられます:
http://www.cis.upenn.edu/~bcpierce/unison
続行するにはReturnキーを押します。[]<-Enterキーを押します
サーバーからの変更を待っています
変更の調整
local server2>
dir ----> example.com [f]<-Enterキーを押します
dir ----> example.de [f]<-Enterキーを押します
更新の伝播を続行しますか? []<-「y」と入力します
更新の伝達
UNISON 2.48.4は、2020年5月5日の13:24:01.10に変更の伝播を開始しました
[BGN]example.comを/var/wwwから//server2// var /www<にコピーしますbr />[BGN]example.deを/var/wwwから//server2// var / wwwにコピー
ショートカット:/var/www/example.de/web/index.htmlをローカルファイル/varからコピー/www/.unison.example.com.d3783bddaaf59b9ba4d2ed0433f9db63.unison.tmp/web/index.html
[END]example.deをコピーしています
[END]example.comをコピーしています
UNISON2.48。 2020年5月5日の13:24:01.98に4つの変更の伝播が終了しました
シンクロナイザー状態の保存
同期は13:24:01に完了しました(2つのアイテムが転送され、0がスキップされ、0が失敗しました)
server1とserver2の/var/ wwwディレクトリを確認すると、同期していることがわかります。
もちろん、Unisonをインタラクティブに実行したくないので、コマンドラインで指定する必要があるすべての設定を含む設定ファイル(/root/.unison/default.prf)を作成できます。
>nano /root/.unison/default.prf
#同期のルート=/ var / wwwroot =ssh://192.168.0.101//var/www#同期するパス#path =current#path =common#path =.netscape / bookmarks.html#一部のregexps無視する名前とパスの指定#ignore=パス統計##無視/var / www / stats#ignore=パス統計/*##無視/var / www / stats / *#ignore=パス*/stats##無視/var / www / somedir / stats、ただし/ var / www / a / b / c / stats#ignore =Name *stats##は"stats"で終わるすべてのファイル/ディレクトリを無視します#ignore=Name stats*##はすべてを無視します「stats」で始まるファイル/ディレクトリ#ignore=Name * .tmp ##は、拡張子が.tmp#のすべてのファイルを無視します。trueに設定すると、このフラグにより、ユーザーインターフェイスは競合しない変更の確認を求める#をスキップします。 (より正確には、ユーザーインターフェイスが1つのエントリの伝播方向の設定を完了し、次のエントリに移動しようとすると、競合しないすべてのエントリをスキップして、次の競合に直接移動します。)auto =true#これがtrueに設定されている場合、ユーザーインターフェイスは#質問をまったくしません。競合しない変更は伝播されます;#競合はスキップされます。batch=true#!これがtrueに設定されている場合、ユニゾンは、変更を伝播する前に、レプリカ全体が削除されたように見える場合、追加の確認を要求します。バッチフラグも#設定されている場合、同期は中止されます。 path#プリファレンスが使用される場合、同じ確認が#トップレベルパスに対して要求されます。 (現時点では、このフラグはテキストユーザーインターフェイスにのみ影響します。)マウントポイントの設定も参照してください。confirmbigdel=true#この設定がtrueに設定されている場合、Unisonはファイルの#変更時間と長さを`疑似として使用します。すべてのファイルの完全な内容を読み取る代わりに、更新のためにレプリカをスキャンするときのinode#number'。 Windowsでは、これにより、ファイルの変更時間と長さが更新によって変更されていない場合、ユニゾンが更新の伝播を見逃す可能性があります。ただし、ユニゾンは、他のレプリカからの変更でそのような更新を上書きすることはありません。変更を伝播する直前に、常に安全な#更新のチェックを行います。したがって、#ほとんどの場合Windowsでこのスイッチを使用し、#Fastcheckをfalseに設定してUnisonを1回実行するのが合理的です。#Unisonが更新を見落としている可能性がある場合は、#設定のデフォルト値はautoです。 、これにより、#UnisonはUnixレプリカ(安全な場合)#で高速チェックを使用し、Windowsレプリカで低速チェックを使用します。下位互換性のために、true、false、およびautoの代わりにyes、no、およびdefaultを使用できます。詳細については、「高速チェック」のセクションを参照してください。fastcheck=true#このフラグがtrueに設定されている場合、#ファイルのグループ属性が同期されます。グループ名またはグループ#識別子が同期されるかどうかは、プリファレンスnumerids.group =true#によって異なります。このフラグがtrueに設定されている場合、#ファイルの所有者属性が同期されます。所有者名または所有者識別子が同期されるかどうかは、preference#extttnumerids.owner =true#に依存します。preference-preferrootを含めると、Unisonは、ユーザーに#ガイダンスを求めるのではなく、常に#rootを優先して競合を解決します。 (rootの構文は、ルート設定の場合と同じですが、新しい値と古い値が追加されます。)#この設定は、preferpartial設定によって上書きされます。#この設定は、自分が何を知っているかが確実な場合にのみ使用してください。この設定がtrueに設定されている場合、テキストユーザーインターフェイス#はエラーの場合を除いて何も出力しません。#silentをtrueに設定すると、バッチ設定#が自動的にtrueに設定されます。silent=true #このフラグがtrueに設定されている場合、ファイルの変更時刻(ただし、ディレクトリmodtimesは転送されません)が伝播されます。times=true
コメントは、パスディレクティブを除いて、ファイルを自明にする必要があります。パスディレクティブを指定しない場合、ルートディレクティブのディレクトリは同期されます。パスディレクティブを指定すると、パスはルートパスに相対的であり(たとえば、root =/ var/wwwおよびpath=currentは/var/ www / currentに変換されます)、指定されたディレクトリ全体ではなく、これらのサブディレクトリのみが同期されますルートディレクティブで。
Unisonのmanページを見ると、利用可能なオプションの詳細を確認できます。
マンユニゾン
すべての設定を設定ファイル(特にルート(およびオプションでパス)ディレクティブ)に配置したので、引数なしでUnisonを実行できます:
ユニゾン
5ユニゾンのcronジョブの作成
server1:
同期を自動化したいので、server1.example.comでcronジョブを作成します:
crontab -e
* / 5 * * * * / usr / bin / unison&> / dev / null
これは5分ごとにユニゾンを実行します。ニーズに合わせて調整してください(
を参照)man 5 crontab
)。ここでユニゾンへのフルパス(/ usr / bin / unison)を使用して、cronがユニゾンの場所を認識していることを確認します。ユニゾンの場所は異なる場合があります。実行
どのユニゾン
あなたがどこにいるかを知るために。
6テストユニゾン
次に、Unisonの双方向同期をテストして、セットアップが完全に機能しているかどうかを確認します。
server1で次のコマンドを実行して、「テスト1」という内容のテストファイルを作成します。
Server1
echo "Test 1"> /var/www/test.txt
ここで、少なくとも5分待ちます(5分ごとに1回実行されるcronジョブを作成したため)。次に、server2で実行します:
cat /var/www/test.txt
test.txtファイルの内容を画面に表示します。出力はこのスクリーンショットのようになります。
次に、server2でこのコマンドを実行すると、テストファイルの内容が「テスト2」に更新されます。
Server2
echo "Test 2"> /var/www/test.txt
そして、少なくとも5分待ちます。次に、server1でcatコマンドを実行します:
Server1
cat /var/www/test.txt
出力は次のようになります:
7つのリンク
- ユニゾン:http://www.cis.upenn.edu/~bcpierce/unison/
- Debian:http://www.debian.org/