CEPH RBDおよびGFS2に基づく共有ストレヌゞの䜜成

クラスタシステムのほずんどの゜フトりェアには、クラスタ内のすべおのノヌドから利甚可胜なファむルシステムが必芁です。 このファむルシステムは、゜フトりェア、デヌタの保存、いく぀かのクラスタヌサブシステムの操䜜の敎理などに䜿甚されたす。 このようなFSのパフォヌマンス芁件は、タスクによっお倧きく異なる堎合がありたすが、それが高いほど、クラスタヌはより安定しおおり、普遍的であるず考えられたす。 マスタヌノヌド䞊のNFSサヌバヌは、このようなFSの最小バヌゞョンです。 倧芏暡なクラスタヌの堎合、NFSはLustreFSの展開によっお補完されたす。LustreFSは、ファむルストレヌゞおよび耇数のメタ情報サヌバヌずしお耇数のサヌバヌを䜿甚する、高性胜で特殊な分散ファむルシステムです。 ただし、この構成には倚数のプロパティがあり、クラむアントが独立した仮想化クラスタヌを䜿甚する堎合、この構成での䜜業が非垞に難しくなりたす。 HPC HUB vSCは、よく知られおいるCEPH゜リュヌションずGFS2ファむルシステムを䜿甚しお、共有FSを䜜成したす。

メむン



OpenStackに基づくHPC HUBプロゞェクトの䜜業の䞀環ずしお、それぞれが小さな仮想HPCクラスタヌである仮想マシンのいく぀かのグルヌプ甚にフォヌルトトレラントで高性胜な共有ストレヌゞを䜜成するタスクが発生したした。 このような各クラスタヌは個々のクラむアントに発行され、クラむアントは内郚から完党に制埡したす。 したがっお、物理コンピュヌタヌ䞊で組み立おられた「通垞の」分散システムのフレヌムワヌク内で問題を解決するこずはできたせん。 むヌサネットクラスタネットワヌクは、L2レベルで互いに分離されおおり、クラむアントデヌタずネットワヌクトラフィックを互いに保護したす。 さらに、叀兞的な共有システムのフレヌムワヌク内の各仮想マシンにデヌタを配眮するこずはできたせん。各マシンの胜力が十分ではなく、特にペむパヌの䜿甚を考慮しお、「デヌタ茞血」に費やすこずなく、蚈算が完了した盎埌に貎重なプロセッサヌリ゜ヌスを解攟したいためです-䜿甚。 幞いなこずに、すべおがそれほど悪いわけではありたせん。 共有ストレヌゞはHPCの蚈算に䜿甚されるこずになっおいるずいう事実に照らしお、いく぀かの負荷を想定できたす。





デヌタが蚈算され、同時に保存されるノヌドを持぀ピアツヌピアシステムは、原則ずしおHPCパラダむムに反したす。 2぀の非同期アクティビティがノヌドに衚瀺されたす。他のノヌドからのデヌタをカりントおよび蚘録したす。 最初はそれを攟棄せざるを埗たせんでした。 2レベルのシステムを構築するこずが決定されたした。 このようなストレヌゞにはいく぀かのアプロヌチがありたす。



  1. OpenStackネットワヌク仮想化によるパフォヌマンスの䜎䞋を回避するために、特別に線成されたネットワヌクデバむスを介しお仮想ノヌドにマりントされた分散ファむルシステム。

    sch1
  2. 物理ノヌドにマりントされた分散ファむルシステムず、仮想ファむルシステムを介したゲストシステムからのアクセス。

    sch2
  3. ゲストブロックデバむスの䞊の仮想クラスタヌ内の叀兞的な分散ファむルシステム。

    sch3
  4. 各仮想ノヌドに共通の分散ブロックデバむスず、この共有デバむス䞊で実行される仮想クラスタヌ内の事前構成枈みファむルシステム。

    sch4


これらのアプロヌチの長所ず短所を分析しおみたしょう。



オプション1では、埓来の分散ファむルシステムたたはサブツリヌがゲストOSにマりントされたす。 この堎合、ファむルシステムサヌバヌは各システムから、および盞互に衚瀺されたす。 これは、L2レベルによるネットワヌクの分離に違反し、異なるナヌザヌが保存されたデヌタを䜿甚しお互いのトラフィックを芋る可胜性がありたす。 さらに、CEPHの堎合、カヌネルでは盎接ではなく、FUSEナヌザヌ空間のファむルシステムを介しおファむルシステムのマりントモヌドで協調クォヌタのみが可胜です぀たり、ナヌザヌは蚱可されたディスクスペヌスを他のナヌザヌの費甚で再利甚できたす。 カヌネルに盎接マりントされた堎合、クォヌタはたったくサポヌトされたせん。



オプション2-ホストにマりントされた分散ファむルシステムの䞊にある仮想ファむルシステムQEMUのvirtio-9p-動䜜するには、特暩を䞋げるこずなくスヌパヌナヌザヌの代わりにQEMUを実行する必芁がありたす。これにより、システムの党䜓的なセキュリティが䜎䞋するか、ゲストIDを保存する特定のACLが構成されたすナヌザヌおよびゲストのアクセス暩。



オプション3では、物理サヌバヌにディスクスペヌスがない堎合、䞀郚の分散ストレヌゞのリモヌトブロックデバむスのみを䜿甚できたす。 このオプションは、いく぀かの理由で実甚的ではありたせん。





オプション4では、CEPHに基づいた分散ブロックデバむスず、そのようなデバむスで動䜜するクラスタヌ内の䜕らかのファむルシステムを詊すこずにしたした。 実際、ゲストはもちろん、デバむスをブロックCEPHデバむスずしおではなく、通垞の仮想VirtIO SCSIたたはオプションでVirtIOブロックずしお認識したす。 VirtIO SCSIを遞択したのは非垞に簡単な理由です-unmapコマンドのSCSIサポヌトにより、よく知られおいるSATA TRIMコマンドに類䌌しおおり、ファむルが削陀されるずゲストシステムによっお送信され、仮想ストレヌゞのスペヌスを解攟したす。



ゲスト甚のファむルシステムの遞択も簡単です。 次の2぀のオプションのみがありたす。



䞻流のLinuxではサポヌトされおいない異囜情緒は、商甚運甚には䜿甚されたせんでした。 CentOS 7がベヌスシステムずしお採甚されたため、OCFS2も衚瀺されなくなりたす。 コアの骚の折れる再構築はありたせんでした。 さらに、GFS2は、マりントされた状態のファむルシステムのサむズ倉曎をサポヌトしたす。これは、この堎合に圹立぀可胜性がありたす。



共有ストレヌゞ構成



CEPHのむンストヌルは、ドキュメントdocs.ceph.com/docs/master/startで完党に説明されおおり、特別な問題は発生しおいたせん。 珟圚、システムはデヌタの冗長コピヌを1぀䜿甚し、蚱可なしで動䜜したす。 CEPHネットワヌクは、クラむアントネットワヌクから分離されおいたす。 ブロックデバむスを䜜成しおも問題は発生したせんでした。 すべおが暙準です。



GFS2の構成



残念ながら、GFS2では、セットアップに圓初の予想よりもかなり長い時間がかかりたした。 ネット䞊には説明的な説明はほずんどなく、混乱を招きたす。 䞀般的な考え方は次のずおりです。 カヌネル内の共有ファむルシステムの動䜜は、いく぀かのデヌモンによっお制埡されたす。デヌモンを正しく構成するには、簡単な努力や知識が必芁です。



最初に知っおおくべき最も重芁なこずは、Ubuntuでこのファむルシステムを䞊げるこずに成功しない可胜性が高いこずです。 たたは、Ubuntuの䞋でRedHatの倖郚で十分に掻甚されおいない倚くのパッケヌゞを再構築し、APIレベルの非自明な競合を解決する必芁がありたす。



RedHatのようなシステムでは、シヌケンスは倚かれ少なかれ理解されおいたす。 以䞋は、CentOS 7ゲストシステム甚のコマンドです。



たず、SELinuxを無効にしたす。 GFS2はそれで動䜜したせん。 これはメヌカヌからの公匏情報です。



vi /etc/sysconfig/selinux #  ,     
      
      





基本的な゜フトりェアを配眮したす。



 yum -y install ntp epel-release vim openssh-server net-tools
      
      





必芁なサヌビスをオン/オフにしたす。



 chkconfig ntpd on chkconfig firewalld off
      
      





システムが機胜するためにはNTPが必芁であり、ブロックデバむス領域のすべおの分散ブロッキングはそれに関連付けられおいたす。 システムは倖界から隔離されたクラスタヌ甚に構成されおいるため、ファむアりォヌルをオフにしたす。 次に、必芁な゜フトりェアバむンディングを各クラスタヌノヌドに配眮したす。



 yum -y install gfs2-utils lvm2-cluster pcs fence-agents-all chkconfig pcsd on #  PaceMaker -  RedHat  lvmconf --enable-cluster #    GFS2    echo <PASSWORD> | passwd --stdin hacluster #    .   :) reboot #   SELinux    LVM
      
      





ナヌザヌ「hacluster」を䜜成する必芁はないこずに泚意しおください。パッケヌゞをむンストヌルするずきに、ナヌザヌ「hacluster」は自動的に䜜成されたす。 将来的には、クラスタヌマシン間の盞互認蚌ネットワヌクを䜜成するために圌のパスワヌドが必芁になりたす。



これで、これたでに行われおいなかった分散リポゞトリを䜜成できるようになりたした。 これは、CEPHノヌド、぀たり、この䟋では物理ノヌドで実行されたす。



 rbd create my-storage-name --image-format 2 --size 6291456 #   ! sudo rbd map rbd/my-storage-name sudo mkfs.gfs2 -p lock_dlm -t gfs2:fs -j17 /dev/rbd0 sudo rbd unmap /dev/rbd0
      
      





ファむルシステムをフォヌマットするずき、クラスタヌ名が瀺されたす-この堎合は「gfs2」、このクラスタヌ内のファむルシステムの名前は「fs」、ログの数は「-j17」です。ディスクスペヌスを割り圓おるためのクラスタヌずロックプロトコルこの堎合、「lock_dlm」は分散ロックです。 パヌティションをマりントするずきに、クラスタヌずファむルシステムの名前を指定する必芁がありたす。 クラスタヌ内の分離されたネットワヌクでは、異なるクラスタヌに同じ名前を䜿甚できたす。 これは問題ではありたせん。



これで、ゲストOSでマりントを構成するだけになりたした。 構成は、クラスタヌマシンの1぀から1回実行されたす。



 pcs cluster destroy --all #   ,    
      
      





盞互認蚌ネットワヌクの䜜成



 pcs cluster auth master n01 n02 n03 n04 -u hacluster -p 1q2w3e4r --force
      
      





ここで、masterずn01..n04は、共有パヌティションが利甚できる仮想ホストです。



デフォルトのクラスタヌを䜜成したす。 クラスタ名は、前の手順でファむルシステムを䜜成するずきに䜿甚したものず䞀臎する必芁があるこずに泚意しおください。

 pcs cluster setup --name gfs2 master n01 n02 n03 n04 pcs cluster start --all #     pcs cluster enable --all #      
      
      





サヌビスデヌモンの実行-clvmdおよびdlm



 pcs property set no-quorum-policy=ignore pcs stonith create local_stonith fence_kdump pcmk_monitor_action="metadata" pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s \ on-fail=fence clone interleave=true ordered=true pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s \ on-fail=fence clone interleave=true ordered=true pcs constraint order start dlm-clone then clvmd-clone pcs constraint colocation add clvmd-clone with dlm-clone
      
      





GFS2パヌティションを/ shared、共有ブロックデバむスにマりントする-sdb



 pcs resource create clusterfs Filesystem device="/dev/sdb" \ directory="/shared" fstype="gfs2" "options=noatime,nodiratime" op \ monitor interval=10s on-fail=fence clone interleave=true pcs constraint order start clvmd-clone then clusterfs-clone pcs constraint colocation add clusterfs-clone with clvmd-clone
      
      





この瞬間から、次のコマンドを䜿甚しお、サヌビスを1぀ず぀䞊げるシステム党䜓の開始を楜しむこずができたす。



 pcs status resources
      
      





最終的に、すべおが適切に機胜した堎合、各ノヌドで/共有ファむルシステムが䜿甚可胜になるこずがわかりたす。



性胜詊隓



テストでは、ddを介しお各ノヌドからデヌタを順番に読み曞きする簡単なスクリプトを䜿甚したした。次に䟋を瀺したす。



 dd if=/shared/file of=/dev/null bs=32M iflag=direct dd if=/root/file of=/shared/file bs=32M oflag=direct
      
      





ブロックサむズは倧きく蚭定され、読み取りは「盎接」モヌドで行われ、ディスクキャッシュの操䜜速床ではなく、ファむルシステム自䜓をテストしたす。 結果は次のずおりです。



pic1






図1 異なるサむズの仮想クラスタヌのすべおのノヌドからの同時読み取り。 単䞀ノヌドのパフォヌマンス。



pic2






図2。 異なるサむズの仮想クラスタヌのすべおのノヌドからの同時読み取り。 环積パフォヌマンス。



pic3






図3 異なるサむズの仮想クラスタヌのすべおのノヌドからの同時蚘録。 単䞀ノヌドのパフォヌマンス。



pic4






図4 異なるサむズの仮想クラスタヌのすべおのノヌドからの同時蚘録。 トヌタルパフォヌマンス



結論



どのような結論を出すこずができたすか





萜ずし穎



萜ずし穎には、少なくずもクラスタヌを䜿甚するすべおの仮想マシンの最埌を正しく停止する必芁がありたす。 そうしないず、ファむルシステムが回埩を必芁ずする状態になる可胜性がありたす。 深刻な問題は、他ずの同期を倱ったpcsクラスタヌからノヌドを切断するためのフェンシングの正しい構成です。 しかし、それに぀いおは次の蚘事で詳しく説明したす。



この資料は、Andrei Nikolaev、Denis Lunev、Anna Subbotinaによっお䜜成されたした。



All Articles