国内大手メディア企業における MySQL Cluster 導入事例 - MySQLカンファレンス2007

http://www.mysql-ucj2007.jp/details/j21.html

MySQL Clusterとは?

  • 4.1から標準で利用できるようになっている
  • 高可溶性を目的としている
  • 共有ディスクを必要としない
  • RAIDの0/1をイメージしてもらえばいい
  • 現在はUnix/Linux系のみ対応
  • データ処理を複数ノードで分割
  • データは全ノードで同期

クラスタ構成案

MySQL+DRBD

  • 今、MySQL社がイチオシ
  • Linux用のノード間データコピー
  • MySQL社が作ってるわけじゃないけど
  • Heartbeatなどクラスタリングツールと併用
  • 共有ディスクが不要なActive/Standby構成

3rdベンダ製HAソフト利用

  • 共有ディスクにデータを格納
  • たとえばLifekeeper

MySQL Cluster

  • オンメモリDBの内容を双方向コピー
  • MySQLの標準機能
  • 共有ディスクが不要なActive/Active
  • オンメモリデータベースとして動作し、データは完全同期

MySQLアーキテクチャ概要

  • 接続管理/セキュリティ -> パーサ、オプティマイザ、実行、キャッシュ -> ストレージエンジン
  • データ管理機能のストレージエンジンを選択可能
    • クラスタもエンジンの一つ"ndbcluster"として実装

SQL層とデータ層の分離

事例:某メディア企業 情報サイト

記事データ管理データベース
  • DBはPCサーバ2ノード構成
  • MySQLサーバとデータノードが同居
    • 簡易構成ながら冗長性を確保
    • 参照系データはMySQLサーバ上のMyISAM
    • 更新系データはデータノード(ndbcluster)
  • システムの特徴
    • 参照が大半 コメント書き込みの更新あり
    • クエリはシンプル
    • 企業ブランドにとってクリティカルなシステム

システム構成概要

  • ロードバランサ/Webサーバにより、APサーバへのアクセスを制御し、DBの負荷を分散
  • APサーバからはConnector/Jのフェールオーバー機能を利用して耐障害性を確保
  • DBサーバはPCサーバ2台、共有ディスクは無し
  • オンラインで更新されるデータは、NDBDプロセス上のテーブルに配置
  • 参照のみのデータは書くサーバのMysqldプロセス上のMyISAMテーブルに配置
  • ...

APサーバ障害の場合

MySQLサーバ障害の場合

データノード(ndbdプロセス)障害の場合

MySQL Cluster導入メリット

  • コストメリット
    • 外部ストレージ不要 (50万円前後以上)
    • クラスタソフトウェア不要(50万円前後以上)
    • 外部ストレージありの場合、障害発生の可能性がある箇所が増加し設計、テストの工数が増加。外部ストレージの冗長化構成が必要なケースも
  • 設計の横展開可能
    • シンプルな構成なので他システムでも利用可
  • スケールアウト構成
    • 必要な箇所だけサーバを塚することで、柔軟なシステム拡張が可能。ただし、データノードの追加時は要検証。

MySQL Clusterで大変だったこと

  • ソフトウェア品質は要改善
  • 複数の致命的なバグ(signal 11発生など)に直面
  • その後のバージョンでは改善傾向
    • Bug #25668 (mysqldダウン) 5.0.36にて修正
    • Bug #26176 (Signal11発生) ...
    • ...
  • パフォーマンス
    • WHERE句つきのSELECT文が遅いことがある
      • INDEX無しのカラムを検索すると遅い
      • engine_condition_pushdouwn=ON で改善
    • JOINの多いSQL文で性能問題
      • 使用上の制限。一部のクエリを修正して回避
    • パラメタチューニング(特にチェックポイント関連)が複雑
  • データ量の制限
    • オンメモリデータベースであるため、64bit版サーバの利用検討

まとめ

  • 安価で手軽に使えるクラスタソリューション
    • PCサーバとMySQLだけでOK
    • 2台でも十分な可用性
  • 広がる用途と可能性
    • アプリケーションの変更はほとんど不要
  • 技術サポートは有償で提供中

質疑応答

  • オンメモリからの書き込みのタイミングは?
    • ディスクにバイナリログで書き込まれているので、そこから復旧は可能
    • ときどき書き込み
    • もうちょっと検証が必要
  • システム電源が一気に落ちたときはどうなる?
    • やってみましょう(笑)
  • 同時更新の制御は?
  • データ量の限界は?
    • そんなに大きなデータで検証はしてない
    • テスト上一番大きいときで4GBでした
  • インターネット上でMySQL Clusterをセットアップした経験はあるか?
    • やってない
    • 現在、それは想定して作られていないと思われる