30分で仮想サーバ(KVMホスト)環境を構築する

弊社ではインフラのクラウド化等も行っていますが、幾つかの社内サーバも存在しています。
これらサーバの多くは仮想化環境で動作しており、これにはKVMを利用しています。
ここではKVMを利用した仮想化環境の構築に関して説明します。

サーバ仮想化とは

サーバの仮想化とは、「1台の物理サーバ上に複数の(仮想)サーバを構築し動作させる事。その方法」と言えば判りやすいでしょうか。

AWS等のクラウドコンピューティングにおいても仮想化の技術が利用されています。

現在のクラウドコンピューティング隆盛時代の前には、仮想化技術を利用したサーバ統合がITインフラにおける流行のように大きく謳われていました。

「今ならクラウドでしょ!」と言いたいところかもしれませんが、サーバの一部に関しては、アクセス方法や速度等の点から社内に置かざるを得ないものも多いと思います。

これらサーバが複数台存在する場合、適切な仮想化を行う事によって、メリットを享受する事が可能です。

サーバ仮想化のメリット

仮想化のメリットに関して、詳細については 5分で分かる!サーバ仮想化のメリット 等を参照して頂ければと思いますが、私個人が仮想化環境を使って感じるメリットは

たくさんあった物理サーバが減って、部屋を広く使える。
ケーブルの数 ( LAN、電源、etc ) も減るので、スパゲティ状態からも逃れられます。

これに尽きます :-p

これ以外にも、

  • サーバを直ぐに用意できる
    ベースとなるイメージファイル ( AWSにおけるAMI 相当 ) を作成しておけば、これをコピーして同様のサーバを直ぐに用意できる。
    通常サーバを用意する場合はOSのインストール以外に様々なソフトウェア(アンチウィルスソフト等)の追加インストールが必要になる場合が多いですが、これらも含めてインストール済みのイメージファイルを作成しておく事で、サーバ追加時の設定作業を減らす事が可能になります。
  • リソースを無駄なく使える
    稼働率が低いサーバはまとめて、ハードの無駄をなくす。

  • サーバ単位でのバックアップが簡単
    仮想サーバ=OSイメージ=ファイルとして管理可能なため、サーバ全体をバックアップするといった事も比較的容易。
  • コスト削減
    通常、エネルギー利用のコストは減らせる(と思います)。
    多分、管理コストも減らせる。

といったものもあります。

という事で、仮想化を行った事がないというのであれば、テスト環境あたりから仮想化できるか試してみるのはいかがでしょうか。


ちなみに、今回はゲストOSの作成までは行わず、KVMホスト環境の構築のみ説明します。
時間は途中で詰まったり、設定に迷ったりしなければOSインストール込で30分程度で可能だと思います。 ( 私が手順通りに行った際の時間。但しPCの性能にも影響されます )

環境

仮想サーバの構築環境としては以下を利用するものとします。

仮想環境の構築にあたってはKVMを利用します。
KVMに関しては Linux標準の仮想化技術「KVM」の仕組み 等を参照して下さい。

※CentOS7 での構築手順に関しては 別記事 で書いた。

PCIntel VT、AMD-V 等の仮想化支援機能をサポートしているPC
Intelの対応CPU一覧 Intel の対応チップセット一覧
OSCentOS 6.5

KVM をネイティブ仮想化で動作させる場合、仮想化支援機能があるPCを利用する必要があります。一部準仮想化のサポートがなされているものもあるようですが、パフォーマンス等の点からも仮想化支援機能のないPCでの動作はお勧めしません ( 私はその手の環境で構築した事がないので動作するかどうかも判らない )。

Redhat 系 Linux であれば、おそらく同様の手順で構築できるのではないかと思います。

※上記リンクにも示しましたが、CPUだけでなくチップセット(≒マザーボード(以降M/B))でも対応しているものとしていないものがあります。
M/Bによっては、VT機能のON/OFFをBIOS設定で行う必要があるものがあります。「対応しているはずなのに...」という場合、M/BのBIOS設定を見直す事をお勧めします。

ネットワーク構成

仮想サーバが置かれるネットワーク構成の概要は以下のようになります。

KVMサーバ ネットワーク構成

今回の手順では、仮想ホストはLAN上におかれ、ゲストOSも仮想サーバと同一のセグメントに接続されるように設定します ( ブリッジ接続 )。
ルーティングの設定は不要であり、中小規模のネットワークであれば最もシンプルで管理もしやすい構成ではないかと思います。

※KVMをインストールした場合、デフォルトではKVMゲストとの接続はvirbr0を経由したNAT(IPマスカレード)接続になります。
ここでは手動でブリッジ接続用のインターフェース(br0)を作成/利用したブリッジ接続を行う環境を構築します。

インストール

以下インストール手順を示します。

CentOSインストール

  1. KVMのホストサーバとなるPCにCentOSをインストールします。
    適当な方法 ( DVDメディアを用意する、PXEBootでネットワークインストールする等)にて、CentOSのインストールを行います。
    CentOSのインストールに関しては様々なサイトで紹介されているので詳細については省略します。
    Welcome to CentOS

    Install or upgrade an existing system にてインストール開始

  2. 最初はCUIの画面でインストールが始まります。
    言語やキーボード設定を指定して進めていくとGUIのインストール画面に切り替わります。
    CentOS install
  3. 更にインストールを勧めると、パッケージの選択画面に遷移します。
    KVMホストとして構築する場合に必要なパッケージを追加します。
    上で利用用途に合わせたラジオボタンを選択し、下のラジオボタンでは"今すぐカスタマイズ" を選択して次に進みます。 CentOS install
  4. "今すぐカスタマイズ" を選択した場合、インストールパッケージの選択画面に遷移するので、
    "デスクトップ" を選択して "X Window System"、及び、"汎用デスクトップ(GNOMEデスクトップ)" をチェックし CentOS install
  5. "仮想化" を選択して、含まれるすべてのパッケージグループをチェックし、[次へ] をクリックします。 CentOS install
  6. インストールが開始しますので、暫くお待ちください。 CentOS install

    インストールが完了したらPCを再起動します。

    ※インストールメディア(DVD等)は取り出しておきましょう。

  7. CentOS 6.5の場合、再起動後、初回は設定ツール(CUI)が起動する場合があるようです。
    必要に応じてユーザの追加等行ってください。必要なければ [ Quit ] で終了して構いません。
    CentOS install
  8. 設定ツールを終了するとログインプロンプトが表示されます。
    root でログインして以下作業を行います。

    ※上記設定ツールで(作業用の)ユーザを追加した場合、追加したユーザでもOKです。その場合は適宜読み替えてください。

インストール済みのCentOS上に構築する場合

インストール済みのCentOS上に構築する場合、上記のようにインストールプロセス中に必要となるパッケージグループを選択するという手段はとれません。
この場合、yum groupinstall を利用してインストールを行う事ができます。

  1. 利用可能なパッケージグループを表示します。
    # yum grouplist 
    

    利用可能なグループが表示されます。
    Available Groups: の下に、"汎用デスクトップ(GNOMEデスクトップ)" 等の、インストール時に選択したパッケージグループが表示されます。

  2. yum grouplist で表示されたパッケージグループ名を指定してインストールします。

    日本語環境の場合、以下のパッケージグループ名になるかと思います。( 但し、OSバージョンによって異なる場合もあるので、上記 yum grouplist で確認した方が確実 )

    • X Window System
    • 汎用デスクトップ(GNOMEデスクトップ)
    • 仮想化
    • 仮想化クライアント
    • 仮想化ツール
    • 仮想化プラットフォーム
    # yum groupinstall "汎用デスクトップ(GNOMEデスクトップ)"
    

ネットワーク設定

ゲストOSをホストOSと同じネットワークに参加させるためにブリッジ接続の設定を行います。

bridge-utils のインストール

インストールされていない場合、ブリッジ接続を行うために必要となるパッケージをインストールします。

# yum install bridge-utils

設定

  1. ifcfg-eth0 バックアップ
    設定に失敗した場合でも復旧可能となるように ifcfg-eth0 はバックアップしておきましょう。
    # cd /etc/sysconfig/network-scripts/
    

    以下暫く /etc/sysconfig/network-scripts ディレクトリ以下での作業となります。

    # cp ifcfg-eth0 <適当なディレクトリ>
    
  2. ブリッジ接続のためのネットワークスクリプトを作成
    # vi ifcfg-br0
    
    以下のように編集します。
    ネットワークセグメントや、DNS、GATEWAY 設定等は環境に応じて適宜変更して下さい。
    DEVICE=br0        # DEVICE名を br0 に
    TYPE=Bridge        # Type を Bridge に
    BOOTPROTO=static
    IPADDR=192.168.1.10    # KVMホストのIPアドレスを設定
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    DELAY=0
    DNS1=192.168.1.1
    GATEWAY=192.168.1.1
    ONBOOT=yes
    
  3. デバイス設定を編集します。
    # vi ifcfg-eth0	
    
    以下のように編集します。
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=none
    HWADDR="xx:xx:xx:xx:xx:xx"    # 実際のMACアドレス
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    #NM_CONTROLLED=yes
    Type=Ethernet
    BRIDGE=br0            # ブリッジするインターフェースを指定
    
  4. ネットワーク再起動
    # /etc/rc.d/init.d/network restart
    
  5. トラフィック転送設定
    # vi /etc/sysconfig/network/iptables
    
    以下を追加
    -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT 
  6. iptables 再起動
    # /etc/rc.d/init.d/iptables restart
    

virbr0の無効化

デフォルトの virbr0 は不要なため必要に応じて無効化します。

※無効化しなくてもブリッジ接続を行う上で問題はない

  1. 状態確認
    # virsh net-list --all
    名前               状態     自動起動  永続
    --------------------------------------------------
    default              動作中  はい (yes)  はい (yes)
    
    # brctl show
    bridge name	bridge id		STP enabled	interfaces
    br0		8000.28924a340aa2	no		eth0
    virbr0		8000.52540039fe40	yes		virbr0-nic
    
  2. virtbr0 を強制停止
    # virsh net-destroy default
    
  3. virtbr0 の自動起動を無効に
    # virsh net-autostart default --disable
    
  4. 状態確認
    # virsh net-list --all
    名前               状態     自動起動  永続
    --------------------------------------------------
    default              停止状態 いいえ (no) はい (yes)
    
    # brctl show
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.28924a340aa2       no              eth0
    

    virbr0が表示されない事を確認

その他設定

環境によっては SELinux が有効になっている事によって問題が発生するといった場合がありえます。
こういった場合には適切なポリシー設定を行うか、SELinux を無効にする等対応が必要です。

SELinux を無効化する場合、以下のようにします。

# setenforce 0

再起動後もSELinuxを無効にする場合、selinux の設定ファイルを編集します。

# vi /etc/selinux/config
以下のように編集します。(抜粋)
SELINUX=disabled

まとめ

上記設定でKVMホストの設定は行えた事になります。
「ゲストOSを動かしていないじゃないか?」と言われれば、「その通り」なのですが、これに関しては次回の記事にて説明しようと思います。

という事で 次回 へ続きます。



仮想環境の構築、物理サーバからの移行などもご相談に応じます。お気軽にお問合せ下さい。