KVM仮想化環境構築 - その3

CentOSをインストールしたので、次はネットワークとストレージの設定をします。

ネットワーク設定

せっかくNICが2つあるのでbondingを試してみます。いや寧ろbondingしたくて余分にNIC買いました(゚∀゚)。
イメージとしては下の絵のように構成します。eth[0-1]は物理NIC、bond0はbondingインターフェース、br0は仮想ブリッジ、vnet*は仮想マシン用の仮想NICです。この構成にした場合、ゲストOSはホスト側と同一セグメントのネットワークを利用できます。
vnetは仮想マシンと同じタイミングで作成されるものなので今回はeth、bond、brだけ作ります。


NetworkManagerはKVMで使うブリッジと相性が合わないのでインストールされている場合は無効にします。

[root@cathouse ~]# chkconfig NetworkManager off
[root@cathouse ~]# chkconfig network on
[root@cathouse ~]# service NetworkManager stop
eth0の設定ファイル編集。CentOS(RHEL)では6系からMACアドレスを別ファイル(/etc/udev/rules.d/70-persistent-net.rules)で管理するようになったのでHWADDRは書かなくて大丈夫です。
[root@cathouse ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"
eth1の設定ファイル編集。ほぼ同じですね。
[root@cathouse ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
ONBOOT="yes"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"
続いてbond0の設定ファイル編集。ここではbondingのモードを6に指定しています。このモードではNICの負荷に応じて送信や受信で使用されるインターフェースを切り替えてくれます。ごついネットワーク環境を持っていない方はモード1、5、6あたりが無難です。詳しく知りたい方はこことか見てみましょう。
[root@cathouse ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE="bond0"
ONBOOT="yes"
BOOTPROTO="none"
BONDING_OPTS="mode=6 miimon=100 updelay=5000"
BRIDGE="br0"
次はbr0の設定ファイル編集です。アドレスを固定で指定しています。この部分は環境に合わせて変えてください。
[root@cathouse ~]# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="192.168.11.5"
NETMASK="255.255.255.0"
GATEWAY="192.168.11.1"
NETWORK="192.168.11.0"
BROADCAST="192.168.11.255"
TYPE="Bridge"
DHCPでアドレスの自動設定をしたい場合は下のようにします。
DEVICE="br0"
ONBOOT="yes"
BOOTPROTO="dhcp"
TYPE="Bridge"
ちなみにここでbr0にIPアドレスを与えるのは必須ではありません。IPアドレスを与えなかった場合、ホストへのネットワークアクセスはできなくなりますが、それでもゲストOSにIPアドレスをふったりインターネットにアクセスさせることはできます。

続いてカーネルモジュール設定

[root@cathouse ~]# vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
設定ファイルの編集が終わったので、ネットワークサービスを再起動します。
[root@cathouse ~]# service network restart
Shutting down interface br0: [ OK ]
Shutting down interface bond0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ]
Bringing up interface br0: [ OK ]
bondingがうまくいっているか確認。
[root@cathouse ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 5000
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 98:4b:e1:06:c3:cd
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:1b:21:c5:f1:15
Slave queue ID: 0

大丈夫そうです。ping打ってみたり片系のネットワークケーブル抜いてみたりして正しく構成されているか確認してみましょう。

ホストにDNSの参照先を指定していなかったのでresolv.confを編集します。今回はGoogleDNSサーバを指定してみました。

[root@cathouse ~]# vi /etc/resolv.conf 
nameserver 8.8.8.8
nameserver 8.8.4.4
ネットワークの設定おしまい。

ストレージ設定

まずはハードディスクが認識されているか確認。
[root@cathouse ~]# parted -l
Model: ATA WDC WD20EARS-00M (scsi)   ←これと
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags


Model: ATA WDC WD20EARS-00M (scsi)   ←これ
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags


Model: I-O DATA USB Flash Disk (scsi)
Disk /dev/sdc: 8020MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary ext4 boot
2 525MB 8020MB 7494MB primary lvm


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg_cathouse-lv_swap: 3746MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number Start End Size File system Flags
1 0.00B 3746MB 3746MB linux-swap(v1)


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg_cathouse-lv_root: 3746MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number Start End Size File system Flags
1 0.00B 3746MB 3746MB ext4

無事に2つとも認識されているようです。続いてパーティションを作成します。
[root@cathouse ~]# parted /dev/sda
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart 1 ext4 1 -1   ←ディスク(ほぼ)全部を使ってパーティション作成
(parted) quit
Information: You may need to update /etc/fstab.
作成したパーティションをフォーマットします。ファイルシステムext4
2TBもあると中々時間かかりますね。
[root@cathouse ~]# mkfs.ext4 /dev/sda1 
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122101760 inodes, 488378112 blocks
24418905 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

パーティションのUUIDを確認。
[root@cathouse ~]# blkid /dev/sda1
/dev/sda1: UUID="00680288-1a0f-49b2-b2d2-6219b8ab47c7" TYPE="ext4"
マウント先のディレクトリを作成。
[root@cathouse ~]# mkdir /mnt/kvmdata
fstabに設定を追記。UUIDのところは先ほどblkidで調べたものをコピペします。
[root@cathouse ~]# echo UUID=00680288-1a0f-49b2-b2d2-6219b8ab47c7 /mnt/kvmdata ext4 defaults 0 0 >> /etc/fstab
fstabに書き込んだ設定を反映。
[root@cathouse ~]# mount -a
正常にマウントされました。これでストレージの設定は終了です。
[root@cathouse ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_cathouse-lv_root
3.5G 3.0G 346M 90% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdc1 485M 63M 398M 14% /boot
/dev/sda1 1.8T 196M 1.7T 1% /mnt/kvmdata
RedhatKVMによる仮想化環境ではI/Oスケジューラの設定をdeadlineにすることを推奨しています。ちなみに初期状態はcfq。
[root@cathouse ~]# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq]
変更するにはgrub.confファイルを編集します(下の赤字部分を追記)。
[root@cathouse ~]# vi /boot/grub/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_cathouse-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sdc
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-220.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/vg_cathouse-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_cathouse/lv_root rd_NO_MD rd_LVM_LV=vg_cathouse/lv_swap SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 quiet rd_NO_DM elevator=deadline
initrd /initramfs-2.6.32-220.el6.x86_64.img
再起動することでdeadlineに変更されます。
[root@cathouse ~]# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq
次回はvirt-manager(vSphere Clientみたいなもの)の準備です。