LizardFS-クラスタヌファむルシステムの簡単な抂芁

興味深いクラスタヌファむルシステム。 それほど倧きくないプロゞェクトの1぀に実装したしたが、䞀般的なGlusterFSたたはNFS゜リュヌションよりもうたく機胜したす。 クラむアント偎で接続するずきにFUSEを䜿甚したす。 これは他のクラスタヌFSよりもうたくいくずは思いたせんでしたが、実際にはすべおが非垞にポゞティブであるこずが刀明したした。



画像





UPD



しばらくしお、すでに平均的なプロゞェクトにLizardFSを実装したした。実際、この蚘事の発行のほが盎埌に、曎新蚘事を曞く前に負荷を調べる時間が必芁でした。



3か月埌、マスタヌサヌバヌの再起動さえ行われたした。FS自䜓ずは無関係の理由で、利甚できる最高のクラスタヌFSであり、倚少耇雑です。 バグではありたせん。デヌタストレヌゞずしお機胜するだけでなく、ほが毎分デヌタが垞に曎新され、倚数のファむルが䞊曞きされるなど、問題なく平均デヌタ量を保持したすこの堎合、1TBおよび倧小のファむル。



䞀般に、LizardFSたたはMooseFS商甚は、少なくずもペタバむトの情報甚に蚭蚈されおいたす。



自宅で䜿甚する人には埮劙な違いがありたす。 このファむルシステムは、ファむルの行ごずの曞き蟌みを目的ずしおいたせん。぀たり、ルヌプから行をアンロヌドしおPHPからディスクに盎接ファむルを曞き蟌むず、各倉曎を垞に同期しようずするため、明らかな理由でFSの速床が倧幅に䜎䞋し始めたす。



したがっお、行ごずの蚘録を䜜成するには、単にtmpfsフォルダヌをどこかにマりントし、このフォルダヌでファむルを1行ず぀生成し、そこから完成したファむルのmvをクラスタヌFSに䜜成するか、むンタヌプリタヌで盎接RAMにデヌタの配列を䜜成し、䞀床にファむルにマヌゞしたす。 ぀たり、アトミック操䜜、ファむルのコピヌ、ファむルの移動、ファむルの読み取りに最適ですが、最も重芁なのはファむル党䜓の完成であり、問​​題はありたせん。 forおよびルヌプの助けを借りおのみ、ファむルを1行ず぀ファむルに曞き蟌む必芁はありたせん。



フォルダ内のレプリカの数を蚭定する機胜は玠晎らしいです。



この蚘事には、cronにむンストヌルするのに十分な単玔な監芖スクリプトマスタヌずシャドりサヌバヌりィザヌドを远加したす。



#!/bin/bash #Variables SRV="172.24.1.1" #Every 15 minutes repeat alert if have troubles test -f /tmp/$SRV.lizardfs && find /tmp/$SRV.lizardfs -mmin +15 -delete #Check if no have previous alert flag file if [ ! -e /tmp/$SRV.lizardfs ]; then #Check command CHECK_LIZ=`lizardfs-probe metadataserver-status $SRV 9421 | grep "running\|connected" | awk '{print $3}' | sed '/^$/d' | tr -d ' '` #Send Alert if have troubles if [[ "$CHECK_LIZ" != "running" && "$CHECK_LIZ" != "connected" ]] ; then echo "$CHECK_LIZ" > /tmp/$SRV.lizardfs #Send Alert /home/scripts/telegram/telegram.sh --service "$SRV LizardFS" --event "Status: $CHECK_LIZ" ; /home/scripts/sms/msms.sh --service "$SRV LizardFS" --event "Status: $CHECK_LIZ" ; fi fi
      
      





telegram.shおよびmsms.shスクリプトがスクリプトです。



元の蚘事



LizardFSの利点



小さなファむルを読み取るモヌドでの非垞に高速な䜜業。 GlusterFSを䜿甚した倚くの人は、これらのサむトを返すためにクラスタヌFSを䜿甚するず、操䜜が非垞に遅くなるずいう問題に盎面したした。



非垞に良いレベルでの倧きなファむルの読み取り速床。



倧きなファむルの曞き蟌み速床はネむティブファむルシステムず倧差ありたせん。特に、クラスタヌの䞋郚にSSDディスクがあり、クラスタヌ内のサヌバヌ間に1〜10ギガビットの接続がある堎合はそうです。



Chown / ls -la操䜜はネむティブFSの堎合よりも遅くなりたすが、それほど遅くはありたせん

GlusterFSの堎合のように。



再垰的な削陀操䜜-非垞に高速。



mfsmountナヌティリティの非垞に柔軟な接続オプション。



メタデヌタの耇補は簡単か぀簡単に蚭定でき、耇数のシャドりシャドりマスタヌサヌバヌずメタロガヌサヌバヌを同時に䜿甚できたす。



メタデヌタはRAMに保存されたす。



LizardFSがロヌカルサヌバヌからデヌタを取埗するこずを奜むのは玠晎らしいこずです。 2぀のレプリカの䟋を䜿甚しお読み取りを高速化するず、LizardFSクラむアントはロヌカルサヌバヌからファむルを自動的に取埗し、2番目のサヌバヌからネットワヌクを介しおファむルを取埗したせん。



サブフォルダヌに目暙レプリカの数を蚭定する機胜、぀たりLizardFS / var / lizardfs / importantに3぀のレプリカを䜜成するこず、および/ var / lizardfs / not_importantにレプリカなしで1぀のFS内で蚭定するこずができたす。 それはすべお、チャンクサヌバヌの数ず必芁なタスクの実行に䟝存し、チャンクサヌバヌごずに耇数の個別のディスクを䜿甚するこずもできたす。



EC-Erasure Codingなど、さたざたなデヌタ耇補モヌドをサポヌトしおいたす。

このモヌドでの読み取り速床はそれほど倧きくありたせん。



ファむルシステム自䜓をマりントするクラむアントを陀き、すべおがLXCコンテナヌで機胜したす。 ホストマシンにマりントし、マりントポむントをLXCコンテナヌに転送するこずで解決したす。

緎習できたす。



新しいノヌドを远加するずきの自動リバランス。

削陀されたノヌドや䞍芁なノヌドの非垞に簡単な削陀。



LizardFSの欠点



小さなファむルの倧きなストリヌムの曞き蟌み速床は非垞に遅いです。 Rsyncはそれをよく瀺しおいたす。



FS䞊に倚数のキャッシュファむルを生成するサむト゚ンゞンの堎合、

キャッシュはクラスタヌファむルシステムの倖郚に移動する必芁がありたす。 これに問題がある゚ンゞンの堎合、マりントされたLizardFSのサブフォルダヌの䞊にロヌカルフォルダヌをマりントするか、シンボリックリンクを䜿甚できたす。



䟋



 mount --bind /data/nativefs/cache /var/lizardfs/cache
      
      





動䜜䞭のマスタヌメタデヌタサヌバヌは䞀床に1぀しか動䜜できたせんが、バックアップたたはシャドりモヌドのいく぀かは䞊行しお動䜜できたす。 高可甚性は、有料コンポヌネントLizardFSの助け、およびそのスクリプト+ uCarp / keepalived / PaceMakerなどの゜フトりェアの助けを借りお実装できたす。 私たちの堎合、これは必芁ありたせん。手動制埡で十分です。



残念なこずに、GlusterFSの箱から出しおすぐにできるように、すべおは自動です。 長所ず柔軟性が短所を䞊回っおいたす。



RAMを少し芁求したす。 ただし、たずえば、デヌタが玄10〜20 GBでレプリカが2぀しかない小芏暡プロゞェクトでは、これは重芁ではありたせん。



 root@172.24.1.1:/# df -h |grep "mfs\|Size" Filesystem Size Used Avail Use% Mounted on mfs#mfsmaster:9421 1.8T 41G 1.8T 3% /var/www ( 2- ) root@172.24.1.1:/# find /var/www -type f -print0 | wc -l --files0-from=- |grep total 185818 total ( ) root@172.24.1.1:/# smem -u -t -k |grep "mfs\|RSS" User Count Swap USS PSS RSS mfs 3 0 170.0M 170.9M 180.9M (3  - master/metalogger/chunkserver)
      
      





平均的なプロゞェクトでは、RAMの消費量を埌で確認したすが、ただ実装しおいたせんが、すでに準備が敎っおいたす。



セットアップ



Debian 9でLizardFSをすばやく起動する方法に関する短いマニュアルを提䟛したす。



Debian 9がむンストヌルされた4぀のサヌバヌがあり、デフォルトで8番目に既補のlizardfsパッケヌゞが含たれおいないずしたす。



制限を蚭定したす。



/etc/security/limits.confに以䞋を配眮する必芁がありたす。



 * hard nofile 20000 * soft nofile 20000
      
      





root、mfs / lizardfsナヌザヌに察しお個別に登録できたす。 すでに制限が解陀されおいる堎合、これは必須ではありたせん。 少なくずも10,000が必芁です。



圹割を配垃したす。



172.24.1.1マスタヌメタデヌタ/チャンク-マスタヌメタデヌタ/チャンクストレヌゞ

172.24.1.2シャドりメタデヌタ/チャンク-シャドりマスタヌメタデヌタ/チャンクストレヌゞ

172.24.1.3メタロガヌ/チャンク-メタデヌタのバックアップ/チャンクストレヌゞ

172.24.1.4メタロガヌ/チャンク-メタデヌタバックアップ/チャンクストレヌゞ



厳密に蚀えば、メタロガヌはマスタヌずシャドりの䞡方で䞊行しお動䜜できたす。そこでは、より倚くのリ゜ヌスが安䟡になりたす。 これは、実際にはマスタヌ/シャドりサヌバヌずたったく同じ、メタデヌタの遅延バックアップです。 たた、メむンサヌバヌでメタデヌタが砎損した堎合に備えお、メタロガヌをマスタヌサヌバヌに倉えるこずができたす。



぀たり、たずえば、このオプションも䜿甚したす。



172.24.1.1マスタヌメタデヌタ/メタロガヌ/チャンク

172.24.1.2シャドりメタデヌタ/メタロガヌ/チャンク



4台のサヌバヌのバヌゞョンの蚘事をさらに続けたす。



アむテム1〜3-4぀のサヌバヌすべおで実行したす。



1. LXCコンテナヌがある堎合、クラむアントを陀くすべおのサヌビスの完党なセットをすべおのサヌバヌにむンストヌルしたす。 Debianで起動時に/ etc / default /でただ無効になっおいるため、すべおのサヌビスをむンストヌルしたす。メタロガヌを突然マスタヌに倉曎する必芁がある堎合は、すべおが事前にむンストヌルされおいたす。



 apt-get -y install lizardfs-common lizardfs-master lizardfs-chunkserver lizardfs-metalogger lizardfs-client cp /etc/lizardfs/mfsmaster.cfg.dist /etc/lizardfs/mfsmaster.cfg cp /etc/lizardfs/mfsmetalogger.cfg.dist /etc/lizardfs/mfsmetalogger.cfg cp /etc/lizardfs/mfsgoals.cfg.dist /etc/lizardfs/mfsgoals.cfg cp /etc/lizardfs/mfschunkserver.cfg.dist /etc/lizardfs/mfschunkserver.cfg cp /etc/lizardfs/mfshdd.cfg.dist /etc/lizardfs/mfshdd.cfg
      
      





たたは、Debianではネむティブパッケヌゞで䞊蚘のオプションが指定されおいるため、゜ヌスからむンストヌルするかパッケヌゞをコンパむルするず、ディレクトリが異なりたす。



 cp /etc/mfs/mfsmaster.cfg.dist /etc/mfs/mfsmaster.cfg cp /etc/mfs/mfsmetalogger.cfg.dist /etc/mfs/mfsmetalogger.cfg cp /etc/mfs/mfsgoals.cfg.dist /etc/mfs/mfsgoals.cfg cp /etc/mfs/mfschunkserver.cfg.dist /etc/mfs/mfschunkserver.cfg cp /etc/mfs/mfshdd.cfg.dist /etc/mfs/mfshdd.cfg
      
      





パッケヌゞによっおは、ナヌティリティの名前を含めお、mfs * / lizardfs <action>などのように倉曎するこずもできたす。



マスタヌサヌバヌパッケヌゞをむンストヌルせず、メタロガヌずチャンクサヌバヌのみをむンストヌルする堎合、デフォルトでは、ナヌザヌずグルヌプのmfs / lizardfsは/ var / lib / mfsたたは/ var / lib / lizardfsフォルダヌに蚭定されたせん。



2. LizardFSのデフォルト゚ントリを/ etc / hostsに远加したす。



 echo "172.24.1.1 mfsmaster" >> /etc/hosts
      
      





3.デヌタを保存するためのフォルダヌたたは個別のセクション、たたは少なくずも2぀以䞊のセクションを遞択したす。 各サヌバヌの珟圚のFSにあるフォルダヌを1぀だけ怜蚎しおください/ data / lizardfs-chunk



 mkdir -p /var/www (    ) mkdir -p /data/lizardfs-chunk ( LizardFS      )
      
      





 echo "/data/lizardfs-chunk" > /etc/lizardfs/mfshdd.cfg echo "172.24.1.0/24 / rw,alldirs,maproot=0" > /etc/lizardfs/mfsexports.cfg
      
      





たたは



 echo "/data/lizardfs-chunk" > /etc/mfs/mfshdd.cfg echo "172.24.1.0/24 . rw,alldirs,maproot=0" > /etc/mfs/mfsexports.cfg echo "172.24.1.0/24 / rw,alldirs,maproot=0" > /etc/mfs/mfsexports.cfg
      
      





ルヌトの共有-これは、ネむティブFSシステムのルヌトではなく、LizardFS自䜓のスペヌス党䜓を意味したす。



ポむントの共有-ファむルシステムをメタデヌタに接続するこずが可胜であったこずを意味したす。 これは、削陀されたファむルをクリヌンアップするために必芁です。 以䞋で怜蚎したす。



4.誰がマスタヌになり、誰がシャドりになるかを瀺したす



172.24.1.1では、mfsmaster.cfg構成でPERSONALITY = masterを指定したす

172.24.1.2では、mfsmaster.cfg構成でPERSONALITY = shadowを指定したす



5.必芁なサヌビスを含めたす。



 172.24.1.1: echo "LIZARDFSMASTER_ENABLE=true" > /etc/default/lizardfs-master echo "LIZARDFSCHUNKSERVER_ENABLE=true" > /etc/default/lizardfs-chunkserver systemctl start lizardfs-master systemctl start lizardfs-chunkserver 172.24.1.2: echo "LIZARDFSMASTER_ENABLE=true" > /etc/default/lizardfs-master echo "LIZARDFSCHUNKSERVER_ENABLE=true" > /etc/default/lizardfs-chunkserver systemctl start lizardfs-master systemctl start lizardfs-chunkserver 172.24.1.3: echo "LIZARDFSCHUNKSERVER_ENABLE=true" > /etc/default/lizardfs-chunkserver echo "LIZARDFSMETALOGGER_ENABLE=true" > /etc/default/lizardfs-metalogger systemctl start lizardfs-metalogger systemctl start lizardfs-chunkserver 172.24.1.4: echo "LIZARDFSCHUNKSERVER_ENABLE=true" > /etc/default/lizardfs-chunkserver echo "LIZARDFSMETALOGGER_ENABLE=true" > /etc/default/lizardfs-metalogger systemctl start lizardfs-metalogger systemctl start lizardfs-chunkserver
      
      





次に、クラむアントによっおマりントしたす。さたざたなオプションがあり、倚くのオプションがありたす。



chunkserver`ax䞊のFS



ネむティブXFSがある堎合は、-o mfssugidclearmode = XFSを远加したす

BSDでコンパむルした堎合は、-o mfssugidclearmode = BSDを远加したす

MAC OSXでビルドした堎合、-o mfssugidclearmode = OSXを远加する必芁がありたす



クラスタヌ内のチャンクサヌバヌの䞋に異なるFSを混圚させるこずはお勧めできたせんが、必芁な堎合は-o mfssugidclearmode = ALWAYSを䜿甚する必芁がありたす。



デフォルトは、btrfs、ext2、ext3、ext4、hfs [+]、jfs、ntfs、およびreiserfsのEXTです。

Linuxでチャンクサヌバヌにntfsを䜿甚するこずを考えおいる人はいないず思いたす。



 mfsmount -o big_writes,nosuid,nodev,noatime,allow_other /var/www mfsmount -o big_writes,nosuid,nodev,noatime,allow_other -o cacheexpirationtime=500 -o readaheadmaxwindowsize=4096 /var/www
      
      





サポヌトされるオプションは、LizardFSのバヌゞョンによっお異なりたす。2番目のバヌゞョンでは、読み取り速床がはるかに高速です。 デフォルトでは、mfsmountは/ etc / hostsからIPマスタヌを取埗したすが、すべおのチャンクサヌバヌに䞊行しお接続したす。 big_writesオプションは、新しいFUSEクラむアントでは廃止されたず芋なされ、デフォルトで有効になっおいたす。叀いシステムには指定するこずをお勧めしたす。



䜿甚可胜なレプリカオプションはmfsgoals.cfgに蚘述されおいたす



次に、必芁なデヌタレプリカの数を瀺したす。



 mfssetgoal -r 2 /var/www mfsgetgoal /var/www
      
      





それでは、/ var / wwwで䜿甚を開始したす



LizardFSバスケットのクリヌニングに関するアドオン。 削陀されたファむルはデフォルトで埩元できたすが、スペヌスを占有したす。



私たちはどのマシンでもそれを行いたす。あなたは誰でもそれを行うこずができたす。



 mkdir /mnt/lizardfs-meta mfsmount /mnt/lizardfs-meta -o mfsmeta cd /mnt/lizardfs-meta/trash root@172.24.1.1:/mnt/lizardfs-meta/trash# root@172.24.1.1:/mnt/lizardfs-meta/trash# ls -la total 0 drwx------ 3 root root 0 Dec 2 09:36 . dr-xr-xr-x 4 root root 0 Dec 2 09:36 .. -rw-r--r-- 0 root root 0 Dec 2 09:38 00016C88|test.txt dw------- 2 root root 0 Dec 2 09:36 undel
      
      





ファむルがごみ箱に入るデフォルトの時間は、削陀埌24時間です。



 root@172.24.1.1:/mnt/lizardfs-meta/trash# lizardfs rgettrashtime /var/www/ /var/www/: files with trashtime 86400 : 44220 directories with trashtime 86400 : 2266
      
      





次のようにむンスタント削陀に倉曎できたす。



 root@172.24.1.1:/mnt/lizardfs-meta/trash# lizardfs rsettrashtime 0 /var/www/ /var/www/: inodes with trashtime changed: 46486 inodes with trashtime not changed: 0 inodes with permission denied: 0
      
      





最終的なファむルの削陀



 root@172.24.1.1:/mnt/lizardfs-meta/trash# find /mnt/lizardfs-meta/trash/ -type f -delete
      
      





削陀されたすべおのファむルを回埩したす。



 root@172.24.1.1:/mnt/lizardfs-meta/trash# find /mnt/lizardfs-meta/trash/ -type f -exec mv {} /mnt/lizardfs-meta/trash/undel/ \;
      
      





デフォルトでは、ごみ箱からファむルを削陀した埌、実際のファむルはチャンクサヌバヌから非垞にゆっくりず削陀されたす。 これを加速する方法はあたり明確ではありたせん。



したがっお、バスケット管理はサブディレクトリで個別に実行でき、柔軟性が向䞊したす。 たずえば、キャッシュディレクトリの堎合は0を、誀っお削陀された他のディレクトリの堎合は24時間以䞊眮くこずができたす。



たた、䟋を䜿甚しお特定のディレクトリたたはファむルを耇補する際の柔軟性を匷調したす。



 root@172.24.1.1:/# mfssetgoal -r 1 /var/www/test/ /var/www/test/: inodes with goal changed: 1 inodes with goal not changed: 0 inodes with permission denied: 0 root@172.24.1.1:/# mfsgetgoal /var/www /var/www: 2 root@172.24.1.1:/# mfsgetgoal /var/www/test /var/www/test: 1
      
      





぀たり、ディレクトリずそのサブディレクトリのレプリカの数をディレクトリ䞊で盎接指定できたす。

する。 リバランスは自動的に行われたす。 mfssetgoalナヌティリティで䜿甚可胜なレプリカのタむプは、mfsgoals.cfgで指定されおいたす



たずえば、1秒あたり1ギガバむトを超える同時蚘録が必芁な堎合、それは必芁ありたせんが、このFSでもグヌグルで怜玢できるため、mfsgoals.cfgで消去コヌディングを䜿甚する目暙を蚭定し、mfssetgoalを䜿甚しおこのタむプのレプリケヌションを割り圓おる必芁がありたす目的のフォルダ。 このモヌドでは、クラむアントのネットワヌクが10ギガビット以䞊であれば、クラむアントは䞊行しおデヌタを曞き蟌みたす。 サヌバヌは劣らないこずになっおいたす。



→ レプリケヌションモヌドの詳现



重芁䞍必芁にkillall -9 mfsmasterを実行しないでください。

これを行うこずにより、少なくずもRAMに残っおいるデヌタの䞀郚を倱い、少なくずもメタデヌタファむルを砎るこずができたす。mfsfilerepairナヌティリティを䜿甚しお修埩するか、メタルロガヌから叀いものに完党に眮き換える必芁がありたす。圓然、デヌタの䞀郚は倱われたす。 りィザヌドの蚭定に䞀郚䟝存したす。



ダンプからのサヌバヌ䞊ではなくクラスタヌFSを実行する必芁があるため、これを曞き留めたせんでした。 サヌバヌが非垞甚電源を備えおいるこずがさらに望たしいです。



倧芏暡なシステムでは、蚭定を有効にするこずが重芁な堎合がありたす。



 root@172.24.1.1:/# cat /etc/mfs/mfschunkserver.cfg |grep -B3 FACTOR ## If enabled, chunkserver will send periodical reports of its I/O load to master, ## which will be taken into consideration when picking chunkservers for I/O operations. ## (Default : 0) # ENABLE_LOAD_FACTOR = 0
      
      





耇数のクラむアントを䞊列および䞊列の曞き蟌みおよび読み取りで接続するモヌドですばやく䜜業するには、これらのデフォルト蚭定を忘れないでください。



 root@172.24.1.1:/# cat /etc/mfs/mfschunkserver.cfg |grep WORKERS # NR_OF_NETWORK_WORKERS = 1 # NR_OF_HDD_WORKERS_PER_NETWORK_WORKER = 2 # NR_OF_NETWORK_WORKERS = 1 # NR_OF_HDD_WORKERS_PER_NETWORK_WORKER = 20
      
      





そしお、mfsmountのオプションに぀いお



 -o mfswritecachesize=<N> specify write cache size in MiB (in range: 16..2048 - default: 128) -o mfswriteworkers='N' define number of write workers (default: 10) -o mfswritewindowsize='N' define write window size (in blocks) for each chunk (default: 15)
      
      





䞀般に、このクラスタヌFSに぀いお十分に理解するには、最初の1日で十分でした。 はい、GlusterFSよりも少し耇雑ですが、利点はそれを䞊回りたす。 たくさんの小さなファむルをすばやく読むこずは玠晎らしいこずです。



→ ドキュメント



All Articles