2011/03/30

Native ZFS on Linux


先日、ZFSonLinuxにLinux用NativeなZFSがリリース(現時点ではRC2)されていると書きましたが、せっかくなのでOracle Linux 6 (Unbreakable Enterprise Kernel)でビルドしてみることにします。
本当は、ZFSのshareiscsiでZVolumeをiSCSIとしたかったのですが、shareiscsiは現時点では未実装でした。

上記のRC2のアーカイブを使ってもよいのですが、絶賛開発中のものであるのでgit リポジトリから最新ソースを持ってきてビルドしてみます。




ビルドの流れとしては

1. SPLのソースを持ってきてビルド
2. ZFSのソースを持ってきてビルド

の2段階です。

1. SPLのソースをgitリポジトリから取得
# git clone https://github.com/behlendorf/spl.git
Initialized empty Git repository in /root/work/spl/.git/
remote: Counting objects: 4372, done.
remote: Compressing objects: 100% (1195/1195), done.
remote: Total 4372 (delta 3264), reused 4206 (delta 3137)
Receiving objects: 100% (4372/4372), 1.53 MiB | 637 KiB/s, done.
Resolving deltas: 100% (3264/3264), done.

2. SPLのビルド
# cd spl
# ./configure
# vi spl-modules.spec

ここで、UEKカーネル用にちょっとspecファイルを修正しておきます。
spl-modules.specの抜粋
# RHEL 5.x/6.x:
%if %{defined el5} || %{defined el6}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel-uek       <-- ここと
 %define kdevpkg         kernel-uek-devel <-- ここ
# make rpm

3. 完成したSPLのrpmをインストール
# rpm -ihv spl*.rpm

4. ZFSのソースをgitリポジトリから取得
# git clone https://github.com/behlendorf/zfs.git
Initialized empty Git repository in /root/work/zfs/.git/
remote: Counting objects: 70283, done.
remote: Compressing objects: 100% (21559/21559), done.
remote: Total 70283 (delta 48202), reused 69767 (delta 47741)
Receiving objects: 100% (70283/70283), 15.40 MiB | 1.99 MiB/s, done.
Resolving deltas: 100% (48202/48202), done.

5. 必要なパッケージのインストール
# sudo yum install zlib-devel libuuid-devel libblkid-devel libselinux-devel lsscsi

6. ZFSのビルド
# cd zfs
# ./configure

ここで、SPLと同様にUEKカーネル用にちょっとspecファイルを修正しておきます。
zfs-modules.specの抜粋
# RHEL 5.x/6.x:
%if %{defined el5} || %{defined el6}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel-uek       <-- ここと
 %define kdevpkg         kernel-uek-devel <-- ここ

# make rpm

7. 完成したZFSのrpmをインストール
# rpm -ihv *.rpm

何かと、SELinuxが悪さをしそうなので、切っておきます。
# setenforce 0
and
# vi /etc/sysconfig/selinux

ちょっとテスト
- zpoolの作成
# zpool create myzpool sdb1

- zvolの作成
# zfs create myzpool/myzvol -V 5g

# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
myzpool         5.16G  4.62G    21K  /myzpool
myzpool/myzvol  5.16G  9.78G    16K  -

# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/sda1             7.7G  3.5G  3.9G  48% /
tmpfs                1001M   88K 1001M   1% /dev/shm
/dev/sda3              18G  1.2G   16G   7% /export
myzpool               4.7G 1001M  3.7G  22% /myzpool

Productionレベルではないと注記があるものですので、利用に際してはご注意ください。

2011/03/28

分散ファイルシステム

データベースを動作させる上で、安くて、速くて、信頼できる足回りはないものか?



安い : 基本的にはタダで、できないか? 当然ですが、基本的なハードウェア費用はタダじゃない前提です。
速い : シーケンシャルリードで5GB/sくらい。欲しいです。
信頼性 : 特別なハードウェアなしで、RAID6相当の信頼性が欲しいです。
拡張性 : ディスク追加だと、スケールアップしかないので、ノード追加といったスケールアウト可能なもの。


相当、無理な要求のようですが、最近の分散ファイルシステムを使えば、かなり良い線が行くのではないか?と検討中です。きっと、分散ファイルシステムでなくてもやり方や考え方を変えれば、近いものも可能かと思いますが。。。

ただ、ファイルシステムレベルで、上記が要件が満たせるようであれば、データベースはもちろん、様々な用途に使える(いや、使いやすい)んじゃないかと思うわけです。

最近、個人的によく目にする分散ファイルシステムとしてGluster File Systemがあります。

カーネルをいじらず、お手軽に分散ファイルシステムを構築可能なのですが、カーネルをいじらないのでFUSEベースなので、パフォーマンスに難がありそうです。

ただし、他の分散ファイルシステムと、Glusterを比較したパフォーマンス結果も見当たりませんので、今後の検証ネタとしたいと思っています。

FUSEベースではなく、カーネルにパッチを当てたり、一部カーネルに取り込まれたりするものも存在します。

カーネルに取り込まれた(2.6.34にて)Cephがありますが、まだまだ不安定との情報もあります(これはあくまでも現時点で。という意味です)

また、カーネルパッチとして提供されているものとして、Lustre File Systemがあります。

Lustreとして面白いものとして、ZFSonLinuxに紹介されています。

Lustre自体Cephに比べ、かなり実績があるように思われます。が、あまり安いと呼べるアーキテクチャではないようです。

それは、上記の要件の信頼性がLustre自体では実装されていないからです。(要はストライプのみ実装されている)ですので、Lustreは信頼性担保のためにH/W or S/WでのRAIDを推奨しています。なので、エンタープライズでの使用を前提とすると、速度は良いのだけれど、信頼性担保のために高コストとなる。ようです。

そこで、ZFSonLinuxに紹介されている方式(きっと、まだ、実装中なのでしょうね)は、よりストレージに近い部分をLustreにまかせ、その上にZFSでRAIDを組むような構成になっています。

ZFSonLinuxの方式は、ちょっと魅力的なのですが、現状、正式にリリースされていないものですから、一旦、GlusterとLustreおよびCephに注目して検証してみたいと思います。