Apr. 3 2012 OTN MySQL User Forum Tokyo MySQL Cluster/MySQL Enterpriseを 活用したフルマネージドホスティング サービス事例紹介 株式会社アルティネット 櫻田 剛史 [email protected] 弊社紹介 株式会社アルティネット http://www.ultinet.co.jp/ 1999年、埼玉・大宮市にて創 業、現在は東京・湯島にござ います SIerです! インフラ構築 アプリケーション開発 システム運用 LAMP環境を利用した、フルマ ネージドホスティングサービス を得意としています。 地図データ©2012 Google,ZENRIN 2 UltinetとMySQL(の歴史?) MySQL Version 3.22(1999年)からのお付き合いです。 その後~MySQL AB⇒Sun⇒Oracleといろいろ変遷ありま したが、一貫して使い続けています。 実は、前回のMySQLユーザーコンファレンス(2008年10 月31日)でも事例紹介をさせて頂きまして、本日はそれ の続編です。 3 フルマネージドホスティングサービス—ULTiDC 全く新規のシステムを構築する案件だけではなく、既存 のシステム(他のDCにあったり、オンプレミスであったり する)を丸ごと移設(引っ越し)、システムのリニューアル (リプレース)開発、インフラからアプリ部分まで全部の面 倒を見るのが得意。 老朽化したシステムをアプリケーション部分も含めて全 部リニューアルする提案をしています。 移行後環境をLAMPで統一することによって、コストを抑 え、高い品質のプロダクト・サービスとして提供。 MySQL DBはこのビジネスモデルの核となる重要な組 込みソフトウェアコンポーネントです。 4 フルマネージドホスティングサービス—ULTiDC ① まず、既存システムを丸ごと引っ越します アプリケーション ASP.NET (C#) IIS 丸ごと引っ越し SQL-Server Windows Server 既存システム ※他iDCもしくはオンプレミスで存在 5 ULTiDC(弊社のデータセンター) フルマネージドホスティングサービス—ULTiDC ② LAMP環境上でリニューアルします 既存システム (例:Windowsで構築されたシステム) アプリケーション リニューアル ASP.NET (C#) IIS SQL-Server Windows Server ULTiDC(弊社のデータセンター) 6 新システム アプリケーション (リニューアル版) PHP Apache MySQL RedHat Enterprise Linux(RHEL) フルマネージドホスティングサービス—ULTiDC 顧客側メリット 長年の増築開発でつぎはぎ だらけになって保守、運用コ ストが増大したシステムを最 適化できる。 自社でシステム運用担当を 抱えなくて済むことによるコス ト削減。 オンプレミスの場合、災害対 策(DR, BCP)対応のDCで安 定運用できる。 新システム アプリケーション (リニューアル版) PHP Apache MySQL RedHat Enterprise Linux(RHEL) ULTiDC(弊社のデータセンター) 7 フルマネージドホスティングサービス—ULTiDC 移行事例パターン OS Windows UNIX(Solaris, AIX, HP-UX) Linux DB SQL Server Oracle DB PostgreSQL MW Java(Weblogic) ASP.NET(C#,VB) Perl PHP リニューアル アプリケーション (リニューアル版) PHP Apache MySQL RedHat Enterprise Linux(RHEL) LAMPで統合 ※MySQL DBはこのビジネスモデルの核と なる重要な組込みソフトウェアコンポーネント 8 アジャイルソフトウェア開発 スクラム(SCRUM)開発手法 認定スクラムマスターが在籍 価値のあるソフトウェアを短いサイクル(スプリント)で、顧客に届け る仕組みを実践。 公開勉強会も開催してます アジャイルサムライ湯島道場 一緒に開発できる仲間を募集中です! 9 (ここから本題)本日ご紹介したい事 MySQL Clsuterに興味を持っている人向け MySQL Clusterの具体的な活用事例についてはあまりオープ ンになっていないので、できるだけ具体的な話(当初の期待、 実際の導入時の検討、実運用での苦労、思ったように行かな かった点、今にして思えば考慮すべき点、最新のv7.2検証結 果、今後への期待)をしたい。 商用版のMySQLってどういう意味があるの?って疑問 に感じている人向け 10 一般のユーザ、エンジニアのレベルでは、既にGPLでフリーに 公開されているMySQLに対してお金を払うことに疑問を感じて いる人も多い(僕自身がそうだった)。その中でユーザ視点で の率直なメリット、デメリットを例示して、今まさにモヤモヤ感を 抱いている皆様の判断の一助になれば幸い。 UltinetでのMySQL Cluster導入事例 V7.0.xで2年超の運用継続中 データベースシステムとしての信頼性は非常に高いもの と考えています。 データの喪失のような重大事象は発生なし 個別の事象を解説するのはいろいろと問題があるので、 そこから判明した隠れた仕様、限界と、教訓にフォーカス してご紹介致します。 11 MySQL Cluster導入のための 検討ポイント 12 MySQL Cluster導入検討のポイント(結論) (NDBが適したアプリケーション) NDBを高性能かつ、高可用性(HA)を実現する部品とし て組み込むための、設計、作りこみを前提とする業務シ ステム。 MySQL Enterprise(普通のMySQL)ほど、入れたらぱっと使え るという種類のものではないです(後述します)。 インメモリDBでかつ、トランザクションを使えるというメ リットを生かした、オンライン処理(OLTP)が主体となる システム 13 大量のデータをまとめて処理するバッチ処理は苦手(V7.2の AQLで改善が見られたようではあります) インメモリDBとしてのメリットは、現在は、SSDをベースとしたも のとのコストベネフィット評価をする必要があると思います。 普通のMySQLとの違い 普通のMySQLであれば1個DBを置けばOK 冗長構成のためにはMaster/Salveの構成が一般的 マスタで障害が発生した場合にはSlaveをMasterに昇格させるなどの処置が必要(もしくは、 Heartbeat/DRBDなどでActive/Standby構成を作っておくなどの方法も一般的) 規模が大きくなれば更新系だけであればSlaveをたくさん設置してスケールアウトできるが、 更新系はボトルネックとして残る 最小構成 冗長構成 MySQL DB MySQL DB (Master) 【よくあるActive/Standby構成】 ・READインテンシブなアプリであればSlaveをいっぱい つなげてスケールアウト ・Masterに障害が発生した場合には、自動引き継ぎの 仕組みが必要(MHAとか、ディスクレベルの冗長化(DRBD)とか) アクセス多 MySQL DB (Master) MySQL DB (Slave1) 14 MySQL DB (Slave) MySQL DB (Slave2) MySQL DB (Slave3) MySQL DB (Slave4) MySQL DB (Slave5) MySQL Cluster導入のメリット 高可用性 HA機能が、もともとシステム自体に備わっている (Slave⇒Master昇格操作などを作りこむ必要が無い) 切替が高速(障害検知~収束のための時間を含めても10秒 程度) 高性能 15 インメモリデータベースであるため、ディスクI/Oによる、 READ/WRITEボトルネックが原則発生しない(例外もあり、後 述します) SQLノードを追加することによって、比較的リニアな性能向上 が期待できる 各SQLノードはActive/Active構成のため、更新系も分散させる ことができる(考慮ポイントを後述します) MySQL Clusterを構成するコンポーネント 3種類あります MGMノード ・NDBの管理をするマネジメントノード ・HA構成のF/Oを制御している ・負荷は小さいデーモンなので、SQL ノードなどに同居させることが多い ・オンラインバックアップなど作業を行 うためのコマンドが提供されている MGM 16 DATAノード ・NDBのデータベース本体 ・インメモリDB、トランザクション有効 (分離レベルはREAD COMMITED) ・SQLは直接は解釈できない、専用の NDBAPIを使う DATA SQLノード ・MySQLのインターフェースを提供し、 SQLを解釈してNDBAPIを介してNDB とやり取りする ・要はストレージエンジンとしてNDBを 使えるMySQLと理解できる ・特性上、複数のSQLノードを起動して も更新できる(Active/Active構成、マル チマスタ) SQL MySQL Cluster構成検討 基本的な構成 Web server Web server Web server Web server Web server Web server L2 SW SQL アプリケーションレイヤー SQL/MGM 2号機 SQL/MGM 1号機 SQL MGM Web server データベースレイヤー MGM L2 SW 17 データー 1号機 データー 2号機 データー 3号機 データー 4号機 DATA DATA DATA DATA ノード構成のパターン検討 冗長構成 最小構成 SQL MGM DATA ミニマム構成だが、冗長性も 無いので商用環境には向かない。 SQL SQL DATA DATA MGM MGM 単一障害点(SPOF)を排除した 冗長構成の基本形(NW部分の検討は必要) データ量大 アクセス多 MGM MGM DATA SQL SQL DATA DATA DATA SQL SQL DATA DATA MGM MGM SQL SQL 保存するデータ量(件数)が大きくなった場合にはデータノードを アクセスピークに応じて性能を向上(スケールアウト)させるため 増やして対応できる。ただし、Secondary Index使用時の制約あり には、SQLノードを増やして対応する。 (後述します) 今となっては、この構成が最適なケースが多いかもしれない。 18 ノード構成のパターン検討 構成 タイプ MGM ノード SQL ノード DATA 説明 合計 ノード ノード数 弊社 実績 I 1 1 1 3 最小構成(冗長化無し) 試験・開発環境ならば使えるがそ れ以上の意味が無い II 2 2 2 6 単一障害点(SPOF)無しの冗長構成 (基本形) ○ III 2 2 4 8 保存するデータ量(件数)が大きく なった場合 ○ IV 2 4 2 8 アクセスピークに応じて処理性能を 向上させたい場合 ○ V 2 8 4 14 データ量と処理性能の両方に要求 レベルが高い大規模システム - VI 2 2 3 7 データノードの冗長化を2重ではな く、3重にした場合(レプリカ数3) - VII 2 2 6 10 データ量が多く、データノードを増 やして対応した場合(レプリカ数2) - ○ ※完全にPK(主キー)に帰着できるアプリにできないのであれば、データノードの数は最大でも4程度に止めた方が良い。 19 メリット1:高可用性(HA) データノードの障害を検知後、自動的にF/O 所要時間は最短で約2.0秒(以下実験のログ参照) 16時25分37秒 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 2012-03-23 20 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:37 16:25:38 16:25:38 16:25:38 16:25:38 16:25:38 16:25:38 16:25:38 16:25:38 16:25:38 16:25:41 16:25:41 16:25:41 16:26:23 16:26:44 [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] [MgmtSrvr] ALERT ALERT INFO ALERT INFO INFO INFO ALERT ALERT INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO INFO WARNING ----------------------------------- Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Node Mgmt Node Node2のNDB 3: Node 2 Disconnected 5: Node 2 Disconnected デーモンをkill 5: Communication to Node 2 closed 101: Node 2 Disconnected 5: Communication to Node 2 closed 3: Communication to Node 2 closed 4: Communication to Node 2 closed 4: Node 2 Disconnected 5: Arbitration check won - node group majority 5: President restarts arbitration thread [state=6] 4: Communication to Node 2 closed 5: GCP Take over started 5: Node 5 taking over as DICT master 5: LCP Take over started 5: ParticipatingDIH = 0000000000000000 5: ParticipatingLQH = 0000000000000000 5: m_LCP_COMPLETE_REP_Counter_DIH = [SignalCounter: m_count=0 0000000000000000] 5: m_LCP_COMPLETE_REP_Counter_LQH = [SignalCounter: m_count=0 0000000000000000] 5: m_LAST_LCP_FRAG_ORD = [SignalCounter: m_count=0 0000000000000000] 5: m_LCP_COMPLETE_REP_From_Master_Received = 1 5: LCP Take over completed (state = 4) 5: ParticipatingDIH = 0000000000000000 5: ParticipatingLQH = 0000000000000000 5: m_LCP_COMPLETE_REP_Counter_DIH = [SignalCounter: m_count=0 0000000000000000] 5: m_LCP_COMPLETE_REP_Counter_LQH = [SignalCounter: m_count=0 0000000000000000] 5: m_LAST_LCP_FRAG_ORD = [SignalCounter: m_count=0 0000000000000000] 5: m_LCP_COMPLETE_REP_From_Master_Received = 1 16時25分38秒 5: GCP Take over completed F/O完了 5: kk: 31025252/3 0 0 5: Communication to Node 2 opened 4: Communication to Node 2 opened 3: Communication to Node 2 opened server state: nodeid 2 reserved for ip 172.16.11.151, m_reserved_nodes 2, 21, 22, 23, 24, 25 and 101. 5: Releasing node id allocation for node 2 HA構築時の考慮事項 MGMノード障害 SQLノード障害 MGMデーモンを複数台起動して、DATAノード側から両方参照(connect-strings で2個設定)しておけば、自動的にF/Oされます(但し、configファイルの自動同期 はうまく動かないです)。 MGMノードはNDBのメンテナンス、DATAノード、SQLノード障害発生時の自動 F/Oを行うために必要なものなので、Active/Standby構成も有りです(他のノード で障害が発生した時に存在していれば問題がないため)が、多重障害が発生 すれば当然システムが全断します。 切り離しはNDB側で制御されますが、アプリケーション側でF/Oの切り替えを作 り込んでおく必要があります。 高負荷対策としてautoincremt-prefechを有効にしている場合、一時的にばらつ きが発生するので、その場合でも問題が出ないようにアプリを作っておく必要 があります。 DATAノード障害 21 自動的にNDBのF/O機能が動きます。 障害発生時のクエリ・トランザクションはSQLノードより、エラーとして返却されま すので、適切なエラーハンドリング、リトライ(リカバリ)処理はアプリ側で作り込 みましょう メリット2:高性能インメモリDB 主キー(PK)でのランダムREAD(SELECT)性能試験を実施 該当のテーブルには数千万件のデータが存在する状態 60000 50000 40000 30000 1 Instance Throughput(TPS) 3 Instances Throughput(TPS) 20000 10000 0 0 50 100 150 並列数 22 200 250 300 高性能DBとして扱うためのポイント スキーマの全面的な見直しは必須 InnoDBの時と同じスキーマのままMySQL Clusterにマイグ レーションしても高い性能は享受できません。 (スキーマ・アプリ側のポイント) 23 可能な限り主キー(PK)に帰着させること 主キー(PK)に帰着が難しい場合も、ユニークインデックスを使 える場合はある程度性能が出るが、並列限界値、長時間ロッ ク多発の原因になるので注意が必要。 セカンダリインデックスはできるだけ使わないようにすること。 (並列処理は限界値が非常に低い、V7.2で改善あり) その他、利用上の要考慮ポイント GCP Stopを回避 GCP Stopが発生すると、データノードがダウン(再起動にデー タ件数・インデックス個数が多いと長時間(1時間~2時間)か かる)してしまうので、なるべく発生しないようにアプリ側での 作り込みが必要。 GCP Stopが発生する原因の一つとして、一度に大量のデータ 行数をCOMMITする際に設定閾値を超過すると発生してしま う。更新系(UPDATE/DELETE)クエリにおいてWHERE節での 指定には注意が必要(あらかじめ、最大に対象となる行数が 決まることが必須)。 JOINをなるべく避ける 24 JOINが苦手なので、バッチ処理等で大量の行を結合すること は避けるべき(V7.2 新機能AQLで改善あり)。 ちょっとだけ Version 7.2性能検証 25 AQLによるJOIN性能の改善 MySQL Cluster(NDB)では、これまでJOINで性能が全然 出ませんでした… V7.2のAQLによる性能改善を検証してみました。 検証条件 結合テーブル数: 2 結果セット想定: 36,000件 結果 26 V7.0.x 12秒 V7.5.2 0.14秒 約85倍高速に!! ※社内のテストラボで試した結果 です。条件によっては速くならない こともあります。 SQLノード単体の性能向上 これまでは、同時並列的に大量のアクセスをかけると比 較的すぐに性能が劣化していました。 MySQL ClusterではSQLノードを増やすことで比較的リニ アにスケールアウトできていましたが、V7.2のSQLノード が最新のMySQL 5.5ベースになったことにより、SQLノー ド単体の同時並列処理数の限界値が伸びています。 ※社内のテストラボで試した結果 です。条件によっては速くならない こともあります。 27 SQLノード単体の性能向上(結果) 60000 スループット(TPS) 50000 40000 並列数を上げても性 能が劣化しない(V7.2) 30000 V7.2.5 V7.0.x 20000 10000 0 0 50 100 150 並列数 28 200 250 MySQL Cluster導入検討のポイント(まとめ) (NDBが適したアプリケーション) NDBを高性能かつ、高可用性(HA)を実現する部品とし て組み込むための、設計、作りこみを前提とする業務シ ステム。 インメモリDBでかつ、トランザクションを使えるというメ リットを生かした、オンライン処理(OLTP)が主体となる システム 29 大量のデータをまとめて処理するバッチ処理は苦手なので、 InnoDBエンジンと併用するなどの考慮が必要。 ユーザ視点から見た商用版MySQL ライセンスの優位性 30 ユーザ視点から見たMySQL商用版へのギモン (疑問1)Community(GPL)版がMySQL公式サイトからバ イナリを無料で入手できるのに、商用版を購入する必要 があるのか? (疑問2)RedHat Enterprise Linuxの公式パッケージにも MySQLがあるけれどもどちらを使う方が良い? (疑問3)MySQL Enterprise(InnoDB)は、もう相当枯れて いるんじゃないの?商用サポートが必要なケースってそ そうそう無いんじゃない? ※本疑問と回答は、Ultinetが非公式に調査し た結果であり、各メーカーの公式見解ではあ りません。 31 (回答1)商用版バイナリ利用の意義 GPLの適用を避けたい(組込み系のプロダクトなどで多 いニーズ)ということであれば、商用ライセンスは必須で す。 組込み目的であれば、年間サブスクリプション契約とは 別メニューであるOEMライセンス(ESL)契約が割安です。 Community版には一部、Enterprise版から落とされてい る機能(Thread pooling等)がありますので、それを使用し たい場合にはEnterprise版を使用しましょう。 (商用版のアドバンテージ) 32 24h7daysのテクニカルサポートが使えます(無制限、日本語は weekday daytimeのみ、それ以外の時間帯は英語)。 MySQL Enterprise Monitor(とQuery Analyzer)やEnterprise Backupなどの便利なツール群が提供されます。 (回答2)RHEL環境でのバイナリ選択検討 Oracle (標準提供されるバイナリ) Community(GPL)版 商用(Enterprise)版 最新版(5.5 GA)が提供中 RedHat 3/21リリース! Ver. 5.5.22 (標準提供されるバイナリ) RHEL5 MySQL V5.0.x(22~95) RHEL6 MySQL V5.1.x(47~61) いずれも(Community)GPL版がベース ※RHEL6向けのバイナリパッケージは現在提 供されていない(Generic Linux版を使用するこ とは可能)。 ※V5.0.xはOracle側では2011/11でEOL ※現在V5.5のパッケージは提供なし (サポート体制) 商用ライセンス(サブスクリプションなど)を購 入していれば、独自ビルドであってもサポート はしてくれます(但し、Oracle側で再現性が取 れない場合は限界あり)。 (サポート体制) 標準パッケージ群にはRedHatのメンテナー チームがRHEL OSのEOLまで確保される。 RedHatの標準パッケージもユーザの独自ビル ドとしての扱いでサポートしてくれます。 33 ※Oracle提供のパッケージ (Community/Enterprise版問わず)を使った場 合のサポート体制は無い。 (回答3)商用テクニカルサポートの意義 重大度(1~4)に応じた、サービスレベルが提供されます。 その場ですぐの解決が保障されるわけではないのですが、暫定回 避策(Workaround)の提示など、サポートの動きをしてくれます。 問題事象の原因究明と、再発防止策をサポートしてくれます 弊社の実績では、2年超で10数件くらいの問題事象が発生してい ます。 納得・解決するまで、とことん対応してくれるのもありがたい(やり取 りが100往復を超えているものあります。 InnoDBがらみの障害事象は尐ないですが、ゼロではないの で、やはりサポートがあるのは心強いです。 MySQL Clusterの方は、テクニカルサポート無しで運用をする のは不可能だったと思います。 34 MySQL商用サポートへの今後の期待(1) 安心・安全なバージョンアップへ 35 商用環境でのDBのバージョンアップは現状、マイナーバー ジョンであってもうっかり上げられないです(それが故の問題 を絶対に発生させたくないので)。 できれば、新、旧システムで全く同じ処理を実行させ、でしば らく並行稼働させて検証できるような仕組みがあるとありがた いです(レプリケーション(RBR)だと必ずしも検証にならないの で)。 MySQL商用サポートへの今後の期待(2) EOLをもっと長期に 36 業務システムでは、ソフトウェアのライフサイクルがどんどん 長くなっていますが、商用サポートの期限(EOL)が短いことが ネックになりそうです。 SIerとしてはEOLを迎える前にリプレース、マイグレーションの 提案を進めていますが、お客様によっては費用対効果により 提案しても受け入れられない事例もあります。 特に、組込みシステムでは一旦、完成して納入すると極力手 を触れない傾向もあるため、たとえばOSと同程度の期間メン テナンス、サポートを継続してもらえるとありがたいです。 UltinetによるMySQL Cluster導入支援サービス MySQL コンサルティング MySQLデータベース設計・開発・導入支援 MySQLデータベースチューニング URL http://www.ultinet.co.jp/mysql/ お問い合わせ・ご相談はこちらまで [email protected] 37
© Copyright 2024 Paperzz