GitHubのエンジニアが語る!MySQL5.7→8.0へのサービス無停止アップグレードの内幕 に行ってきた #GitHub_findy

GitHubのエンジニアが語る!MySQL5.7→8.0へのサービス無停止アップグレードの内幕 に参加しました。オンライン参加。簡単に所感をまとめます。

findy.connpass.com

所感

これだけの規模の移行をサービス無停止でやってるのがすごいけど、最後にもっと早くに準備するべきだったと話しててやっぱり計画と準備が重要なんだなと思いました。逆方向のレプリケーションとか考えたこともなかった...。でもこういう取り組みによってサービス無停止が実現できるんだと思う。

いろいろ話に付いていけてないところもあったので資料とか公開されたら見直してみよう。

関連記事。

github.blog

www.itmedia.co.jp

以下、メモから抜粋。

MySQL 8 Upgrade at GitHub

  • 秒間500~800万リクエス
  • 300+ TB
  • 100+ クラスタ
  • 1500+ MySQLインスタンス
  • github.com
  • 縦方向/横方向のパーティショニング
  • ProxySQL
  • Vanilla
  • GitHub Enterprise
  • Azure
  • 要件
  • MySQL 8.0 の変数/設定をすべて確認
  • 非推奨機能が使われていないか
  • コードベースは両バージョンで動くか
    • CI
    • テストがすべて通るか
  • インプレースアップグレード
  • トポロジー
    • 5.7 → 8.0 → 5.7/8.0
  • プライマリをアップグレード
    • 5.7から8.0に切り替える
  • デフォルトの文字セット照合順序 (COLLATION)
  • 権限
    • Puppet
    • 誤ったロールが作成される?
  • レプリケーション遅延
    • レプリカのタイムスタンプを保存して監視している
    • 20ms (5.7) → 100~150ms (8.0)
    • datadog プラグインの問題?
  • I/O増
    • fsync
  • 実行計画
    • Large IN
    • 5.7 では statistics で止まる?
    • 8.0 だとオプティマイザがクラッシュする
  • 自動化
    • フェイルオーバー自動化
    • Orchestrator
      • 旧バージョンへのフェイルオーバーもできるように
  • Vitess
  • VTGate
  • 準備をもっと早く
  • クラスタ管理部分の自動化をしたい