GlusterFS を Ubuntu 上で構成してみる(on Cloudn)

Read More

ちょっとスペースがあるのでCloudn上の仮想サーバでUbuntuサーバを起動してその上にGlusterFSを作ってみます。

  • cloudn はNTTコミュニケーションのパブリッククラウドです。代替最小のノードで980円/月転送量が要らないのでパッと遊ぶときには便利です。

サーバの用意

この辺りを見るととりあえず動くだけであればメモリ1Gほどあれば良いみたいなので t1.micro でいきたいのですがこれは 0.5GRAMなんですよね。その上になると 2Gになってしまうのでとりあえず t1.micro で進めてみます。

Cloudn Compute

またOSもRedhat系が多いのでここではUbuntuで実施してみます。

構成は以下のように進めて行きたいと思います。

  • gluster01
  • gluster02
  • 利用クライアント:chance

これらをパブリッククラウド上に構成してみます。ディスクとしては gluster01/02にそれぞれディスクを40Gづつ追加して(別ディスク扱い)そこに分散ドライブを作成したいと思います。

GlusterFSの導入

手順は省きますが、このサーバは Ubuntu 12.10 です。とりあえずおまじないのごとく apt-get update / apt-get upgrade をしておきます。

以下のコマンドでレポジトリに追加

# apt-get install python-software-properties software-properties-common
# add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.3
# apt-get update

次にパッケージの導入をします

# apt-get install glusterfs-server glusterfs-client

次に起動の設定

# update-rc.d glusterfs-server defaults

以上で完了です。
プロセスはこんなかんじでした

root@gluster01:~# ps -ef | grep gluster
root     21929     1  0 11:17 ?        00:00:00 /usr/sbin/glusterd -p / var/run/glusterd.pid

ディスクの作成

ディスクを追加してみます。Cloudn上から40Gのディスクを作成して先ほどの gluster01にアタッチします。fdisk /dev/vdb ですべて1パーティションのLVM領域として確保します。また参考しているドキュメントにXFSでの利用が記載されていたのでその手順に従いたいと思います。

パーティションの作成

fdisk /dev/vdb か Partedコマンドなどでパーティションを作ります。タイプは8e(LVM)で作ります。

Disk /dev/vdb: 42.9 GB, 42949672960 bytes
16 heads, 63 sectors/track, 83220 cylinders, total 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x53d37261

Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    83886079    41942016   8e  Linux LVM

VGからLVまでの作成

ざっくりコマンドだけを記載していますが。基本的には通常通りLVM->PV->VG->LVと作っていけば問題ありません。

root@gluster01:~# pvcreate /dev/vdb1
  Writing physical volume data to disk "/dev/vdb1"
  Physical volume "/dev/vdb1" successfully created
root@gluster01:~# vgcreate vg_data /dev/vdb1
  Volume group "vg_data" successfully created
root@gluster01:~# lvcreate -n lv_data -l 80%VG vg_data
  Logical volume "lv_data" created

XFSでフォーマットを行う

導入初期だとパッケージが不足していたのでXFS用のモジュールの導入も一緒に実施します。

# apt-get install xfsprogs
root@gluster01:~# mkfs.xfs -i size=512 /dev/vg_data/lv_data
meta-data=/dev/vg_data/lv_data   isize=512    agcount=4, agsize=2096896 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=8387584, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=4095, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

fstabにエントリーの追加

/dev/mapper/vg_data-lv_data /brick xfs defaults 0 0

マウントディレクトリの作成とマウント

root@gluster01:~# mkdir /brick
root@gluster01:~# mount /brick
root@gluster01:~# df
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/mapper/localhost-root   13123096 1242896  11213576  10% /
udev                           242108       8    242100   1% /dev
tmpfs                          100648     304    100344   1% /run
none                             5120       0      5120   0% /run/lock
none                           251620       0    251620   0% /run/shm
none                           102400       0    102400   0% /run/user
/dev/vda1                      233191   29080    191670  14% /boot
/dev/mapper/vg_data-lv_data  33533956   32944  33501012   1% /brick

この/brickというディスクのエリアをGlusterFSの領域として利用します。実際に物理で作る場合にはこの辺りをローカルのRAID6などで保護しながらということに成るかと思います。

ノードの追加

上記の手順でもう一台同じ物を作ります。gluster02として作成します。サーバ側ではなくクラウドエヌなどの仮想環境で行う場合ネットワークの設定があるので確認します。

利用されるポート番号は、TCPポート111、24007、24008、24009以降(24009 + すべてのボリュームのbricksの数)になります。

また今回は特に設定がされていないですが ufw や iptables と言ったものでもフィルタリングされる可能性があるので注意です。体感的にぱっと返答がなくてTimeoutするような感じで動くものはたいていはFirewallの機能でブロックされています。

登録方法

管理コマンドは gluster になります。対話式で制御できるので実施していきます。

    gluster> peer probe gluster02
    Probe successful
    gluster> peer status
    Number of Peers: 1

    Hostname: gluster02
    Uuid: 1dee20d6-73e4-4531-a358-e201531ec4bf
    State: Peer in Cluster (Connected)

ボリュームの作成

どのような構成で作るかを決めて実施します。

上記のリンクのように複数の組み合わせがあるので適切なものを選んでいきます。

  gluster> volume create rvol replica 2 gluster01:/brick gluster02:/brick
    Creation of volume rvol has been successful. Please start the volume to access data.
  gluster> volume info

    Volume Name: rvol
    Type: Replicate
    Volume ID: 35531397-94b0-4fde-804f-a7af5dd37ddd
    Status: Created
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: gluster01:/brick
    Brick2: gluster02:/brick


  gluster> volume info rvol

    Volume Name: rvol
    Type: Replicate
    Volume ID: 35531397-94b0-4fde-804f-a7af5dd37ddd
    Status: Started
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: gluster01:/brick
    Brick2: gluster02:/brick


    Status of volume: rvol
    Gluster process  Port   Online  Pid
    ------------------------------------------------------------------------------
    Brick gluster01:/brick   24009  Y       23014
    Brick gluster02:/brick   24009  Y       22504
    NFS Server on localhost  38467  Y       23020
    Self-heal Daemon on localhost    N/A    Y       23026
    NFS Server on gluster02  38467  Y       22510
    Self-heal Daemon on gluster02    N/A    Y       22516

クライアント側の設定

ここまで来てようやく気がついたのですがCIFSで繋ぐ場合には別途sambaを起動する必要があるのですね。Redhat Storege Server の場合にはこの辺りの設定も入っているみたいですが glasuterFS を直接実施する場合には、Native クライアントか NFS で利用する必要があるみたいです。

準備

更に別のサーバからネイティブクライアントで接続をしてみます。先ほどのAPTパッケージの登録を行った後にクライアントを導入します。またNFSのモジュールも不足するので事前に導入しておきます。

# apt-get install glusterfs-client
# apt-get install nfs-common

mount -t glusterfs gluster01:/rvol /mnt/native

mount -t nfs -o vers=3 gluster01:/rvol /mnt/nfs

所感

ネイティブクライアントもNFSもともに問題なく利用できることがわかりました。ネイティブのクライアントの場合には片側が停止している状態でも問題なく利用することが出来ました。ただし復旧後すぐにデータが復元されないんで同期には暫くかかっていました。NFSなどの接続では停止した場合ノードが見えなくなるためです。

Sambaを利用していなのでまた後ほどするにして色々止めたりすると動作が面白いですね。実際にどの程度利用されているかは不明ですが使ってみたいなという感じですね。

スケールアウト型のNASとして考えた場合どの程度が制約があるのかわかりませんが増やすこと自体は簡単にできそうなのですが構成パターンとか考えないと難しそうですね。

参考書