XenからKVMへの移行(2018/05/09)今年のゴールデンウイークまで弊社のサーバはCentOS5ベースをホストOSとしたXen上で仮想化されていました。Domain0は社内の完全な閉域ネットワーク上に配置していたので、CentOS5のサポート終了後もそのままにしていたのですが、そろそろ変えようということで、全サーバの停止が可能なGW期間にCentOS7のKVMに引っ越しました。 初めに"Xen KVM 移行"で検索すると、移行元サーバのgrub.confやsecurettyを書き換えてイメージファイルを移設先にコピーする方法が何個か表示されたので、最初はそれらを参考に移行しましたが、移行先のKVM上でうまく起動するゲストもあれば、フリーズして起動しないゲストもあったため、RedHatの資料を読み対処することに。参考にさせて頂いた情報は数年前のものが多かったのですが、今はvirt-v2vコマンドで簡単に移行できます。移行概要移行前のXenサーバとは別のコンピュータに仮想化パッケージ+最小構成でCentOS7をインストールし、そのコンピュータに移行前XenサーバのDomain-U(ゲスト)を移行しました。移行にはvirt-v2vコマンドを使用します。これが非常に便利で、ネットワーク経由で、移行元のXenサーバ上にあるイメージを吸い上げながらKVMのゲストに変換できます。移行元ホストOSに移行先ホストOSからrootで公開鍵認証によるSSHのログインが設定できていればコマンド一発で移行できます。 移行はすべてコマンドベースで行いました。 今回の移行対象Domain-U(ゲストOS)はCentOS5,CentOS6,Windows7でしたが、基本的に同じ方法で移行できました。 移行方法virt-v2vコマンドで移行しますが、事前に移行先ホストOSから移行元OSにパスワードなしでSSHで接続できるようにしておきます。(通常はrootで接続できればいいと思います。ここでは公開鍵認証の説明は省略しますが、移行先ホストOS上でssh-keygen -t rsaを実行するとできる/root/.ssh/id_rsa.pubファイルの中身を移行元OSの/root/.ssh/authorized_keysに追加し、必要に応じて移行元ホストOSの/etc/ssh/sshd_configを編集すれば公開鍵認証=パスワードなしでログインできるようになります。) virt-v2vコマンドを実行するターミナル上でssh-agentを実行すると3行出力されるので、それをコピーしてターミナル上に貼り付け実行します。 次にssh-addを実行します。 最後にexport LIBGUESTFS_BACKEND=directとターミナル上で実行します。 ssh-agent準備作業[root]# ssh-agentSSH_AUTH_SOCK=/tmp/ssh-THltP12835/agent.12835; export SSH_AUTH_SOCK; SSH_AGENT_PID=12836; export SSH_AGENT_PID; echo Agent pid 12836; [root]# SSH_AUTH_SOCK=/tmp/ssh-THltP12835/agent.12835; export SSH_AUTH_SOCK; [root]# SSH_AGENT_PID=12836; export SSH_AGENT_PID; [root .ssh]# echo Agent pid 12836; Agent pid 12836 [root .ssh]# ssh-add Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa) [root .ssh]# export LIBGUESTFS_BACKEND=direct これでvirt-v2vコマンド実行前の準備は完了です。 virt-v2vコマンドの例virt-v2vコマンド実行の前に、移行元サーバの移行対象Domain-U(ゲスト)はシャットダウンしておきます。SSHの設定が完了し、移行元のゲストOSをシャットダウンした後、以下のようなコマンドを実行します。 virt-v2v -o libvirt -ic xen+ssh://root@192.168.0.1 -os default --bridge xenbr0:br1 --bridge xenbr1:br2 xenguest1 コマンド引数の説明(環境毎に変更する引数) (1) 192.168.0.1 => 移行元XenのDomain-U(ゲストOS)が稼働しているDomain-0(ホストOS)のIP(またはホスト名) (2) xenguest1 => 移行したいDomain-Uの名前(移行元ホストOSの xm list で表示される名前) (3) -osの後の default => 移行先ホストOSのKVMのストレージプール名(移行先ホストOSの virsh pool-list で表示される名前) (4) --bridgeの後の xenbr0:br1 等 => これは移行元ゲストOSのブリッジxenbr0を、移行先のbr1として移行するという意味になります。 上記の引数--bridge xenbr0:br1 --bridge xenbr1:br2 は移行前ゲストOSの2つのブリッジxenbr0,xenbr1を、 移行後のゲストOSではそれぞれbr1,br2というブリッジに変更する時の引数になります。 移行元のゲストOSがブリッジ1つであれば、移行先ブリッジ名だけを記述しても構いません。 たとえば、移行元ゲストOSのブリッジが1つで、それを移行先のブリッジbr1に割り当てる場合は virt-v2v -o libvirt -ic xen+ssh://root@192.168.0.1 -os default --bridge br1 xenguest1 とすることができます。ブリッジではなくネットワーク(--network)の場合も、同じように指定できると思います。 コマンドを実行し、移行に成功するとKVM側にXen側の定義ファイルとイメージが取り込まれ、"virsh start xenguest1"でKVMゲストOSとして起動できるようになります。 参考(1)移行元ゲストOSがCentOS5の場合、移行元ゲストで"yum install kernel"を実行し、カーネルを入れておく必要がありました。kernelを入れておかないとvirt-v2vコマンド実行中にエラーになります。 (サポート終了しているので、CentOS-Base.repoを編集してbaseurlをhttp://vault.centos.org/5.11/updates/$basearch/等に変更しないとyumが失敗するかもしれません。) (2)移行元ゲストOSがCentOS6の場合は特に何もしなくても移行できました。 (3)Windows7は、移行先ホストOSでyum install virtio-win してから移行しました。 移行のヒントになれば幸いです。 |