トランザクション数の多いDBサーバーのディスク構成について
IOPSが高い値を維持でき、ある程度コストを抑えたDBサーバーのディスク構成を考えてみる。RAIDカードを全てのスレーブに置くというのは価格がかかりすぎること、SSDが安くかえるようになったことを考えると、以下のような構成が、そこそこの価格でIOPSを稼ぐための構成だと考える。
DBサーバーの構成
- マスターDBのサーバー
- スレーブDBサーバー
マスターについては、(RAID+BBWC) + SSD、(RAID+BBWC)+HDDで、ライトのIOPSと運用体制によっていずれかを選ぶ。また、トランザクション数が極端に大きくなく、定常的にトランザクション数が多いという状態でなければ、RAID+BBWCとHDDでの運用でよい。
SSDの運用について
SSDを使う場合には、HDDと違う運用の検討が必要になってくるので、その点注意が必要である。注意点だけでなく、それを考慮した運用が行える体制があるかが、導入上大きなポイントになる。
FusionIO/tachIOn の使用について
- FusionIO, tachIOnが数万のIOPSが出ることを考えると、書き込みするデータ量が多くなければ、オーダーとして書き込み回数が10倍以上多くてもよいわけで、DBサーバーを最大1/10程度にできる可能性はあり、それを考えると十分に検討の余地はありそう。
- トランザクション数が多く、導入しない場合に、台数が増えて、運用コストが初期のイニシャルコストを超える場合には、導入を検討する価値がある。ただし、本当の大規模サービスでなければ、それをペイできる環境ではないとは思う。
IOPS視点のディスクのプラニングについて
以下の2点を行い、IOPSの増加に対してどのようなプランをたてるかを検討することが重要。I/Oサブシステムの性能を意識しておくことで、どのくらいでI/Oが限界にくるかがわかるようになるからである。
- I/OサブシステムにおけるI/Oの性能を把握しておくこと(bonnie++やIOMeter)
- iostatのw/sとr/sの傾向を見て、IOPSの増加傾向を把握すること
- 特に、データファイルとログファイルのディスクが分離されていると、IOパターン毎のIO回数が把握しやすくなり、どのI/Oパターンに対して強化をしていくかが検討しやすくなる。
ディスクへのIO(特に回数)はネックになりやすく、これはMySQLやOracleといったDBだけでなく、他のミドル全般にいえる。従って、ディスクの性能状況については特に注意深くモニタリングし、問題の発生を事前に予見できるようにしておく必要がある。