SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

LINEのMySQL運用事例から、ベンダーを超えて語るクラウド開発導入のポイントまで「Oracle Developer Days」基調講演

  • このエントリーをはてなブックマークに追加

 2020年12月17日から2日間、日本オラクルはデータベースをはじめ最新テクノロジーを紹介する「Oracle Developer Days」をオンラインで開催した。初日の基調講演はLINEの大塚知亮氏がMySQL運用の現状を紹介し、2日目は日本オラクル 野中恭大郎氏と大橋雅人氏、さらに日本IBM 萩野たいじ氏に日本マイクロソフト 廣瀬一海氏を招き、クラウド開発をテーマにパネルディスカッションを開催した。

  • このエントリーをはてなブックマークに追加

4000ものインスタンスを処理するLINEのMySQL運用の裏側

 Oracle Developer Days初日の基調講演ではLINE 大塚知亮氏が同社におけるMySQLの運用について解説した。なお大塚氏は2016年にLINEの夏季インターンシップに参加し、アルバイトを経て2018年にLINEに入社した。好きなMySQLの機能は準同期レプリケーションで「binlogを眺めるのが好き」と言うほどのMySQL好き。

LINE IT Service Center Database dept, DB1 team 大塚知亮氏

LINE IT Service Center Database dept, DB1 team 大塚知亮氏

 大塚氏が所属するのはLINEのサービス開発に必要なデータベースの運用業務全般を担うデータベース室(Database dept)。スキーマやACLなどの管理から、大きなサービスになるとレプリケーショントポロジを考案し、遅いクエリが出たらチューニング、新機能やバグの調査、そして後述する運用システムの開発も行う。

 LINEのデータベース室では主に、Webアプリケーション系であればMySQLやRedis、MongoDB、FinTech系ならOracle DatabaseやMicrosoft SQLServer、分析系ならHBaseやCUBRIDをサポートしている。2011年に部署がスタートした当初、データベースはMySQLも含め4種類だったが、社内の要望に応じて種類を増やしていき、2017年からプライベートクラウドに乗せるように運用を開始。さらに2020年にはプラットフォームを刷新した。

 データベースのインスタンスを作るなど、LINE社内の開発者がデータベースを使いたい時は、プライベートクラウド「Verda」のWeb UIから操作する。また変更により可用性に影響が生じ得る操作(スキーマ変更やトポロジ変更など)はデータベース室に依頼する。

 現在、LINEではMySQLのインスタンスは約4000ある。内訳は、最新バージョンとなる8.0が16%、5.7が57%、EOLが迫っている5.6が21%。絶賛アップグレード中だ。2017年からはインスタンスタイプの標準化や統一を行い、構築作業の自動化も進んできたものの、インスタンス数の急増もあり、マイグレーション作業やアラート対応に追われていた。

 そこで2020年からはMySQL運用システムを刷新し、開発者がセルフマネジメントできるようにした。MySQL運用の柱となるのが「GlenDB」、Verdaの新しいコンポーネントとしてHA構成システムも独自にスクラッチから開発した。APIを通じてMySQLのインスタンス作成などを自動化する。

 GlenDBの構成と流れを追ってみよう。開発者がVerdaのUIからMySQLサービスをリクエストすると、内部のAPIを通じ、VMの構築やMySQLのインストール、さらにレプリケーション構成まで構築する。これをHAマネージャーとなるGlenHAに登録し、DNSやロードバランサーを設定する。ログファイルはElasticsearchとKibanaで確認し、PrometheusによるDBONEモニタリングシステムからメトリクスを管理する。

 オペレーションコストの削減のためにGlenDBで実装された機能の一つがオートヒーリング機能。GlenHAが5秒おきに死活監視して、3回連続で失敗すると「故障」と判断し、必要に応じてフェイルオーバー処理を進める。具体的にはレプリケーショントポロジ変更、プライマリ昇格、DNSやロードバランサー設定変更など。「故障」したサーバが短時間で復旧した場合は復旧後の状況を確認し、レプリケーショントポロジに再度追加する。一定時間を過ぎても復旧しない場合は、新しいインスタンスにバックアップからリストアすることでトポロジを復旧する。

 下記はLINE社内の開発者が目にするVerdaのUIサンプル画面だ。画面右の「Action」からフェイルオーバーやインスタンスのリスタートなど、セルフマネジメントできる。

LINE社内の開発者が使うVerdaのUIサンプル画面

LINE社内の開発者が使うVerdaのUIサンプル画面

 稼働させているMySQLを最新版にするメジャーバージョンアップも重要な課題だ。LINEではメジャーバージョンをまたぐアップグレードを、新しいバージョンでの新規作成、データとACLのリストア、クエリのデグレード確認、新旧環境をまたぐレプリケーションの設定、フェイルオーバーによる切り替えという手順で行っている。

 この作業を大量のインスタンスに対して行うため、同室ではマイグレーション作業を自動化するためのツール「MUH(MySQL Upgrade Helper)」を開発した。これはOSSや内製ツールを組み合わせたもので、移行先MySQL作成はVerdaのUIから行えば、データ移行やACL移行からレプリケーション設定までをWeb画面から完了できる。

 なお上記の方法で8.0へのアップグレードした際、ちょっとした問題に直面した。現象としては文字列の比較やソート順に関する照合順序(COLLATION)の設定が変わってしまったのだ。これは5.7と8.0でデフォルト値が変わったため、テーブルを新規作成してデータを移行するとこの値が変わってしまったのだ。8.0への移行時には、新規作成時に設定するか移行後に値を変更するなど、適切な設定になるように注意が必要だ。

 ほかにもデータベース室ではオペレーションを支えるツールとしてMQR(MySQL Query Replayer)やmyStatusgoなどを開発してGitHubで公開している。前者はネットワークパケットからクエリを抽出し、別のMySQLにクエリを再現することでデグレードを確認するもので、後者はインスタンス情報を1秒間隔で表示するMySQL版topコマンドとなる。

 こうしてLINEのデータベース室では運用管理を効率化するためのツールを開発しながら、少人数で膨大なデータベースを運用している。今後もさらに低コストで運用するためのシステムや自律的なシステムの開発を続けていくそうだ。

次のページ
ベンダーを超えて本音で語る、クラウド開発導入成功のポイント

関連リンク

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

加山 恵美(カヤマ エミ)

フリーランスライター。茨城大学理学部卒。金融機関のシステム子会社でシステムエンジニアを経験した後にIT系のライターとして独立。エンジニア視点で記事を提供していきたい。EnterpriseZine/DB Onlineの取材・記事や、EnterpriseZine/Security Onlineキュレーターも担当しています。Webサイト:http://emiekayama.net

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/13446 2021/01/22 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング