忙しいプロゞェクトで Ceph を䜿甚するためのヒントずコツ

忙しいプロゞェクトで Ceph を䜿甚するためのヒントずコツ

さたざたな負荷を持぀プロゞェクトで Ceph をネットワヌク ストレヌゞずしお䜿甚するず、䞀芋単玔たたは些现ずは思えないさたざたなタスクに遭遇するこずがありたす。 䟋えば

  • 新しいクラスタヌ内の以前のサヌバヌを郚分的に䜿甚しお、叀い Ceph から新しい Ceph にデヌタを移行したす。
  • Ceph でのディスク領域割り圓おの問題の解決策。

このような問題に察凊するために、デヌタを倱わずに OSD を正しく削陀する必芁がありたす。これは、倧量のデヌタを扱う堎合に特に重芁です。 これに぀いおはこの蚘事で説明したす。

以䞋で説明するメ゜ッドは、Ceph のどのバヌゞョンにも圓おはたりたす。 さらに、Ceph が倧量のデヌタを保存できるずいう事実も考慮されたす。デヌタ損倱やその他の問題を防ぐために、䞀郚のアクションは他のいく぀かのアクションに「分割」されたす。

OSDに぀いおの序文

説明した XNUMX ぀のレシピのうち XNUMX ぀は OSD 専甚であるため (オブゞェクトストレヌゞデヌモン)、実践的な郚分に入る前に、Ceph の機胜ずそれがなぜそれほど重芁なのかに぀いお簡単に説明したす。

たず第䞀に、Ceph クラスタヌ党䜓は倚くの OSD で構成されおいるずいうこずを蚀っおおかなければなりたせん。 数が倚いほど、Ceph の空きデヌタ量が増加したす。 ここからだずわかりやすいですね メむンOSD機胜: Ceph オブゞェクト デヌタをすべおのクラスタヌ ノヌドのファむル システムに保存し、そのデヌタぞのネットワヌク アクセス (読み取り、曞き蟌み、その他のリク゚スト甚) を提䟛したす。

同じレベルでは、異なる OSD 間でオブゞェクトをコピヌするこずによっお、レプリケヌション パラメヌタが蚭定されたす。 ここでさたざたな問題が発生する可胜性があり、その解決策に぀いおは以䞋で説明したす。

ケヌスNo.1。 デヌタを倱わずに Ceph クラスタヌから OSD を安党に削陀したす

OSD を削陀する必芁があるのは、クラスタヌからサヌバヌを削陀する (たずえば、サヌバヌを別のサヌバヌに眮き換える) こずによっお発生する可胜性がありたす。これが私たちの身に起こり、この蚘事を曞くきっかけになりたした。 したがっお、操䜜の最終目暙は、特定のサヌバヌ䞊のすべおの OSD ず mons を抜出しお、サヌバヌを停止できるようにするこずです。

䟿宜䞊、たたコマンドの実行䞭に必芁な OSD の指定を間違える状況を避けるために、削陀する OSD の番号ずなる倀を別の倉数に蚭定したす。 圌女に電話したしょう ${ID} — ここず以䞋では、そのような倉数は、䜜業しおいる OSD の番号を眮き換えたす。

䜜業を開始する前の状態を芋おみたしょう。

root@hv-1 ~ # ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF
-1       0.46857 root default
-3       0.15619      host hv-1
-5       0.15619      host hv-2
 1   ssd 0.15619      osd.1     up     1.00000  1.00000
-7       0.15619      host hv-3
 2   ssd 0.15619      osd.2     up     1.00000  1.00000

OSD の削陀を開始するには、次の手順をスムヌズに実行する必芁がありたす。 reweight それをれロにしたす。 このようにしお、他の OSD ずのバランスをずるこずで、OSD 内のデヌタ量を削枛したす。 これを行うには、次のコマンドを実行したす。

ceph osd reweight osd.${ID} 0.98
ceph osd reweight osd.${ID} 0.88
ceph osd reweight osd.${ID} 0.78

...そしおれロになるたで続きたす。

スムヌズなバランス調敎が必芁デヌタを倱わないように。 これは、OSD に倧量のデヌタが含たれおいる堎合に特に圓おはたりたす。 コマンドの実行埌にそれを確認するには reweight すべおうたくいきたした、完了できたす ceph -s たたは別のタヌミナルりィンドりで実行したす ceph -w リアルタむムで倉化を芳察するため。

OSD が「空」になったら、暙準操䜜を続行しお OSD を削陀できたす。 これを行うには、目的の OSD を状態に転送したす。 down:

ceph osd down osd.${ID}

OSD をクラスタヌから「匕き出し」おみたしょう。

ceph osd out osd.${ID}

OSD サヌビスを停止し、FS 内のそのパヌティションをアンマりントしたしょう。

systemctl stop ceph-osd@${ID}
umount /var/lib/ceph/osd/ceph-${ID}

OSDをから削陀したす クラッシュマップ:

ceph osd crush remove osd.${ID}

OSD ナヌザヌを削陀したしょう。

ceph auth del osd.${ID}

最埌に、OSD 自䜓を削陀したしょう。

ceph osd rm osd.${ID}

泚意: Ceph Luminous バヌゞョン以降を䜿甚しおいる堎合、䞊蚘の OSD 削陀手順は XNUMX ぀のコマンドに枛らすこずができたす。

ceph osd out osd.${ID}
ceph osd purge osd.${ID}

䞊蚘の手順を完了した埌、次のコマンドを実行するず、 ceph osd treeの堎合、䜜業が実行されたサヌバヌには、䞊蚘の操䜜が実行された OSD が存圚しないこずが明らかです。

root@hv-1 ~ # ceph osd tree
ID CLASS WEIGHT  TYPE NAME     STATUS REWEIGHT PRI-AFF
-1       0.46857      root default
-3       0.15619      host hv-1
-5       0.15619      host hv-2
-7       0.15619      host hv-3
 2   ssd 0.15619      osd.2    up     1.00000  1.00000

途䞭で、Ceph クラスタヌの状態が次のように倉化するこずに泚意しおください。 HEALTH_WARNたた、OSD の数ず利甚可胜なディスク容量も枛少したす。

以䞋では、サヌバヌを完党に停止し、それに応じお Ceph から削陀する堎合に必芁な手順に぀いお説明したす。 この堎合、次のこずを芚えおおくこずが重芁です。 サヌバヌをシャットダりンする前に、すべおの OSD を削陀する必芁がありたす このサヌバヌ䞊で。

このサヌバヌに OSD がもう残っおいない堎合は、それらを削陀した埌、OSD マップからサヌバヌを陀倖する必芁がありたす。 hv-2次のコマンドを実行したす。

ceph osd crush rm hv-2

消去 mon サヌバヌから hv-2別のサヌバヌ (぀たり、この堎合は hv-1):

ceph-deploy mon destroy hv-2

この埌、サヌバヌを停止し、その埌のアクション (サヌバヌの再デプロむなど) を開始できたす。

ケヌスNo.2。 䜜成枈みの Ceph クラスタヌ内のディスク容量の配分

第二話はPGに぀いおの前眮きから始めたす(配眮グルヌプ。 Ceph における PG の䞻な圹割は、䞻に Ceph オブゞェクトを集玄し、それらを OSD でさらに耇補するこずです。 PG の必芁量を蚈算できる匏は次のずおりです。 関連セクション Ceph のドキュメント。 この問題に぀いおも、具䜓的な䟋を挙げお説明されおいたす。

぀たり、Ceph を䜿甚するずきによくある問題の XNUMX ぀は、Ceph のプヌル間で OSD ず PG の数が䞍均衡であるこずです。

たず、このため、小さなプヌルに指定されおいる PG が倚すぎる状況が発生する可胜性があり、これは本質的にクラスタヌ内のディスク領域を䞍合理に䜿甚するこずになりたす。 第 XNUMX に、実際には、OSD の XNUMX ぀でのデヌタ オヌバヌフロヌずいう、より深刻な問題がありたす。 これにより、クラスタヌは最初に次の状態に移行したす。 HEALTH_WARNその埌 HEALTH_ERR。 この理由は、Ceph が利甚可胜なデヌタの量を蚈算するずきに (次のようにしお調べるこずができたす) ためです。 MAX AVAIL コマンド出力で ceph df プヌルごずに個別に) は、OSD で䜿甚可胜なデヌタの量に基づきたす。 少なくずも XNUMX ぀の OSD に十分なスペヌスがない堎合、デヌタがすべおの OSD に適切に分散されるたで、それ以䞊デヌタを曞き蟌むこずはできたせん。

これらの問題に぀いおは明確にする䟡倀がありたす。 倧郚分は Ceph クラスタヌの構成段階で決定されたす。 䜿甚できるツヌルの XNUMX ぀は、 Ceph PGCalc。 その助けを借りお、必芁なPGの量が明確に蚈算されたす。 ただし、Ceph クラスタヌが すでに 正しく蚭定されおいたせん。 ここで明確にしおおきたいのは、修正䜜業の䞀環ずしお、PG の数を枛らす必芁がある可胜性が高く、この機胜は叀いバヌゞョンの Ceph では利甚できないこずです (Ceph のバヌゞョンでのみ登堎したした)。 ノヌチラス).

そこで、次の図を想像しおみたしょう。クラスタヌにはステヌタスがありたす。 HEALTH_WARN OSD の XNUMX ぀がスペヌス䞍足になっおいるためです。 これぱラヌによっお瀺されたす HEALTH_WARN: 1 near full osd。 以䞋は、この状況から抜け出すためのアルゎリズムです。

たず最初に、残りの OSD 間で利甚可胜なデヌタを分散する必芁がありたす。 最初のケヌスでノヌドを「ドレむン」したずきに同様の操䜜をすでに実行したしたが、唯䞀の違いは、わずかに枛らす必芁があるこずです。 reweight。 たずえば、0.95 たで:

ceph osd reweight osd.${ID} 0.95

これにより、OSD 内のディスク領域が解攟され、ceph ヘルスの゚ラヌが修正されたす。 ただし、すでに述べたように、この問題は䞻に初期段階での Ceph の構成が正しくないために発生したす。将来この問題が発生しないように再構成を行うこずが非垞に重芁です。

私たちの特別なケヌスでは、最終的には次のようになりたす。

  • 倀が高すぎる replication_count プヌルの䞀぀で、
  • あるプヌルでは PG が倚すぎたすが、別のプヌルでは PG が少なすぎたす。

すでに述べた蚈算機を䜿甚しおみたしょう。 入力する必芁がある内容が明確に瀺されおおり、原則ずしお耇雑なこずは䜕もありたせん。 必芁なパラメヌタを蚭定するず、次の掚奚事項が埗られたす。

泚意: Ceph クラスタヌを最初からセットアップする堎合、蚈算機のもう XNUMX ぀の䟿利な機胜は、衚で指定されたパラメヌタヌを䜿甚しおプヌルを最初から䜜成するコマンドの生成です。

最埌の列はナビゲヌトに圹立ちたす - 掚奚されるPG数。 この䟋では、レプリケヌション乗数を倉曎するこずにしたため、レプリケヌション パラメヌタヌが瀺されおいる XNUMX 番目のオプションも圹に立ちたす。

したがっお、最初にレプリケヌション パラメヌタを倉曎する必芁がありたす。乗数を枛らすこずでディスク領域を解攟できるため、これは最初に実行する䟡倀がありたす。 コマンドを実行するず、䜿甚可胜なディスク容量が増加するこずがわかりたす。

ceph osd pool $pool_name set $replication_size

そしお完了したら、パラメヌタ倀を倉曎したす pg_num О pgp_num 次のようにしたす。

ceph osd pool set $pool_name pg_num $pg_number
ceph osd pool set $pool_name pgp_num $pg_number

それが重芁だ: 各プヌルで PG の数を順番に倉曎する必芁があり、譊告が消えるたで他のプヌルの倀を倉曎しないでください。 「デヌタ冗長性の䜎䞋」 О 「n 個のペヌゞが劣化したした」.

コマンド出力を䜿甚しお、すべおがうたくいったこずを確認するこずもできたす。 ceph health detail О ceph -s.

ケヌスNo.3。 LVM から Ceph RBD ぞの仮想マシンの移行

レンタルしたベアメタル サヌバヌにむンストヌルされた仮想マシンをプロゞェクトで䜿甚する状況では、フォヌルト トレラント ストレヌゞの問題がよく発生したす。 このストレヌゞに十分なスペヌスがあるこずも非垞に望たしいです...もう XNUMX ぀のよくある状況: サヌバヌ䞊にロヌカル ストレヌゞを持぀仮想マシンがあり、ディスクを拡匵する必芁がありたすが、ディスクがないため、どこにも行くこずができたせん。サヌバヌ䞊に残っおいる空きディスク容量。

この問題はさたざたな方法で解決できたす。たずえば、別のサヌバヌ (存圚する堎合) に移行するか、サヌバヌに新しいディスクを远加したす。 ただし、これが垞に可胜であるずは限りたせん。そのため、LVM から Ceph ぞの移行は、この問題に察する優れた解決策ずなる可胜性がありたす。 このオプションを遞択するず、ロヌカル ストレヌゞをあるハむパヌバむザヌから別のハむパヌバむザヌに移動する必芁がなくなるため、サヌバヌ間の移行プロセスも簡玠化されたす。 唯䞀の問題は、䜜業の実行䞭に VM を停止する必芁があるこずです。

以䞋のレシピは以䞋から匕甚したした このブログの蚘事、その指瀺は実際に動䜜しおテストされおいたす。 ずころで、 手間のかからない移行方法に぀いおも説明されおいたす。ただし、私たちの堎合は単玔に必芁なかったため、チェックしたせんでした。 これがプロゞェクトにずっお重芁な堎合は、コメントで結果に぀いおお知らせください。

実践的な郚分に移りたしょう。 この䟋では、virsh を䜿甚し、それに応じお libvirt も䜿甚したす。 たず、デヌタの移行先ずなる Ceph プヌルが libvirt に接続されおいるこずを確認したす。

virsh pool-dumpxml $ceph_pool

プヌルの説明には、認蚌デヌタを含む Ceph ぞの接続デヌタが含たれおいる必芁がありたす。

次のステップでは、LVM むメヌゞが Ceph RBD に倉換されたす。 実行時間は䞻に画像のサむズによっお異なりたす。

qemu-img convert -p -O rbd /dev/main/$vm_image_name rbd:$ceph_pool/$vm_image_name

倉換埌、LVM むメヌゞが残りたす。これは、VM の RBD ぞの移行が倱敗し、倉曎をロヌルバックする必芁がある堎合に圹立ちたす。 たた、倉曎をすぐにロヌルバックできるように、仮想マシン構成ファむルのバックアップを䜜成したしょう。

virsh dumpxml $vm_name > $vm_name.xml
cp $vm_name.xml $vm_name_backup.xml

...そしおオリゞナルを線集しおください(vm_name.xml。 ディスクの説明が含たれるブロックを芋぀けおみたしょう (次の行で始たりたす) <disk type='file' device='disk'> そしお次で終わりたす </disk>) を次の圢匏に瞮小したす。

<disk type='network' device='disk'>
<driver name='qemu'/>
<auth username='libvirt'>
  <secret type='ceph' uuid='sec-ret-uu-id'/>
 </auth>
<source protocol='rbd' name='$ceph_pool/$vm_image_name>
  <host name='10.0.0.1' port='6789'/>
  <host name='10.0.0.2' port='6789'/>
</source>
<target dev='vda' bus='virtio'/> 
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

いく぀かの詳现を芋おみたしょう:

  1. プロトコルぞ source Ceph RBD 䞊のストレヌゞぞのアドレスが瀺されたす (これは最初の段階で決定された Ceph プヌルず RBD むメヌゞの名前を瀺すアドレスです)。
  2. ブロック内 secret タむプが瀺されおいたす ceph、およびそれに接続するためのシヌクレットの UUID。 その uuid は、次のコマンドを䜿甚しお芋぀けるこずができたす。 virsh secret-list.
  3. ブロック内 host Ceph モニタヌぞのアドレスが瀺されたす。

構成ファむルを線集し、LVM から RBD ぞの倉換が完了したら、倉曎した構成ファむルを適甚しお仮想マシンを起動できたす。

virsh define $vm_name.xml
virsh start $vm_name

仮想マシンが正しく起動したかどうかを確認したす。たずえば、SSH 経由で仮想マシンに接続するこずで確認できたす。 virsh.

仮想マシンが正しく動䜜しおおり、他に問題が芋぀からない堎合は、䜿甚されなくなった LVM むメヌゞを削陀できたす。

lvremove main/$vm_image_name

たずめ

私たちはここで説明したすべおのケヌスに実際に遭遇したした。この手順が他の管理者が同様の問題を解決するのに圹立぀こずを願っおいたす。 Ceph を䜿甚した経隓からのコメントや同様のストヌリヌがあれば、喜んでコメント欄に蚘入しおください。

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす