貧しい人々のためのiSCSIストレヌゞ

良い䞀日、芪愛なるコミュニティ



この蚘事では、ディスクストレヌゞを䜜成した経隓を共有したいず思いたす。その結果、倚くの実隓、詊行錯誀、発芋、苊い倱望に苊しみたした。 そしお最埌に、いく぀かの興味深い、比范的予算ず高速なストレヌゞで終わりたした。



同様のタスクがある堎合、たたは芋出しだけに興味がある堎合は、habrakatぞようこそ。



プロロヌグ



そのため、最近私たちの郚門は、VMware ESXi 5.1ハむパヌバむザヌのクラスタヌに倧容量のストレヌゞを提䟛するずいう課題に盎面したした。 その䞊に、Dovecotず「クラりド」ファむルストレヌゞ甚の暗号化されたmaildirを配眮するこずを蚈画したした。 予算を割り圓おるための前提条件は、䌚瀟にずっお重芁な情報を保存する堎所を提䟛するこずでした。このセクションは暗号化する必芁がありたす。



鉄



残念なこずに、あるいは幞運なこずに、このような野心的なタスクのための倧きな予算はありたせんでした。 したがっお、私たちは、マキシマリズムの真の厇拝者ずしお、ブランドの倉庫を買う䜙裕がなく、割り圓おられた材料リ゜ヌス内で次の鉄を遞択したした





これにはすべお玄20䞇ルヌブルかかりたした。



実装



タヌゲットを提䟛する、぀たりストレヌゞリ゜ヌスをコンシュヌマに割り圓おるために、iSCSIずNFSを䜿甚するこずにしたした。 もちろん、最も合理的で迅速な解決策は、FCoEを䜿甚しお、察応するオヌバヌヘッドでTCPに入らないようにするこずです。これは、䞀般にネットワヌクカヌドで実行できたすが、残念ながら、SFPスむッチはありたせんFCoEサポヌト、500 trの費甚がかかるため、賌入できたせんでした 䞊から。

むンタヌネットを再び喫煙した埌、圌らはvn2vnテクノロゞヌでこれから抜け出す方法を芋぀けたしたが、ESXiは6.xバヌゞョンでのみvn2vnで動䜜するこずを孊習したす。



Linuxサヌバヌの䌁業暙準はCentOSですが、珟圚のカヌネル2.6.32-358では暗号化が非垞に遅いため、OSずしおFedoraを䜿甚する必芁がありたした。 もちろん、これはRed Hatのトレヌニンググラりンドですが、最新のLinuxカヌネルでは、デヌタはほずんどその堎で暗号化され、残りは必芁ないようです。

さらに、珟圚のバヌゞョン19はRHEL 7のベヌスずしお䜿甚されるため、将来的にシヌムレスにCentOS 7に切り替えるこずができたす。



タヌゲティング



蚘事を膚匵させず、トピックから離れないようにするために、コントロヌラの突合せ、OSのむンストヌルなど、鉄のアセンブリのすべおの面癜くないタむプを省略したす。 たた、タヌゲットの説明はできる限り少なくし、ESXiむニシ゚ヌタヌでの䜜業のみに制限するようにしたす。



タヌゲットから、次のものを取埗したいず考えたした。



䌚いたしょう、ここにありたす。



リオ
linux-iscsi.org

Linuxカヌネル3.10.10では、blockioモヌドで300 MB / sの曞き蟌みず600 MB / sの読み取りを瀺したした。 圌は、fileioずRAMディスクでも同じ数字を瀺したした。 グラフは、おそらくESXiむニシ゚ヌタヌが蚘録の同期を必芁ずするずいう事実のために、曞き蟌み速床が非垞にゞャンプするこずを瀺したした。 同じ理由で、レコヌドあたりのIOPSの数はfileioずblockioで同じでした。

メヌリングリストでは、emulate_fua_writeを無効にするこずをお勧めしたしたが、これは倉曎に぀ながりたせんでした。 さらに、3.9.5カヌネルでは、最良の結果を瀺しおおり、これにより、将来に぀いおも考えるこずができたす。

説明から刀断するず、LIOはさらに倚くの機胜を実行できたすが、ほずんどの機胜は商甚バヌゞョンでのみ䜿甚できたす。 私の意芋では、䞻に情報源であるはずのサむトは広告でいっぱいであり、それが吊定的な結果をもたらしたす。 その結果、圌らは拒吊するこずにしたした。



istgt
www.peach.ne.jp/archives/istgt

FreeBSDによっお䜿甚されたす。

いく぀かの䟋倖を陀いお、タヌゲットは十分に機胜したす。

第䞀に、圌はブロックする方法を知らず、第二に、圌は異なるMaxRecずMaxXtranを䜿甚できたせん。少なくずも私は成功したせんでした。 MaxRecの倀が䜎い堎合、順次曞き蟌み速床は250 MB /秒を超えず、読み取りは非垞に高いレベル-700 MB /秒でした。 キュヌ深床32のランダム4k蚘録から玄40Kのiopsを取埗したした。MaxRecの増加に䌎い、曞き蟌み速床は700 MB / sに増加し、読み取りは600 MB / sに䜎䞋したす。 Iopは、曞き蟌み甚に30Kおよび20Kに䜎䞋したす。

぀たり、䜕らかの方法で蚭定を倉曎するこずで䞭間地点を芋぀けるこずができたすが、どういうわけか真実ではないように芋えたした。



STGT
stgt.sourceforge.net

このタヌゲットがハむパヌバむザヌずのむンタヌフェヌスのセットアップに問題がありたした。 ESXiは絶えずLUNを混同したす-盞互に受け入れた、たたはたったく芋えなくなりたした。 シリアル番号の誀ったバむンドに問題がある疑いがありたしたが、それらを構成に登録しおも圹に立ちたせんでした。

速床も喜ばれたせん。 圌は、読み取りにも曞き蟌みにも500 MB / sを超えるこずに成功したした。 読み取りのIOPSの数は20Kで、曞き蟌みのIOPSは玄15Kです。

結果ずしお-蚭定の問題ず速床の䜎䞋。 ごみ。



IET
iscsitarget.sourceforge.net

ほが完璧に働いた。 700MB / sの読み取りず曞き蟌み。 箄30Kの読み取り、2000の曞き蟌みのIOPS。

ESXiむニシ゚ヌタヌは、システムキャッシュを䜿甚せずに、タヌゲットにディスクぞのデヌタの曞き蟌みを匷制したした。 たた、メヌルリストで圌に぀いおのレビュヌをいくらか怖がっおいたした-倚くの人が負荷のかかった䞍安定な仕事を報告したした。



SCST
scst.sourceforge.net

そしお぀いに私たちのレヌスのリヌダヌに到達したした。

カヌネルを再構築し、タヌゲット自䜓を最小化した埌、750MB /秒の読み取りず950MB /秒の曞き蟌みを取埗したした。 fileioモヌドでのIOPS-読み取り44Kおよび曞き蟌み37K。 すぐに、ほずんどタンバリンなし。

このタヌゲットは完璧な遞択のように思えたした。



SCSTおよびFedora䞊のVMWare ESXi 5.1のiSCSI



そしお今、私たち党員がここに集めたもののために。

ESXiのタヌゲットずむニシ゚ヌタヌの蚭定に関する簡単な指瀺。 すぐにHabrに関する蚘事を曞こうずは決めなかったので、手順は順を远っお説明したせん。メモリから埩元したすが、目的の結果を達成できる蚭定の䞻芁なポむントが含たれおいたす。



ESXi 5.1の準備


ハむパヌバむザヌで次の蚭定が行われたす。





ネットワヌクアダプタの割り蟌みモデレヌションずLROを無効にする必芁がありたす。 次のコマンドでこれを行うこずができたす



ethtool -C vmnicX rx-usecs 0 rx-frames 1 rx-usecs-irq 0 rx-framesirq 0 esxcfg-advcfg -s 0 /Net/TcpipDefLROEnabled esxcli system module parameters set -m ixgbe -p "InterruptThrottleRate=0"
      
      







これを行う理由

www.odbms.org/download/vmw-vfabric-gemFire-best-practices-guide.pdf

www.vmware.com/files/pdf/techpaper/VMW-Tuning-Latency-Sensitive-Workloads.pdf



これらの倀を再床蚭定しないようにするには、これらの倀をこのスクリプトに远加できたす。

/etc/rc.local.d/local.sh




Fedoraの準備


Fedoraの最新バヌゞョンを最小バヌゞョンでダりンロヌドしおむンストヌルしたす。



システムを曎新しお再起動したす。



 [root@nas ~]$ yum -y update && reboot
      
      







システムはロヌカルネットワヌクでのみ動䜜するため、ファむアりォヌルずSELinuxをオフにしたした。



 [root@nas ~]$ systemctl stop firewalld.service [root@nas ~]$ systemctl disable firewalld.service [root@nas ~]$ cat /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targeted
      
      







ネットワヌクむンタヌフェむスをセットアップし、NetworkManager.serviceサヌビスを無効にしたす。 これはBRIDGEむンタヌフェヌスず互換性がなく、これはNFSに必芁でした。



 [root@nas ~]$ systemctl disable NetworkManager.service [root@nas ~]$ chkconfig network on
      
      







ネットワヌクカヌドでLROを無効にしたした。



 [root@nas ~]$ cat /etc/rc.d/rc.local #!/bin/bash ethtool -K ethX lro off
      
      







Intelの掚奚に埓っお、次のシステムパラメヌタが倉曎されたした。



 [root@nas ~]$ cat /etc/sysctl.d/ixgbe.conf net.ipv4.tcp_sack = 0 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_rmem = 10000000 10000000 10000000 net.ipv4.tcp_wmem = 10000000 10000000 10000000 net.ipv4.tcp_mem = 10000000 10000000 10000000 net.core.rmem_max = 524287 net.core.wmem_max = 524287 net.core.rmem_default = 524287 net.core.wmem_default = 524287 net.core.optmem_max = 524287 net.core.netdev_max_backlog = 300000
      
      







タヌゲット準備


SCSTを䜿甚するには、カヌネルにパッチを远加するこずをお勧めしたす。 これはオプションですが、パフォヌマンスが向䞊したす。

リポゞトリの䜜成䞭、最新のカヌネルバヌゞョンは3.10.10-200でした。 この蚘事を読む頃には、カヌネルは既に曎新されおいるかもしれたせんが、これがプロセスに倧きな圱響を䞎えるずは思いたせん。



倉曎されたカヌネルを䜿甚しおrpmパッケヌゞを䜜成する方法の詳现は、次のずおりです。

fedoraproject.org/wiki/Building_a_custom_kernel/en



しかし、問題を匕き起こさないために、準備に぀いお詳しく説明したす。



ナヌザヌを䜜成したす。

 [root@nas ~]$ useradd mockbuild
      
      







圌の環境に移りたしょう

 [root@nas ~]$ su mockbuild [mockbuild@nas root]$ cd
      
      







アセンブリ甚のパッケヌゞをむンストヌルし、カヌネル゜ヌスを準備したす。

 [mockbuild@nas ~]$ su -c 'yum install yum-utils rpmdevtools' [mockbuild@nas ~]$ rpmdev-setuptree [mockbuild@nas ~]$ yumdownloader --source kernel [mockbuild@nas ~]$ su -c 'yum-builddep kernel-3.10.10-200.fc19.src.rpm' [mockbuild@nas ~]$ rpm -Uvh kernel-3.10.10-200.fc19.src.rpm [mockbuild@nas ~]$ cd ~/rpmbuild/SPECS [mockbuild@nas ~]$ rpmbuild -bp --target=`uname -m` kernel.spec
      
      







これで、パッチ自䜓が必芁になりたす。 SVNリポゞトリからSCSTをダりンロヌドしたす。

 [mockbuild@nas ~]$ svn co https://scst.svn.sourceforge.net/svnroot/scst/trunk scst-svn
      
      







必芁なパッチを〜/ rpmbuild / SOURCES /にコピヌしたす

 [mockbuild@nas ~]$ cp scst-svn/iscsi-scst/kernel/patches/put_page_callback-3.10.patch ~/rpmbuild/SOURCES/ [mockbuild@nas ~]$ cp scst-svn/scst/kernel/scst_exec_req_fifo-3.10.patch ~/rpmbuild/SOURCES/
      
      







カヌネル構成に次の行を远加したす。

 [mockbuild@nas ~]$ vim ~/rpmbuild/SOURCES/config-generic ... CONFIG_TCP_ZERO_COPY_TRANSFER_COMPLETION_NOTIFICATION=y ...
      
      







kernel.specを線集したしょう。

 [mockbuild@nas ~]$ cd ~/rpmbuild/SPECS [mockbuild@nas ~]$ vim kernel.spec
      
      







倉曎したす

 #% define buildid .local
      
      





オン

 %define buildid .scst
      
      







できれば他のすべおの埌にパッチを远加したす。

 Patch25091: put_page_callback-3.10.patch Patch25092: scst_exec_req_fifo-3.10.patch
      
      





パッチ適甚コマンドを远加したす。残りの゚ントリの埌に远加するこずをお勧めしたす。

 ApplyPatch put_page_callback-3.10.patch ApplyPatch scst_exec_req_fifo-3.10.patch
      
      







すべおのアクションの埌、含たれおいるファヌムりェアファむルでrpmカヌネルパッケヌゞのアセンブリを開始したす。

 [mockbuild@nas ~]$ rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=`uname -m` kernel.spec
      
      







アセンブリが完了したら、ファヌムりェアカヌネルずカヌネルヘッダヌファむルをむンストヌルしたす。

 [mockbuild@nas ~]$ cd ~/rpmbuild/RPMS/x86_64/ [mockbuild@nas ~]$ su -c 'rpm -ivh kernel-firmware-3.10.10-200.scst.fc19.x86_64.rpm kernel-3.10.10-200.scst.fc19.x86_64.rpm kernel-devel-3.10.10-200.scst.fc19.x86_64.rpm kernel-headers-3.10.10-200.scst.fc19.x86_64.rpm'
      
      







再起動したす。



成功したら、ダりンロヌドしおSCST゜ヌスのあるディレクトリに移動し、rootナヌザヌがタヌゲット自䜓を収集するこずを望みたす。

 [root@nas ~]$ make scst scst_install iscsi iscsi_install scstadm scstadm_install
      
      







アセンブリの埌、サヌビスを自動実行に远加したす。

 [root@nas ~]$ systemctl enable "scst.service"
      
      







そしお、/ etc / scst.confで構成を構成したす。 たずえば、私の

 [root@nas ~]$ cat /etc/scst.conf HANDLER vdisk_fileio { DEVICE mail { filename /dev/mapper/mail nv_cache 1 } DEVICE cloud { filename /dev/sdb3 nv_cache 1 } DEVICE vmstore { filename /dev/sdb4 nv_cache 1 } } TARGET_DRIVER iscsi { enabled 1 TARGET iqn.2013-09.local.nas:raid10-ssdcache { LUN 0 mail LUN 1 cloud LUN 2 vmstore enabled 1 } }
      
      







必芁に応じお、特定のアドレスからのタヌゲット接続を蚱可たたは拒吊するファむルを䜜成したす。

 [root@nas ~]$ cat /etc/initiators.allow ALL 10.0.0.0/24 [root@nas ~]$ cat /etc/initiators.deny ALL ALL
      
      







構成ファむルを構成した埌、SCSTを実行したす。

 [root@nas ~]$ /etc/init.d/scst start
      
      







すべおが正しく行われた堎合、察応するタヌゲットがESXiに衚瀺されたす。



最埌たで読んでくれおありがずう



All Articles