重複排除技術の紹介

皆さんお疲れ様です。
アドウェイズの孟です。

今回紹介したいネタは、重複排除ファイルシステム: opendedupです。 

重複排除ってなに?

主にストレージで使われてる技術です。
皆さん共有サーバを使ってると思いますが、同じファイルをいくつもコピーすると、それぞれ同じ内容なのに、サイズ が減りません。
そこで重複排除を使えば、同じファイルを何個コピーしても、ファイルシステムとして1つ ファイルの保存領域しか使わないです。

これはファイル単位の重複削除です。

もしそれぞれのファイルが一部しか重複してない場合、ファイル単位での重複削除が利かなくなります。例えばくそ大きいoutlookのバックアップとかですね、全社員のoutlookデータファイルを一気に共有サーバにバックアップしてしまうと大惨事になります。

ここでブロック単位の重複削除の出番です。
ブロック単位の重複削除が各ファイルを一定の大きさでブロックに分けます。このブロックのハッシュ値を計算し、他のブロックと比較して、同じハッシュ値だったら重複削除してくれます。
ブロック単位の重複削除を使えば、全社員のoutlookデータバックアップしても重複してる分をスペース的に削除してくれますのでとてもエコです、ファイル自体ダメージや損失がまったくないです。
その他、例えば毎日のDBバックアップ作業とか、毎日増えた分以外のデータ皆同じなので、重複削除技術を使うと元々1週間しかバックアップの余裕がないスペースでも1ヶ月まで伸ばすこと可能になります。

仮想サーバ環境にも重複削除技術がよく使われてます。
仮想環境中に一番大きいボトルネックはCPUとメモリじゃなくて意外とストレージです。
インスタンスはそれぞれ違いますが、同じOSを使う場合は全部同じですね。冗長性のために作ったサーバ群のインスタンスは、重複率も高いはずです。
重複サイズを削除してインスタンスを増やし、仮想サーバのCPUとメモリの利用率をさらにアップすることができます。高価なssd設備を利用している仮想環境に利用すると、より多いインスタンスを入れられるようになって経済的です。

 centos + opendedupの構築方法を紹介します

freebsdの場合はzfsを入れれば zfs set dedup=ONするだけで重複排除してくれますが、アドウェイズでは主にlinux使ってますので、今回はcentos 6とopendedupの構築仕方を紹介します。

・  まずopendedupのrpmfuseをダウンロードします
http://opendedup.org/download 

# cd ~
# wget http://opendedup.googlecode.com/files/SDFS-1.1.6-2.x86_64.rpm
# wget http://opendedup.googlecode.com/files/sdfs_fuse_2.8.4.tar.gz

・  必要なライブラリを入れます。
# yum install libX11-devel libXext libXi libXtst libXrender fuse-libs alsa-lib

・   fuseを入れます。
# tar -xzf sdfs_fuse_2.8.4.tar.gz
# cd sdfs_fuse_2.8.4
# tar -xzf fuse_src_sdfs-2.8.4.tar.gz
# cd  fuse_src_sdfs-2.8.4
# ./configure
# make && make install

opendedupを入れます。
# cd ~
# rpm -ivh SDFS-1.1.6-2.x86_64.rpm

以上、環境構築完了です!
rpmだから簡単ですね。

opendedupを使ってsamba環境も構築しちゃおう

① 適当でHDDを用意します。
(孟のテスト環境に8GBの/dev/sdb追加してますのでこれを使います~)
# fdisk -l
② mkfs.sdfsします。mkfs.sdfsがopendedup用のmkfsツールです、これを使ってハードディスクをmkfsします。
# mkfs.sdfs --volume-name=sdfs_vol1 --volume-capacity=8GB /dev/sdb
※ volume-name自由で決めてOKです、volume-capacity実際の環境と合わせて調整してください
※ mkfs中でローカルのhostnameもしDNS的なエラー出たら/etc/hostsに追加してあげてね。
例: 127.0.0.1 mydev

③ /sdfsにmountします。

# mkdir /sdfs
# mount.sdfs -v sdfs_vol1 -m /sdfs &
※ ここの-vていうパラメータをmkfs.sdfsで使ってたvolume-name同じようにしてください。

ここでopendedupの構築及び設定が完了しました。

sambaを設定します。

# yum install samba
# smbpasswd -a mo ※ moがユーザIDです、なんでもOK
<パスワード入れて>
# vi /etc/samba/smb.conf

[global]
        workgroup = MYGROUP
        server string = SDFS samba
        hosts allow = 127. 192.168.
        log file = /var/log/samba/log.%m
        max log size = 50
        security = user
        passdb backend = tdbsam
        load printers = no
        cups options = raw
[sdfs]
comment = folder
path = /sdfs
public = no
writable = yes
printable = no
write list = +staff

# /etc/init.d/smb start

はい、終わり。

sambaに入っていろいろテストして見てね。

実際どこまで重複削除されたのか一応sdfscliというツールがあります。
使い方sdfscli --helpで見てください

自分一番使ってるのはsdfscli --volumn-infoかな。。。

以上です。