アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

「MySQL Cluster」とは

前提

弊社運営のサイトのうち、特定の時期にアクセスが集中するサイトがあるのでなんとか負荷を分散できないか調べたやつ。
結論から言うと不採用になりそうだがせっかくなので調べた内容を残しておく。

データベース(というかSQL)は大好物だが、サーバやネットワークにはクソ疎いので解釈とか間違ってる可能性アリ。

参考文献

氏のサイトにはいつも大変お世話になっているので、お布施代わりにうっかり自費購入。
ありがたやありがたや

そもそも「MySQL Cluster」とは

特徴

  • 単一障害点(SPOF)の無い構成を組むことができ、可用性が高い
  • 3つのノードで構成
    • ノードの種類
      • データノード:データを格納するノード
      • SQLノード:アプリから発行されたSQLを解析し、データノードとやりとりし応答を返すノード
      • 管理ノード:データノードとSQLノードを管理するノード
  • データをメモリ上に持っており、トランザクションを高速に処理できる
    • ハードウェアのスペックは高水準が求められる
    • データ量によってはメモリに展開しきれない模様
      • ディスク上に持つことも可能だが、デメリットが多い
        • 処理が遅くなる、OPTIMIZEが効かない…など
  • NoSQL(データノードへ直接アクセスする「NDB API」)でもアクセス可

ハードウェアの選び方等

  • 高可用性を求めるのであれば、マシンは最低でも3台必要
    • データノード×2と管理ノード×1をそれぞれ別マシンに割り当てるため
  • 全マシンで同じ種類のCPUを用いるのが望ましい
  • データノードはディスクやメモリが豊富に必要。CPUは高速なものを
  • SQLノードのメモリやディスクは多くなくてよいが、こちらもCPUは高速なものを
  • データノード同士やSQLノード同士で、マシンのスペックは統一しておいた方がよい
    • 最も遅いマシンがボトルネックになってしまうため、一台速くても意味がない
  • 管理ノードは低スペックでOK
  • 管理ノードやSQLノードは仮想環境上に構築してもよいが、データノードは非推奨

ネットワーク

  • MySQL Clusterが専用で利用するネットワークを準備する必要がある
    • データノード同士・データ/SQLノード間の通信では認証や暗号化を行わないため
      • 暗号化することも可能なようだが、当然その分遅くなる
  • 通信経路を冗長化しておくべき

MySQL(InnoDB)から移行するに当たって考慮する点

見たサイトとか

カジュアルにMySQL Clusterを使ってみよう
http://www.slideshare.net/nippondanji/mcct?next_slideshow=1

5分で作るMySQL Cluster環境
http://www.slideshare.net/yoyamasaki/5mysql-cluster

隙がなくなったMySQL Cluster 7.3登場!!これで勝つる。
http://nippondanji.blogspot.jp/2013/06/mysql-cluster-73.html

InnoDB を使用した MySQL Server と MySQL Cluster の比較
http://dev.mysql.com/doc/refman/5.6/ja/mysql-cluster-compared.html

「勉強会に行ってみた!」第4回「MySQL Cluster Casual Talks #2」
https://mynavi-agent.jp/it/geekroid/2014/07/mysql-cluster-casual-talks-2.html