s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

本番稼働環境におけるDRBDのDISKのresizeが遅い問題について

現在運用しているMySQLサーバはDRBDによってDISKの冗長構成をとっている。
また、DRBDのデバイスはLVMのLV上に構築しているので、
LVのサイズを拡張すればDRBDのリサイズ(drbdadm resize)で容量の拡張ができるようになっている。

今回の問題は本番稼働しているクラスタでDRBDデバイスのリサイズをした時に、
完了までに異様に時間がかかってしまう状態になってしまうことがあったことについて。

  • 対象の環境
OS: Scientific Linux release 6.4 (Carbon)
DRBD: 8.4.4

具体的には

# cat /proc/drbd
.. snip ..
speed: XXX (XXX) K/sec

の数字が250K/sec前後(開発環境では20,000K/secほど出る)となっている状態。

いろいろ調べてみると、DRBD8.4からデフォルトで有効になった、
sync rate controllerがキャップをかけている状態の模様。
http://blogs.linbit.com/p/128/drbd-sync-rate-controller/

DRBDでは通常の同期(normal replication)と再同期(resynchronization)は区別されていて、
今回のresizeは再同期として扱われる。

この機能は再同期が通常の同期の邪魔をしないように
再同期のスピードに制限をかけているらしい。
開発環境では通常の同期がそれほどの負荷になっていないため、このキャップがかかっていなかったと思われる。

以下のコマンドで一時的にキャップされる値の設定を変更して対応。
設定する値は要調整。この数字だと2,000K/secくらいにはなった。

# drbdadm disk-options --c-min-rate=1M <resource>
# drbdadm disk-options --c-fill-target=200k <resource>

注意する点としてはc-min-rateの設定は''Secondary側(同期される側)''で変更しないと効かない模様。
https://cybozu.atlassian.net/wiki/pages/viewpage.action?pageId=5701634

尚、デフォルトの値はここに記載されている。
http://drbd.linbit.com/users-guide-8.4/s-recent-changes-defaults.html

設定がうまくいっているかは以下のコマンドで確認

# drbdsetup <resource> show

リサイズ完了後元の設定(設定ファイル通りの設定)に戻すのはこのコマンド

# drbdadm adjust <resource>