【linux】【bash】【network】サーバのトラフィックを監視するワンライナー
サーバのトラフィックをリアルタイムで監視するワンライナーを書きました。
もしかしたら需要があるかもしれないと考え、晒させていただきます!
経緯
- 別ネットワークに存在するサーバ間で、大量のデータを転送したい
- 回線圧迫を避けるためにrsyncで帯域制限をかけながら転送。でも本当に意図通りの制限がかかっているか不安。
- CactiやMRTGではリアルタイム監視できないし…
- iftopとか入れて使うのもありだけれど、別サーバで需要がある度にインストールするのもな…
と悩んで方法を色々探していたのですが、発見できませんでした。
そこで、ひとまず以下の形で落ち着きました。
方法
以下を実行していただければリアルタイムで確認できると思います。( 無理やりなワンライナーであることは気にしないでください。 )
tcコマンドを使って計算しています。
while : ; do _T1=$( /sbin/tc -s qdisc | fgrep -m 1 Sent | cut -d" " -f 3); sleep 1; _T2=$( /sbin/tc -s qdisc | fgrep -m 1 Sent | cut -d" " -f 3); echo "$(expr \( $_T2 - $_T1 \) \* 8 ) bps"; done
LANのインターフェースが複数あるサーバは注意してください。
上記ですと、一番最初のインターフェースが監視されます。
別インターフェースを監視したい場合は、 fgrep -mの引数をいじってあげるなどして調整してください。
bondingでRound Robinなどしている場合には、あまりお役に立てないかと思います。
実行結果
結果は以下の様な形で、一秒ごとのトラフィックが出力されます。bpsから単位を変えたい場合はexprあたりをいじってあげてください。
[sai@sai-pc ~]$ while : ; do _T1=$( /sbin/tc -s qdisc | fgrep -m 1 Sent | cut -d" " -f 3); sleep 1; _T2=$( /sbin/tc -s qdisc | fgrep -m 1 Sent | cut -d" " -f 3); echo "$(expr \( $_T2 - $_T1 \) \* 8 ) bps"; done
8734304 bps
8734400 bps
7997024 bps
( 環境: CentOS 5.3 )
システム運用時、大切となってくるファイル達
システム管理者にとって運用上、特に大事になるだろうファイルについて以前調べたので、今回はそれをまとめてみます。
以下に書いたような、ディレクトリ構造や、何のためのファイルか?という事の全体像を知った事で作業がしやすくなりました。
参考にさせていただいたメインの教材はこちらです。
Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)
- 作者: 高町健一郎,大津真,佐藤竜一,小林峰子,安田幸弘
- 出版社/メーカー: アイ・ディ・ジー・ジャパン
- 発売日: 2007/10/06
- メディア: ムック
- 購入: 26人 クリック: 633回
- この商品を含むブログ (48件) を見る
管理者にとって特に大事なファイル
/etcと/varディレクトリ以下のファイルが大切だと言えると思います。
前者は、システムの設定ファイルが保存されるディレクトリ。
後者は、主にシステムのログファイルが保存されるディレクトリです。
では、次から、それぞれのディレクトリの下にどのようなファイルがあるか見ていきたいと思います。
/etc以下
fstab
マウントの方法について記載されています。
linuxツリー(/ディレクトリを頭にして、他のディレクトリがぶら下がっていく構造)に、「どのデバイス」の「どのパーティション」が「何のファイルシステム」でマウントされるのかという事を指定してあげるファイルです。
実際に見てみると、以下のようになっています。
[admin@localhost ~]$ cat /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
一番左の列から1として順番に見てみると、
1:デバイス・ファイル名の指定をする。ハードディスクやそのパーティション、CDドライブなどのデバイス名を記述します。
2:マウント・ポイントの指定。1番目の項目で指定されたデバイスが、linuxツリーのどこでマウントされるかを示します。
3:ファイルシステムの指定します。
4:マウント・オプションの指定します。
5:バックアップの指定。dumpコマンドのバックアップの対象とするかを指定する。0は対象外、1は対象となります。
6:ファイルシステムの整合性をチェックの対象とするかを指定します。0は対象外、他の数字は対象となります。数字の大きさはチェックをする順番で、/をマウントするデバイスに1を指定してあげて、他は2以上の数字を指定しあげます。
modprobe.conf
各機器のドライバソフトのようなカーネルモジュールの設定を行うファイルです。
デバイスの認識がうまくいかない場合はこのファイルを指定します。
[admin@localhost ~]$ cat /etc/modprobe.conf
alias eth0 b44
alias snd-card-0 snd-atiixp
options snd-card-0 index=0
options snd-atiixp index=0
remove snd-atiixp { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-atiixp
上を見てわかるように、NICがeth0という名前に置き換えられているようです。
rc.d
インストールしたソフトの起動用ファイルがインストールされるディレクトリです。
[admin@localhost ~]$ ls /etc/rc.d/
init.d rc.local rc0.d rc2.d rc4.d rc6.d
rc rc.sysinit rc1.d rc3.d rc5.d
この中のinit.dディレクトリに、起動用ファイルが存在します。また、システム起動時に自動的にソフトを起動させるために、rcN.d(Nは1〜6)ディレクトリ以下に、init.d以下の起動ファイルのシンボリックリンクを作成します。ちなみに、Nとランレベルが対応していて、たとえばランレベル3で、iptablesを起動させたければ、/etc/rc.d/init.d/iptablesのシンボリックリンクを/etc/rc.d/rc3.dに作成すれば良いです。
hosts
LAN内でDNSを使用しないでホスト名での通信を行いたい場合は/etc/hostsを設定します。
[admin@localhost ~]$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
- 1 localhost6.localdomain6 localhost6
これは、「IPアドレスが一番左の列のマシンに対して、右の列にある名称でアクセスできるようにする」という意味を持つようになります。
今回は、127.0.0.1(自マシン)に対して、localhost.localdomain または localhostという名前でアクセスできるようにするという意味になります。下の行は、IPv6の時の記述です。
resolve.conf
名前解決をする時、どのDNSサーバを利用するかを設定するためのファイルです。
[admin@localhost ~]$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 192.168.0.1
search localdomain
IPアドレスが192.168.0.1のマシンを利用して、localdomainというドメイン内でホスト名を探すように指定しています。
nsswitch.conf
名前解決の際に、上記した/etc/hostsと/etc/resulve.confのどちらを優先するかを指定します。
hosts.allow,hosts.deny
アクセス制御を行うための設定ファイルがこれらです。これらが適用されるのは、libwrap.aというライブリを利用しているネットワークサービスデーモンです。sshd,xinetd,sendmail等がこれに該当します。
ちょっと仕組みを考えてみると、自マシンにクライアントマシンからのアクセスがあった場合、
最初に/etc/hosts.allowが参照され、設定と適合する場合サービスとの通信を許可します。
次に、/etc/hosts.denyを参照して、この設定と適合する場合、通信を拒否します。
そして、どちらにも該当しない場合は通信の許可をします。
たとえば以下の設定の時、
[admin@localhost ~]$ cat /etc/hosts.allow
sshd: 192.168.0.3[admin@localhost ~]$ cat /etc/hosts.deny
ALL : ALL#
sshによる接続を192,1680.3のクライアントのみに許可して、他のlibwrap.aライブラリを利用するサービスは全てシャットアウトするという設定になります。
xinetd, ineted
「ポートを監視して、接続の要求が来た時に該当するサーバプログラムを起動させる『スーパーデーモン』」の設定を行うファイルです。現在は、xinetdがメインで使われているようです。
sysconfig
ネットワーク関連の設定などを、sysconfig以下のファイルに書き込みます。
たとえば、ネットワークインターフェースの設定は、networkおよび、network-scripts/ifcfg-eth0を見ればわかります。
[admin@localhost ~]$ cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=localhost.localdomain
[admin@localhost ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Broadcom Corporation BCM4401-B0 100Base-TX
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes
/var以下
/log/messages
システムの動作に関する様々な情報書き込まれています。
# cat /var/log/messages
Mar 28 07:42:34 localhost syslogd 1.4.1: restart.
今朝、再起動したみたいですね。
/log/cron
cronによって定期的に実行されるコマンドの実行結果が、ここに記録されます。
# cat /var/log/cron
Mar 28 07:43:01 localhost anacron[2562]: Job `cron.daily' terminated
Mar 28 07:47:31 localhost anacron[2562]: Job `cron.weekly' started
Mar 28 07:49:55 localhost anacron[2562]: Job `cron.weekly' terminated
Mar 28 07:49:55 localhost anacron[2562]: Normal exit (2 jobs run)
Mar 28 08:01:01 localhost crond[2258]: (root) CMD (run-parts /etc/cron.hourly)
Mar 28 09:01:01 localhost crond[2366]: (root) CMD (run-parts /etc/cron.hourly)
Mar 28 10:01:01 localhost crond[2479]: (root) CMD (run-parts /etc/cron.hourly)
とくにcronは設定していないので面白いことは書いてありませんでした。
以上です。
まとめると、設定をしたかったら/etc、ログを見たかったら/varに行け!って感じですね。(いいすぎ?)
構造を理解するって、やはり凄く重要なのだなぁと実感したこの前でした。
ネットワークを構成する機器
最近ネットワーク機器に触れる機会が増えてきたので、各々の機器の役割を理解したいと思い、まとめてみました。
今回考えるネットワークの全体像
WAN(Wide Area Network)とLAN(Local Area Network)が、それらの橋渡し役である"ルータ"によって接続されている。以下LAN環境について考える。
- ルータの下には、パケットの交通規制を行う"ファイアウォール"が繋がっている。
- ファイアウォールには、VLAN(後述)の橋渡し役となる"L3スイッチ"が繋がっている。
- L3スイッチには、端末(PCなど)同士を直接繋げている"L2スイッチ"が繋がっている。
- L2スイッチに、端末が繋がっている。
こんな感じのネットワークについて考えたいと思います。
ルータ
ルータとは?
"ネットワークとネットワークを繋げてくれる役割"を果たします。
どうやって繋げているのか?
これはルータが、IPアドレスを元にパケットをルーティングしてくれる事から実現されます。
ルーティングとは、送り先のネットワークにパケットを送るための、適切な"経路を決め"て送ってくれる事です。
"経路を決め"というのは、パケットが目的のネットワークにたどりつくためには、他のルータを経由しなければいけない時があるからです。
ルーティングの仕組み
ルーティングは、"ルーティングテーブル"の情報に基づいて行われます。
ルーティングテーブルには、
- 宛先のネットワークアドレス
- 宛先ネットワークアドレスへパケットを送信する時に利用する、自分のポート
- 宛先ネットワークアドレスへパケットを送るために、次に経由するべきルータのアドレス
- 最適ルート選択のための値
の4つの情報が含まれています。しかし、この情報はルータが最初からもっているわけでは無いので"学習"させてあげなければなりません。
ルーティングテーブルの学習
ルーティングテーブルの学習には、2つの方法があります。
「スタティックルーティング方式」と「ダイナミックルーティング方式」です。
1.スタティックルーティング方式
手動でルーティングテーブルを学習させる方法です。
- 登録の手間がかかる。
- ルータには負荷がかからない。
という特徴を持っています。
2.ダイナミックルーティング方式
自動でルーティングテーブルを学習する方法です。
- ルータに負荷がかかる。
- 登録に手間はかからない。
という、スタティックルーティング方式とは逆の特徴をもっています。
ルータのその他の特徴
ルータは、ネットワークを分割する。
ルータはネットワークとネットワークを結びつけてくれますが、逆に言うとルータを境界としたネットワークは、分割された異なるネットワークとして扱われます。
NAT/IPマスカレード機能
ローカルIPアドレスをグローバルIPアドレスに変換してくれる機能を持っています。
これによって、LAN内でローカルIPを持つ端末が外部に向けて通信をする時に、グローバルIPに変換してもらって通信を可能にすることができます。
ファイアウォール
"LAN内の内部ネットワークを外部ネットワークから守る"役割を果たしてくれます。
機能
ファイアウォールに大きな機能は3つあり、これらによってセキュリティを高めてくれています。
1.アクセス制御(フィルタリング)
通信のアクセス規制をしてくれます。
チェックする項目の特徴的なモノを以下にあげます。
- IP
- プロトコル
- ポート
etc...
かなり細かく設定できるようなので、管理者のスキルが問われます。
2.アドレス変換
ルータと同様に、ローカルIPアドレスとグローバルIPアドレスを変換する機能を持っています。
これによって、外部ネットワークに内部のIPアドレスを隠すことができます。
3.ログ収集
不正アクセスなどのログを解析し、ネットワークが危険にさらされていないか監視することができます。
L3スイッチ
主に"VLAN(後述)を繋ぐため"に必要な機器です。
機能
"L2スイッチ(L2スイッチ)"+"ルーティング機能"を兼ね備えている。
- VLANを越えての通信を可能にする。
- ルーティングをハードウェア処理で行う。
- 複数のポートをグループ化して、IPを割り振ることが可能
ルータとの違い
ルーティング機能を兼ね備えているので、ルータとの違いが分かりにくいですが、違いはしっかりとあるので以下に示します。
ルータ | L3スイッチ | |
---|---|---|
ルーティング処理 | ソフトウェア | ハードウェア |
WANインターフェース | 豊富 | 少ない |
アドレス:ポート | 1:1 | 1:多 |
NAT/IPマスカレード機能 | あり | なし |
簡単に説明すると、
ルーティング処理は、ハードウェア処理をするので、L3スイッチの方が早いです。
WANインターフェース(イーサネットなど)は、ルータの方が豊富に取り扱うことができます。
一つのアドレスをいくつのポートに割り振れるかという点について考えると、ルータは一つのアドレスを一つのポートにしか割り振れませんが、L3スイッチは1つのアドレスを複数のポートに割り振ることができます。
また、NAT/IPマスカレード機能は、L3にはありません。
以上を考えてみると、L3スイッチは内部ネットワーク内の橋渡しに特化していて、ルータは、外部ネットワークとの橋渡しに特化している。と言えるようです。
L2スイッチ
複数の端末を一つのケーブルにつなぎ、繋がった端末を通信できるようにする。
機能
通信宛先の端末が繋がっているケーブルにデータを流します。
このようにデータを流すための"MACアドレステーブル"を学習します。この学習内容は、自分のポートとその接続先にある端末のMACアドレス(ネットワークに繋がるときに、自分がどの機器かを判別するために各々の機器が持っている識別番号)の対応を覚える事です。
比較:リピータハブ
繋がっている機器同士で通信するために、以前はよくリピータハブが用いられていました。
これは、ハブに繋がっている、すべての端末に無差別にデータを送信します。受け取る端末が、データに付加されているMACアドレス情報を見て、自分宛てならば受け取るし、受け取らないならば破棄をします。
この方式の問題は、一つの端末が通信を行っている時、他の端末が通信を行うとデータの衝突が起きてしまい、通信できなくなってしまう事です。これを解決するために、それぞれが衝突しないタイミングで通信をしようとします(これをCSMA/CDと言います)が、回線が開くのを待つ時間が発生するので遅くなってしまうという問題も持っています。
VLAN
スイッチのポートに論理的なネットワークを対応させることで作るネットワークをVLANと言います。
これによって、一つの物理的なネットワークを複数の論理的なネットワーク(VLAN)に分けることができます。
メリット
- セキュリティを強化できる
- LANの変更が容易
- 回線消費の減少
まず、もともと一つだったネットワークを用途に応じて分割することで、異なるネットワークとして存在させることにより、セキュリティを高める事ができます。
次に、仮想的なネットワーク(LAN)であるので、変更が容易です。
さらに、同一のネットワーク内に一斉にデータを送信する"ブロードキャスト"の範囲が、VLANで分割したことにより狭まるので、開戦の消費を減らすことができます。
注意ポイント
VLANは、上述したように異なるネットワークとして存在させるので、違うVLAN同士で通信をおこなうときには、ルータもしくはL3スイッチが必要になります。
以上が、最近勉強したネットワーク機器やその他周辺知識についてです。
読んでくださりありがとうございました。
LVMによるパーティション管理
今回は"Linuxにおける"パーティションについてと、その管理方法であるLVMについてまとめたいと思います。
動機
サーバー用にCentOSをインストールする事になった。
いつもはテキトウに済ませてしまっていたのですが、ファイル管理上をしっかり意識する必要が出てきたので、ちゃんと勉強する事にしました。
パーティションとは?
一つのハードディスクを分割して使う時の単位です。
分割して利用する事で、一台のハードディスクを、複数の用途に分けて使う事ができます。
(用途例:ここのパーティションにはwindowsを入れる。ここのパーティションは、システム部分、そしてここはデータ部分を担当させる。といった風)
パーティションを利用するメリット
3つあると思います。
1.バックアップしやすい
2.障害に強い
3.ディスクの有効活用ができる
1.について
パーティションに分割し、更新頻度の高いシステムと低いシステムで分割しておく事で、前者と後者のバックアップ頻度を合わせることができ、効率的なバックアップを行うことができるようになる。
2.について
パーティションごとに、アクセス権を変更したり、暗号化したりと、セキュリティ対策をとる事ができます。
また、もしディスクに論理的な障害が起きたとしても、その対象ディスクにだけ対策をとればよいので、他のディスクに影響を与えません。
3.について
1~数KBといった小さなファイルが無数に存在するパーティションでは、ブロック(データを保存するための最小の単位)・サイズを1KBにしてあげる事で、無駄な容量を使わないで済みます。
標準のブロック・サイズは4KBなので、もし1KBのデータを保存する時は、3KB無駄にしてしまいます。
パーティション割り振りの考え方
Linuxのパーティションの取り扱い
Linuxがパーティションを扱う時は、/(ルートディレクトリ)を起点としたディレクトリ・ツリーの中に、個別のディレクトリに割り当てて(以下マウント)して運用します。
マウントの方法
このマウントを行う方法は3つあります。
1.Linuxの起動時にマウントをする
2.必要な時に手動でマウントする
3.必要な時に自動でマウントする
1.について
/etc/fstabに記載されている無いように基づいてマウントを行います。
これは、mountコマンドが、Linuxが起動する時に自動的にrc.sysinitというスクリプトを行ってくれることで実現します。
2.について
必要な時に、mountコマンドを実行すれば良い。
3.について
autofsを利用します。
パーティションの種類
LVMによるパーティションの管理
以前までのパーティション分割方法は、「物理的なハードディスクをいくつかに分割する」と言う方式だけだったそうです。
「分割するだけ」なので、その後に「やっぱ容量が足りないから増やしたい!」となった時には、困ってしまっていたそうです。
しかし、現在はLVM(Logical Volume Management)を利用する事で、その問題を解決する事ができます。
LVMとは?
物理的なパーティションを、細かなブロックに分けて、そのブロックを寄せ集める事で、論理的なパーティションとして再編成する仕組みです。
まず、LVM用の物理的なパーティションであるPV(Pysical Volume)を用意します。
次に、PVを一定サイズに分割した、PE(Physical Extent)を用意します。
そのPEを寄せ集めて、想像上のパーティションであるLV(Logical Volume)を用意します。
この、"PEの寄せ集め"で構成されている事から、パーティションを拡大したり、縮小したりする事ができます。
しかし、注意しなければいけないのが、寄せ集める事のできるPEについてです。
LVを構成するためのPEは、同じVG(Volume Group)にいなければなりません。
このVGは、想像上のディスクドライブのようなものです。色々な物理的なパーティションを集めて、構成します。
自分のマシンの現状
現状のディスク使用状況と、パーティションの表示は、df -Hで表示する事ができます。
こんな感じで出力されました。
[root@vm ~]# df -H Filesystem Size Used Avail Use% マウント位置 /dev/mapper/VolGroup00-LogVol00 154G 1.9G 144G 2% / /dev/hda1 104M 19M 81M 19% /boot tmpfs 397M 0 397M 0% /dev/shm
こちらは、CentOS5.2をインストールした際に、パーティション設定を自動で設定してもらった際の設定です。
/bootが物理パーティションに割り振られ、/がLVに割り振られている事が分ります。
では、実際にLVMをいじってみよう!といきたいところですが、
LVMの扱い方は、こちらがとても分りやすいので、ご紹介させていただく形で終わりたいと思います。
人気企業ランキング
最近就職活動が本格化ということで、載せさせていただきます。
就活SNSリクトモを利用している就活生による人気企業ランキングは以下。 人気企業ランキング by 就活SNSリクトモ
学情ナビ調べ、東洋経済調べ、アエラ調べ
古いノートPCが復活。Puppy Linuxをインストール
我が家のPCがデスクトップなので、ゴロゴロしながらネットサーフィンをしたい時に向きません…笑
そこで古いノートPCを復活させることにしました。
ですが、XPを動かすと重いです…
そんなわけで、サクサク動くlinuxを探してみました。
見つけたのが、以下の二つです。
どちらも非常に軽いようで、僕のPCでも問題なく動く雰囲気です。
今回はpuppy linuxをインストールしたのでその記録です。
(ちなみに、インストールしなくても、CDで動きます!)
もし、DSLに興味がある方は、こちらを参考にして使ってみてください。
Installing to the Hard Disk - DSL Wiki
http://www.inohara.net/~kazuyoshi/lan-dsl-vectra.htm
http://wikis.jp/dsl/index.php?install2
puppyの概観を掴むには、以下が参考になります。
環境
PC : 10年前くらいに買った、TOSHIBA Mebius
CPU : mobile AMD Duron Processor : 800MHz
メモリ : 120MB
HDD : 18.63GB
インストール
1.パーティション作成
に従って作成します。
僕の場合は、パーティションは、以下のように作成しました。
ちなみに、puppyの/(ルート)のインストール先である、/dev/hda2に、
boot フラグを立てないと、インストールしても起動できないので注意してください。。
僕は最初全く理解していなかったので、はまってしまいましたorz
(Gpartedで、/dev/ext2/を右クリック→Manage Flags→bootにチェックです)
3.設定
・マウスクリック
マウスパッドを使ってポイント操作をしていると、アイコンを通り過ぎただけで、
ウィンドウが開くので使いにくいなぁ…と思っていたら、シングルクリック設定に
なっていたようです。
こちらの記事を参考にさせていただき、修正しました。
ちなみに、ROX-filerは、「メニュー」→「ファイルシステム」の中にあります。
・CapsLockキーをCtrlに
「メニュー」→「セットアップ」→「マウス/キーボードウィザード」→「高度なxorgの設定」→「オプションタブの「コントロールキーの位置」」→「ctrl:swapcaps」
とやるだけで簡単に行えます。
(ただし、Xserveerがxorgの時に限ります!xvesaの時の設定は、色々な手段を試してみましたがうまくいきませんでした…)
感想
以上で簡単に設定は終了としてネットサーフィンをしてみました!
サクサク動くのでかなり満足な使用感です♪
もし、「いらない古いPCがあるんだよな」という方がいらっしゃったら、試されてみてはいかがでしょうか?
(自己責任でお願いします…笑)
また、何か便利設定があったら報告します!では!
Xenでサーバ環境構築その1〜xenについて知ろう〜
Xenでサーバ構築をしたいので、色々調べてみました。
Xenとは何か?仕組みはどうなっているのか?
そして調べていくうちに出てきた、「完全仮想化」と「準仮想化」がどのようなもので、どちらを利用して構築するか?
について、まとめました。
参考にさせていただいたサイトはこちらです。
http://www.valinux.co.jp/contents/tech/techlib/xen/xen_sp_02.html
インストールと環境構築 (1/3):実践! Xenで実現するサーバ統合(1) - @IT
http://www.computerworld.jp/topics/vt/59310.html
第1回 オープンソースの仮想マシン・ソフト「Xen」 | 日経 xTECH(クロステック)
エンタープライズサーバ ES7000シリーズ【日本ユニシス】
第1回 ●仮想化とは何か | 日経 xTECH(クロステック)
Xenとは?
一つのハードウェアを、複数のハードウェアがあるかのように扱う事ができる「仮想化」を実現し、その仮想化されたハードウェア上で複数のOSを同時に動作させることができるソフトウェア。
ホストOSを必要とせず仮想マシンを動作させる、「仮想マシン・モニター」の代表の一つ。
ホストOSを必要とするものには、VmwareServer等がある。
Xenを導入するメリット
(サーバ動作環境として利用するという前提。)
コスト面
- リソースの有効活用
一台の物理サーバ上に複数台のサーバ機能を集約することで、リソースを有効活用し、「物理サーバ」の削減を行う事ができる。
また、リソース使用率の低いサーバを複数まとめることで、ハードウェア当たりのリソース使用率を向上させる。
仮想化時におけるサーバの独立性
- 複数台のサーバが影響を及ぼしあわない
仮想化した各サーバのリソース必要量や優先度に応じて、柔軟にリソースを配分する事が可能である。配分した以上は、他のサーバからの影響を受けない。
この配分は動的に変化させる事も可能。
独立性が確保されているので、セキュリティを確保している。
運用面
- テスト環境、開発環境の容易な構築
- 事前に用意した仮想サーバを用いての新規仮想サーバの容易な構築
- OSから上の層に変更を加えずに異なるサーバへ移動
仮想サーバの複製、サーバ使用状況やハードウェアの更新に合わせたハードウェア間の移動が可能となり、上記の事を実現できる。
仕組み
仮想化と準仮想化
Xenは、準仮想化と呼ばれる手段を使って仮想化している事が特徴。(ただし、完全仮想化も存在する)
仮想化が、ハードウェアをエミュレート(模倣)するのに対して、準仮想化は、完全にハードウェアをエミュレートはしない。その代わりに仮想環境に適した形の仮想ハードウェアを作り出す。
理由は、そうする事で仮想環境上に存在するゲストOSからの要求をそのまま処理できるため、動作が早くなるからだ。ただし、ゲストOSはこの仮想ハードウェア上で動作するように書き換えなければならない。
一方の完全仮想化は、ゲストOSからの仮想ハードウェアに対する要求が、一度CPUに受け取られる。
その後、CPUからXenに制御として渡される。
その制御を渡されたXenは、ゲストOSが行おうとした処理を分析して、仮想ハードウェアの動作をエミュレートしなければならない。
このせいで準仮想化に比べて、オーバーヘッド(与えた命令以外に付随してくる処理)が大きくなってしまう。
準仮想化の構造
続けて準仮想化における構造的な話をすると、「Domain0」と「DomainU」と呼ばれるものがOSを動作させるために存在する。
まず「Domain」とは一つ一つの仮想マシン環境を指し、これはXenの上に存在する。
そして「DomainU」には、ゲストOSが入る。「Domain0」は、物理デバイスの制御及び、Xenのマネジメント機能を受け持つOSが入る。
「DomainU」からの要求が実際に処理される際には、要求がXenを通して「Domain0」に渡され、「Domain0」が物理デバイスの制御を行える事を利用してなされる。
この、Domain0のおかげで、Xen自身がシンプルな構造を保っていられる。
完全仮想化と準仮想化それぞれのメリット、デメリット。
メリット
完全仮想化…OSを書き換える必要がないので、どのようなOSでもインストールする事ができる。
準仮想化…要求を直接エミュレートさせる事ができるので、処理が早い
デメリット
完全仮想化…オーバーヘッドが大きくなるため、動作が重くなる。
準仮想化…OSを書き換えなければいけないので、全てのOSを利用する事ができるわけではない。
以上です。
次回は実際に、環境構築を行っていこうと思います。
利用しようとしている、CentOSは準仮想化に対応していそうなので、そちらで構築していきたいと思います。