序章

Tahoe-LAFSは、分散型の「最小権限」ファイルシステムであり、簡単に拡張して、堅牢なネットワーク対応のストレージネットワークを提供できます。 RAID構成がディスクレベルで得られるものと同様の利点を備えたTahoe-LAFSは、同様のモデルを利用して、ファイルを暗号化し、複数のサーバー間で分割します。

このガイドでは、3つのUbuntu14.04VPSインスタンスを使用してTahoe-LAFSシステムをセットアップします。 これにより、データを3つの別々のサーバーに分散できるようになり、単一のサーバーよりも冗長性と大きなストレージプールが得られます。

Tahoe-LAFSコンポーネントをインストールします

Ubuntu 14.04リポジトリには、この記事の執筆時点での最新バージョンのTahoe-LAFS(1.10.0)が含まれています。 これを使用して、各サーバーにコンポーネントをインストールできます。

sudo apt-get update
sudo apt-get install tahoe-lafs

これにより、Tahoe-LAFSpythonパッケージがシステムでアクセス可能な場所にインストールされます。

構成を分離するために、Tahoe-LAFS構成を処理するための非特権ユーザーを作成しましょう。

sudo adduser tahoe_user

ユーザーのパスワードを選択します。 次に、ガイドの残りの部分について、新しいユーザーに移行します。

su - tahoe_user

ノード接続を管理するためのイントロデューサーの構成

クラスターを構成するために必要な最初のステップは、「イントロデューサー」をセットアップすることです。 イントロデューサは、クライアントとストレージノードを接続するためのハブとして機能する単なるノードです。

イントロデューサ(またはマシンにストレージノードも含まれている場合はイントロデューサコンポーネント)は、実際にはファイルを転送したり、データを保存したりしません。 その唯一の責任は、保管場所のアドレスを収集し、クラスターへのアクセスを要求するクライアントにそれらを提供することです。 実際のデータはイントロデューサを通過しません。

この手順は、最初のマシンでのみ実行する必要があります。 他のすべてのサーバーは、この同じイントロデューサーを使用してクラスターに接続し、相互に検出します。

開始するには、最初のTahoeコマンドを実行できます。 これにより、ホームディレクトリの隠しディレクトリ内にあるTahoeイントロデューサが初期化されます。 .introducer

tahoe create-introducer ~/.introducer

これにより、ディレクトリが作成され、いくつかの構成ファイルが内部に配置されます。 これらの設定は非常に基本的なものであるため、調整する必要はありません。

イントロデューサーをオンラインにするには、このコンポーネントを開始するようにTahoeに指示する必要があります。

tahoe start ~/.introducer

STARTING '/home/tahoe_user/.introducer'

これでイントロデューサーが起動し、ストレージノードの作成とこの「グリッド」(連携して動作するノードの集合の名前)への接続を開始できます。

ただし、最初に、新しい紹介者から1つの重要な情報を抽出する必要があります。 これは、ストレージノードが接続に使用できるアドレスです。 これを見つけるには、次のコマンドを入力します。

cat ~/.introducer/private/introducer.furl

pb://[email protected]:57972,10.128.1.228:57972,127.0.0.1:57972/ysslmcvu23f7opkxj4db5r5mdan3pj6m

これは、ストレージノードを構成するために必要なネットワークアドレスです。後でアクセスできるように、これをコピーしてどこかに貼り付けてください。

データを保持するようにストレージノードを構成する

イントロデューサコンポーネントを構成してオンラインにしたので、実際に書き込み可能なストレージのプールを確保できるように、ストレージコンポーネントの作成を開始する必要があります。

実稼働環境では、イントロデューサーノードをストレージユニットとは完全に別のVPSインスタンスに配置することをお勧めします。 また、これから説明するよりもはるかに大きなプールにデータを分散することもできます。 ただし、このガイドでは、3つのストレージノードがあり、そのうちの1つにはイントロデューサーもあります。

各サーバーで、次のように入力して通常のストレージノードを作成します。

tahoe create-node

これにより、紹介ディレクトリと同様の一般的なフォルダ構造が作成されますが、情報が異なります。 これはにあります ~/.tahoe デフォルトでは。

続行する前に、構成ファイルを調整する必要があります。 エディターで開きます。

nano ~/.tahoe/tahoe.cfg

まず、ノードごとに一意の名前を作成します。 これは、各サーバーを識別するために使用され、デバッグの問題の手がかりを与えることができます。

ニックネーム=ノード名

次に、調整する必要があります web.port パラメータ。 現在、ローカルコンピューターからの接続のみを受け入れます。 あなたはそれをに変更することができます 0.0.0.0 すべてのインターフェースからの接続を許可する、または特定のIPアドレスにバインドするには:

web.port = tcp:3456:interface=0.0.0.0

次に、を見つける必要があります introducer.furl パラメータ。 これは、イントロデューサの構成中に取得したイントロデューサフルで変更する必要があります。 次のようになります。

introducer.furl = pb://[email protected]:57972,10.128.1.228:57972,127.0.0.1:57972/ysslmcvu23f7opkxj4db5r5mdan3pj6m

次に調整する必要のあるパラメーターは、コメントアウトされたパラメーターです。 shares.needed, shares.happy, shares.total. これらのパラメータの意味についてもう少し詳しく見ていきましょう。

共有パラメータとはどういう意味ですか?

The shares.* パラメータは、Tahoe-LAFSシステムのセットアップ中に行う必要がある最も重要な構成決定の一部である可能性があります。 それはあなたが持っている冗長性の量とあなたのデータが占めるスペースの量を設定します。

つまり、ファイルがアップロードされると、「共有」に分割されます。 各共有は、特定の数の他の共有と組み合わせると、ファイルを再作成するために使用できます。

The shares.total パラメータは、ファイルがアップロードされたときに作成される共有の正確な数を示します。 デフォルトでは、これは「10」です。

The shares.needed ファイル全体を再作成するために必要な共有の数です。 デフォルトでは、これは「3」です。 したがって、これを「1」に設定すると、冗長性がありますが、ファイルの完全なコピーが10回作成されます。

これらの2つのパラメーターを組み合わせて、クライアントの共有ポリシーを作成します。 デフォルト値では、ファイルがアップロードされると、10個の異なる共有に分割されます。 これらの共有は冗長になるため、3つを使用してファイルを再作成できます。

これは、 shares.needed / shares.total ファイルサイズを掛けたときにファイルを冗長に保存するために必要なオーバーヘッドの量がわかります。 デフォルトの配置では、ファイルは通常のディスクにファイルを保存する場合の約3.3倍のストレージスペースを占有します。

これは大変なことのように思えるかもしれませんが、これらの共有の7つを失い、完全なファイルを再構築できるという利点を享受していることも理解する必要があります。

最後のパラメータ、 shares.happy 共有がサーバー間でどのように分散されるかを構成するために使用されます。 ながら shares.neededshares.total パラメータは「シェア」を扱います。 shares.happy パラメータは実際のサーバーを指定します。

これにより、共有のコピーを受信するために使用できるサーバーの最小数が設定されます。 使用可能なサーバーの数より少ない場合、アップロードは成功しません。 これは、データが妥当な量のノードに分散されるようにするために使用されます。 デフォルトでは、これは「7」に設定されています。

使用可能なノードは3つしかないため、これらのプロパティのいくつかを調整する必要があります。 すべてのサーバーは同じファイルの複数の共有を格納できるため、調整する必要がある必要なパラメータは次のとおりです。 shares.happy. これは、サーバーの数以下である必要があります。

私たちの目的のために、これらすべてのコメントを外し、 shares.happy サーバーの総数である「3」に:

Shares.needed = 3shares.happy = 3shares.total = 10

これらはデモンストレーションには問題ありませんが、ニーズに応じてさらに調整する必要があります(非常に高い冗長性が必要ですか、それともディスク容量がより問題になりますか?)。

各ノードのファイルの編集が終了したら、次のように入力して各ストレージノードを起動できます。

tahoe start

Webインターフェイスとの対話

すべてのノードが起動したら、ポートで任意のVPSインスタンスを参照して、Tahoe-LAFSファイルシステムにアクセスできます。 3456:

http:// your_ip :3456

すべてのノードとグリッドへのインターフェイスを表示するWebページを取得する必要があります。

これは、ノードの概要です。 Tahoe-LAFSは、ユーザーが自分のハードウェアで実行されていることを想定しておらず、ユーザーが唯一のオペレーターであるとは想定していないため、名前でデータをクエリするためのインターフェイスは実際には含まれていません。 所有者は、アップロード時に提供されたファイルを取得するための情報を持っていることを前提としています。

インターフェースを少し使ってデモンストレーションしてみましょう。

まず、左側にある「ディレクトリの作成」ボタンをクリックして、ディレクトリを作成しましょう。 デフォルトの選択(SDMF)は、私たちの目的には問題ありません。

次のようなディレクトリページが表示されます。

このディレクトリには、私たちが慣れている標準的な意味での名前はありません。 代わりに、ほとんどID(実際にはいくつかのID)があります。 名前がなく、Tahoe-LAFSはセキュリティ上の理由からクエリを実装していないため、現在このディレクトリに関する情報を保存しないと、このディレクトリに戻ることができません。

このページをブラウザでブックマークするか、ディレクトリに関連付けられたIDを記録することができます。 IDを取得するには、ページの上部にある[このディレクトリの詳細]リンクをクリックします。

ストレージインデックス、オブジェクトタイプ、そして最も重要なのは、アクセスキャップまたはTahoe-URIsのページに移動します。 これらは、ページの中央にある表にリストされています。

これは、単純なディレクトリにアクセスするために必要な多くの情報のように思えるかもしれませんが、そうです。 ディレクトリには、読み取りおよび書き込みアクセス用のアクセスURIと、提供できる読み取り専用アクセス用のアクセスURIがあります。

これは、このディレクトリに戻るために必要な情報です。 これをコピーしてどこかに貼り付けることができます。 スクリプトを作成している場合は、「JSON」リンクをクリックして、よりわかりやすいプレゼンテーションを表示します。

 [ “dirnode”, { “rw_uri”: “URI:DIR2:nkqxlvkfkxuh2xi7t4g2h2uyxe:p2hjy74uoro4ce5xccsq4nr2gkhwzx4cdqnmz4hbb3gysx7quata”, “verify_uri”: “URI:DIR2-Verifier:vieiojcnkuoq5kq6e2zjavgznq:p2hjy74uoro4ce5xccsq4nr2gkhwzx4cdqnmz4hbb3gysx7quata”, “ro_uri”: “URI:DIR2-RO: dpviyzeqau7skc5zfzil2s5pnq:p2hjy74uoro4ce5xccsq4nr2gkhwzx4cdqnmz4hbb3gysx7quata」、「children」:{}、「mutable」:true}] 

ディレクトリ内では、使用可能なボタンを使用してファイルを簡単にアップロードできます。 ラジオボタンを選択することで、不変(読み取り専用)または書き込み可能にすることができます。 これらのファイルがURIのあるディレクトリに保持されている限り、これらのファイルのすべてのURIを追跡する必要はありません。

より多くの機能が必要な場合は、ここにリストされているTahoe-LAFSのさまざまな代替フロントエンドがあります。 特に興味深いのは、コマンドラインインターフェイスとSFTPインターフェイスです。これらは、ファイルをはるかに簡単に管理するのに役立ちます。 たとえば、CLIを使用すると、ディレクトリとファイルのエイリアスを作成できるため、URIを追跡する必要がありません。

結論

これで、管理者を信頼するかどうかに関係なく、さまざまな異なるストレージメディアに分散暗号化ファイルシステムをセットアップする方法を理解できたはずです。 これにより、他の人にデータを管理させることに固有の信頼の問題のいくつかを回避できます。

ジャスティン・エリングウッド