OrchestratorをつかったMySQLの冗長構成の実現

技術本部 サービスリライアビリティグループ(SRG)の鬼海(@fat47)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事は、SRG 内にある DBWG(DBワーキンググループ)が全社内向けに提供しているデータベースに関する資料を公開します。
なにかの役に立てば幸いです。
 

はじめに


MySQLをレプリケーション構成で利用する際、ソース(マスター)DBが何かしらの障害でダウンした時の冗長性について考える必要があります。
ダウンを検知してレプリカ(スレーブ)が自動昇格する仕組みを実現する必要があるのですが、
昔からよくMySQL MHAが利用されてきました。
MHAも現役で利用されているものではありますが、MySQL MHA 0.58(2018年リリース)を最後にリリースはされていない状態です。
そこでMySQL MHAと同様の機能を実現でき、定期的にリリースがなされているOrchestratorをご紹介させていただきます。
 

Orchestratorとは


MySQLの高可用性およびレプリケーション構成を管理するツールで、レプリケーションのビジュアライズやスレーブの付け替え、自動フェイルオーバーなどの機能があります。
Shlomi Noach氏が開発しており、GithubやBooking.comでも利用されているプロダクトになります。
 
MySQL MHAと比較したときに以下のような優位性があります。
  • GUIで視覚的にレプリケーションの状態確認やフェイルオーバーの実行ができる
  • DB側にMHA nodeのようなAgentが不要
  • ソース(マスター)を登録するだけで管理対象を自動追加
  • GUIに加えてCLIやHTTP APIがある
  • フェイルオーバー発生後に再設定が不要。MHAは再度プロセスを立ち上げる必要があった
 

Orchestratorのセットアップ


検証用環境

ホスト名役割
DB1DBソース
DB2DBレプリカ
DB3DBレプリカ
Orc-admOrchesrator管理サーバ

Orc-adm(管理サーバ)で作業

Orchestratorのインストール
インストールスクリプトの実行
 
もしくは手動でこのように入れることも可能です。
 
管理用MySQLのインストール
OrchestratorではバックエンドのMySQLかSQLiteが必要です。
このバックエンドも冗長化することができますが、ここでは単構成にします。
冗長化について詳しくは公式docを参照ください。
 
管理用MySQLにOrchestraorが使うスキーマとユーザを作成
 
Orchestrator設定ファイル作成
以下の項目を編集します
 
PostMasterFailoverProcessesはフェイルオーバーが発生するときにキックされるスクリプトです。ここでマスターのIPを切り替える処理を記述します。
サンプルとして以下を掲示します。
ただIPをつけ外ししているだけのスクリプトです。
 

管理対象のDBサーバで作業

管理対象となるDB1,DB2,DB3でそれぞれ作業をしてきます。
DB1をソースとして、DB2,DB3をレプリカでレプリケーションを設定しておいてください。
このとき、レプリカが昇格できるようにの有効化は必須となります。
GTIDは有効でも無効でもどちらでも対応可能です。
 
つづいて、Orchestraratorから監視できるMySQLユーザを作成します。
ソース(DB1)でクエリを実行します。
 

Orc-adm(管理サーバ)で作業

Orchestratorを起動します。
 

管理GUIでクラスターの登録作業

CLIでクラスターを追加することもできますが、せっかくなのでGUIを使ってみます。
起動が完了したらブラウザから以下のURLを開きます。
http://【Orc-admのIP】:3000
このようが画面が表示されたら、続いて管理するクラスターを登録します。
 
「Clusters」→「Discover」を選択します。
 
ソースDB(DB1)のIPアドレスとMySQLポートの番号を入力し、「Submit」を押します。
 
登録できたら、「Clusters」→「Dashboard」でダッシュボードに戻ります。
 
すると、先ほど登録したDB1と、それに紐づくレプリカのDB2,DB3が表示されました。
 
これでOrchesratorのセットアップは完了です。
このあとはフェイルオーバーが実際に成功できるかなどを検証しましょう。
 

終わりに


MySQLの利用は冗長性を担保した構成を考えることが必須となります。
このOrchestratorはバックエンドにMySQLが必要だったり、複雑な機能も多数備わっているので、導入時は少し大変かもしれませんが、シンプルに使う分にはMHAとさほど手間は変わらないと思うので積極的に利用していきたいです。
今回紹介したMHAやOrchesratorの他にも、MySQL公式で利用できるInnoDB Clusterという仕組みもあるので、いつかご紹介できたらと思います。
 
SRG では一緒に働く仲間を募集しています。 ご興味ありましたらぜひこちらからご連絡ください。
 
このエントリーをはてなブックマークに追加