ONFS ミラーリング

$Date: 2011/05/11 01:06:06 $


概要

ONFSミラーリング機能は、 ONFSファイルシステム、 およびONFSファイル共有機能によってルーターの外部ストレージに保存されているデータを複数のルーター間で同期させる機能です。 ONFSミラーリング機能の仕様について説明します。


用語の定義

ONFS...
本機能、オーバーレイネットワークファイルサーバーを表す略語です。

ノード...
本機能においてはルーターを示す用語です。 オーバーレイネットワーク(トポロジー)上の節にあたる通信機器を表します。

ミラーリンググループ...
ミラーリング機能により外部ストレージ上のデータを共有するルーターの集合です。

CN...
Contact Nodeの略語です。 同一のミラーリンググループに参加する、自分以外のルーターをさします。

DN...
Designated Nodeの略です。本文書中では代表ノードとも表現します。 ミラーリンググループ内のファイル同期機能を制御するルーターです。
グループ内で最大の優先度(preference)をもつルーターがDesignated Nodeとして動作します。

ACL...
アクセス制御機能で参照されるアクセス制御リスト(Access Control List)を示します。ACLの設定内容にしたがってアクセス制御が行われます。

対応機種とリビジョン

以下の機種およびファームウェアでONFSミラーリング機能をサポートしています。

機種ファームウェア
NVR500 Rev.11.00.06以降

詳細

1. ミラーリンググループ
1.1 ノード管理

本機能により外部ストレージのデータを共有するルーターの集合をミラーリンググループと呼びます。 ミラーリンググループ内では、 それぞれのルーターの外部ストレージ(ミラーリング対象フォルダー)に保存された内容が、 すべて同一のものとなるようにミラーリング機能が働きます。

それぞれのルーターには、onfs mirroring idで自拠点の情報を設定し、 onfs mirroring contact nodeでミラーリンググループに参加する自拠点以外の全拠点の情報を設定します。

各ルーターはミラーリング機能に必要な設定が揃うと、 onfs mirroring contact nodeコマンドで設定されたルーターに対して、 お互いの認証、ミラーリンググループへの参加処理を行います。 ルーター同士は、 onfs mirroring contact node コマンドで設定されたアドレスまたはホスト名と、 onfs mirroring pre-shared-key コマンドで設定された事前共有鍵に従ってお互いを同一グループのメンバーであることを認識します。

各ルーター同士は互いの認証が完了すると、ミラーリング動作を開始します。

1.2 代表ノードの選定

ミラーリンググループの中で、 onfs mirroring idコマンドで設定された優先度(preference) が最大のルーターが、そのグループの代表ノードとして動作します。 代表ノードは、グループ内の全拠点ルーターで同一のデータを共有できるように、 ミラーリンググループの制御を行います。

ミラーリンググループに参加中のルーターは、各々が他の拠点ルーターの死活監視を行っており、 現在の代表ノードがネットワークから切断された場合には、 2番目に大きな優先度をもつルーターが代表ノードとなって動作します。

特定の拠点ルーターを代表ノードに指定したい場合は、 onfs mirroring idコマンドのpreferenceオプションで、 他のルーターよりも大きな優先度を設定してください。

ミラーリンググループ内のルーターの優先度が全て同一の場合には、 onfs mirroring idコマンドで設定された名前(NAME)に従って代表ノードが決定します。 代表ノードとなる優先順位は以下の通りです。

  • 数字 > 大文字アルファベット > 小文字アルファベット
  • 数字は小さい方が優先
  • アルファベットの場合はアルファベット順
2. ミラーリング動作
2.1 ミラーリング対象ファイル

ミラーリング対象となるファイルは、 外部ストレージのsyncフォルダー(ミラーリング対象フォルダー)以下に保存されているファイルです。 ある拠点でファイル操作が行われた場合には、 即座にミラーリング機能によってファイルの同期が行われます。 ここでファイル操作とは、ファイルの追加、変更、削除、およびファイル名の変更を指します。 この際、アクセス制御情報が登録されたACLファイル(.rtacl)もミラーリング対象となります。

一方、ミラーリングの衝突時に作成された"_c_[機器の名前]" というサフィックスが拡張子の前に付加されたファイルはミラーリングから除外されます。 機器の名前には、 onfs mirroring idコマンドで設定された名前が使用されます。

ONFSミラーリング機能は、 ミラーリング対象フォルダーに保存されているファイル情報を管理しています。 ファイル管理情報には、ファイルの更新情報や編集拠点情報などがあり、 ファイルの衝突チェックに利用されます。

2.2 データの転送

ミラーリング機能では、制御メッセージの待ち受けにTCP 49501番、 データの待ち受けにTCP 49502番を使用します。 それぞれのポートは onfs mirroring id コマンドのcontrol-portオプション、 およびdata-portオプションで変更することができます。 ミラーリング機能によるデータ転送はSSLを利用して暗号化されます。

他の拠点ルーターとの参加認証が完了しミラーリング機能が有効になると、 それ以降のファイル操作がグループ内の他の拠点ルーターへと反映されます。 ミラーリング機能が有効になった時点における、 それぞれのルーターのストレージ内容の差異は即座に同期はされません。 ミラーリング機能が有効になってから、 onfs mirroring idコマンドのupdate-interval オプションで指定された時間が経過したあとに、差分取得が行われます。

差分取得をすぐに行いたい場合は、 onfs mirroring goコマンドを実行してください。

ミラーリンググループ内では、代表ノードのミラーリング対象フォルダーが基準となります。 代表ノード配下のPCからのファイル操作は、即座にそれ以外の拠点に通知されます。 一方、代表ノード以外の拠点で行われたファイル操作は、まず代表ノードに通知され、 代表ノードでのファイル操作が完了したあと、それ以外の拠点に通知されます。 代表ノードでのファイル操作に失敗した場合は、それ以外の拠点には通知されません。

また、各々の拠点で衝突が検出された場合には退避ファイルが生成されます。 退避ファイルの生成ルールについては、「2.5 ファイルの衝突」を参照してください。

2.3 ファイル操作

ファイル操作とは、ファイルの追加/更新/削除、およびファイル名の変更を指します。

ある拠点でファイルの追加が行われた場合、そのファイルはまず代表ノードに転送され、 その後代表ノードから各拠点に転送されます。 また、ファイルが更新された場合も追加と同様に、そのファイルが代表ノードに転送され、 その後代表ノードから各拠点に転送されます。

ファイルの追加
図1: ファイルの追加

転送中(取得中)のファイルは、 ファイル名の最後に"mrr"の拡張子がつけられたファイルとして書き込まれます。 mrrファイルは転送が完了するとmrr拡張子がとれ、元のファイル名となります。

転送先のフォルダーにmrr拡張子がとれた場合のファイル名と同一のファイルが存在する場合には、 古いファイルは新しいファイルに置き換えられます。 通信障害やルーターの電源断などでミラーリングが途中で失敗した場合、 拡張子"mrr"のついたファイルが残ることがありますが、 次回の更新が正常終了したときにそれらのファイルは消去されます。

ある拠点でファイル名が変更されたり、ファイルが削除された場合には、 それを通知するメッセージが代表ノードに転送され、代表ノードでの操作が完了した後に、 各拠点へとメッセージが転送されます。

ファイルの削除
図2: ファイルの削除

2.4 ミラーリング対象フォルダーの差分取得

ミラーリング機能は、ユーザーのファイル操作に応じてリアルタイムに動作しますが、 WAN回線の通信障害などによりミラーリングに失敗することがあります。 ミラーリンググループ内の各ノードは、代表ノードから定期的にファイル管理情報を取得し、 自分のファイル管理情報との差分をチェックします。 代表ノードにはあるが自分は持っていないファイルがあればそのファイルを代表ノードから取得します。 一方、自分が持っているファイルが代表ノードに存在しない場合は、 そのファイルの追加処理を行い、代表ノードに転送します。 差分取得処理を行う時間間隔は、 onfs mirroring idコマンドの update-intervalオプションで指定することができます。

差分取得処理は、初めてミラーリンググループに参加した直後には動作しません。 ミラーリンググループに参加後、すぐに差分取得を行いたい場合は、 onfs mirroring goコマンドを実行してください。 また、同期するストレージ内容は代表ノードが基準となるため、 代表ノード上でonfs mirroring goコマンドを実行しても、 差分取得は行われません。

差分取得の動作中に、 ファイル共有機能を利用してミラーリング対象フォルダー以下のファイルに変更が加えられた場合には処理を中断します。 差分取得処理は10回の中断があるとその時点で処理を諦め、次回の差分取得の開始時間を待ちます。

2.5 ファイルの衝突

ONFSミラーリング機能では、ファイルの更新情報や、 そのファイルが追加/更新された拠点名などをファイル管理情報として保持しており、 ファイルの衝突検知に利用します。 各ノードは、 代表ノードからのファイル操作通知と自身のファイル管理情報を基に衝突が発生しているか否かを判断し、 必要に応じて退避ファイルを生成します。

ファイルの管理情報は以下の場合に更新されます。

  • ONFSファイル共有機能を利用して、PCからファイル操作が行われた
  • ミラーリング機能によって行われたファイルの転送が完了した
  • ミラーリング機能によってファイルのリネームや削除が行われた

ファイルの衝突チェックは以下のタイミングで行われます。

  • 他の拠点からファイル操作(ファイルの追加/更新/削除/リネーム)の通知を受信した
  • ミラーリング機能によって行われたファイルの転送が完了した

また、退避ファイルは以下のような場合に作成されます。

  • 非代表ノードで行われたファイル操作が、代表ノードのファイル情報と衝突している
  • 代表ノードから通知されたファイル操作が、自分の保持しているファイル情報と衝突している
  • ミラーリング機能によって取得中のファイルに対して、配下のPCから変更が加えられた

衝突が発生した場合、 "_c_[機器の名前]"というサフィックスがファイル名の末尾(拡張子の前)に付加された退避ファイルを生成します。 退避ファイルは手動でマージする必要があります。 サフィックスに使用される機器の名前は onfs mirroring id コマンドで設定された機器の名前が使用され、そのファイル操作が行われた拠点を表します。

以下に、退避ファイルが生成される例を示します。

  1. 既に代表ノードのミラーリング対象フォルダーにあるファイルと同名のファイルを新規で追加した場合

    既に、代表ノードのミラーリング対象フォルダーに保存されているファイルと同名のファイルを、 他の拠点で新規に追加した場合に、その拠点で退避ファイルが生成されます。

    既に代表ノード上に存在しているファイルと同名のファイルを追加
    図3: 既に代表ノード上にあるファイルと同名のファイルを新規で追加した場合

    例えば既に代表ノード、拠点A、Bでミラーリング機能が動作しており、 新規に拠点Cが参加した場合を考えます。 代表ノード、拠点A、Bでは既にミラーリング機能によってreport.docが存在している状態で、 拠点Cで新規にreport.docを追加した場合(図3-@)、 report.docの追加通知を受信した代表ノードがファイルの衝突を検知し(図3-B)、 ファイルの衝突が発生したことを拠点Cに通知します(図3-C)。 通知を受信した拠点Cでは、report_c_[C].docにファイルをリネームして退避します(図3-D)。

    この場合に衝突を解消するためには、 まず拠点Cでonfs mirroring goコマンドを実行し、 ミラーリング対象フォルダーを最新の状態にします。 続いて、取得したreport.docと手元の退避ファイルの差分点を手動でマージし、 再度report.docとして上書き保存します。

  2. 代表ノードが保持していないファイルが新規に追加された際に、 既に同名のファイルを保持している場合

    例えば拠点Aのミラーリング対象フォルダーに既にreport.docが保存されており、 代表ノード上のミラーリング対象フォルダー内に何も保存されていない状態で、 代表ノード配下のPCから代表ノードのミラーリング対象フォルダーにreport.docを保存する場合を考えます(図4-@)。

    代表ノードで新規に追加されたファイルをそれ以外の拠点が既に保持している場合
    図4: 代表ノードが保持していないファイルが新規に追加され、同名のファイルを保持している場合

    代表ノードと同様にミラーリング対象フォルダーに何も保存されていない拠点B、Cでは、 ミラーリング機能によって代表ノード上に保存されたreport.docと同じ内容のファイルが保存されます(図4-A)。 一方、既にreport.docが保存されている拠点Aでは、代表ノードで追加されたreport.docと自拠点上のreport.docが衝突したことを検知し、 現在自拠点に保存されているreport.docをreport_c_[A].docという名前で退避します(図4-B)。 続いて、代表ノード上で追加されたreport.docを取得します(図4-C)。 衝突を解消するためには、 拠点Aの配下のPCで、 取得したreport.docと手元の退避ファイルの差分点を手動でマージし、 再度report.docとして上書き保存します。

    また、代表ノードがreport.docを保持していない状態で、拠点Bや拠点Cでreport.docが追加された場合も同様に、 拠点Aにはreport_c_[A].docという退避ファイルが生成されます。

  3. 同名のファイルを複数の拠点で同時に追加または更新した場合

    複数拠点で同時に同じ名前のファイルが追加または更新された場合には、 代表ノードが先に受信した通知に従ってファイルの取得を完了した前か後かによって退避ファイルの生成場所が変わります。 先に受信した通知に従ってファイルを取得している最中に、別の拠点からの通知を受信した場合には、 現在の転送をキャンセルし、後から通知されたファイルを優先してミラーリングします。

    ファイルを同時に追加
    図5: ファイルを同時に追加

    例えば拠点Aと拠点Bで同時にreport.docという名前のファイルが追加され(図5-@)、 代表ノードへのファイル転送がA、Bの順で行われた場合を考えます(図5-A)。 代表ノードは拠点Aからのファイル転送中に拠点Bから同名のファイルを受信した場合、 拠点Aからの転送をキャンセルし(図5-B)、拠点Bから転送されるファイルを受信します。 代表ノードは拠点Bからのファイル転送を完了すると、拠点A、Cへとファイルを転送します。 拠点Aは代表ノードからの通知によって衝突が発生したことを検知し、 手元のreport.docをreport_c_[A].docにリネームして退避します(図6)。 衝突を解消するためには、拠点Aのユーザーが手動でマージを行う必要があります。

    退避ファイルを生成
    図6: 退避ファイルを生成

    また、拠点Aから代表ノードへのファイル転送が既に完了し(図7-A)、 代表ノードからそれ以外の拠点にファイルを転送している途中で(図7-B)、 代表ノードが拠点Bからreport.docの追加通知を受信した場合(図7-C)、 代表ノードは衝突が起こっていることを拠点Bに通知し、 拠点Bではreport_c_[B].docという退避ファイルを生成します。 また、拠点Bには拠点Aで作成されたreport.docが保存されます。 衝突を解消するためには、拠点Bのユーザーが手動でマージを行う必要があります。

    ファイルを同時に追加
    図7:ファイルを同時に追加

衝突を解消するためには、以下の方法があります。
  1. 共有フォルダー内のファイルを直接編集する

    ルーターの共有フォルダーに保存されているオリジナルのファイル名のファイルを開き、 衝突により生じた退避ファイルとの差分点を手動でマージして上書き保存します。 上書き保存されたタイミングで、マージ後のファイルがミラーリングされ全拠点に反映されます。 ルーターのストレージ上で作業を行う場合、他の拠点でも同時に編集がされていると、 どちらか一方が優先されて上書き保存される可能性があります。

  2. PC上に一旦コピーして作業を行う

    ルーターのストレージ上から、 オリジナルのファイルと退避ファイルをPCにコピーし、差分点を手動でマージします。 作業が終わったら、オリジナルのファイル名でルーターのストレージ上のファイルを上書きしてください。 PC上にファイルを一旦移して作業する場合に、コピーではなくファイルの移動を行うと、 全拠点のミラーリング対象フォルダーから当該ファイルが一旦削除されてしまうことに注意してください。

なお、衝突により生じる"_c_[機器の名前]"が付いたファイルはミラーリングの対象にはなりません。

・衝突が検知できない場合

ミラーリング機能は、ファイルの追加/更新/リネーム/削除といった操作をトリガとして動作しますが、 ファイルの内容や、編集中か否かといった状態を把握することができません。 同名のファイルを複数の拠点で同時に編集していると、保存のタイミングによっては衝突を検知できない場合があります。

例3のように同名のファイルを複数の拠点で同時に追加/更新した場合、 拠点Aで更新されたファイルが代表ノードにミラーリングされる前や、 代表ノードから拠点Bへの転送が完了する前に拠点Bで追加/更新された場合には衝突を検知することができます。

一方、拠点A、Bでユーザーが同名のファイルを編集中に、拠点Aが先に更新(上書き保存)を行った場合には、 拠点Aで編集された内容が、代表ノード、拠点Bにミラーリングされます。 拠点Bではユーザーが編集中ですが、ミラーリング機能はユーザーの編集状況は把握できないため、 拠点Bは代表ノードから転送された内容でファイルを更新します。 この更新に気づかずに拠点Bのユーザーがファイルを上書き保存すると、拠点Bでの編集内容がミラーリングされ、 先の拠点Aでの編集内容が反映されない状態となることがあります。

このように同名のファイルを複数の拠点で同時に編集すると、どちらか一方の内容のみが反映される可能性があることに注意してください。

3. アクセス制御
(注) アクセス制御機能は Rev.11.00.13以降のファームウェアで対応しています。
3.1 アクセス権の設定

任意のファイル/フォルダー単位で、 ユーザー名/グループ名によるアクセス制限をかけることができます。 アクセス権の登録されたリストをACL(Access Control List) と呼び、 ACLの設定は set-aclコマンドから行います。 設定方法の詳細についてはアクセス制御を参照してください。

ミラーリング対象フォルダー配下のファイル/フォルダーに対してアクセス権を設定した場合、 ミラーリングされたファイル/フォルダーに付随するACLもミラーリングされます。 set-aclコマンドによってアクセス権を設定すると、更新されたACLが全拠点にミラーリングされます。 したがって、アクセス制限のかけてあるファイルが他の拠点へミラーリングされた場合には、その拠点においてアクセス権を持つユーザーしかアクセスすることができません。

ただし、アクセス制御機能の搭載されていないファームウェアを使用している拠点があったり、 アクセス制御機能を有効にしていない拠点がある場合には、 ミラーリングによってアクセス制限が解除されてしまうことに注意してください。

アクセス権の設定を複数の拠点で同時に行った場合、 「2.5 ファイルの衝突」のメカニズムによってACLが衝突する場合がありますが、 ACLの退避ファイルは生成されません。 例えば代表ノードでACLが更新され、 その通知を受信した非代表ノードで衝突を検知した場合には、 非代表ノードのACLは代表ノードのACLで上書きされます。 一方、非代表ノードでACLが更新され、 その通知を受信した代表ノードが衝突を検知した場合、 代表ノードはACLが更新された非代表ノードに衝突が発生していることを通知します。 この場合、非代表ノードで更新されたACLはそのまま保持され有効ですが、 他のノードへはミラーリングされません。

ミラーリング対象フォルダー配下にアクセス権を設定する操作は、 代表ノードでのみ行うことを推奨します。

3.2 ユーザー/グループ管理

アクセス制御機能を使用するためには、 ルーターにユーザーとグループの設定を入れておく必要があります。 それぞれ、onfs sharing useronfs sharing groupコマンドで設定します。

アクセス制限を行うためのユーザー/グループの設定自体はミラーリングの対象ではないため、 ミラーリンググループに参加しているそれぞれの拠点で、個別に設定する必要があります。 この際、各拠点のユーザー/グループ設定は同一のものに設定する必要はありません。

ユーザー/グループ管理の設定方法については、 ONFSファイル共有/アクセス制御を参照してください。


制限事項


注意事項


コマンド


参考情報