一歩進んだxen仮想化環境構築 -...

19
1 一歩進んだXen仮想化環境構築 日本仮想化技術株式会社 技術部 野津 自己紹介 • Xenを主に担当 – Xenを利用したホスティングシステム でもVMware関連の業務が多い • Xenベースのクラウド(IaaS)管理ソリュー ションを開発中 実はPaaSSaaSのほうが面白そうだと思って いる 2

Upload: others

Post on 02-Sep-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

1

一歩進んだXen仮想化環境構築

日本仮想化技術株式会社 技術部 野津 新

自己紹介

•  Xenを主に担当 – Xenを利用したホスティングシステム – でもVMware関連の業務が多い

•  Xenベースのクラウド(IaaS)管理ソリューションを開発中 – 実はPaaSやSaaSのほうが面白そうだと思っている

2

2

アジェンダ

•  Xenの概要 •  ストレージ

– ストレージ構成 – QCOW2ディスクイメージの利用

•  ネットワーク – Xenネットワークのしくみを確認 – ユーザに管理権限を与えるリスクと対策

3

Xen環境の構成要素 •  Xenハイパーバイザ

–  CPU、メモリをドメイン(=VM)に割り当てる –  ドメインに割り込みを配信する –  デバイスの制御はしない

•  Domain-U –  一般のVM、いわゆるゲスト

•  Domain-0 –  管理VM –  Domain-Uの制御(起動、停止...) –  物理デバイスの制御 –  Domain-UのディスクIO、ネットワークIOを物理デバイスに反映 –  一般アプリケーションを実行することも可能だが通常は管理に専念

4

3

Domain-Uの仮想化タイプ •  準仮想化(PVドメイン)

–  Xen上で動作するように変更されたゲストOS(カーネル、ドライバ)が必要

–  主要Linuxディストリビューションは対応済み •  完全仮想化(HVMドメイン)

–  ゲストOSの改変不要 •  Windows等をゲストOSとして利用可能

–  CPUの仮想化支援機能が必要 –  準仮想化と同等の性能を発揮するにはゲストOSに準仮想化ドライバが必要

•  ディスク、ネットワーク •  準仮想化では利用できないゲストOSの場合だけ完全仮想化を選択する

5

Xenを採用している仮想化製品 •  Xen自体の機能はほぼ共通

•  管理方法の違いが大きい –  テンプレート –  クラスタ/HA –  ストレージ管理

•  各Linuxディストリビューション –  virt-managerによる管理が標準的

–  Xenのバージョンは3.0~3.4まで様々

•  Citrix Xen Server –  XenCenterによる管理

•  Oracle VM –  Webベースの管理

6

4

ストレージの選択

•  ストレージは運用形態やコストへの影響大 •  ストレージ接続方式の選択肢

– ローカルストレージ – 共有ストレージ(FC,iSCSI,AoE,DRBD,...) –  NFS

•  仮想ディスクイメージの選択肢 – ブロックデバイス – 論理ボリューム(LVM) – ディスクイメージファイル

•  ファイル形式にも複数の選択肢 •  共有ストレージ上では共有ファイルシステムが必要

7

単一ホスト+ローカルストレージ構成

•  一般的なハードウェアだけで実現可能

•  ローカルストレージに仮想ディスクを置く

•  リソース不足の場合はハードウェア増強

•  耐障害性は低い –  ホスト停止時には全

VMが停止

Xenホスト

ローカル ストレージ

VM VM VM

8

5

複数ホスト+共有ストレージ構成 •  共有ストレージ

–  NFSでも可 •  リソース不足の場合はホストの数を増やす –  ストレージやファイルシステムによる上限に注意

•  ホスト停止の場合は他のホストにVMを移動 –  計画停止なら停止前にライブマイグレーション

–  計画外停止なら別ホストでの再起動

Xen ホスト1

Xen ホスト2

Xen ホスト3

共有ストレージ

VM

VMを 移動可能

9

複数ホスト+DRBD構成 •  DRBD

–  ネットワークを介してブロックデバイスの内容を同一に保つ技術

–  ローカルストレージを共有ストレージのように使用できる

– 低コスト –  ホスト数は最大3

Xenホスト1

VM

Xenホスト2

VMを 移動可能

DRBDで同期

10

6

複数ホスト+ローカルストレージ構成 •  仮想化環境による冗長化に頼らない構成 –  仮想化はリソース配分のため

•  アプリケーションの要件 –  アプリケーション自身に冗長化機能が必要

–  いくつかのVMが停止しても影響が小さい

–  VM内には重要なデータを保存しない

•  例:冗長化されたWebサーバで、データは別の場所にあるDBサーバに保存

Xenホスト1

VM

Xenホスト2 Xenホスト3

VM VM VM VM VM

重要なデータは外部へ

11

ディスクイメージファイル

•  ファイルをVMのディスクとして使用する •  複数の形式が使用可能

– RAW,QCOW(QCOW2),VMDK... – 相互に変換可能

•  仮想化に有利な機能を備えている – シン・プロビジョニング – Copy-on-Write – スナップショット

12

7

QCOW2

•  QEMUの標準的なディスクイメージ形式 – QEMU Copy-On-Write 2 – QCOWの後継

•  2からスナップショット機能が追加された

– KVMでも使える

13

copy-on-write(COW) •  ベースと差分の2ファイル構成 –  作成直後の差分ファイルは空っぽ

•  書き込みは差分ファイルへ

•  差分とベースをマージして読み取る –  差分内になければベースファイルから読む

•  差分はセクタ単位 •  VMがCOWを意識する必要はない

AB CD EF AB XD EF

VMからは こう見える

AB CD EF

CD

AB CD EF

XD

AB CD EF AB XD EF

例:3文字目のCをXに書き換える 普通のディスクイメージの場合

COWの場合(上:差分 下:ベース) copy

write

14

8

COWのメリット-高速デプロイ •  同じVMを複数作成する時はディスクイメージファイルをコピーすると簡単

•  通常のディスクイメージファイル – ファイルまるごとコピー – 完了まで時間がかかる

•  COWディスクイメージファイル – 差分ファイルだけをコピー、または差分ファイルだけを新しく作成

– まるごとコピーと比べてかなり短時間で完了

15

COWのメリット-ストレージの節約

•  ベースファイルは複数のVMで共有できる •  差分ファイルのサイズはそれほど大きくならないのでストレージ使用量を節約できる – ストレージ使用量の合計は ベースファイル+VM1の差分ファイル+VM2の差分ファイル+...

– 書き換えの多い部分には使うべきでない •  最終的にはベースファイルと同じサイズまで大きくなる可能性があることに注意 – ストレージ空き容量の監視は必要

16

9

QCOW2ベースファイルの準備

•  ベースディスクファイルはRAW形式のみ – QCOW2の制限ではなくXenのblktapの制限

•  普通にVMを作成し、OSのインストール等を行う

•  このVMのディスクイメージファイルをベースディスクファイルとして使用する

17

QCOW2差分ファイルの作成と使用

•  差分ファイルの作成 –  qemu-img-xen create –b ベースファイル名 -f

qcow2 差分ファイル名 •  VMへのアタッチ

– バックエンドをtap:qcow2と指定 –  disk=[ "tap:qcow2:差分ファイル名,xvda,w" ]

•  統合、形式変換、スナップショットもqemu-img-xenコマンドで –  qemu-img-xen commit/convert/snapshot ... – 詳細はman qemu-img

18

10

QCOW2使用上の注意 •  Xenのバージョンによっては使用できない

–  3.4以降が確実 •  ベースに変更を加えると差分側が使えなくなる可能性がある – 原則として禁止

•  リサイズは困難 –  COWを統合してRAW形式にする –  RAW形式でリサイズ

•  ddコマンドなどでファイルサイズを大きくする –  QCOW2に戻す

19

QCOW2の応用(1)

•  ベースファイルはローカルストレージへ、差分ファイルは共有ストレージへ – 同一のベースファイルを全ホストに置く

•  共有ディスクの容量と読み取り負荷を減らす

•  マイグレーションも可能

20

Xen ホスト2

Xen ホスト1

ベース ベース

差分 差分

11

QCOW2の応用(2) •  ベースファイルは共有ストレージ、差分ファイルはローカルストレージヘ

•  書き込み負荷が共有ストレージにかからない

•  マイグレーションはできない

•  ロードバランサ下でスケールアウトするシステム向き

21

Xen ホスト2

Xen ホスト1

ベース

差分 差分

Xenホスト

Xenのネットワーク-VIFとVM •  VMを起動すると

Domain-0にvifX.YというNICができる –  普通のNICと同じように扱える

•  どこに接続されている? –  Domain-UのNICと1対1に接続

•  XはドメインID、YはDomain-U内でいくつめのNICかを表す

–  vifX.Yから送信されたパケットはVM(ドメインID=X)のethYから出てくる

–  受信はその逆

実機A

eth0

実機B

eth0

eth1

DomU

eth0

Dom0

eth0 vifX.Y

vifX.YとDomUのeth0の関係は 実機Aのeth1と実機Bのeth0の関係と 同じ

22

12

Xenのネットワーク-VIFから物理NICへの転送

•  VIF単独ではDomain-0とDomain-Uの通信しかできない

•  Domain-Uが外部のネットワークとつながるにはvifX.Y-物理NIC間での転送が必要 –  ブリッジ –  IP転送

Domain-0

Domain-U

eth0

eth0

vifX.Y

転送が必要

23

ブリッジ/IP転送

ブリッジ

•  あるNICから受信したEthernetパケットを他のNICに転送するためのしくみ

•  ブリッジ=仮想スイッチングハブ –  NIC=仮想スイッチングハブのポート

IP転送 •  あるNICから受信したIPパケットを他のNICに転送するためのしくみ –  IP以外のパケットは転送しない(捨てる)

–  ブリッジに比べて適用範囲が限定される

•  大抵の用途に適用可能

•  必ずしもネットワークを分割しなくてよい –  Proxy Arpによる擬似ブリッジ

24

13

手動でのブリッジ構成手順

•  ブリッジの作成 –  brctl addbr br0

•  物理NIC,VIFをブリッジに加える –  brctl addif br0 eth0 –  brctl addif br0 vif1.0

•  物理NIC,VIF,ブリッジを活性化 –  ifconfig eth0 up –  ifconfig vif1.0 up –  ifconfig br0 up

25

Xenのネットワーク設定スクリプト •  ネットワークの構成を自動化 •  ネットワークスクリプト

–  Xen管理サービス起動時に実行される –  ホスト内で一回だけ実行する手順

•  VIFスクリプト –  VM起動時・停止時に実行される

•  正確にはアタッチ/デタッチのとき •  udevにより実行される

–  各VIFに対して個別に実行する手順 •  ネットワーク形態ごとにスクリプトが用意されている

–  どのスクリプトを使うか/etc/xen/xend-configで設定 –  (network-script network-bridge) –  (vif-script vif-bridge)

26

14

VMがブリッジに接続されるまで •  Domain-0のネットワークが起動

–  Linux標準のネットワーク設定サービス – 物理NIC活性化、IPアドレス等割り当て

•  Xenのネットワークスクリプトを実行 –  network-bridgeスクリプト –  ブリッジの作成 – 物理NICをブリッジに加える – 物理NICに割り当てられていたIPアドレスをブリッジに移植

•  VM起動時にVIFスクリプトが実行される –  vif-bridgeスクリプト –  VIFをブリッジに加える

27

IP転送(擬似ブリッジ)構成手順 •  IP転送の有効化

–  echo 1 >/proc/sys/net/ipv4/ip_forward •  物理NICとVIFを活性化

–  物理NICにはIPアドレスが必要 –  VIFにはIPアドレス不要

•  VMへのルートをVIFに設定 –  route add (VMのIPアドレス)vifX.Y

•  物理NICとVIFにProxyArpを許可 –  echo 1 >/proc/sys/net/ipv4/conf/eth0/proxy_arp –  echo 1 >/proc/sys/net/ipv4/conf/vifX.Y/proxy_arp

•  ネットワーク設定スクリプトはnetwork-routeとvif-route –  (network-script network-route) –  (vif-script vif-route)

28

15

複雑な構成

•  複数のブリッジ –  VLAN – 冗長化

•  Xenのネットワークスクリプトをカスタマイズして対応可能だが・・・

•  OSのネットワーク管理機能でブリッジを作るほうが管理しやすい –  Xenのネットワークスクリプトは必要事項を理解するためだけのものと考えて、実際には使用しないことを推奨

•  Xenのネットワークスクリプトの無効化 –  xend-config.sxpで(network-script)

29

参考:OSの機能でブリッジを作成する方法

•  ブリッジbr0を作成し、eth0をbr0のポートにする場合の例

•  CentOSでは自分で設定ファイルを作成/書き換え –  SUSEはYaSTで

DEVICE=br0 TYPE=Bridge BOOTPROTO=static IPADDR=(Dom0が使うIPアドレス) NETMASK=(ネットマスク) ONBOOT=yes

/etc/sysconfig/network-scripts/ifcfg-br0

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0 BOOTPROTO=none HWADDR=(eth0のMACアドレス) ONBOOT=yes BRIDGE=br0

30

16

参考:NIC冗長化 •  Domain-0でボンディングを利用

– 通常のLinuxと同じ •  ボンディングデバイスをブリッジのポートとする

•  NICが切り替わったときに外部からVMへの通信が回復するのに時間がかかることがある – 切り替わり時にVMのMACアドレスがスイッチに再通知(Gratuitous ARP)されないことが原因

– 対策1:スイッチのARPキャッシュの寿命を短くする – 対策2:ブリッジではなくIP転送を使う

31

管理者権限とネットワーク

•  仮想化環境ではユーザにゲストOSの管理者権限を与える運用が可能 – ユーザに最大限のカスタマイズを許可 – ホスティングやIaaS用途で有効

•  ネットワークに関するリスク – 正規のIPアドレス以外の使用 – 他のユーザのVMへの不正アクセス

•  ゲストOS外での対策が必要 32

17

リスクへの対策

•  VIFのトラフィックをフィルタリング –  iptablesなどを使用して制御可能 –  Domain-0のFORWARDチェインを通過

•  IPアドレスの変更対策 – 正規のIPアドレス以外は通さない –  MACアドレスを変更した場合も通さない

•  不正アクセス対策 – 各ユーザのネットワークを隔離 – 単に隔離するのではなく必要に応じて開放

•  完全に隔離するならタグVLANも使える •  ただしVLAN IDは上限4095

33

具体的対策(ブリッジの場合)

•  VIFとソースIPアドレスの対応が正しくないパケットはDROP –  NIC指定は-i/-oの代わりに--physdev-in/--physdev-outを使用

•  VIFと宛先IPアドレスの対応が正しくないパケットはDROP –  ブロードキャストアドレスも

•  さらに、Ethernetレベルでの対策が必要 –  iptablesはIPを使用しない通信には効果がない

•  ebtablesを使用 –  本来のMACアドレス以外はDROP –  不正なIPアドレスを使用したARP送信をDROP

•  VM固有の設定を含めることも可能 34

18

具体的対策(IP転送の場合) •  ブリッジよりも簡単 •  送信時ソースアドレスの制限だけでOK •  Domain-0でルーティングされるためDomain-Uは正規のIPアドレス以外では受信できない – 受信についての対策不要

•  EthernetレベルではDomain-UはDomain-0とのみリンクしている – 他のVM/機器はMACアドレス変更の影響を受けない→対策不要

35

フィルタ設定の自動化

•  方法A:あらかじめ全ルールを設定しておく –  VIF名はVM設定ファイル内で指定可能

•  vif=[ "mac=00:16:3e:ab:cd:ef,vifname=vifABC.0" ] – 小規模向き

•  方法B:VIFスクリプトを改造 – ルール設定する部分を追加

•  /etc/xen/scripts/vif-common.shのhandle_iptables関数などを参考に

–  VM固有のルールをVIFスクリプトに渡す方法に工夫が必要

•  例:適当なディレクトリを決め、ルールを書いたファイルにVMと同じ名前をつけて保存

36

19

まとめ

•  Xen環境の半分はDomain-0のLinuxで出来ている

•  仮想化の実現に一般的な技術が使われていることも多い – 理解しておくとトラブル対応や管理への応用が利く

37