Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

B.13. で移行に失敗する Error: unable to resolve address

現象
QEMU ゲストの移行が失敗し、以下のエラーメッセージが表示される。
# virsh migrate qemu qemu+tcp://192.168.122.12/system
  error: Unable to resolve address name_of_host service '49155': Name or service not known
たとえば、移行先のホスト名が newyork の場合、エラーメッセージは以下のようになります。
# virsh migrate qemu qemu+tcp://192.168.122.12/system
error: Unable to resolve address 'newyork' service '49155': Name or service not known
ただし、このエラーは newyork ホスト名をどこにも使用していないため、異常なように見えます。
調査
移行時に、移行先ホスト上で稼働している libvirtd は移行データの受信が予想されるアドレスおよびポートから URI を作成し、これを移行元ホスト上で稼働している libvirtd に送信します。
上記の例では、移行先ホスト (192.168.122.12) は名前を 'newyork' に設定しています。何らかの理由で、そのホスト上で実行中の libvirtd は IP アドレスに対して名前を解決できず、送信されるべきものが有効なままとなっています。このため、移行元の libvirtd が名前を解決することを予期してホスト名 'newyork' が返されました。これは、DNS が適切に設定されていないか、/etc/hosts にローカルループバックアドレス (127.0.0.1) に関連付けられたホスト名がある場合に発生します。
移行データに使用するアドレスは、移行先libvirtdへの接続に使用するアドレス (qemu+tcp://192.168.122.12/system など) から自動的に決定されないことに注意してください。これは、移行先 libvirtd と通信するために、移行元 libvirtd が(別のマシンで実行する可能性がある) virsh が必要とするネットワークインフラストラクチャーを使用する必要があるためです。
解決方法
最善の解決法として、DNS を正しく設定し、移行に関連するすべてのホストがすべてのホスト名を解決できるようにすることができます。
DNS をこのように設定できない場合は、各ホスト上の /etc/hosts ファイルに、移行に使用するすべてのホストのリストを手動で追加することができます。しかし、ダイナミックな環境ではそのようなリストの一貫性の維持は困難です。
いずれの方法でもホスト名を解決できない場合、virsh migrate は移行ホストの指定をサポートします。
# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12
移行先の libvirtdtcp://192.168.122.12 URI を取得し、自動生成されたポート番号を追加します。この番号が望ましくない場合は (たとえば、ファイアウォール設定との関連により適切でない場合)、ポート番号は以下のコマンドで指定できます。
# virsh migrate qemu qemu+tcp://192.168.122.12/system tcp://192.168.122.12:12345
別のオプションとして、トンネル化された移行を使用することもできます。トンネル化された移行は移行データ用に別の接続を作成しませんが、宛先 libvirtd との通信に使用される接続を介してデータをトンネルします(例: qemu+tcp://192.168.122.12/system)。
# virsh migrate qemu qemu+tcp://192.168.122.12/system --p2p --tunnelled