20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

replica運用してるglusterfsボリュームでmount時のフォールバックオプションを付ける

序文

例えばserver1とserver2でreplica運用しているglusterfsボリュームがあるとする。

# こんな感じに作られたボリュームね
gluster volume create vol1 replica 2 \
  server1:/media/bricks/disk1/vol1 \
  server2:/media/bricks/disk1/vol1

fstabには通常、以下のように記述する。

/etc/fstab
server1:/vol1 /media/gluster/vol1 glusterfs defaults,_netdev 0 0

しかしこれだと server1 が落ちてた際に mount 失敗して面倒なことになってしまう。
replica運用している場合はserver1に繋がらなかった場合はserver2をmountしてほしい。

backupvolfile-server オプション

そこでmountオプションにbackupvolfile-serverを追加するとその望みは叶う。
fstabは↓こんな感じになる。

/etc/fstab
server1:/vol1 /media/gluster/vol1 glusterfs defaults,_netdev,backupvolfile-server=server2 0 0

こうしておくとまずserver1に接続を試みて数秒待った時点で諦めて、次にserver2:/vol1のマウントを試みて繋がれば無事mountは成功する。両方繋がらなかった場合はしょうがない、mountは失敗する。

この場合、df を見ると、以下のようになっているはずだ。

$ df -hHT /media/gluster/vol1
Filesystem    Type           Size  Used Avail Use% Mounted on
server1:/vol1 fuse.glusterfs  60T   35T   26T  58% /media/gluster/vol1

実際はserver2を使ってmountしたとしても、あくまでserver1をmountしようとした際のオプションでフォールバックしただけなので、mountしたのはserver:/vol1として認識されている。

ただしGlusterFSのネイティブクライアントはそもそもreplicaのserver1とserver2のブリックを同格に扱うのでserver1が復帰した際には、分け隔てなくserver1とserver2の両方を読み書きしてくれるのでこれで特に問題はない。

ちなみに ps を見ると、glusterfs のプロセスが以下のように変化しているのが分かる。

# backupvolfile-server が無い場合
/usr/sbin/glusterfs --volfile-server=server1 --volfile-id=/vol1 /media/gluster/vol1
# backupvolfile-server がある場合
/usr/sbin/glusterfs --volfile-server=server1 --volfile-server=server2 --volfile-id=/vol1 /media/gluster/vol1

3つ目のサーバへのフォールバックオプションはマウントオプションにはない?→追記:嘘だった、あった。

replica 3で、3サーバ構成のボリュームがあるとする。その場合server1に繋がらなかったらserver2への接続を試みて、server2も繋がらなかったらserver3でmountしたいと思うところだ。だが残念ながらbackupvolfile-serverオプションは追加の1台しかサポートしていない。

まぁ1個だけでもフォールバックしてくれるのは非常に助かるからいいんだけどね。replica 2の構成が大半だし。

glusterfs を直接起動するやりかたなら3つ目のサーバも行けそう?

ただしmountコマンドじゃなく、以下のように glusterfsd を直接起動する場合は3つ目のフォールバックが指定できそうな気がする。後で3つ目のサーバを用意して試してみよう。

/usr/sbin/glusterfs \
  --volfile-server=server1 \
  --volfile-server=server2 \
  --volfile-server=server3 \
  --volfile-id=/vol2 /media/gluster/vol2

3つ目のバックアップサーバを試す場合実際こうなることが確認出来た。ただし手で実行せずにマウントオプションで書ける事がわかったのでそちらを使うほうが良いと思われる。

backup-volfile-servers オプションなんてのがあった。

使い方は直感通りで、何台あろうとも以下のように書ける。複数サーバのセパレータはコロンを使うようだ。

/etc/fstab
server1:/vol1 /media/gluster/vol1 glusterfs defaults,_netdev,backup-volfile-servers=server2:server3:server4:server5 0 0

ちなみに別にバックアップサーバが1台だけの時でもこの backup-volfile-servers オプションを使っても何ら問題はない。そうなると backupvolfile-server オプションの存在意義が無くなることになる。恐らくこんな歴史的経緯があったんだろうなぁと想像してる。

  • glusterfsはマルチマスタなんだから接続失敗したらフォールバックしたいよね。
  • backupvolfile-server 作った。これでSPOF回避だぜ!
  • あれ…、3台以上の場合も書きたいのに2つ以上のフォールバック先書けなくね?
  • 既に運用してる人もいるし既存の仕様は変えたくないな…オプション名も単数形だし…。
  • もういいや、後方互換の為に既存オプションはそっとしておいて、複数指定出来る backup-volfile-servers を新設しちゃえ!出来た!
  • んー後者がどう考えても上位互換で単数のやつもういらないんだけど互換性維持を考えると面倒だなぁ…もう両方あるまま放置でいいや(いまここ)

みたいな。面倒なので野次馬根性だけでコミットログやIssue追う気にもならんけどどうせ多分こんなとこだろw
しかし解せないのは新オプション名は最後にsつけるだけで良かった気がするんだが、途中のハイフンも追加してきたのは何でなんだろ?実装した人が違う?それともgrepしたときに紛らわしくないように?謎だ。

/etc/glusterfs/glusterfs.vol でフォールバック設定をする方法

フォールバック設定とかその他のオプションを /etc/glusterfs/glusterfs.vol に書いておくことで、mount時のデフォルト設定としてフォールバック動作を設定できるらしい。

後で調査予定→後に backup-volfile-servers オプションを見つけたのでコレを使えばOK。glusterでは基本設定ファイルは手でいじらないのが利口っぽい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?