4. Computeノードのセットアップ

Computeノードでは以下のインストール/設定を行います。

  • Nova
    • nova-compute-qemu
  • Neutron
    • neutron-plugin-ml2
    • neutron-plugin-openvswitch-agent
  • Ceilometer
    • ceilometer-agent-compute

4.1. ネットワーク設定

/etc/network/interfaces を設定します。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.56.133
        netmask 255.255.255.0
        network 192.168.56.0
        broadcast 192.168.56.255

auto eth1
iface eth1 inet static
        address 192.168.5.133
        netmask 255.255.255.0
        network 192.168.5.0
        broadcast 192.168.5.255

auto eth2
iface eth2 inet static
        address 192.168.6.133
        netmask 255.255.255.0
        network 192.168.6.0
        broadcast 192.168.6.255

auto eth3
iface eth3 inet dhcp

4.2. 個別インストールが面倒臭いので一括でインストールしたい人向け

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo shutdown -r 0
apt-get -y install python-mysqldb python-memcache neutron-common neutron-plugin-ml2 neutron-plugin-openvswitch-agent \
                   ceilometer-agent-compute nova-compute-qemu libvirt-bin pm-utils sysfsutils sysstat git ntp
sudo mkdir /var/cache/{nova,neutron}
sudo chown nova:nova /var/cache/nova
sudo chown neutron:neutron /var/cache/neutron

4.3. パッケージアップデート

インストール前にパッケージのアップデートを行います。

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo shutdown -r 0

4.4. NTP

各ノードの時刻がずれているとNova等サービスが正常に動作しません。時刻同期のため、NTP を使用します。

sudo apt-get -y install ntp

時刻同期先に任意のサーバを指定し、NTP を再起動します。

参考: NTPの使い方 : インターネットマルチフィード時刻情報サービス for Public

$ sudo vim /etc/ntp.conf

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

restrict 127.0.0.1
restrict ::1

disable monitor

$ sudo service ntp restart

4.5. カーネルパラメータの設定

Networkノード構成前に、いくつかのカーネルネットワーク機能を有効化します。

$ sudo vim /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

$ sudo sysctl -p

4.6. Open vSwitch

Open vSwitchをインストールします。

今回はNeutron + Open vSwitch (GRE)を利用しネットワークを構成します。

※ kernel 3.11 以降では openvswitch-datapath-dkms のインストールは不要です。

sudo apt-get install -y openvswitch-switch vlan bridge-utils

各種ブリッジとネットワークの対応は以下の通りです。

ブリッジ インタフェース 用途
br-int eth1 OVS 内のインスタンスの内部ネットワーク通信を処理

4.6.1. インテグレーションブリッジ

インテグレーションブリッジを作成します。

sudo ovs-vsctl add-br br-int

4.7. Neutron

Neutronのインストールと各種設定を行います。

Neutronコンピュートノードドキュメント 参照。

sudo apt-get -y install neutron-plugin-ml2 neutron-plugin-openvswitch-agent
sudo mkdir /var/cache/neutron
sudo chown neutron:neutron /var/cache/neutron

4.7.1. /etc/neutron/neutron.conf

/etc/neutron/neutron.conf を編集します。

sudo vim /etc/neutron/neutron.conf

設定サンプル

[DEFAULT]
verbose = True
debug = True
state_path = /var/lib/neutron
lock_path = $state_path/lock
bind_host = 0.0.0.0
bind_port = 9696
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
rpc_backend = neutron.openstack.common.rpc.impl_kombu
rabbit_host = 192.168.5.131
rabbit_password = y7u8i9YUI
rabbit_port = 5672
rabbit_hosts = 192.168.5.131:5672
rabbit_userid = neutron
rabbit_virtual_host = /neutron
rabbit_ha_queues = false
notification_driver = neutron.openstack.common.notifier.rpc_notifier
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://192.168.5.131:8774/v2
nova_region_name = RegionOne
nova_admin_username = nova
nova_admin_tenant_id = 235941422117481288d4d5a10f28f0c5
nova_admin_password = y7u8i9YUI
nova_admin_auth_url = http://192.168.5.131:35357/v2.0

[quotas]

[agent]
root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf

[keystone_authtoken]
auth_host = 192.168.5.131
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = neutron
admin_password = y7u8i9YUI
signing_dir = /var/cache/neutron

[database]
connection = mysql://neutron:y7u8i9YUI@192.168.5.131/neutron?charset=utf8

[service_providers]
service_provider=LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
service_provider=VPN:openswan:neutron.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default

nova_admin_tenant_id には serviceプロジェクトのIDを指定します。nova_url, nova_admin_tenant_id など認証情報に誤りがある場合はインスタンス生成時、Unexpected vif_type=binding_failed がnova-compute.logに出力されます。nova_url のURL指定には /v2 が必須です。

4.7.2. /etc/neutron/plugins/ml2/ml2_conf.ini

/etc/neutron/plugins/ml2/ml2_conf.ini を編集します。

sudo vim /etc/neutron/plugins/ml2/ml2_conf.ini

設定サンプル

[ml2]
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_flat]

[ml2_type_vlan]

[ml2_type_gre]
tunnel_id_ranges = 1:1000

[ml2_type_vxlan]

[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

[ovs]
integration_bridge=br-int
enable_tunneling=True
tunnel_bridge=br-tun
int_peer_patch_port=patch-tun
tun_peer_patch_port=patch-int
local_ip=192.168.6.133
tunnel_type=gre

4.7.3. Neutronエージェント再起動

設定が完了したら、Neutronエージェントを再起動します。

sudo service neutron-plugin-openvswitch-agent restart

サービスを再起動した後にovs-vsctl showを実行すると以下のような状態になっていることが確認できます。

  • Networkノード
net:~$ sudo ovs-vsctl show
29701125-98b4-4e3e-bbc8-e81ab7e7637d
    Bridge br-int
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
        Port br-int
            Interface br-int
                type: internal
    Bridge br-tun
        Port "gre-c0a80685"
            Interface "gre-c0a80685"
                type: gre
                options: {in_key=flow, local_ip="192.168.6.132", out_key=flow, remote_ip="192.168.6.133"}
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
        Port br-tun
            Interface br-tun
                type: internal
    Bridge br-ex
        Port "eth0"
            Interface "eth0"
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "2.0.1"
  • Computeノード
com:~$ sudo ovs-vsctl show
9b187231-4334-4682-9999-0d479454b77a
    Bridge br-tun
        Port br-tun
            Interface br-tun
                type: internal
        Port "gre-c0a80684"
            Interface "gre-c0a80684"
                type: gre
                options: {in_key=flow, local_ip="192.168.6.133", out_key=flow, remote_ip="192.168.6.132"}
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    ovs_version: "2.0.1"

4.8. libvirt

Nova, libvirtのインストールと各種設定を行います。

今回はVirtualBox上で動かしていますので、nova-compute-qemuでインストールをします。

sudo apt-get -y install nova-compute-qemu libvirt-bin pm-utils sysfsutils

4.8.1. /etc/libvirt/qemu.conf の設定

cgroup_device_acl に /dev/net/tun を追加します。

$ sudo vim /etc/libvirt/qemu.conf
cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc","/dev/hpet", "/dev/vfio/vfio", "/dev/net/tun"
]

4.8.2. /etc/libvirt/libvirtd.conf の設定

ライブマイグレーション用に設定を変更します。

$ sudo vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
auth_tcp = "none"

4.8.3. /etc/init/libvirt-bin.conf の設定

ライブマイグレーション用に設定を変更します。

$ sudo vim /etc/init/libvirt-bin.conf
env libvirtd_opts="-d -l"

4.8.4. /default/libvirt-bin の設定

ライブマイグレーション用に設定を変更します。

$ sudo vim /etc/default/libvirt-bin
libvirtd_opts="-d -l"

4.8.5. 不要なデバイスの削除

不要なデバイスを削除します。

$ sudo virsh net-destroy default
$ sudo virsh net-undefine default

4.8.6. libirtサービス再起動

設定が完了したらサービスを再起動します。

$ sudo service libvirt-bin restart

4.9. Nova

Novaの設定を行います。

4.9.1. /etc/nova/nova-compute.conf

内容を削除します。nova-compute-* をインストールするとこの設定ファイルが作成されます。

しかし、このファイルがしばしば nova.conf と競合し、思いもよらぬハマり方をする(した)ので私はnova.conf一本にすることをオススメします。

sudo echo -n > /etc/nova/nova-compute.conf

4.9.2. /etc/nova/nova.conf

/etc/nova/nova.conf を編集します。

個別の説明は多過ぎるので勘弁してください。ドキュメントとソース見てください…。

$ sudo vim /etc/nova/nova.conf

[DEFAULT]
my_ip=192.168.5.133
host=com

rabbit_host=192.168.5.131
rabbit_port=5672
rabbit_hosts=$rabbit_host:$rabbit_port
rabbit_use_ssl=false
rabbit_userid=nova
rabbit_password=y7u8i9YUI
rabbit_login_method=AMQPLAIN
rabbit_virtual_host=/nova
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_ha_queues=false
rpc_backend=rabbit
control_exchange=openstack

compute_driver=libvirt.LibvirtDriver

internal_service_availability_zone=internal
default_availability_zone=nova
default_schedule_zone=nova

pybasedir=/usr/lib/python2.7/site-packages
bindir=/usr/local/bin
state_path=/var/lib/nova
instances_path=$state_path/instances
lock_path=/var/lock/nova
log_dir=/var/log/nova
snapshots_directory=$instances_path/snapshots

policy_file=policy.json
policy_default_rule=default
quota_instances=10
quota_cores=20
quota_ram=51200
quota_floating_ips=10
quota_fixed_ips=-1
quota_metadata_items=128
quota_injected_files=5
quota_injected_file_content_bytes=10240
quota_injected_file_path_bytes=255
quota_security_groups=10
quota_security_group_rules=20
quota_key_pairs=100
reservation_expire=86400
until_refresh=0
max_age=0
quota_driver=nova.quota.DbQuotaDriver
report_interval=10
periodic_enable=true
periodic_fuzzy_delay=60
enabled_apis=ec2,osapi_compute,metadata
enabled_ssl_apis=
ec2_listen=0.0.0.0
ec2_listen_port=8773
ec2_workers=1
osapi_compute_listen=0.0.0.0
osapi_compute_listen_port=8774
osapi_compute_workers=1
metadata_manager=nova.api.manager.MetadataManager
metadata_listen=0.0.0.0
metadata_listen_port=8775
metadata_workers=1
compute_manager=nova.compute.manager.ComputeManager
console_manager=nova.console.manager.ConsoleProxyManager
consoleauth_manager=nova.consoleauth.manager.ConsoleAuthManager
cert_manager=nova.cert.manager.CertManager
scheduler_manager=nova.scheduler.manager.SchedulerManager
service_down_time=60
password_length=12
rootwrap_config=/etc/nova/rootwrap.conf
api_paste_config=api-paste.ini
wsgi_default_pool_size=1000
api_rate_limit=false
auth_strategy=keystone
use_forwarded_for=false
keystone_ec2_url=http://192.168.5.131:5000/v2.0/ec2tokens
ec2_host=192.168.5.131
ec2_dmz_host=192.168.5.131
ec2_port=8773
ec2_scheme=http
ec2_path=/services/Cloud
region_list=
allow_instance_snapshots=true
allow_resize_to_same_host=false
allow_migrate_to_same_host=false
multi_instance_display_name_template=%(name)s-%(uuid)s

instance_usage_audit = True
instance_usage_audit_period = hour
notify_on_state_change = vm_and_task_state
notification_driver = nova.openstack.common.notifier.rpc_notifier
notification_driver = ceilometer.compute.nova_notifier

resume_guests_state_on_host_boot=false
compute_topic=compute
consoleauth_topic=consoleauth
instance_name_template=instance-%08x
snapshot_name_template=snapshot-%s
db_driver=nova.db
glance_host=192.168.5.131
glance_port=9292
glance_protocol=http
glance_api_servers=$glance_host:$glance_port
glance_api_insecure=false
glance_num_retries=0

network_api_class=nova.network.neutronv2.api.API
neutron_url=http://192.168.5.131:9696
neutron_url_timeout=30
neutron_auth_strategy=keystone
neutron_admin_tenant_name=service
neutron_region_name=RegionOne
neutron_admin_username=neutron
neutron_admin_password=y7u8i9YUI
neutron_admin_auth_url=http://192.168.5.131:35357/v2.0
neutron_api_insecure=false
neutron_ovs_bridge=br-int
neutron_extension_sync_interval=600
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.firewall.NoopFirewallDriver
security_group_api=neutron
service_neutron_metadata_proxy=True
neutron_metadata_proxy_shared_secret=TimeIsMoney
auto_assign_floating_ip=false
forward_bridge_interface=all
metadata_host=192.168.5.131
metadata_port=8775

debug=true
verbose=true
use_stderr=true
instance_format=[instance: %(uuid)s]
instance_uuid_format=[instance: %(uuid)s]
use_syslog=false
scheduler_host_manager=nova.scheduler.host_manager.HostManager
cpu_allocation_ratio=16.0
disk_allocation_ratio=1.0
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
scheduler_topic=scheduler
config_drive_format=iso9660
allow_same_net_traffic=true
image_cache_subdirectory_name=_base
remove_unused_base_images=true
volume_api_class=nova.volume.cinder.API
cinder_catalog_info=volume:cinder:internalURL
os_region_name=RegionOne
cinder_api_insecure=false
cinder_cross_az_attach=true
vnc_enabled=false

[conductor]
use_local=false
topic=conductor
manager=nova.conductor.manager.ConductorManager
workers=1

[database]
backend=sqlalchemy
connection=mysql://nova:y7u8i9YUI@192.168.5.131/nova?charset=utf8
use_db_reconnect=false

[keystone_authtoken]
auth_host=192.168.5.131
auth_port=35357
auth_protocol=http
auth_uri=http://192.168.5.131:5000/v2.0
admin_user=nova
admin_password=y7u8i9YUI
admin_tenant_name=service
signing_dir=/var/cache/nova

[libvirt]
virt_type=qemu
inject_password=false
inject_key=false
inject_partition=-2
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE
block_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_NON_SHARED_INC
live_migration_bandwidth=0
vif_driver=nova.virt.libvirt.vif.LibvirtGenericVIFDriver
images_type=default
volume_clear=zero
volume_clear_size=0
use_virtio_for_bridges=true


[osapi_v3]
enabled=true

[spice]
html5proxy_base_url=http://192.168.56.131:6082/spice_auto.html
server_listen=0.0.0.0
server_proxyclient_address=192.168.5.133
enabled=true
agent_enabled=true
keymap=ja-jp

※ KVMの場合は virt_type = kvm を指定

4.9.3. Novaコンピュートサービスを再起動

Novaコンピュートサービスを再起動します。

sudo service nova-compute restart

4.10. Ceilometer

Ceilometerをインストールします。

sudo apt-get -y install ceilometer-agent-compute

4.10.1. /etc/ceilometer/ceilometer.conf

/etc/ceilometer/ceilometer.conf を編集します。

sudo vim /etc/ceilometer/ceilometer.conf

Ceilometerコンピュートエージェントドキュメント に従ったところこんな感じになりました。

[DEFAULT]
http_control_exchanges=nova
http_control_exchanges=glance
http_control_exchanges=neutron
http_control_exchanges=cinder
auth_strategy=keystone
libvirt_type=qemu
glance_control_exchange=glance
neutron_control_exchange=neutron
sqlite_db=ceilometer.sqlite
debug=true
verbose=true
log_dir=/var/log/ceilometer
rabbit_host=192.168.5.131
rabbit_port=5672
rabbit_hosts=$rabbit_host:$rabbit_port
rabbit_use_ssl=false
rabbit_userid=ceilometer
rabbit_password=y7u8i9YUI
rabbit_virtual_host=/ceilometer

[alarm]

[api]
port=8777
host=0.0.0.0

[collector]

[database]
backend=sqlalchemy
connection=[database]
connection = mongodb://ceilometer:y7u8i9YUI@192.168.5.131:27017/ceilometer

[dispatcher_file]

[event]

[keystone_authtoken]
auth_host = 192.168.5.131
auth_port = 35357
auth_protocol = http
auth_uri = http://192.168.5.131:5000
admin_tenant_name = service
admin_user = ceilometer
admin_password = y7u8i9YUI

[matchmaker_redis]

[matchmaker_ring]

[notification]

[publisher]
metering_secret=y7u8i9YUI

[publisher_rpc]

[rpc_notifier2]

[service_credentials]
os_auth_url = http://192.168.5.131:5000/v2.0
os_username = ceilometer
os_tenant_name = service
os_password = y7u8i9YUI

[ssl]

[vmware]

4.10.2. Ceilometerサービスの再起動

設定を行ったらCeilometerサービスを再起動します。

sudo service ceilometer-agent-compute restart