FhGFS始めました。

始めましたといっても検証しているだけです。すいません

FhGFS、正式にはFraunhoferFSとのことでハイパフォーマンスを想定した分散並列ファイルシステム。

GlusterFSのようにフォールトトレラントな分散並列ファイルシステムではなく、
どこかのサーバが停止すれば障害となります。現状のバージョンでは運用でカバーするしかなさそうです。

特徴としてはストライピングによる高速化とメタデータサーバの分散化による高速化
GlusterFSに比べて小さいファイルでもパフォーマンスを発揮します。
グラフィカルなツールで管理やモニタリングが可能な点もGlusterFSにはない機能です。

とにかく、実際に試してみないとわからないので

インストール&パフォーマンス比較を行ってみます。

まずは役割を確認します。

■役割

5つの役割が存在します。

1.Management service server(fhgfs-mgmt)

management,metadata,storage,clientへシステムコンフィグレーションを提供するサーバ

2.Metadata servers(fhgfs-meta)

メタデータを保管するサーバ

3.Storage servers(fhgfs-storage)

実データを保管するサーバ

4.Graphical administration and monitoring system server(fhgfs-admon)

グラフィカルなJAVAのツールからこのサーバを経由してFhGFSの管理やパフォーマンスグラフのモニタリングを行う

5.Clients(fhgfs-helperd,fhgfs-client)

データをmountするサーバ。

■サーバの準備

パブリッククラウド上でサーバを立ち上げます。すべて下記の環境で立ち上げます。
CentOS-6.4 64bit 20GB 4CPU 4GB

各サーバでrootで公開鍵の登録を行いiptablesとselinuxは切っておきます。

1 * Management server 192.168.0.101
2 * Metadata servers 192.168.0.151-152
8 * Storage servers 192.168.0.201-208
1 * Admon server 192.168.0.251
1 * Clients 192.168.0.51
1 * 作業サーバ(インターネットへのGWにもなっています) 192.168.0.1

の計14台を構築しました。クラウドならこの段階まで10分以内で構築可能です。

作業サーバのhostsを登録します。

192.168.0.101 s01 mgmt001
192.168.0.151 s02 meta001
192.168.0.152 s03 meta002
192.168.0.201 s04 str001
192.168.0.202 s05 str002
192.168.0.203 s06 str003
192.168.0.204 s07 str004
192.168.0.205 s08 str005
192.168.0.206 s09 str006
192.168.0.207 s10 str007
192.168.0.208 s11 str008
192.168.0.251 s12 admon001
192.168.0.51 s13 client001

すべてのサーバに配布もしておきます。

# for i in `seq -w 1 13`; do scp hosts s$i:/etc/; done

準備は以上です。

■パッケージインストール

パッケージのインストールはすべて作業サーバから行います。

# wget -P /etc/yum.repos.d/ http://www.fhgfs.com/release/latest-stable/dists/fhgfs-rhel6.repo
# for i in `seq -w 1 13`; do scp /etc/yum.repos.d/fhgfs-rhel6.repo s$i:/etc/yum.repos.d/; done

Management server向け

# ssh mgmt001 yum -y install fhgfs-mgmtd

Metadata servers向け

# for i in `seq 1 2`; do ssh meta00$i yum -y install fhgfs-meta; done

Storage servers向け

# for i in `seq 1 8`; do ssh str00$i yum -y install fhgfs-storage; done

Admon server向け

# ssh admon001 yum -y install fhgfs-admon

Clients向け

# ssh client001 yum -y install fhgfs-client fhgfs-helperd fhgfs-utils

■InfiniBand用の設定

今回はイーサネット環境ですので設定しません。

■各環境設定(各環境で設定)

Management server向け

# ssh mgmt001
# vi /etc/fhgfs/fhgfs-mgmtd.conf
storeMgmtdDirectory=/data/fhgfs/fhgfs_mgmtd

Metadata server向け

# ssh meta001とmeta002
# vi /etc/fhgfs/fhgfs-meta.conf
storeMetaDirectory=/data/fhgfs/fhgfs_meta
sysMgmtdHost=mgmt001

Storage server向け

# ssh str001からstr008
# vi /etc/fhgfs/fhgfs-storage.conf
storeStorageDirectory=/data/fhgfs/fhgfs_storage
sysMgmtdHost=mgmt001

Admon server向け

# ssh admon001
# vi /etc/fhgfs/fhgfs-admon
sysMgmtdHost=mgmt001

Clients向け

# ssh client001
# vi /etc/fhgfs-client.conf
sysMgmtdHost=mgmt001
# vi /etc/fhgfs/fhgfs-mounts.conf
/mnt/fhgfs /etc/fhgfs/fhgfs-client.conf

■サービススタート(作業サーバから)

# ssh mgmt001 /etc/init.d/fhgfs-mgmtd start
# for i in `seq 1 2` ssh meta00$i /etc/init.d/fhgfs-meta start; done
# for i in `seq 1 2` ssh str00$i /etc/init.d/fhgfs-storage start; done
# ssh admon001 /etc/init.d/fhgfs-admon start
# ssh client001 /etc/init.d/fhgfs-helperd start
# ssh client001 /etc/init.d/fhgfs-client start

問題なければこれでclinetでdfすると

[root@client001 ~]# df -h /mnt/fhgfs
Filesystem Size Used Avail Use% Mounted on
fhgfs_nodev 106G 29G 78G 27% /mnt/fhgfs

このようになっているはずです。mountされ使えるようになっています。

■メタデータとストレージデータの冗長化

メタデータの冗長化(client環境にて)

# fhgfs-ctl --mirrormd /mnt/fhgfs

この設定でメタデータが2重化されます。ただしフォールトトレランスではなく復旧には手動での作業が必要です。

ストレージデータの冗長化

# fhgfs-ctl --setpattern --raid10 --chunksize=1m --numtargets=4 /mnt/fhgfs

raid10設定とすることでデータの2重化が可能。ただし復旧は手動での作業です。

■admon server

admonサーバは8000番ポートで待ちうけてます。

今回は作業サーバにインターネットからのポートフォワーディングによって自身の環境から繋ぎます。

GWサーバ(eth0:external eth1:internal)にてマスカレードとポートフォワーディングの設定を行っています。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -I FORWARD -i eth1 -o eth0 -j ACCEPT
# iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8000 -j DNAT --to 192.168.0.2:8000
# iptables-save > /etc/sysconfig/iptables

あとは、http://作業サーバのIP:8000

ツールのダウンロードリンクが表示されますのでダウンロード

ダウンロードしたJAVAツールを起動させログインすれば下記のようなモニタリングや各種管理が可能となります。

初期のログインはAdministrator:adminでのログイン

admon

■パフォーマンス比較 GlusterFS(stripe 4 replica 2) vs FhGFS(raid10)

dd、catやlsを利用したパフォーマンス比較です。

 

 filesystem write(1M 1000個) write(1M 10000個) write(5G 1個)  read(5G 1個)  ls(1000個のファイル)  ls(10000個のファイル)
 FhGFS  91s  196s  90s  55s  0.5s  5.6s
 Glusterfs  186s  430s  186s  49s  1.2s  14s

これを見るとFhGFSのほうが書き込みと小さいファイルが得意。

小さいファイルで書き込みパフォーマンスが必要かつ障害がある程度許容されるサービスに限定すれば使いどころはあるかなあ。

Glusterfsのほうがインストールも設定も運用も簡単でバランスは良いように思います。

 

GlusterFSの小ネタ

ほんとに小ネタです。

# gluster volume create stripe 4 replica 2 str01:/brick01 str02:/brick01 str03:/brick01 str04:/brick01 str05:/brick01 str06:/brick01 str07:/brick01 str08:/brick01

って数が多くなればなるほど面倒くさいのですが、下記のようにまとめる事が出来ます。

# gluster volume create stripe 4 replica 2 str0{1..8}:/brick01

CentOS6系のゲートウェイサーバ設定で小ハマり

うちのオフィスのブロードバンドルータが故障したので、
急きょ、Linux(CentOS6系)サーバをマスカレードルータに仕立てようと設定を行っていたのですが、少しはまってしまったので共有します。

--------
internet
--------
   |
-----------------------
 em1
linux MASQUERADE Server
CentOS-6.4
 em2
-----------------------
   |
---------
Client PC
---------

私の認識ではとりあえず急場しのぎだけなら下記のこの構成でうまくいくはずでした。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
# iptables -t nat -A POSTROUTING -o em0 -j MASQUERADE
# iptables-save > /etc/sysconfig/iptables

traceなどで確認するとLinuxサーバのem2のインターフェースから先に進まないようで、

設定はおかしくないはずだしiptablesのFORWARDチェインの設定も下記のようにポリシーがACCEPTだし

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

なんでだろう。なんでだろうと1時間

とりあえず、下記のようにFORWARDチェインを明示的に許可してみると。

# iptables -I FORWARD -i em2 -o em1 -j ACCEPT
# iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables-save /etc/sysconfig/iptables

フォワードされるようになりました。

iptablesの設定(FORWARDの部分だけ抜粋)を確認すると

# iptables -L
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

いつの間にかREJECTが・・・

iptables -A FORWARD -j REJECT –reject-with icmp-host-prohibited
この設定が隠れているってことですかね?

5系も6系も標準のFORWARD設定は同じように見えるのですが、
手元の5系では明示的に設定しなくともいけるので6系では挙動が変わってしまってるように見えます。

今後はこの辺りの違いを意識していけば混乱は防げるかな?

【小ネタ】WOL対応NIC

dmmではすべてのサーバでwol対応のnicを利用するようにしています。

ただ、みなさんがお使いのように他のコンピューターから起動するために利用しているわけではありません。

電源が入ってない状態もしくはOSが起動していない状態でもポートのlinkをUPさせるためにWOLを利用するようにしています。

なぜかというと

ケーブリングするエンジニアと実際に導通を確認するエンジニアが別だからです。

LinuxではWOLに対応していないNICだとIP設定まで行わないとリンクがアップしませんが、

WOL対応NICを利用すればケーブリングするエンジニアが目的のスイッチとの接続性をリンクの状態だけで確認できるようになります。

意識してないとうっかり未対応のNICを選択してしまう場合があるのでいつも注意してサーバを購入しています。

iPhone5sの指紋認証って

6が出るまでは我慢して5sはいらないかなあと思っていたんですが

マジで便利っすね。iPhone5sの指紋認証

認識率も抜群でまったくストレスがありません。

いつものように親指でホームボタンを押すだけで認識してくれ、
また、AppStoreでのアプリ購入も指紋認証で済ませることができるなんてさすがです。

dmm、facebookやtwitterへのログインで使えるようになるといいなあ。

ところで、素朴な疑問なんですが、

認証のための指紋データはappleがサーバで管理しているのでしょうか?

それとも、

個人のiPhone内で管理されているのでしょうか?

盗まれても人間の指紋はクレジットカードのように再発行できませんので、
さすがにデータを盗まれることを前提に考えると中央サーバーで管理はせずiPhone内で保管してると思ってはいるのですが。

それにしても

昔の指をずらすタイプの指紋認証は認識率が酷くて指紋がちゃんと登録できたのかどうかもわからず使えないなあと思っていたんですが、
appleの指紋認証はほんとにシンプルで使いやすく一気に普及しそうな予感がします。この技術は称賛に値すると思います。

ただ、

iphoneに限らず携帯ってよく触るので画面や底面に思いっきり指紋がついているかと思います。
これを使って簡単にログインできちゃうようなキットが売り出されると困っちゃいそうではあります。