87
OpenStack検証環境構築・トラブル シューティング入門 (2014年8月号) 日本仮想化技術株式会社 技術部 遠山 洋平 1

OpenStackトラブルシューティング入門

Embed Size (px)

DESCRIPTION

1. 検証環境の構築 --- Nested Virtualization 2. 動作確認の方法 --- コマンドによる監視 3. トラブルシューティング --- 障害と解決例

Citation preview

Page 1: OpenStackトラブルシューティング入門

OpenStack検証環境構築・トラブルシューティング入門

(2014年8月号)

日本仮想化技術株式会社 技術部 遠山 洋平

1

Page 2: OpenStackトラブルシューティング入門

私について

名前: 遠山 洋平

出身: 宮城県大崎市

    VDI / 最近はOpenStack担当

[他の仕事]

– 日経Linux執筆・連載(2011年5月〜)

– 秀和システム「VMware 設計・運用・構築プロフェッショナルガイド」

– 技評「VMwareポケットリファレンス」

2

Page 3: OpenStackトラブルシューティング入門

本日の内容

1. 検証環境の構築 – Nested Virtualization

2. 動作確認の方法 – コマンドによる監視

3. トラブルシューティング – 障害と解決例

3

Page 4: OpenStackトラブルシューティング入門

OpenStack検証環境 構築について

4

Page 5: OpenStackトラブルシューティング入門

OpenStackの検証

1. サーバーを必要台数用意 2. OpenStackデプロイ方法の検討 3. OpenStackの構築 4. 動作検証 5. 利用開始

5

Page 6: OpenStackトラブルシューティング入門

OpenStackの検証

1. サーバーを必要台数用意 2. OpenStackデプロイ方法の検討 3. OpenStackの構築 4. 動作検証 5. 利用 6. 問題発生 7. デバッグ 8. 修正…

6

Page 7: OpenStackトラブルシューティング入門

OpenStackの検証

1. サーバーを必要台数用意 2. OpenStackデプロイ方法の検討 3. OpenStackの構築 4. 動作検証 5. 利用開始

7

Page 8: OpenStackトラブルシューティング入門

OpenStackの検証

1. サーバーを必要台数用意 2. OpenStackデプロイ方法の検討 3. OpenStackの構築 4. 動作検証 5. 利用開始

8

予算が…

既存ハードウェアを使いたい

Page 9: OpenStackトラブルシューティング入門

Nested Virtualization

• 仮想化の上で仮想化 • 仮想化のマトリョーシカ?

9

Page 10: OpenStackトラブルシューティング入門

Nested 利用上の注意

• Nested環境限定のバグや仕様にはまることも

• そもそも情報が少ない

10

Page 11: OpenStackトラブルシューティング入門

Nested Virtualizationの実際

構築方法について

11

Page 12: OpenStackトラブルシューティング入門

LinuxでNested KVM

1. Linux KVM環境を構築 2. KVMホストでカーネルパラメータを変

更して再起動 3. Nested KVMのvirbr0を無効化

12

# virsh net-destroy default # virsh net-autostart default --disable

192.168.122.0/24

Page 13: OpenStackトラブルシューティング入門

Ubuntu Server 14.04 LTS

$ sudo apt-get install kvm qemu-kvm libvirt-bin $ sudo -i # echo "options kvm_intel nested=1" >> /etc/modprobe.d/qemu-system-x86.conf # reboot !$ cat /sys/module/kvm_intel/parameters/nested  Y

13

Page 14: OpenStackトラブルシューティング入門

Fedora 20 / CentOS 7

# yum install kvm qemu-kvm libvirt # systemctl enable libvirtd # systemctl start libvirtd # echo "options kvm_intel nested=1" >> /etc/modprobe.d/kvm-nested.conf # reboot !# cat /sys/module/kvm_intel/parameters/nested  Y

14

Page 15: OpenStackトラブルシューティング入門

VMware ESXi 5.1以降

1. /etc/vmware/configに書く – 全体に適用

2. vmxファイルに書く(→参考)

– 仮想マシンごと – vhv.enable = "true" – 再起動で有効

15

Page 16: OpenStackトラブルシューティング入門

全体に適用

# vi /etc/vmware/config (末尾に追記) vhv.enable = TRUE ESXi 5.0の場合 vhv.allow = TRUE ESXi 5.1以降の場合 # reboot or # /etc/init.d/hostd restart hostd stopped. hostd started.

16

Page 17: OpenStackトラブルシューティング入門

動作イメージ

17

ESXi

Ubuntu

CentOSKVM

Page 18: OpenStackトラブルシューティング入門

実は…

18

ESXi

Ubuntu

CentOSKVM

VMware Fusion

OS X

L3

L2

L1

L0

Page 19: OpenStackトラブルシューティング入門

フラグの確認

# cat /proc/cpuinfo | grep vmx !flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep flags …(CPUコア分が標準出力される)

19

AMD: svm

Page 20: OpenStackトラブルシューティング入門

私のテスト環境

20

Page 21: OpenStackトラブルシューティング入門

テスト環境 その2

21

Page 22: OpenStackトラブルシューティング入門

あとは構築するだけ

• テスト実行環境完成 • お好みのツールでデプロイ

– Juju/MAAS – Ubuntu OpenStack Installer – Mirantis Fuel – RDO Packstack – etc…

22

Page 23: OpenStackトラブルシューティング入門

RDOとは

• RHELベースプラットフォームでOpenStackを利用するユーザーのためのコミュニティ

• OpenStackリポジトリを提供 – RHEL,CentOS,Fedora etc..

• OpenStackをクイックインストール • Packstackインストーラ

– Puppet

23

Page 24: OpenStackトラブルシューティング入門

RDO Packstackによる導入

• RHEL, CentOS 6.5以降, Fedora 20 • 下記コマンドを順に実行 • 単体構成なら30分程度でデプロイ

24

# setenforce permissive # yum -y install http://rdo.fedorapeople.org/rdo-release.rpm # yum install -y openstack-packstack # packstack --allinone (--provision-demo=n 推奨)

公式ドキュメント > http://goo.gl/FgbuVS http://openstack.redhat.com/Quickstart etc..

Page 25: OpenStackトラブルシューティング入門

RDO Packstackの問題点

1. 事前設定 2. 日本語の情報があまりない

!!

3. All-in-one以外の構成は? – マルチノード – コンポーネントの要不要

25

Page 26: OpenStackトラブルシューティング入門

RDO Packstackの問題点

1. 事前設定 2. 日本語の情報があまりない     →ないなら作っちゃえ

!3. All-in-one以外の構成は?

– マルチノード – コンポーネントの要不要

    →ないなら作っちゃえ26

Page 27: OpenStackトラブルシューティング入門

現状可能な構成

• Havana – CentOS 6.5 (1Node/Multi)

• Icehouse – CentOS 6.5 (1Node/Multi) – Fedora 20 (1Node/Multi)

27

Page 28: OpenStackトラブルシューティング入門

CentOS/RHEL7でIcehouse

• RDO Packstackで構築する場合はパッチ充てが必要です。

–Bug 1117871

– 参考

28

Page 29: OpenStackトラブルシューティング入門

OpenStackの状態を 確認する方法

S t a t u s

29

Page 30: OpenStackトラブルシューティング入門

OpenStackの動作状況を確認

• OpenStack Dashboardで確認 • コマンドで確認

30

Page 31: OpenStackトラブルシューティング入門

OpenStackの構成

Page 32: OpenStackトラブルシューティング入門

コマンドのルール

• COMPONENT option-list • COMPONENT option list

- 一覧を表示 • COMPONENT option-show id • (もしくはCOMPONENT option-get id)

- 詳細情報を表示

32

Page 33: OpenStackトラブルシューティング入門

とりあえず実行してみるコマンド

# nova hypervisor-list (登録されているハイパーバイザーが出力されていればOK) # nova hypervisor-stats (ハイパーバイザーの空きリソース) # nova-manage service list (Status enabledのコンポーネントStateが :-) であればOK) # neutron agent-list (全てのコンポーネントがalive が :-) であればOK) # ovs-vsctl show (ovsデータベーステーブルを確認) # openstack-status (色々まとめて)

33

Page 34: OpenStackトラブルシューティング入門

dstatもステータス確認に便利

• # dstat -tcdn --top-io --top-cpu --output log.csv

34

Page 35: OpenStackトラブルシューティング入門

dstatの結果をグラフに

• 動作イメージ – dstat2graphs - dbstudy.info

– example

• ソース – sh2/dstat2graphs - GitHub

35

Page 36: OpenStackトラブルシューティング入門

コマンドを実行

DEMO-1

36

Page 37: OpenStackトラブルシューティング入門

OpenStackの 各コンポーネントについて

37

Page 38: OpenStackトラブルシューティング入門

重要コンポーネント"Keystone"

• Identity(認証) サービス !

• keystone token-get – 認証情報表示

• keystone service-list – サービス

38

Page 39: OpenStackトラブルシューティング入門

Glance

• Image(イメージ管理)サービス !

• glance image-list – イメージ一覧

• glance image-show "VM Name" – イメージ詳細

39

Page 40: OpenStackトラブルシューティング入門

Nova

• OpenStackの中核(心臓部) !

• nova service-list – サービス一覧

• nova hypervisor-list – ハイパーバイザー一覧

40

Page 41: OpenStackトラブルシューティング入門

Nova-Compute

• Compute(リソース提供)サービス !

• nova list • nova-manage vm list

- インスタンスの一覧

41

Page 42: OpenStackトラブルシューティング入門

Neutron

• Networking サービス

• neutron agent-list – エージェントの動作状況

• neutron net-list – ネットワークのリスト

• neutron subnet-list – サブネットのリスト

42

Page 43: OpenStackトラブルシューティング入門

エラーが発生したら

• ログを確認

– /var/log/COMPONENT

• ログレベルをあげる

– /etc/COMPONENT

• 設定ファイルを確認

• SQLサーバーログ

• メッセージキューサービスのログ

• netstatコマンドで待受けポートの確認

• 関連サービスの再起動43

Page 44: OpenStackトラブルシューティング入門

コマンドを実行

DEMO-2

44

Page 45: OpenStackトラブルシューティング入門

トラブルシューティング編

• 私が構築時にはまったところ

45

Page 46: OpenStackトラブルシューティング入門

Multi-NodeのOpenStack環境でネットワークがつながらない

(障害例1)

46

Page 47: OpenStackトラブルシューティング入門

症例

• RDO PackstackでIcehouseを構築 1. Neutron以外全部 2. Neutronネットワークノード

• Fedora 20を利用 • Neutronネットワークを設定 • 正常に動作 • 再起動以降つながらない

47

Page 48: OpenStackトラブルシューティング入門

原因

1. RabbitMQサーバーが起動してない 2. Neutronサーバーが起動しない 3. トンネル(br-tun)が作られない 4. ネットワークノードとコンピュートがつ

ながらない 5. インスタンスがネットワークにつなが

らない

48

Page 49: OpenStackトラブルシューティング入門

コマンドを実行

# openstack-status … == neutron services == neutron-server: failed … == Support services == libvirtd:   active openvswitch: active dbus: active rabbitmq-server: failed …

49

Page 50: OpenStackトラブルシューティング入門

解決方法

# systemctl start rabbitmq-server (rabbitmq-serverを起動) # watch systemctl status -l rabbitmq-server (起動状況を詳細確認) # systemctl start neutron-server.service (neutron-serverを起動) # watch systemctl status -l neutron-server.service (起動状況を詳細確認) # ovs-vsctl show (両ノードでtunnelが作られていることを確認)

50

Page 51: OpenStackトラブルシューティング入門

インスタンスが だんだん不安定になってくる

(障害例2)

51

Page 52: OpenStackトラブルシューティング入門

症例

• RDO PackstackでIcehouseを構築

• エラーなく構築完了

• インスタンスを起動

• Pingは可能

• SSHアクセス不安定

• インスタンス上でネットワークトラフィックを発生するとタイムアウト or 切断

– wget /curl

– SSH52

Page 53: OpenStackトラブルシューティング入門

原因

1. RDO Icehouse版の最近のバージョンはVXLANモードでデプロイされる

2. VXLANは50byteのヘッダを Ethernetフレームに付加する

3. Ethertnetフレームとして1550byte流そうとする

4. 50byte多くて通らないのでドロップされる

5. 不通53

GREは42byte

Page 54: OpenStackトラブルシューティング入門

解決方法(一例)

• VMのインターフェイスのMTUを1450以下にする

• 方法 1. インスタンスにMTU 1450を設定 2. DHCP OptionでMTU 1450を配布

!※ GREモードでもMTU設定の変更を推奨します。

54

Page 55: OpenStackトラブルシューティング入門

インスタンスにMTU 1450を設定

• カスタマイズ・スクリプトに記述

55

#cloud-config bootcmd: - ifconfig eth0 mtu 1450 - echo "ifconfig eth0 mtu 1450" > /etc/rc.local

Page 56: OpenStackトラブルシューティング入門

DHCP OptionでMTU 1450を配布

• dhcp_agent.iniの設定を変更 !!

• dnsmasq.confの変更 !!

• サービスの再起動

56

# vi /etc/neutron/dhcp_agent.ini dnsmasq_config_file=/etc/dnsmasq.d/dnsmasq.conf

# systemctl restart neutron-dhcp-agent.service

# vi /etc/dnsmasq.d/dnsmasq.conf dhcp-option=26,1450

→参考

Page 57: OpenStackトラブルシューティング入門

原因が分からないときは どうする?

ネットワークにつながらない!

57

Page 58: OpenStackトラブルシューティング入門

まず実行するのは

ifconfig ip addr show

58

Page 59: OpenStackトラブルシューティング入門

ネットワーク/コンピュートで実行

• br-int,br-tunなどがあることを確認

59

Page 60: OpenStackトラブルシューティング入門

次に実行するのは

ovs-vsctl

60

Page 61: OpenStackトラブルシューティング入門

ネットワークノードで実行

• GREの場合

61

Page 62: OpenStackトラブルシューティング入門

コンピュートノードで実行

• GREの場合

62

Page 63: OpenStackトラブルシューティング入門

Network Namespaceの確認

ip netns exec

63

Page 64: OpenStackトラブルシューティング入門

Network Namespaceとは

• Linuxホストの中に仮想的なネットワーク環境を作成

• ネットワークの分離 • Linux Kernel 2.6.24以降でサポート

– RHEL6.x+RDOリポジトリのiproute2 – Fedora 16以降 – Ubuntu 12.04以降

64

Page 65: OpenStackトラブルシューティング入門

OpenStackにおける利用法

• ip netns • 仮想ルーターと仮想DHCPサーバーを

確認 !!!

• ip netns exec qdhcp-xxxx command • ip netns exec qrouter-xxxx command

65

Page 66: OpenStackトラブルシューティング入門

qrouterとqdhcp

• ip netnsで一覧 • ip netns execで内容確認 !

• qrouter – ルータをネットワーク接続すると出現

• qdhcp – DHCPサーバが作成されると出現 ※はじめてインスタンスが作られたタイミングでDHCPサーバーが作られる

66

Page 67: OpenStackトラブルシューティング入門

qrouterの確認(1)

• ip a/ifconfigコマンドでIPアドレス確認

67

Page 68: OpenStackトラブルシューティング入門

qrouterの確認(2)

• qrouterからPing • 外部PCからqrouterにPing

68

Page 69: OpenStackトラブルシューティング入門

qdhcpの確認(1)

• ip a/ifconfigコマンドでIPアドレス確認

69

Page 70: OpenStackトラブルシューティング入門

qdhcpの確認(2)

• qdhcpからインスタンスにPing

70

Page 71: OpenStackトラブルシューティング入門

コマンドを実行

DEMO-3

71

Page 72: OpenStackトラブルシューティング入門

それでもつながらない

1. ログを見る

2. Floating IPを付け直し

3. クライアントのMTUを下げてみる

4. インスタンス中→外にPing

5. Open vSwitchエージェントの再起動

6. qrouterやqdhcpを確認

7. 各種設定の見直し

8. Neutronネットワークの作り直し

72

Page 73: OpenStackトラブルシューティング入門

以上です。 ありがとうございました

73

Page 74: OpenStackトラブルシューティング入門

おまけ

74

Page 75: OpenStackトラブルシューティング入門

インスタンスが 外部ネットワークにつながらない!

(障害例3)

75

Page 76: OpenStackトラブルシューティング入門

症例

1. OpenStackホストにパッチ適用 2. 再起動 3. インスタンス起動 4. ネットワーク不通

76

udhcpc (v1.20.1) started Sending discover... Sending discover… Sending discover...

Page 77: OpenStackトラブルシューティング入門

原因

1. インターフェイスの起動する前 2. Open vSwitchが起動 3. 必要なNICで疎通できず 4. 仮想ネットワークがつながらない

77

Page 78: OpenStackトラブルシューティング入門

解決方法(一例)

• ip route deleteでルーティングを削除

78

Page 79: OpenStackトラブルシューティング入門

解決方法(一例)

• 問題解決

79

Page 80: OpenStackトラブルシューティング入門

Ubuntuでの回避策

• /etc/network/interface

80

auto eth0 iface eth0 inet static pre-up service openvswitch-switch start || true address 192.168.0.9 netmask 255.255.255.0 auto br-ex iface br-ex inet static pre-up service openvswitch-switch start || true address 10.0.0.9 netmask 255.255.255.0 gateway 10.0.0.1 dns-nameservers 10.0.0.1 auto eth1 iface eth1 inet manual pre-up service openvswitch-switch start || true up ip address add 0/0 dev $IFACE up ip link set $IFACE up down ip link set $IFACE down

Page 81: OpenStackトラブルシューティング入門

その他注意すべきポイント

81

Page 82: OpenStackトラブルシューティング入門

PDFからのコピペに気をつけろ

• 手順通り実行 • エラー !

• PDFから複数行に渡る文字列をコピペする

 ↓ • 折り返し部分に謎のスペースが • コマンド失敗

82

Page 83: OpenStackトラブルシューティング入門

Adobe Readerでは正常

83

Page 84: OpenStackトラブルシューティング入門

Mac OS X プレビューからでは

84

改行が…

Page 85: OpenStackトラブルシューティング入門

キーペアがインポートできない

• ssh-keygenコマンドで鍵を作成 • インポート実行 • エラー • 何回やってもエラー • 何回やっても(ry

85

Page 86: OpenStackトラブルシューティング入門

原因はエディタの設定

• viエディタで開いてコピペ • .vimrc設定の問題

86

set formatoptions=q 自動改行オフ set textwidth=0 長い文章の自動折り返しをしない set linebreak ワードラップを有効

Page 87: OpenStackトラブルシューティング入門

• linebreak オン !!!!

• linebreak オフ

87