GitHubのエンジニアが語る!MySQL5.7→8.0へのサービス無停止アップグレードの内幕 に参加しました。オンライン参加。簡単に所感をまとめます。
所感
これだけの規模の移行をサービス無停止でやってるのがすごいけど、最後にもっと早くに準備するべきだったと話しててやっぱり計画と準備が重要なんだなと思いました。逆方向のレプリケーションとか考えたこともなかった...。でもこういう取り組みによってサービス無停止が実現できるんだと思う。
いろいろ話に付いていけてないところもあったので資料とか公開されたら見直してみよう。
関連記事。
以下、メモから抜粋。
MySQL 8 Upgrade at GitHub
- 秒間500~800万リクエスト
- 300+ TB
- 100+ クラスタ
- 1500+ MySQLインスタンス
- github.com
- 数千インスタンス
- 開発/staging/production
- 縦方向/横方向のパーティショニング
- ProxySQL
- Vanilla
- GitHub Enterprise
- Azure
- 要件
- MySQL 8.0 の変数/設定をすべて確認
- 非推奨機能が使われていないか
- コードベースは両バージョンで動くか
- CI
- テストがすべて通るか
- インプレースアップグレード
- 5.7→8.0
- トラフィックを流してみる
- 問題や性能劣化がないか
- トポロジー
- 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
- 準備をもっと早く
- クラスタ管理部分の自動化をしたい