今回のブログでは、MySQL InnoDB Cluster と Amazon Aurora MySQL の両者の HA 構成を紹介したいと思います。
MySQL InnoDB Cluster と Amazon Aurora MySQL
MySQL InnoDB Cluster は Oracle 社より2017年4月に GA リリースされた MySQL の新しい高可用性ソリューションです。
また、Amazon Aurora MySQL は AWS がクラウド時代に再設計した RDBMS として提供している MySQL 互換の DBaaS サービスです。
アーキテクチャ 概要
MySQL InnoDB Cluster
MySQL InnoDB Cluster は MySQL の新しいレプリケーション構成機能となる Group Replication を使用しています。Group Replication では、シングルプライマリモードとマルチプライマリモードが構成可能です。マルチプライマリモードでは、Write クエリが全てのノードに対して実行可能な Active-Active な構成が可能で、トランザクションが競合する場合は Commit 先勝ちになります。この仕組みは Paxos アルゴリズムをベースとした XCOM によって実装されています。
Group Replication は最小構成として3ノードが推奨です。また、Group Relication 自体に自動的な障害ノード検知や自動フェールオーバーの機能が実装されています。その為、シングルプライマリモードでプライマリが障害発生した場合は、自動的に別ノードがプライマリに昇格します。また、マルチプライマリモードでは従来の MySQL レプリケーション構成の Master (Write可) が停止した場合でも、ダウンタイム無しで MySQL の動作が継続可能になります。
MySQL InnoDB Cluster は Group Replication に MySQL Router と MySQL Shell が含まれた1つのパッケージ製品となっています。MySQL Router は、プロキシとして動作し Group Replication の Write/Read クエリを振り分け、クライアントからの接続エンドポイントとなります。また、MySQL Shell は、Python と Javascript による Admin API を提供しており、Group Replication の構築や管理が容易になります。
Amazon Aurora MySQL
Amazon Aurora MySQL は MySQL5.6 をベースに、AWS が独自に開発・提供しているデータベースサービスです。
Amazon Aurora は MySQL のレプリケーション機能ではなく、Multi-AZ に展開されている Aurora ストレージのレイヤーでデータ複製などを行っています。その為、従来の MySQL レプリケーションとは異なり分散型共有ストレージのシェアード・エブリシングのアーキテクチャです。この Aurora ストレージは、Log-Structured 型でデータを扱っています。そして、ストレージレイヤー側の Qurum モデルによって、整合性や可用性を担保しています。
Aurora は一つの Writer ノードと最大で15の Reader ノードを構成可能になっています。(re:Invent2017 で Aurora の Multi-Master が発表され preview 版が使用可能です。よって、Aurora でも Multi-Master の対応が予定されています。)また、Writer ノードの障害発生時には AWS 側で自動的にフェールオーバーを実行します。アプリケーション側からはクラスタエンドポイント、及び読み取りエンドポイントに接続する事で Read/Write の振り分けを行っています。
簡単になりましたが、MySQL InnoDB Clusterと Amazon Aurora MySQL の概要については以上です。