Edited at

仮想化技術について (LPIC 304対策用メモ)


仮想化のメリット


  • 物理サーバ及びサーバの設置スペース

  • 物理サーバの調達や運用・管理コスト

  • 消費電力などのランニングコスト


ホストOS型


  • ホストOSの上に構築するタイプ


ハイパーバイザー型


  • ホストOSを介するオーバーヘッドがない

  • 準仮想化:ゲストOSのコードに改変が必要、デバイスドライバはゲストOS上にインストール

  • 完全仮想化:windowsなども使える、パフォーマンスは劣化する

  • ゲストOSが特権CPU命令を出すにはバイナリトランスレーション、CPU仮想化支援機能を使用する

  • CPUの仮想化支援機能では仮想化ソフトウェアの処理を一部担うことでパフォーマンスを向上させる

  • AMD-V, Intel Vt


コンテナ型


  • OS上で仮想環境を動かす

  • ゲストOSや仮想ハードウェアは含まれない


Xen


特徴


  • ハイパーバイザー型仮想化テクノロジー

  • 各種デバイスの操作はカーネルへ依存

  • SMP(Symmetrical Multi Processing)にも対応

  • 準仮想化ゲストと完全仮想化ゲストをサポート

  • 完全仮想化ドメインをHVMと呼ぶ

  • 管理用OSを実行するドメインをDomain-0

  • ゲストOSを実行するドメインをDomain-U

  • ブリッジモードがデフォルト

  • ネットワークインターフェースはDomain-0側にvif1.0


設定ファイル

/etc/xen/domain1

例)完全仮想化ゲストを動かすための設定ファイル例

builder='hvm'

/etc/xen/xl.conf(グローバル設定ファイル)

/etc/xen/xl.cfg(ドメイン個別の設定ファイル)


コマンド類


xl(xmの拡張)

xl <サブコマンド> [引数]

Xenを操作するためのコマンドラインユーティリティ

サブコマンド
説明

block-attach
新しい仮想ブロックデバイスの作成

block-detach
ドメインの仮想ブロックデバイスの切り離し

block-list
ドメインにアタッチされているブロックデバイスを表示

cd-eject
ゲストドメインの仮想CDドライブからのCD取り出し

cd-insert
CD挿入

console
ドメインの仮想コンソールを開く

create
ドメイン起動

destroy
ドメイン強制終了

info
Xenホストの情報を表示

list
現在動作しているドメインの基本情報を表示

migrate
ドメインを別ホストに以降

shutdown
ドメインの正常終了

vcpu-set
仮想CPU数の変更


xe

xe <サブコマンド> <引数=値>

XAPIはXenのサブプロジェクトとして開発されており、XenServerのためのデフォルト管理ツールの拡張

サブコマンド
説明

cd-list
CDの一覧表示

sr-destroy
ストレージリポジトリ削除

sr-list
ストレージリポジトリ一覧表示

vm-cd-insert
ISOファイルのマウント

vm-destroy
ホスト上の仮想マシン削除

vm-list
ホスト上の仮想マシン一覧表示

vm-start
仮想マシンの起動


xentop

xentop <オプション>

Xenシステム及びドメインにおける利用状況をリアルタイムで表示するためのコマンド

オプション
説明

-b, --batch
出力データをコンソールへリダイレクト

-d, --delay
更新間隔を秒数で表示

-f, --full-name
完全ドメイン名を表示

-n, --networks
ネットワーク情報を表示

-v, --vcpus
VCPUの情報を表示

-x, --bbds
ブロックデバイスを表示


xebstore-ls

xenstore-ls [オプション] [パス|UUID] [引数]

XenStoreに格納されているキーと値を情報を一覧表示するためのコマンド

オプション
説明

-f
すべてのキーのフルパスを表示

-p
パーミッションを表示

-s
ローカルソケットのみを使用してxenstoredに接続


KVM (Kernel-based Virtual Machine)


特徴


  • 完全仮想化をサポート

  • CPUの仮想化支援機能を前提に設計/開発

  • Intel VT 及びAMD-Vが必要

  • ハードウェアデバイスのエミュレータが必要

  • QEMUが使用されている

  • カーネルの一部として組み込まれている為カーネルのデバイスドライバをそのまま利用できる

  • kvm.ko, qemu, libvirt, brige-utilsが必要

  • ホストOS上にvirb0という仮想ブリッジとTAPデバイスが作成される

  • Libvirtのlibvirtdデーモンによって管理される


設定ファイル

/etc/kvm

/dev/kvm


コマンド類


qemu-img

スナップショットのファイル形式はqcow,qcow2

qemu-img <サブコマンド> [オプション]

サブコマンド
説明

check
ディスクイメージにエラーがないかどうかのチェック

commit
変更のコミット

convert
ディスクイメージの変換

create
指定したファイル名で新しいディスクイメージを作成

info
ディスクイメージに関する情報の表示

snapshot
スナップショットの表示(-l), 適用(-a), 作成(-c)


QEMUモニタ

Ctrl + Alt + 2でモニタ切り替え

コマンド
説明

change
メディアの変更

commit
ディスクイメージに対する変更を確定

delvm
スナップショットの削除

eject
メディアの取り出し

info <引数>
情報の表示

loadvm
スナップショットから仮想マシンを復元

savevm
スナップショットの作成


qemu-kvm

KVMを管理/操作するための基本ユーティリティ

qemu-kvm [オプション]

オプション
説明

-drive
新しいドライブを定義

-boot
ドライブの起動順序を定義

-cdrom
指定したファイルをCD-ROMイメージとして使用

-snapshot
ディスクイメージファイルの代わりに一時ファイルを書き出し

-usb
USBドライバを有効化

-uuid UUID
UUIDを設定


brctl

ブリッジを管理するコマンド

オプション
説明

addbr
新しいブリッジの作成

addif
ブリッジにインターフェースを接続

show
ブリッジの状態を確認


tunctlコマンド

TUN/TAPデバイスを作成/管理するためのコマンド

オプション
説明

-b
インターフェース名の表示

-n
TUNインターフェースの作成

-p
TAPインターフェースの作成

-d
指定したインターフェースの削除

-t
インターフェース名を定義


OpebVZ


特徴


  • Linuxカーネルをベースとしたオープンソースのコンテナ型仮想化ソフト

  • Windowsは動かせない


コマンド類


vzpkg

EZテンプレートのインストール等


vzctl

OpenVZの操作

vzctl <サブコマンド> <コンテナID>

オプション
説明

create
コンテナ作成

destroy
コンテナ破棄

exec
OS上の任意のコマンドの実行

exec2
上記+exitコードを返す

restart
コンテナの再起動

set
各種設定

start
コンテナ起動

stop
コンテナ停止

suspend
コンテナ一時停止


LXC(Linux Container)


 特徴


  • カーネルの機能(cgroups)を用いてコンテナを実現

  • 高性能

  • テンプレートファイルを使用してコンテナを作成


設定ファイル

テンプレート

/usr/share/lxc/templates


コマンド類

コマンド
説明

lxc-console
コンテナにコンソール接続

lxc-create
コンテナ作成

lxc-destroy
コンテナ破棄

lxc-start
コンテナ起動

lxc-stop
コンテナ停止


その他ツール類の説明


  • Docker : コンテナ仮想化ツール

  • Chef : サーバーの環境構築、運用などを自動化するためのツール

  • Puppet : 構成管理ツール。Rubyで書かれている

  • Ansible : 構成管理ツール

  • Packer : サーバーイメージを作成するためのツール


Libvirt


概要/特徴


  • Xenに対応するAPIとして開発がスタート

  • 仮想化環境を操作/管理するための共通インターフェス(抽象化ライブラリ)

  • libvitrdが内部で動いている

  • 起動すると「default」というNATブリッジが作成される

  • SASL/Kerberos/SSHのプロトコルをサポート


設定ファイル

/etc/libvirt/libvirtd.conf


関連ツール

ツール
説明

virt-clone
イメージ複製ツール

virt-image
XMLファイルから仮想マシンを作成するためのツール

virt-install
メディアから新しい仮想マシンを作成するためのツール

virt-manager
GUI管理ツール

virt-viewer
グラフィカルコンソール


コマンド類


virsh <サブコマンド> [引数]

libvirtが提供する標準のコマンドラインツール 

コマンド
説明

autostart
libvirtdの起動時にゲストの仮想マシンを自動起動

change-media
仮想マシンにアタッチされたCD-ROMイメージファイルを変更

console
ゲストの仮想マシンのコンソールに接続

create
XMLファイルからゲストの仮想マシンを作成

destroy
ゲストの仮想マシンを強制停止

dump
ゲストの仮想マシンのコアダンプを出力

dumpxml
ゲストの仮想マシン用の設定ファイルをXML形式で出力

list
ゲストの仮想マシン一覧を表示

migrate
ゲストの仮想マシンを別ホストに移行

net-auto
仮想ネットワークの自動起動

net-edit
ゲストの仮想ネットワークの一覧を表示

net-list
仮想マシンネットワークの一覧を表示

net-start
仮想ネットワークを起動

reboot
ゲストの仮想マシンを再起動

resume
ゲストの仮想マシンを再開

save
ゲストの仮想マシンをファイルに保存

setmem
ゲストの仮想マシンに割り当てるメモリサイズを設定

setvcpus
ゲストの仮想マシンに割り当てる仮想CPU数を設定

shutdown
ゲストの仮想マシンを停止

suspend
ゲストの仮想マシンを一時停止

vcpuinfo
ゲストの仮想CPUを表示

vcpuin
CPUアフィニティを設定

vol-list
ストレージプール内のストレージボリュームの一覧を表示


クラウド管理ツール


OpenStack


  • IaaS用プラットフォーム

  • 主要コンポーネント(Cinder,Glance,Keystone,Neutron,Nova,Swift)


CloudStack


  • 現在は Apache CloudStackとして開発

  • 管理サーバがさまざまなハイパーバイザーと通信する基盤を提供


高可用の概念と理論


高可用クラスタとは


  • システムに冗長性を持たせSPOFをなくすことで耐障害性を向上させること


スプリットブレイン


  • ネットワークの不具合等が原因でノード間のハートビート通信が途絶えた場合に複数ノードがマスターとなってしまったりサービスの二重起動が起きてしまう減少。


フェンシング


  • クラスタ内のあるノードで障害が発生した場合そのノードの挙動はシステムにとって何らかの問題を引き起こす可能性がある。速やかに障害ノードと正常ノードの干渉を防ぐ。フェンシングデーモンによって実装される。

コマンド
説明

パワーフェンシング
パワーコントローラーを使用して障害ノードの電源をOFFにする

スイッチフェンシング
障害ノードと他のノードや共有ディスクとの通信をスイッチで遮断する

GNBDフェンシング
GNBDサーバに対するアクセスを無効にする


クォーラム


  • 議決に必要な定足数

  • 一定数以上の正常なノードが存在していればそのクラスタグループを有効なグループとみなす

  • 有効では無いグループをフェンシング

  • ノードマジョリティとも呼ばれる


ディザスタ・リカバリ


  • 地震や火事などを想定した災害からのシステム復旧を表す言葉

  • RPO(Recovery Point Objective) 過去のどの時点まで戻すか

  • RTO(Recovery Time Objective) いつまでにデータを復旧すればよいか


ロードバランスクラスタ(負荷分散クラスタ)


LVS(Linux Virtual Server)


  • クライアントからのリクエストを複数のサーバに振り分ける機能を提供

  • サービスを提供するサーバをリアルサーバ

  • 割り振るサーバを仮想サーバ

  • トランスポート層で動作するためレイヤ4スイッチングともいう

  • 中心的なコンポーネントとしてip_vsがある

  • lsvdがnannyという子プロセスを生成し1対1で対応する


LVSのフォワーディング方式

/proc/sys/net/ipv4/ip_forward = 1の必要がある

方式
説明

NAT
宛先IPアドレスをリアルサーバのアドレスに変換して転送

ダイレクトルーティング
宛先IPアドレスは変えずにMACアドレスのみをリアルサーバのアドレスに変換して転送

トンネリング
受け取ったパケットをリアルサーバ宛のIPヘッダでカプセル化して転送

ローカルノード
ロードバランサでリアルサーバの処理を兼用することが可能


LVSの接続スケジューリングアルゴリズム

コマンド
説明

ラウンドロビン
rr

重み付けラウンドロビン
wrr

最少コネクション
lc

重み付け最少コネクション
wls(デフォルト)

ローカリティベースの最少コネクション
lblc

宛先ハッシュ
dh

送信元ハッシュ
sh

最小遅延予測
sed

キューなし
nq


ipvsadm

LVSの管理ユーティ里程コマンド

ipvsadm <サブコマンド> [オプション]

コマンド
説明

-A
仮想サーバの追加

-a
仮想サーバにリアルサーバを追加

-D
関連づいているすべてのリアルサーバと仮想サーバを削除

-d
仮想サーバからリアルサーバを削除

-E
仮想サーバの編集

-e
仮想サーバに関連づいているリアルサーバを編集

--start-daemon
接続同期デーモン開始

--stop-daemon
停止


keepalived


  • リアルサーバの稼働状況を監視

  • ロードバランサ自体の冗長化をサポート

  • LVSとの併用で運用

  • 設定ファイルは「/etc/keepalived/keepalived.conf」

  • ロードバランサの設定はvirtual_serverで行う。


VRRP


  • ルータの冗長化をするための標準プロトコル

  • パスワードによる認証と、IPSecAHによる認証をサポートしている


ldirectord (Linux Director Daemon)


  • LVSクラスタにおいてHeartbeatと連携して動作する負荷分散システムの監視/管理するツール

  • LVSの複雑な構成における設定/管理が可能

  • 設定ファイルは「/etc/ha.d/ldirectord.cf」

コマンド
説明

autoreload
設定ファイルが変更された場合の自動読み込み

checkinterval
リアルサーバへの接続テストの間隔

checktimeout
異常と判断するまでの待ち時間。デフォ5秒

checktype
リアルサービスの死活監視のチェック方法

fallback
リアルサーバが停止した場合のリクエスト転送先

logfile
ログファイルの保存先

quiescent

real
リアルサーバとサービスの指定


HAProxy


  • レイヤ7をサポート

  • 設定ファイルは「/etc/haproxy/haproxy.cfg」


フェイルオーバクラスタ


Pacemaker


  • クラスタエンジン : HeartBeat3, Corosync

  • リソースマネージャ : PaceMaker, OpenAIS

主要コンポーネント

コマンド
説明

CIB
Cluster Information Base cib.xmlに設定は保存

CRMd
クラスタにおけるリソース管理の中心となるデーモン

PEngine
Policy Engineの略でありCIBの情報に基づいてクラスタの最適な状態を算出する

LRMd
ローカルノードのリソース管理デーモン

STONITHd
スプリットブレインを防ぐフェンシングデーモン

管理ユーティリティ

コマンド
説明

crm_attribute
ノードの属性とクラスタのオプションを管理

crm_mon
クラスタの現在の動作状態をモニタリング

crm_node
クラスタのノード情報を一覧表示

crm_resource
クラスタリソースに関するタスクを実行

crm_shadow
設定変更を実際のクラスタで実行する前にサンドボックスで実行

crm_simulate
イベントに対するクラスタの応答をシミュレート

crm_standy
crm_attributeのラッパー

crm_verify
設定の構文チェック


エンタープライズLinux


RHELの高可用性アドオン


  • RHELがHigh Availability Add-Onというソフトウェアコンポーネントのセットを提供

  • CMAN,DLM,フェンシング機能

  • RGManager

  • Conga,Luci,Ricci


SUSE Linux


  • PaceMaker,Corosync,OpenAIS,Geo Clustering,HAProxy

  • OCFS2,GFS2,cLVM2

  • DRBR,Relax-and-Recover

  • 統合コマンドラインインターフェース,Hawk


DRBD及びcLVM

<主要な知識範囲>

・DRBD のリソース、状態、レプリケーションモードの理解

・DRBD のリソース、ネットワーク、ディスク、デバイスの理解

・DRBDの自動復旧とエラー処理。

・drbdadmを使用したDRBDの管理

・drbdsetup と drbdmetaの基本知識

・DRBD と Pacemakerの統合

・cLVM

・cLVM とPacemakerの統合

<重要なファイル、用語、ユーティリティ>

・プロトコル A, B および C

・プライマリ、セカンダリ

・3ノードレプリケーション

・drbd カーネルモジュール

・drbdadm

・drbdsetup

・drbdmeta

・/etc/drbd.conf

・/proc/drbd

・LVM2

・clvmd

・vgchange, vgs

Protocol A. 非同期レプリケーションプロトコル。

Protocol B. メモリ同期(半非同期)

Protocol C. 同期レプリケーションプロトコル。


クラスタファイルシステム