Linux
openstack
docker
lpic
仮想化

仮想化技術について (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. 同期レプリケーションプロトコル。

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