Project Home Downloads Wiki Issues Source
複数のネットの設定  
複数のネットワークのためにMogileFSを設定
Updated Jan 9, 2012 by dorma...@rydia.net

注意: このガイドはバージョン2.35以上を参照します。またこれを書いている時点では、必要なモジュールがCPANに無いかもしれません。

MogileFS と 複数の ネットワーク/データセンター

MogileFS は複数の利用可能なネットワークという点から、複数のデータセンターを理解します。これの意味すること:

  • IPアドレスが 10.5.0.1 と 10.6.0.1 の二つのストレージノードがあるとします。
  • mogileが 10.5/16 と 10.6/16 を異なるネットワーク "zones" と理解するように設定したいと思うかも知れません。
  • 全く異なるデータセンター、キャビネット、フロアー、ラックにあるかも知れません。
  • 適切な設定をして、それぞれのzoneにいくつのコピーがあって欲しいかを宣言したいかも知れません。

現在のところ、データベースまたはトラッカーを複数の場所で実行するためのどのようなnativeな取り組みもありません。トラッカーはネットワークの両方で実行され、ZoneLocalプラグインを使ってクライアントにローカルのコピーを提供しようとし、ローカルコピーを使ってリプリケートするでしょう。しかしながら、全てのトラッカーはそれでもデータを取り出すために同じデータベースを指す必要があります。

インストールの前提条件

CPANから 'MogileFS::Network' をトラッカーのサーバにインストールします。これにより、トラッカーのためのZoneLocalプラグインがもたらしたように、MultipleNetworksHostsPerNetworkのリプリケーションポリシーがもたらされます。

設定

リプリケーション ポリシーの決定

複数のネットワーク

このリプリケーションポリシーは明確な設定を要求しません。ネットワークゾーンを定義し、単純にクラスポリシーを"MultipleNetworks()" に設定します。リプリケーションはそれからできるだけ多くのネットワークにコピーが存在するようにしようとするでしょう。理想的には3以上のmindevcountでこれを使うべきです。

HostsPerNetwork

MultipleNetworksのもっと強力なバージョンで、それぞれのゾーンに正確にいくつのコピーが存在するかを指定することができます。例えば。ゾーン "near" と "far" がある場合。near に二つのコピーを、farに一つのコピーを持ちたいとすると、"HostsPerNetwork(near=2,far=1)" のように設定する必要があります。

設定ゾーン

  • mogadm settings set network_zones near,far
  • mogadm settings set zone_near 10.5.0.0/16
  • mogadm settings set zone_far 10.6.0.0/16

... 以上です。

ZoneLocal プラグインの設定

ゾーンを設定し、全てのトラッカーにMogileFS::Networkをインストールすると、ZoneLocalと呼ばれるトラッカーのプラグインを有効にする選択肢ができます。これはトラッカーにどのゾーンにいるかを明確にするように伝え、リモートクライアントがどのゾーンにいるかを見つけようとするでしょう。パスデータを返す時、あるいはファイルの新しいコピーをリプリケートする時に、"local"ネットワークで利用可能なパスを使おうとするでしょう。

これを有効にするには、単純に新しい行をmogilefsd.confに追加します

local_network = 10.5.0.0/16
plugins = ZoneLocal

local_network はクライアントとノードがこのトラッカーが来ていると考えているネットワークでなければなりません。もっと簡単に言うと、それは単にトラッカーがいるネットワークです。そのIPアドレスが10.5.0.50の場合、 ローカルネットワークは 10.5.0.0/16 でしょう。

これが最初の設定であれば、一つのトラッカーをフォアグラウンドで実行(デーモン化しない)するか、うまく行っているかを確認するために!watchを使って注意深く監視したほうがよいでしょう。

クラス リプリケーション ポリシーの設定

最後は、クラスポリシーの設定です。MogileFSはクラスを使ってファイル単位で複数のネットワークポリシーを決定することができます。

mogadm class list
 domain               class                mindevcount   replpolicy  
-------------------- -------------------- ------------- ------------
 toast                byhost                    2        MultipleHosts()
 toast                default                   2        MultipleHosts()
 toast                four                      4        MultipleHosts()
 toast                fourbynamenet             1        HostsPerNetwork(near=2,far=1)
mogadm class add toast twoontwonets --replpolicy "HostsPerNetwork(near=2,far=2)"
mogadm class modify toast twoontwonets --replpolicy "HostsPerNetwork(near=3,far=3)"

設定例

ネットワーク 10.10.0.0/16 (10.10.*.* アドレス)があるとします。

全てのマシーンはネットマスク 10.10.0.0/16 を持つように設定されます。

10.10.5.0/24 から取り出したマシーンのIPアドレスが、例えば次のものであった場合:

web1: 10.10.5.1 (netmask 255.255.0.0 or /16) web2: 10.10.5.2 tracker1: 10.10.5.3 tracker2: 10.10.5.4 storage node 1: 10.10.5.5 storage node 2: 10.10.5.6

バックアップノード:

storage node 3: 10.10.8.1 (netmask 255.255.0.0 or /16)

つまり、メインサーバは 10.10.5.0/24 に、バックアップサーバは 10.10.8.0/24 に収まります。

MogileFSゾーンでは、以下のように設定します:

near=10.10.5.0/24 far=10.10.8.0/24

これで、"web1"が"tracker1"にAPIリクエストをした場合は、tracker1はweb1が10.10.5.0/24の"near"ゾーンにいるように見えます。なぜなら、"web1"は 10.10.5.1のIPアドレスを持っているからです。

"tracker1"はこれで"near"にいるストレージノードを見ます。"node1"と"node2"のIPアドレスが10.10.5.5と10.10.5.6で、共に10.10.5.0/24の中にいるのでこれにマッチします。またこれらは 10.10.5.0/24 の中にもいます。

"node3"は10.10.8.1で、10.10.8.0/24のゾーン"far"にマッチするため、読み込みの対象になりません。

replpolicy を次のように設定した場合:

class toast: HostsPerNetwork(near=2,far=1)

"tracker1" と "tracker2" は常にクラス"toast"のファイルのコピーを"near"ゾーンに二つ、"far"ゾーンに1つ配置するでしょう。この例では、"node1"に一つのコピー、"node2"に一つのコピー、"node3"に一つのコピーと解釈されます。

結論

セットアップが完了し、設定し、クラスを修正したとしても、自動的にはファイルが再リプリケートされないことに注意してください。リプリケーションポリシーを変更していて既存のファイルがあるのであれば、新しいポリシーで幸せになるには何が必要かをmogilefsが知るためにFSCKを実行したいでしょう。詳しくはFSCKガイドを見てください。

Comment by zend...@gmail.com, Jul 30, 2012

just wondering; is the below possible?

mogadm settings set zone_datacenter2 10.6.0.0/16 10.7.0.0/16 10.8.0.0/16

if the datacenter has multiple ip ranges in use.

Comment by project member a...@develooper.com, Jan 21, 2013

zendith: Yes, it should work with a comma or space separated list of netmasks.


Sign in to add a comment
Powered by Google Project Hosting
TOP
inserted by FC2 system