自動化・省力化を目標に、既存のオンプレ版インフラをAWSに移行
現在ブロードリーフでは、大きく2つのBtoB向けサービス・インフラを提供している。Google Cloud Platform(GCP)上で新たに提供が開始されたクラウドネイティブのプロダクト「Maintenance.c」と、今回の移行の対象となった「ブロードリーフ.NSシリーズ」だ。
前者は、最新のクラウドインフラにふさわしくKubernetes を使用。スケールアウト可能なデータベースを提供しており、Linux ベースで動く。これに対して既存の「ブロードリーフ.NSシリーズ」は、VM・物理サーバーを使用したオンプレミスの構成で、データベースにはRDB を採用。OSはWindowsといった仕様だ。
左近充氏は、「今後は順次『Maintenance.c』に、お客さまやデータを移行させていくことになります。そこにエネルギーを集中するためには、既存の『.NSシリーズ』をできるだけ手のかからないインフラにリニューアルする必要がありました。そこで、Amazon Web Services(AWS)への全面的な移行を決めたのです」とねらいを語る。
早速同社では、パブリッククラウド移行の目的=「手のかからないインフラの実現」に向けて以下の6つの獲得目標を掲げた。
- ハードウェア管理/保守期限からの脱却
- OS/ミドルウェアの最新化
- Infrastructure as Codeによる自動化/属人化の排除
- バックアップ・リストア、クラスタ維持などの運用コスト削減
- 拡張性の向上
- TCO(Total Cost of Ownership)の削減
これらは新しいインフラの特徴であると同時に、オンプレミス時代のさまざまな課題を解決するカギでもあった。
移行先にAWSを選択した理由を左近充氏は、「以前、別件でサーバー移行の経験がありノウハウを持っていること。加えて、何より低コストで多くのマネージドサービスが用意されていること」だったと語る。また移行後のインフラの必須要件としては、「Infrastructure as Codeで管理する」「オートスケーリングを使用する」「マネージドサービス(Amazon RDS)を使用する」なども挙げられた。
「サーバーが落ちた時に、自動で復旧できる。またデータベース運用におけるパッチ適用やバックアップ、フェールオーバー、ストレージ拡張など、あらゆる面で『手のかからない』インフラ作りを考えました」(左近充氏)
移行するデータ規模は、ファイルサーバーが約1.5TB=1500万ファイル以上。データベース(Microsoft SQL Server)は複数で構成されており、合計で5TB以上に及ぶ。だが、この規模が当初は移行のネックになった。実際の移行シミュレーションを行ってみた結果、1TBを転送するのに40時間かかることがわかったのだ。一方「.NSシリーズ」はBtoBサービスであり、今回の移行作業も昼間のユーザーの業務にインパクトを与えないよう、原則として夜間にのみ行うことが義務づけられていた。
「そこで、大規模なデータベースについてはデータベースミラーリングを利用し、小規模なものはフルバック&リストア。そしてファイルは毎日、ファイルコピーソフトの『FastCopy』で同期する仕組みを考えて、制限時間内に収めるのに成功しました」(左近充氏)
「トラブルは祭り」と思って、進んで参加し成長のチャンスをつかもう
本番の移行作業は、アプリ開発とインフラの2チームが合同で行った。このため移行前の各種検証作業から本番移行まで、各プロセスでスムーズに共同作業を行うための工夫が凝らされた。そうした具体的な例のひとつが、「VMデプロイ パイプライン」だ。これは同社がソース管理に使っているGitLabを介してAWSにモジュールを配信する仕組みだ。これを使うことによって、デプロイ作業が標準化できたと左近充氏は言う。
「当社は開発チームが札幌・東京・福岡の各拠点にあり、これまでは作業手順なども統一されていませんでした。それを『VMデプロイ パイプライン』経由で行うことにより、どの拠点からでも、誰でも確実にデプロイできるようになり、属人化の排除が実現したのです」(左近充氏)
最大の山場である本番移行は、アクセス量がふだんの5分の1程度に減る、5月の大型連休中に行われた。作業を2グループに分け、5連休の初日2日に1日1グループずつ移行を実施。5日目まで挙動を見守り、連休明けから通常の運用に戻すスケジュールだ。
リハーサルを入念に繰り返したかいあって移行作業はスムーズに進み、早くも3日目には全員が「勝利を確信していた」。ところが4日目、突如問題が発生する。データベース(Amazon RDS)のCPU使用率が60%を超えていることがわかったのだ。
「Traceから特定のクエリでCPU使用率が上がっていることをつきとめて、いったんはRDSのスケールアップで13%程度まで抑え込んだのですが、6日目、再び使用率がどんどん上がってユーザーから繋がりづらいという問い合わせを多くいただきました」(左近充氏)
再度詳しく調査を行い、特定の実行プランの異常がCPU使用率の高いクエリの原因であることが判明。いったんは実行プランを過去のものに戻して事なきを得たが、クエリストアを用いての対応だけでは抑えきれなくなる。CPU使用率急上昇の「第2波」がやってきたのだ。
「調べてみると、CPU使用率を上げてしまう特殊なクエリが複数存在していました。ここから社内の有識者の意見も聞きながら、インフラ/アプリ開発チーム全員が『データベース健全化作戦』の約2か月にわたる深夜作業に突入していったのです」(左近充氏)
主な作業としては、(1)統計情報の更新(2)断片化の解消(3)実行プランの固定化が行われた。なお(3)についてはQiita「SQL Server で使用する実行プランを固定化する」に詳しく掲載されている。
昼夜逆転の状態で作業を続けること約2か月、全員の渾身の努力のかいあって作業はみごと完了。CPU使用率も30%程度に抑え込むことができたという。今回の一連の対応を通して得た知識や経験として、左近充氏は以下の3つを挙げる。
(1)データベースは移行前に身を清めておく必要がある
日常的にインデックスの断片化をチェックして、必要なら再構成しておく。
(2)あらゆるパターンのクエリを移行前に試す必要がある
今回は特殊なクエリで発生した障害だが、日頃からあらゆるパターンを試しておく。
(3)他チームとの協働を通じて専門外の知識を学びとる
アプリ開発チームとインフラチームが、互いに足りないことを学び、知識やノウハウを提供し合えた。また長期の共同作業を通じて、お互いに仲良くなれた。
これらの経験とノウハウをもとに、第2弾の移行=残りのサーバーの移行作業では特に大きな問題もなく、スムーズに完了できたという。
最後にまとめとして左近充氏は、今回の移行プロジェクトでは、まさに今回のデブサミのテーマでもある「ともにつくる」体験ができたと明かし、そうしたマインドを得るために必要な3つのポイントを挙げる。
- 機会は平等ではない=成長する機会は平等には訪れない。
- 大事なことは積極性=成長する機会を得るには、やはり積極性が必要。
- 一歩踏み出す勇気=トラブルが発生していたら、進んで手を貸そう。
自分から進んで機会を見つけていかないと、なかなか成長するのは難しい。左近充氏自身も、トラブルが起きているチームを見つけると積極的に声をかけに行くという。
「トラブル対応は『祭り』だと思って自分から踏み込んでいき、いろいろなチームで貢献すれば、社内でのプレゼンスもおのずと上がっていきます。皆さんもぜひ積極的にトラブルを体験して経験値を増やし、成長につなげていけるよう願っています」と、左近充氏は力強く会場にエールを送り、セッションを終えた。
お問い合わせ
株式会社ブロードリーフ