Pocket

Linux KVM サーバ仮想化環境の構成要素とCLI管理コマンド

  • add this entry to hatena bookmark

Linux KVM環境として、CentOS6.4 上に、KVM+QEMU環境でサーバー仮想化環境を構築しています。

Linux KVM環境の構成要素について軽く整理してみましたので、その記録と、コマンドラインでゲストOSとハイパーバイザーを管理できる「virsh」の実行結果について記載しています。

Linux KVM の実行環境

KVMを動かしているハードウェアは、「HP ProLiant MicroServer N54L」です。CPUは「AMD Turion(tm) II Neo N54L Dual-Core Processor」で、メモリは増設して8GB積んでいます。

CPU仮想化支援機能(AMD-V)は有効です。OSインストール後に以下のコマンドを投入すると、赤文字で「svm」と表示されます。

# grep --color svm /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr npt lbrv svm_lock nrip_save
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr npt lbrv svm_lock nrip_save
#

OSは、CentOS 6.4(64bit)をインストールしました。インストールはベースは「デスクトップ」とし、カスタマイズで仮想化関連のソフトウェアコンポーネントをインストールしました。

インストール後のlsmod コマンド結果は以下です。

# lsmod | grep kvm
kvm_amd                41702  0
kvm                   316506  1 kvm_amd
#

KVM + QEMU

Linux KVM では、KVMだけで仮想化構成が動いているわけではなく、QEMUというオープンソースのCPUエミュレータが必要です。KVMはQEMUのCPU演算処理を仲介しています。

関連するrpmは以下などが該当します。

# rpm -qa | grep qemu-kvm
qemu-kvm-tools-0.12.1.2-2.355.el6.x86_64
qemu-kvm-0.12.1.2-2.355.el6.x86_64
#

その他にも様々な仮想化関連rpmが導入されます。

libvirt

libvirt は、仮想マシン(VM)を管理するAPIを提供するライブラリです。VMだけではなく、仮想ネットワークやストレージなども管理できます。libvirtd というデーモンで実行されます。

# /etc/init.d/libvirtd status
libvirtd (pid  2236) is running...
# ps -awef|grep libvirtd | grep -v grep
root      2236     1  2 15:56 ?        00:07:03 libvirtd --daemon
#

rpm はデフォルトで、様々な言語用のlibvirtライブラリなどがインストールされています。

# rpm -qa | grep libvirt
fence-virtd-libvirt-0.2.3-13.el6.x86_64
libvirt-client-0.10.2-18.el6.x86_64
libvirt-0.10.2-18.el6.x86_64
libvirt-java-0.4.9-1.el6.noarch
libvirt-python-0.10.2-18.el6.x86_64
libvirt-cim-0.6.1-4.el6.x86_64
libvirt-snmp-0.0.2-3.el6.x86_64
#

このlibvirtを利用した様々なプログラムがデフォルトで導入されています。これは後述します。

Linux KVM のコアとなるプログラムは、kvm、qemu、libvirt となると思います。

ネットワーク関連

KVMを動かしている(ホストLinux)CentOSでは、NICが一枚の場合は、以下のようなネットワークインターフェース状態になります。

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr C8:CB:B8:xx:xx:xx
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::cacb:b8ff:fec5:a60c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2182 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2625 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:157560 (153.8 KiB)  TX bytes:2314533 (2.2 MiB)
          Interrupt:18

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:44 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3000 (2.9 KiB)  TX bytes:3000 (2.9 KiB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:97:B9:07
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

virbr0-nic Link encap:Ethernet  HWaddr 52:54:00:97:B9:07
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

#

上の「virbr0」はデフォルトで作成される仮想ブリッジです。「192.168.122.1」はデフォルトで設定されるIPアドレスです。

GUI画面の「Virtual Machine Manager」で確認すると、デフォルトで設定されるネットワーク情報が分かりやすく表示されます。

kvm-virtual-networks

デフォルトで「default」という仮想ネットワークが構成されており、仮想ブリッジ「virbr0」が設定されています。仮想ブリッジもlibvirtdサービスが管理します。

「brctl」コマンドでブリッジの管理が可能です。以下、一例です。

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.52540097b907       yes             virbr0-nic
#

なお、KVMでは、dnsmasq がDNSサーバとDHCPサーバとして導入されています。dnsmasqプログラムによって、IP情報をゲストOSに割り当てる役目が行われています。

virsh

virsh(virtual shell) はコマンドラインでゲストOSとハイパーバイザーを管理できるツールです。Virtual Machine Manager(virt-manager)の代わりとして利用できます。

virsh は libvirtを利用しています。

# virsh version
Compiled against library: libvirt 0.10.2
Using library: libvirt 0.10.2
Using API: QEMU 0.10.2
Running hypervisor: QEMU 0.12.1

#

virshコマンドで、稼働しているノード情報を見てみます。

# virsh nodeinfo
CPU model:           x86_64
CPU(s):              2
CPU frequency:       800 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  1
NUMA cell(s):        1
Memory size:         8191732 KiB

#

MicroServer の情報がちゃんと出力されています。

では、VMの状態を確認しながら、VMの操作を行ってみます。ハイパーバイザー上でゲストOSは2台ある状態で、1台を起動します。

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     VM01                           shut off
 -     vm02                           shut off

# virsh list
 Id    Name                           State
----------------------------------------------------

# virsh start VM01
Domain VM01 started

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     VM01                           running
 -     vm02                           shut off

# virsh list
 Id    Name                           State
----------------------------------------------------
 1     VM01                           running

#

次に、virsh でVM情報を見てみます。

# virsh domuuid VM01
92e28e52-eb75-3c85-a9f9-65f88718a964

#

# virsh dominfo VM01
Id:             -
Name:           VM01
UUID:           92e28e52-eb75-3c85-a9f9-65f88718a964
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

#

次にネットワークの状況も見てみます。

# virsh net-list
Name                 State      Autostart     Persistent
--------------------------------------------------
default              active     yes           yes

#

コマンドラインで操作できるのは便利です。「virsh –help」で多くのオプションが使える事が分かります。

virt-top

virt-top コマンドは、Linuxの top コマンドと同じようなコマンドで、VMの稼働状況を確認できます。

# virt-top

実行時の状況は以下のような情報がリフレッシュされながら表示されます。

virt-top 23:34:31 - x86_64 2/2CPU 2200MHz 7999MB 33.1%
2 domains, 2 active, 2 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0
CPU: 72.1%  Mem: 2048 MB (2048 MB by guests)

   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM    TIME   NAME
    2 R  321    0 1172    0 39.5 12.0   0:14.32 VM01
    3 R  177    0    0    0 32.6 12.0   0:09.71 vm02

「virt-top –help」で実行時に使えるオプションが表示されます。

その他、「virt-***」系のコマンドが多くあります。この辺はあらためて機会があれば紹介します。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。