CODT2021_エンタープライズ向け クラウドサービスにおける 大規模・商用環境での ホストOSバージョンアップ / CODT2021_Host OS version upgrades for enterprise cloud services in large-scale, commercial environments
2021年7月に Cloud Operator Days Tokyo 2021 で発表した「エンタープライズ向け クラウドサービスにおける 大規模・商用環境での ホストOSバージョンアップ」の講演資料です。
Update • Live-migration(LM) を使ってCPv1の空きホストを用意する ◦ 宛先は CPv1,CPv2 どちらでもよい ◦ NoisyなVMがいる場合などは時間がかかることもある ▪ もし autoconverge や post-copy が使えれば、よりスムーズに LMすることができる(かも • Ansibleをキックして、OSインストールからアプリの設定までノンストップで実現 ◦ およそ 30分で完了 CPv1 VM CPv1 VM VM ①LM to CPv1 CPv1 VM CPv2 VM ②VerUP to CPv2 CPv1 VM CPv2 VM VM VM ③LM to CPv2 方針 計画 ホストOS 背景 概要編 CPv2 v2 v2 v1 v1 v1 v1
Swap するバグ修正はある NIC User OS(Host) TAP むしろ今までがバグっていた • libvirt v3.9.0 (2017-11-02) Bugfixes(https://libvirt.org/news.html) ◦ Fix swapped interface statistics and QoS ▪ Due to internal implementation, reported statistics for some types of interfaces were swapped (RX appeared in TX and vice versa). Similarly, QoS was set in reversed way. • 主体がゲストOS の NIC からホスト OS の TAP へ変更 ◦ たしかに非直感的ではあったし、むしろなぜ我々は最初からホスト側を見なかったのか OS(Guest) Kernel 送信したぞ 受信したぞ 特定条件でLM失敗 Rx,Tx Swap ブートしないゲスト 問題編
◦ Windows VM ◦ かつてLMを実施されているVM ◦ LM後、一度も電源OFF/ONや、VM内 RebootがされていないVM • Windows VMでの状態遷移は右の通り • CPv1(LMed)はQEMUの内部変数を保持すること によって生じており、事前の検知は困難 バグ起因でLMを契機に新しい状態が出来ていた 特定条件でLM失敗 Rx,Tx Swap ブートしないゲスト 問題編 VM Spawn LM LM LM CPv1 CPv2 VM Spawn CPv1 (LMed) OFF → ON, Reboot in VM LM(Fail) ホストレイヤでの WindowsVM状態遷移
notes や CHANGELOG だけではリーチ出来ない 既知の問題に、どうすれ辿りつけるか Hostと異なるGuest OSの組み合わせを重点的に検証す べきだった • 異なる組み合わせにおいて問題が起きやすい • Windows on Linux • FreeBSD on Linux • etc ナレッジ共有サイトを全部読めば分かる! • 無理 ◦ RedHatだけで8000件(qemuで検索) ◦ 対象バージョンなどを絞る等でもリーチできな い問題もある [After live migration a windows instance, two qemu processes are writing to same volume caused corruption - Red Hat Customer Portal] (https://access.redhat.com/solutions/2832101) どうすれば事前検証の段階でこの記事にたどり着けただろうか? 特定条件でLM失敗 Rx,Tx Swap ブートしないゲスト 問題編