前回に続いてKVMシリーズ、今回は前回作った3個のVMとネットワークを繋ごうと思います。
今回の内容は参考サイトさまさまな内容なんだな。
最初にbr0を作る。eth0からコピればOK。
[root@take ~]# cd /etc/sysconfig/network-scripts/
[root@take network-scripts]# cp ifcfg-eth0 ifcfg-br0
eth0にブリッジを記述する。
[root@take network-scripts]# vi ifcfg-eth0
BRIDGE=br0
続いてbr0の記述だけど、ここは環境で異なるはずなのですが、TYPEとIPの記述をしていればOKの様子。
CATで見てみよう。
[root@take network-scripts]# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.44.132
PREFIX=24
GATEWAY=192.168.44.2
DNS1=192.168.44.2
次にeth0をpromiscモードにする、プロミスキャスモードの事で、何でも恋ってモード。
[root@take network-scripts]# ifconfig eth0 promisc
さて、次にブリッジ用のネットワークを立ち上げるスクリプト。これは参考サイトのものを拝借。
[root@take ~]# cat /etc/qemu-ifup
#!/bin/sh
echo "Executing /etc/qemu-ifup"
/sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
/usr/sbin/brctl addif br0 $1
sleep 3
[root@take ~]# cat /etc/qemu-ifdown
#!/bin/sh
/usr/sbin/brctl delif br0 $1
/sbin/ifconfig $1 down
参考サイトの方が嵌ったとこらしいのだけど、見ながらやってるたけけんも嵌ってしまった・・・。
マニュアルはちゃんと読みましょうという典型的なパターンです。
chmod 775
[root@take ~]# ll /etc/qemu-if*
-rwxrwxr-x 1 root root 63 9月 16 20:22 2013 /etc/qemu-ifdown
-rwxrwxr-x 1 root root 146 9月 16 20:22 2013 /etc/qemu-ifup
これで下準備は完了です。あとはオリーブオイルをかけるだけ。
前回のコマンドに付け足すのはこの部分。
-net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0,script=/etc/qemu-ifup -k j
もろにネットワークな記述ですなあ。
付け足してISOから起動してインストールするときはこんな感じに。
qemu-system-x86_64 -hda vm00.img -m 512 -monitor telnet::10001,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap1,script=/etc/qemu-ifup -k ja -vnc :0 -daemonize -boot d -cdrom /root/CentOS-6.4-x86_64-bin-DVD1.iso
インストールが終わって次に起動するときはCD-ROMのところは省かないと永遠にCDブートになりますので以下の部分を省略する。
-boot d -cdrom /root/CentOS-6.4-x86_64-bin-DVD1.iso
qemu-system-x86_64 -hda vm00.img -m 512 -monitor telnet::10001,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap1,script=/etc/qemu-ifup -k ja -vnc :0 -daemonize
これでVM1個は完成です。OSのインストール部分は省略しまっせ。後は好きなだけVMを追加してください。
追加するときはまたVMの作成からやろう。
[root@take ~]# qemu-img create -f qcow2 vm02.img 5G
Formatting 'vm02.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
複数のVMを動かす時に気を付けるところは、VNCの番号とネットワークのTAPを変えないとエラーになります。
もちろんVMのファイル名も変えないとだね。
以下はqemuのエラー。
qemu-system-x86_64: -net tap,ifname=tap0,script=/etc/qemu-ifup: could not configure /dev/net/tun (tap0): Device or resource busy
qemu-system-x86_64: -net tap,ifname=tap0,script=/etc/qemu-ifup: Device 'tap' could not be initialized
VNCの方はBusyっていう表示が出て確認ができません。
コマンドで説明した方が早いのでコマンドで。以下のコマンドでOKです。
スクリプトにしてもいいかもね。
qemu-system-x86_64 -hda vm00.img -m 512 -monitor telnet::10001,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap1,script=/etc/qemu-ifup -k ja -vnc :0 -daemonize
qemu-system-x86_64 -hda vm01.img -m 512 -monitor telnet::10002,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap2,script=/etc/qemu-ifup -k ja -vnc :1 -daemonize
qemu-system-x86_64 -hda vm02.img -m 512 -monitor telnet::10003,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap3,script=/etc/qemu-ifup -k ja -vnc :2 -daemonize
そうそう、VMを落とす時はどうするのかというと、telnetで繋いでqします。
そのための起動オプションなのです。
[root@take ~]# telnet localhost 10001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
QEMU 1.2.0 monitor - type 'help' for more information
(qemu) q
Connection closed by foreign host.
[root@take ~]# telnet localhost 10002
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
QEMU 1.2.0 monitor - type 'help' for more information
(qemu) q
Connection closed by foreign host.
[root@take ~]# telnet localhost 10003
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
QEMU 1.2.0 monitor - type 'help' for more information
(qemu) q
Connection closed by foreign host
ホストサーバーのifconfigはこんな感じになってました。
br0 Link encap:Ethernet HWaddr 00:0C:29:95:48:9A
inet addr:192.168.44.132 Bcast:192.168.44.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe95:489a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39920 errors:0 dropped:0 overruns:0 frame:0
TX packets:42802 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:21985664 (20.9 MiB) TX bytes:4404942 (4.2 MiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:95:48:9A
inet6 addr: fe80::20c:29ff:fe95:489a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:139141 errors:0 dropped:0 overruns:0 frame:0
TX packets:109845 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:165754333 (158.0 MiB) TX bytes:8533542 (8.1 MiB)
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: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)
tap1 Link encap:Ethernet HWaddr FE:B7:63:66:89:D8
inet6 addr: fe80::fcb7:63ff:fe66:89d8/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:65571 errors:0 dropped:0 overruns:0 frame:0
TX packets:98957 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:4021085 (3.8 MiB) TX bytes:140992676 (134.4 MiB)
tap2 Link encap:Ethernet HWaddr 0A:89:08:6D:D7:F1
inet6 addr: fe80::889:8ff:fe6d:d7f1/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:162 errors:0 dropped:0 overruns:0 frame:0
TX packets:1402 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:18553 (18.1 KiB) TX bytes:1401122 (1.3 MiB)
tap3 Link encap:Ethernet HWaddr 76:60:5D:B8:9E:1F
inet6 addr: fe80::7460:5dff:feb8:9e1f/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:298 errors:0 dropped:0 overruns:0 frame:0
TX packets:1417 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:29906 (29.2 KiB) TX bytes:1139641 (1.0 MiB)
これですべてのサーバーにSSHログインが可能になりました。
[root@take ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2995489a no eth0
tap1
tap2
tap3
ちなみにこれをプライベートクラウドと言います。嘘です。
ある意味あってるかも?
でもこのままだとホストサーバーからゲストサーバーの管理ができないじゃん。って気づいている方も多いかも。
肝心なことです。
ちゃんとできるようで、virshというコマンドがあります。でもこれはまた今度。
まだ知らないって書いた方が正しいかなw
[root@take ~]# yum search libvirt
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile
* sl: ftp.scientificlinux.org
* sl-security: ftp.scientificlinux.org
* sl6x: ftp.scientificlinux.org
* sl6x-security: ftp.scientificlinux.org
========================================= N/S Matched: libvirt =========================================
fence-virtd-libvirt.x86_64 : Libvirt backend for fence-virtd
fence-virtd-libvirt-qpid.x86_64 : Libvirt-qmf backend for fence-virtd
libvirt-cim.i686 : A CIM provider for libvirt
libvirt-cim.x86_64 : A CIM provider for libvirt
libvirt-client.i686 : Client side library and utilities of the libvirt library
libvirt-client.x86_64 : Client side library and utilities of the libvirt library
libvirt-devel.i686 : Libraries, includes, etc. to compile with the libvirt library
libvirt-devel.x86_64 : Libraries, includes, etc. to compile with the libvirt library
libvirt-java.noarch : Java bindings for the libvirt virtualization API
libvirt-java-devel.noarch : Compressed Java source files for libvirt-java
libvirt-java-javadoc.noarch : Java documentation for libvirt-java
libvirt-python.x86_64 : Python bindings for the libvirt library
libvirt-snmp.x86_64 : SNMP functionality for libvirt
ocaml-libvirt.x86_64 : OCaml binding for libvirt
ocaml-libvirt-devel.x86_64 : Development files for ocaml-libvirt
fence-virtd-checkpoint.x86_64 : Cluster+Libvirt backend for fence-virtd
libvirt.x86_64 : Library providing a simple virtualization API
libvirt-lock-sanlock.x86_64 : Sanlock lock manager plugin for QEMU driver
perl-Sys-Virt.x86_64 : Represent and manage a libvirt hypervisor connection