Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goで作る!ストレージ筐体間での安全なCinder volume移行システムの開発と運用

Goで作る!ストレージ筐体間での安全なCinder volume移行システムの開発と運用

本資料は「Cloud Operator Days 2025 クロージングイベント」における発表資料です。
https://cloudopsdays.com/closing/

プライベートクラウドのOpenStack基盤において、ブート用アプライアンスストレージのEOLに伴うストレージ筐体間 Cinder volume 移行のために、課題を抱えていた Cinder 標準の retype に変わる手段として独自ストレージマイグレーションシステムをGoで開発しました。アプライアンスストレージを用いる Cinder の技術的詳細や、Goによるシステム開発、さらに実際の移行にまつわる苦労話等についてお伝えします。

Avatar for Tomofumi Kondo

Tomofumi Kondo

September 05, 2025
Tweet

More Decks by Tomofumi Kondo

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 近藤 智⽂ • CyberAgent 2024年新卒⼊社 • CyberAgent Infrastructure Unit

    (CIU)所属でプライ ベートクラウドのIaaS基盤の開発‧運⽤を担当 ◦ OpenStack, Kubernetes, Ansible, etc. https://github.com/TOMOFUMI-KONDO https://x.com/tomokon_0314
  2. プライベートクラウドの概要 社内ユーザに以下の機能を提供 • IaaS (OpenStackベース) • PaaS/SaaS ◦ Kubernetes as

    a Service ◦ Serverless Computing ◦ ML Platform ◦ GitHub Actions Self-Hosted Runner ◦ DB/Storage, etc. 規模感:HV 1000-、VM 5000+ 程度
  3. ストレージ周辺の構成 旧アプライアンス 
 ストレージ 
 新アプライアンス 
 ストレージ 
 HV


    VM
 VM
 VM
 VM
 VM root volumeとして 
 旧ストレージか新ストレージ 
 どちらかが使われている状況 
 cinder volume backend 

  4. 旧アプライアンス 
 ストレージ 
 新アプライアンス 
 ストレージ 
 HV VM

    VM
 VM
 VM
 VM root volumeとして 
 旧ストレージか新ストレージ 
 どちらかが使われている状況 
 ストレージ周辺の構成 旧ストレージがEOLになり 
 マイグレーションが必要に! 
 cinder volume backend 

  5. どうやってマイグレーションするか Cinder APIのretypeでできたらいいが、、、 • activeじゃないVMのvolumeのretypeが失敗する ◦ extra specが⼀致せずスケジューリングできない • active

    VMのvolumeに対してはできるが、、、 ◦ I/Oがあるのでデータを安全に転送できるか不安 ◦ 起動から⼀定時間経っているVMだとできない https://docs.openstack.org/api-ref/block-storage/v3/#retype-a-volume
  6. どうやってマイグレーションするか Cinder APIのretypeでできたらいいが、、、 • activeじゃないVMのvolumeのretypeが失敗する ◦ extra specが⼀致せずスケジューリングできない • active

    VMのvolumeに対してはできるが、、、 ◦ I/Oがあるのでデータを安全に転送できるか不安 ◦ 起動から⼀定時間経っているVMだとできない →独⾃のストレージマイグレーションシステムで解決 https://docs.openstack.org/api-ref/block-storage/v3/#retype-a-volume
  7. システム概要 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB Migration API Migration UI Migration Agent Migration DB
  8. ステップ① マイグレーションタスクの登録 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB Migration Agent Migration API Migration DB Migration UI 1: Request migration 2: Validate status 3: Register task
  9. ステップ② 事前準備 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB Migration Agent Migration API Migration DB Migration UI 4: Polling task 5: Validate status 6: Mark “migrating”
  10. ステップ③ 旧ストレージの切り離し‧接続 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB 7: Detach LUN from HV Migration Agent Migration API Migration DB Migration UI 8: Attach LUN to Agent
  11. ステップ④ 新ストレージの接続 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB 9: Create new LUN Migration Agent Migration API Migration DB Migration UI 10: Attach LUN to Agent
  12. ステップ⑤ データ転送 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB 11: Transfer data Migration Agent Migration API Migration DB Migration UI
  13. ステップ⑥ 接続を元に戻す HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB 12: Detach LUNs from Agent Migration Agent Migration API Migration DB Migration UI 13: Attach LUN to HV
  14. ステップ⑦ 事後処理 HV User VM 新アプライアンス ストレージ 旧アプライアンス ストレージ OpenStack Nova

    API Cinder API OpenStack DB Migration Agent Migration API Migration DB Migration UI 15: Update connection info 14: Mark available 16: Mark task “Done”
  15. 綿密なロールバック処理 migration実⾏時のエラーは起こりうる • 予期しないconnection infoのデータ構造 • ネットワークの問題 • OpenStack, Storage

    APIのエラー • Migration Agent⾃体のバグ • etc. →エラーが起こった際になるべく全ての状態を元に戻し たい!
  16. 転送速度の⾼速化 I/Oの並列化 変更前 変更後 (実⾏時間を約2/3に短縮!) 旧ストレージ データ ハッシュを取得 データ転送 新ストレージ

    データ ハッシュを取得 データ転送 旧ストレージ データ ハッシュを取得 新ストレージ データ ハッシュを取得
  17. 転送速度の⾼速化 物理ホストでの転送 しかし、、、結果的に物理ホスト上での実⾏は断念 • 思ったより速度が出なかった ◦ ストレージ側のI/O速度がボトルネックに • VMでは発⽣しなかった転送時のエラーが増えた •

    その時点でユーザ提供に当たって必要な速度が⼗分 に出ていたためコストをかけるメリットが薄かった →技術的側⾯だけでなく⽬的やコストを考えて取り組む ことが重要