Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

RHEL 6 で rgmanager が制御するサービスとして KVM 仮想マシンを設定する方法

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 6 における高可用性アドオン
  • 共有ストレージシステム

Issue

  • rgmanager が制御するサービスとして KVM 仮想マシンを設定する必要があります。

Resolution

  • rgmanager が管理する高可用性仮想マシンは、ストレージ、ネットワーク、認証、KVM およびクラスター層がすべて正しく設定されている必要があります。

  • このドキュメントでは、クラスターが完全に機能し、テストされていることが前提となります。

  • ノードを選択し、仮想マシンを作成します (virsh や virt-manager など、方法は問いません)。先に進めるまえに、仮想マシンが実行されていないことを確認します。
  • libvirt-guests を無効にすると、ここで説明されている問題を避けることができます。
# chkconfig libvirt-guests off
  • 共有ストレージを設定します。
    • CLVM スタックを作成し、すべてのノードがアクセスできる共有ストレージプールのノード間で共有します。
    • CLVM 管理ボリュームグループに GFS2 ファイルシステムを 2 つ作成します。1 つは仮想マシン設定ファイルに、もう 1 つは仮想マシンストレージファイル用として作成します。
    • システムで、一時的なディレクトリに2 つの GFS2 ファイルシステムをマウントしている場所に、仮想マシンが作成されました。
    • /var/lib/libvirt/images にある、仮想マシンのストレージファイルの GFS2 ファイルシステムへの再帰的コピーを実行します。
    • /etc/libvirt にある、仮想マシン設定ファイルの GFS2 ファイルシステムへの再帰的コピーを実行します。
    • 一時ディレクトリからファイルシステムをアンマウントします。
    • すべてのノードで、設定ファイルを /etc/libvirt の GFS2 ファイルシステムにマウントします。
    • すべてのノードで、仮想マシンのストレージファイルを /var/lib/livirt/images の GFS2 ファイルシステムにマウントします。
    • すべてのノードで libvirt を再起動します。
    • 仮想マシンが、virsh リストの出力結果 (すべてのノードにすべての仮想マシン) に表示されることを確認します。
    • GFS2 ファイルシステムを、すべてのノードの /etc/fstab に追加して、正しい場所にマウントします。
  • 事前に共有した SSH キーを設定します。
    • パスワードを使用しないログインについては、上の説明と、How do I install SSH identity key onto a remote host on Red Hat Enterprise Linux 5 を参照してください。
    • クラスターによって解決されるため、つまり、cluster.conf または clustat に表示されているために、ssh をしたあとにリモートシステムのホスト名がノードに指定されることを確認します。
    • パスワードを入力せずに、root として各ノードから各ノードに ssh できることをテストして確認します。
  • rgmanager 外でライブな移行をテストします。

    • いずれかのクラスターノードでいずれかの仮想マシンを起動します。
    • virsh を使用して、仮想マシンをクラスターの別のノードに移行します。コマンドのフォーマットは以下のようになります。

              # virsh migrate --live <VIRTUAL MACHINE NAME> qemu+ssh://<CLUSTER NODE HOST NAME AS IT APPEARS IN CLUSTAT>/system
      
  • virsh 移行によって、パスワードを要求するプロンプトが表示されるか、("yes" を入力するなどの) 入力を要求されると、事前に共有された SSH キーが正しく設定されません。

  • virsh 移行が別の理由で失敗した場合は、前の手順に戻って正しく設定していることを確認してください。仮想マシンが、rgmanager の制御がない状態で開始し、停止し、クラスター間を移行できるまで移動しないでください。

  • クラスタ化されたサービスとして仮想マシンを追加します。

    • conga を使用して仮想マシンサービスを追加します。

      • Web ブラウザーを使用して、このクラスターを管理する luci 管理アプリケーションにアクセスします。
      • [Clusters] をクリックします。
      • 問題のクラスタの名前をクリックします。
      • [Services] をクリックします。
      • [Add] をクリックします。
      • ("virsh list --all" に表示される) 仮想マシンの名前を "Service name" フィールドに入力します。
      • [Add a resource] をクリックします。
      • ドロップダウンメニューから [Virtual Machine] を選択します。
      • /etc/libvirt/qemu を "VM Configuration file path" フィールドに入力します。
      • [Submit] をクリックします。
    • 仮想マシンサービスを手動で追加します。

      • ノードのいずれかで /etc/cluster/cluster.conf を編集します。
      • <rm> で、以下のような stanza プレースになります。以下で、正しい値を入力します。

                    <vm migrate="live" name="<NAME OF VM AS IT APPEARS IN VIRSH LIST --ALL>" path="/etc/libvirt/qemu" recovery="relocate"/>
        
  • config_version の値を増加します。

  • cluster.conf を保存して終了します。
  • ノード間で cluster.conf の同期を取ります。

        # ccs_sync
    
  • cman に設定変更を通知します。

        # cman_tool -r version
    
  • rgmanager サービスがすべてのノードで開始したことを確認します。仮想マシンサービスが、clustat の出力結果の "Service Name" セクションに表示されたことを確認します。

  • clustat コマンドを使用して仮想マシンの開始、停止、および移行をテストします。

    • 仮想マシンを開始するには、以下を行います。

              $ clusvcadm -e vm:<VIRTUAL MACHINE SERVICE NAME>
      
  • 仮想マシンを停止するには、以下を行います。

        $ clusvcadm -d vm:<VIRTUAL MACHINE SERVICE NAME>
    
  • 仮想マシンを移行するには、以下を行います。

        $ clusvcadm -M vm:<VIRTUAL MACHINE SERVICE NAME> -m <DESIRED TARGET NODE>
    
  • 共通する潜在的な危険:

    • GFS2 ファイルシステムがマウントされたため、ノードが "virsh list --all" にクラスタ化された仮想マシンの一覧を表示しない場合は、libvirtd が再起動しなかったことが考えられます。GFS2 ファイルシステムが fstab に表示され、起動時にマウントされたことを確認します。
    • 仮想マシンは virsh で起動または停止することができますが、(/var/log/rgmanager に表示される) "generic error 1" が原因で起動しません。"setenforce 0" を使用して Selinux を無効にしてください。デフォルトの Selinux コンテクストは、クラスタ化された仮想マシンサービスを妨害します。Selinux を無効にして、正しく機能するようにコンテクストを修正します。使用する Selinux コンテントの修正は、この記事の範囲ではありません。
    • 仮想マシンの開始と停止は機能しますが、移行に失敗し、(/var/log/cluster/rgmanager に示されるように) "rgmanager error: cannot recv data: Host key verification failed" が表示され、事前に共有された SSH キーに正しく設定されません。認証キーを設定するために使用されるホスト名は、クラスターが解決するために使用するホスト名、つまり、cluster.conf の名前になります。
  • 改善、または別のアプローチ
    • GFS2 ファイルシステムのストレージ上のディスクイメージファイルを使用して共有された GFS2 ファイルシステムを使用する代わりに、共有ストレージが仮想マシンに直接表示されます。たとえば、CLVM スタックを、論理ボリュームの x 番号で設定する場合があります。そのあと、仮想マシンは論理ボリュームを、イメージファイルではなくバッキングストアとして使用します。共有ストレージスタックに対して LVM を使用する場合、LVM スタックは、CLVM によって管理される必要があります。仮想マシンの設定、または仮想マシンのゲスト OS に変更を加える必要はありません。
    • 事前に共有された SSH キーよりも TLS 認証を使う方が安全です。libvirt を使用するために、TLS 認証を設定する方法については、"How to generate "tls" certificates for libvirtd?" を参照してください。クラスターが SSH ではなくて TLS 認証を使用するには、URI を cluster.conf の migration_uri フィールドの "qemu://%s/system" として使用する必要があります。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments