キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
1243
閲覧回数
0
いいね!
0
コメント
Satoshi Kinoshita
Cisco Employee
Cisco Employee

問題

 
CVIMMONのAlertで、Cephに関する以下の2つのAlertが出力されました。
 
HEALTH_WARN
OSD_NEARFUL
 
 

Cephのヘルスチェック

 
コントローラーノードの cephmon コンテナから、ceph health detail の結果をみてみると HEALTH_WARN 状態となっていることがわかります。
 
cephmon_19767 [ceph@controller1 /]$ ceph health detail
HEALTH_WARN 5 nearfull osd(s); 2 pool(s) nearfull
OSD_NEARFULL 5 nearfull osd(s)
    osd.58 is near full
    osd.73 is near full
    osd.195 is near full
    osd.205 is near full
    osd.206 is near full
POOL_NEARFULL 2 pool(s) nearfull
    pool 'images' is nearfull
    pool 'volumes' is nearfull
 
この結果より以下の2つが原因であることがわかります。
 
・5つのOSDの領域がOSD_NEAFULLとなっており、容量が不足している
・images 及び volumes の pool が POOL_NEARFULL となっており、容量が不足している
 
ディスクの容量が足りない問題が発生していると思われます。
 
 

ceph df detail コマンドでCephディスク使用率を確認

 
ceph df detail コマンドでディスク使用容量のサマリを確認してみます。
 
cephmon_19767 [ceph@controller1 /]$ ceph df detail
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED     OBJECTS
    825TiB     247TiB       578TiB         70.02      50.64M
POOLS:
    NAME        ID     QUOTA OBJECTS     QUOTA BYTES     USED       %USED     MAX AVAIL     OBJECTS      DIRTY      READ       WRITE       RAW USED
    images      1      N/A               N/A             158GiB      0.76       20.1TiB        20250     20.25k     425KiB      119KiB       473GiB
    volumes     2      N/A               N/A             192TiB     90.56       20.1TiB     50621497     50.62M     903MiB     4.65GiB       577TiB
 
Cephのディスク使用率を解析する上で重要なのは、実際に使用できる空き容量と、物理ディスクの空き容量は一致しない事を理解する必要があります。
CVIMで動作しているCephは冗長性を確保するために、書き込みの際に3つのレプリケーションを異なるOSD上に作成します。
これにより物理ディスクの故障によりOSDがダウンしたとしても、残り2つのレプリケーションが使用できるため冗長性を確保します。
このため、Cephを利用するクライアントが1Mbyteの領域を使ったとしても、実際には3Mbyteの領域を使用することになります。
ceph df detail の出力結果の各項目が、クラアントが使用可能なサイズなのか、実際にディスク上で使用している領域(RAW)なのかを見極める必要があります。
 
まずは以下のGLOBALの項目の解釈から説明します。
 
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED     OBJECTS
    825TiB     247TiB       578TiB         70.02      50.64M
 
 
ここは基本的にRAW領域です。つまり全体のDisk使用量のうち実際にどれくらい使われているかという情報を表示しています。
 
このマシンにはHDDが378台積まれています。
 
cephmon_19767 [ceph@controller1 /]$ ceph osd tree|grep hdd|wc -l
378
 
一つのドライブの容量が2.18TiBなので、378倍すると 825TBになります。つまり上記のSIZEと一致します。
 
SIZE: すべてのOSDが提供する全ディスク容量
AVAIL: 使用可能なディスク容量
RAW USED: 使用中のディスク容量
%RAW USED: RAW USED/SIZE x 100、つまり全ディスク容量のうちの使用量
OBJECTS: データオブジェクトの数
 
つまり、全体で見ると70%ほどの容量しか使ってません。
 
次に、POOLSの解釈です。
 
POOLS:
    NAME        ID     QUOTA OBJECTS     QUOTA BYTES     USED       %USED     MAX AVAIL     OBJECTS      DIRTY      READ       WRITE       RAW USED
    images      1      N/A               N/A             158GiB      0.76       20.1TiB        20250     20.25k     425KiB      119KiB       473GiB
    volumes     2      N/A               N/A             192TiB     90.56       20.1TiB     50621497     50.62M     903MiB     4.65GiB       577TiB
 
ここはクライアントから見た容量とディスクのRAWの容量が混在しているので解釈が難しいところです。
 
USED: クライアントが使用しているデータ容量
%USED: Poolに割り当てられた全容量のうち何%のデータが使われているか
MAX AVAIL: あとどれくらいのクライアントがデータを使用できるか
RAW USED: USED x 3 の値、つまりreplica込みでどれくらいのデータ量をDisk上で消費しているか
 
CVIMでは、imagesとvolumesの2つのPoolが割り当てられます。
images は openstack glance で使用される、イメージの格納場所で、volumes は openstack cinder で使用されるブロックストレージ用の pool となります。
images の使用率が 0.76% なのに対し、volumes の使用量は 90.56% と非常に高くなっているのがまず問題です。
volumes の USED は192TiBですが、ここはクライアント側から見た使用量ですので、実際のディスク上での使用領域はその3倍の576TiBとなり、RAW USED の値とほぼ一致します。
このため、Global の RAW USED 578TiB は、ほぼ全て volumes の領域で使用されているということになります。
 
Globalで表示されている SIZE は825TiB中、577TiBがほぼ volumes のPoolで使用されているため、%RAW USEDが70.02% となります。
実際にはImage用のPoolも考慮に入れる必要がありますが、今回のケースだと使用されている領域は非常に小さいので無視できます。
 
ここでの疑問は全体のDisk使用量は70%に過ぎないのにPoolでみるとなぜ volumes の pool は90.56%使われているか?という話です。
 
 

Glance/Cinderディスクサイズの決定

 
ここを理解する前に、CVIM のインストールパラメーターの CEPH_PG_INFO について理解する必要があります。
 
以下は、CVIMのマニュアルページからの抜粋となります。
 
 
===============================
CEPH Placement Group Info (Optional)
 
If you need to change the default percentages for placement group calculation use this section they indicate amount of data you expect in cinder/glance/nova. For NOVA_BOOT_FROM local give values for cinder and glance. For NOVA_BOOT_FROM ceph also fill nova_percentage_data for ephemeral data. All Percentages need to add up to 100. If no information is provided, the code defaults to 60% cinder and 40% glance for NOVA_BOOT_FROM local. Similarly, if no information is provided the code defaults to 40% cinder, 30% glance and 30% nova ephemeral for NOVA_BOOT_FROM ceph. One cannot be changed these values after deployment via update or reconfigure.
 
# For NOVA_BOOT_FROM local
# CEPH_PG_INFO: {cinder_percentage_data: x, glance_percentage_data: y}
# where x and y are integers and must add up to 100
 
# For NOVA_BOOT_FROM Ceph
# CEPH_PG_INFO: {cinder_percentage_data: x, glance_percentage_data: y, nova_percentage_data: z}
# where x, y and z are integers and must add up to 100
===============================
 
CEPH_PG_INFOは GlanceとCinder用のPoolに振り分けるPG(Placement Group)の数を制御する値です。
 
このCVIM PODではこのパラメーターは設定されてないのでデフォルトの値を使用します。
デフォルトでは、40%のPGがGlance用、60%がCinder用に振り分けられます。
 
つまり、Glance PG:Cinder PG は 1:1.5です。
 
実際には以下のように1:2になっています。
 
cephmon_19767 [ceph@controller1 ceph]$ ceph osd pool get images pg_num
pg_num: 8192

cephmon_19767 [ceph@controller1 ceph]$ ceph osd pool get volumes pg_num
pg_num: 16384
 
これは、PG数は常に2の階乗になっていけないので実際の計算値の近い方の2の倍数にラウンドアップもしくはダウンされるという法則があるからです。
 
ここでの注意はPG数=ディスク容量には必ずしもならない点です。なので1:2という割合は目安だと思ってください。
 
つまり、おおまかに全ディスク容量の70%ぐらいしかCinder用に使えないということです。
このため、825*0.7=577TBがCinder用のvolumes領域です。
 
実際には RAW USED/%USED * 100 = 637TB がCinder用の領域となり、全体の 76%となります。
 
このうち90.56%がCinder用に既に使用されているというわけです。
 
このPODでは、Glanceのイメージは殆ど使われておらず、Cinderのボリューム領域を中心に使用しているようです。
 
このため、CEPH_PG_INFO の値をデフォルトの Cinder:Glance=60:40 ではなく、90:10 といった極端な値にするべきです。
こちらの値は残念ながらインストール後に変更することはできないため、POD全体をインストールし直す必要があります。
使用するPODの目的に応じてインストール前に CEPH_PG_INFO の値を考慮する必要があります。
 
 

MAX AVAILの解釈

 
MAX AVAILの値を確認すると、images/volumes の両方とも20.1TiBとなってます。
それぞれのPoolのサイズがインストール時に決定され、images については使用率が0.76%であるため、この値が両方とも同じ値になるのはおかしい、imagesについてはもっと使えるはずではないのか?と思われるかもしれません。
MAX AVAIL についてはあとどれくらいの容量を使うとOSDに対する書き込みができなくなるか、という値です。
この値は、各OSDの一番容量が少ない値を元に計算されます。
このため、OSD のディスク使用率がある一定の閾値に達するとそこに配置されているPGはPoolに関係なしに書き込みできなくなるため、今回のケースでは Poolに関係なくMAX AVAILの値は共通となります。
つまり、今の状態はあと20TiBほどデータの書き込みが発生すると、すべてのクライアントからの書き込みがブロックされる可能性があります。
 
 
 

OSD_NEARFULLの原因

 
CVIMでは以下のCephパラメーターが設定されてます。
 
mon_osd_full_ratio = 0.950000
mon_osd_nearfull_ratio = 0.850000
これは、OSDのディスク使用率が85%に達するとWarningが発生し、95%に達するとそれ以上の書き込みができなくなるという設定です。
 
以下は、各OSDのディスク使用率が高いものからSortした結果です。
 
cephmon_19767 [ceph@controller1 /]$ ceph osd df|sort -nrk8|head -10
195   hdd 2.18309  1.00000 2.18TiB 1.94TiB  250GiB 88.83 1.25 218
58   hdd 2.18309  1.00000 2.18TiB 1.89TiB  296GiB 86.74 1.22 218
206   hdd 2.18309  1.00000 2.18TiB 1.88TiB  306GiB 86.30 1.22 227
205   hdd 2.18309  1.00000 2.18TiB 1.86TiB  332GiB 85.13 1.20 228
73   hdd 2.18309  1.00000 2.18TiB 1.86TiB  333GiB 85.12 1.20 220
296   hdd 2.18309  1.00000 2.18TiB 1.86TiB  333GiB 85.11 1.20 215
31   hdd 2.18309  1.00000 2.18TiB 1.86TiB  336GiB 84.99 1.20 225
293   hdd 2.18309  1.00000 2.18TiB 1.83TiB  358GiB 83.99 1.18 224
121   hdd 2.18309  1.00000 2.18TiB 1.82TiB  368GiB 83.54 1.18 214
366   hdd 2.18309  1.00000 2.18TiB 1.80TiB  395GiB 82.35 1.16 216
 
今回で言えば、いくつかのOSDが85%以上の使用率となっておりを使用しており、これが OSD_NEARFULL の原因となってます。
 
 

解決方法

 
以上を踏まえるといくつかの解決策が考えられます。
 
1. 使用してない Cinder volumeを削除する
こうしている間にもどんどんCephの使用率は上がっていっています。
使用してない、Cinder Volume を削除します。
 
2. Storage Volumeを追加する
新たなStorageノードを用意した上で、CVIM コマンドの "ciscovim add-storage" コマンドでPODに追加します。
 
3. CEPH_PG_INFO の値を見直す
上記で説明した CEPH_PG_INFO の値を見直して、images pool の割合を減らし、volumes pool の割合を増やします。
ただしこちらは再インストールを実施する必要があります。
 
 
Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします