*

RDOを使用したOpenStack+MidoNet環境のインストール

公開日: 最終更新日:2015/08/03  |  By  |  midonet, OpenStack, OSS, RDO, SDN

ビットアイル総合研究所 田波です。

今回は以前紹介したRDOを使用して、OpenStack+MidoNetを導入する手順を紹介します。
RDOのインストール方法は以前の記事「RDOを使用したOpenStack Juno環境の構築」で紹介しておりますので、そちらも併せてご覧ください。

以下公式サイトにRDO+MidoNetの手順が紹介されていますが、1台構成のみの手順の為、今回は3台構成での手順を紹介したいと思います。

MidoNet integration – RDO

MidoNetとは

MidoNetはミドクラが作った、オープンソースのクラウドIaaS向けネットワーク仮想化プラットフォームです。
OpenStackと組み合わせることで、デフォルトのNeutron ML2 Pluginとは異なり、分散仮想ルート等の機能が使用可能になります。

詳細は下記の公式サイトをご参照ください。

MidoNetの概要 – ミドクラ

MidoNetは2014年11月にオープンソースとなっており、今回は無償版を使用してみたいと思います。

RDOを使用したOpenStackインストール

まずはOpenStack環境を構築します。

今回は構成を少し変更して下図のような3台構成のOpenStack環境を構築します。

簡易構成図

尚、OSは全てCentOS7.1を使用しています。

こちらの記事を参考に、パッケージ「openstack-packstack」をインストールし、設定ファイル(answers)を作成してください。

今回は設定ファイルの下記箇所を修正します。

CONFIG_COMPUTE_HOSTS=computeのIP
CONFIG_NETWORK_HOSTS=gatewayのIP
CONFIG_STORAGE_HOST=controllerのIP
CONFIG_AMQP_HOST=controllerのIP
CONFIG_MARIADB_HOST=controllerのIP

設定ファイルの修正が完了したら、packstackコマンドを使用してOpenStack環境をインストールします。
これだけだとOpenStackのNWでPluginはML2PluginというPluginが使用されています。
こちらのPluginをMidoNetPluginへ変更していきたいと思います。

レポジトリの追加等の事前作業

続いて、MidoNetを導入する際に必要となるレポジトリを追加します。
下記2つのファイルを作成してください。

# DataStax (Apache Cassandra)
[datastax]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0
gpgkey = https://rpm.datastax.com/rpm/repo_key
[midonet]
name=MidoNet
baseurl=http://repo.midonet.org/midonet/v2015.03/RHEL/7/stable/
enabled=1
gpgcheck=1
gpgkey=http://repo.midonet.org/RPM-GPG-KEY-midokura

[midonet-openstack-integration]
name=MidoNet OpenStack Integration
baseurl=http://repo.midonet.org/openstack-juno/RHEL/7/stable/
enabled=1
gpgcheck=1
gpgkey=http://repo.midonet.org/RPM-GPG-KEY-midokura

[midonet-misc]
name=MidoNet 3rd Party Tools and Libraries
baseurl=http://repo.midonet.org/misc/RHEL/7/misc/
enabled=1
gpgcheck=1
gpgkey=http://repo.midonet.org/RPM-GPG-KEY-midokura

作成が完了したら、下記コマンドを実行します。

sudo yum clean all
sudo yum upgrade

また、各ノードが名前解決できるよう、全てのノードのhostsに下記を追加します。

controllerのIPアドレス   controller
computeのIPアドレス   compute
gatewayのIPアドレス   gateway

RDO OpenStack設定変更~Controllerノード~

最初はControllerノードでの作業です。

まず、keystoneコマンドでmidonet用のサービス・ユーザを作成します。
コマンドはRDOインストール時に自動作成されたadminユーザにて実行してください。

keystone service-create --name midonet --type midonet --description "MidoNet API Service"
keystone user-create --name midonet --pass MIDONET_PASS --tenant services
keystone user-role-add --user midonet --role admin --tenant services

※MIDONET_PASSは任意の文字列に置換してください。

続いて、neutron.confを編集します。
変更1か所、コメントアウトが2ヶ所あります。

core_plugin = midonet.neutron.plugin.MidonetPluginV2
# service_plugins
# allow_overlapping_ips

次に、midonet Plugin用のconfigファイルを作成します。

mkdir /etc/neutron/plugins/midonet
[DATABASE]
sql_connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron

[MIDONET]
# MidoNet API URL
midonet_uri = http://controller:8081/midonet-api
# MidoNet administrative user in Keystone
username = midonet
password = MIDONET_PASS
# MidoNet administrative user's tenant
project_id = services

※MIDONET_PASSは先程作成したmidonetユーザのパスワードに置換してください。
※NEUTRON_DBPASSはRDOインストール時のanswerファイル内の「CONFIG_NEUTRON_DB_PW」に記載された文字列と置換してください。

既存のplugin.iniファイルを削除し、シンボリックリンクを生成します。
また、NeutronDBを作成します。

rm /etc/neutron/plugin.ini
ln -s /etc/neutron/plugins/midonet/midonet.ini /etc/neutron/plugin.ini
/bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/midonet/midonet.ini upgrade juno" neutron

最後にいくつかのサービスのStart/Restart/Enableを実行し、Controllerノードでの作業は
ひとまず終了です。

systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service
systemctl enable neutron-server.service
systemctl start neutron-server.service

RDO OpenStack設定変更~Computeノード~

続いて、Computeノードでの作業です。
まずはqemu.confを修正します。

user = "root"
group = "root"
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"
]

一部パッケージのインストールと、サービスのStart/Restart/Disableを行う。

systemctl restart libvirtd.service
yum -y install openstack-nova-network
systemctl disable openstack-nova-network.service
systemctl restart openstack-nova-compute.service

次に、openstack-neutron-openvswitchのパッケージを削除します。

yum -y remove openstack-neutron-openvswitch

続いて、neutron.confを修正します。

# core_plugin =neutron.plugins.ml2.plugin.Ml2Plugin
# service_plugins
# allow_overlapping_ips

最後に、openvswitchを停止します。

systemctl disable openvswitch.service
systemctl stop openvswitch.service

RDO OpenStack設定変更~Gatewayノード~

最後にGatewayノード(OpenStackインストール時にNetworkノードとしてインストールしたノード)の設定を変更します。

まずは不要なパッケージを削除し、必要なパッケージをインストールします。

yum -y remove openstack-neutron-openvswitch
yum -y install openstack-neutron python-neutron-plugin-midonet

次に、neutron.confを編集します。

core_plugin = midonet.neutron.plugin.MidonetPluginV2
# service_plugins
# allow_overlapping_ips

続いてdhcp_agent.iniを編集します。

interface_driver = neutron.agent.linux.interface.MidonetInterfaceDriver
dhcp_driver = midonet.neutron.agent.midonet_driver.DhcpNoOpDriver
enable_isolated_metadata = True
# use_namespaces = True
[MIDONET]
# MidoNet API URL
midonet_uri = http://controller:8081/midonet-api
# MidoNet administrative user in Keystone
username = midonet
password = MIDONET_PASS
# MidoNet administrative user's tenant
project_id = services

※MIDONET_PASSは先程作成したmidonetユーザのパスワードに置換してください。

最後に、一部サービスを起動します。

systemctl enable neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
systemctl start neutron-dhcp-agent.service neutron-metadata-agent.service

ここまででRDO OpenStackのインストール・設定変更が完了となります。
次にMidoNetのインストール作業に入りたいと思います。

MidoNet関連サービスのインストール

こちらの項目は全ノード共通の作業となります。
※個別の設定値の違いは存在します。

Zookeeperのインストール

まずは分散処理のためのコーディネートサービス「Zookeeper」をインストールします。

yum install zookeeper zkdump nmap-ncat

インストールされたZookeeperのコンフィグファイルを編集します。

server.1=controller:2888:3888
server.2=network:2888:3888
server.3=compute:2888:3888

各ノード毎にmyidファイルを作成します。

◆controllerノード
echo 1 > /var/lib/zookeeper/data/myid

◆gatewayノード
echo 2 > /var/lib/zookeeper/data/myid

◆computeノード
echo 3 > /var/lib/zookeeper/data/myid

/usr/java/default/binディレクトリを作成し、シンボリックリンクを作成します。
また、zookeeperのサービスを起動します。

mkdir -p /usr/java/default/bin
ln -s /usr/lib/jvm/jre-1.8.0-openjdk/bin/java /usr/java/default/bin/java
chkconfig zookeeper on
service zookeeper start

Zookeeperのインストールが問題なく終わっている場合、下記コマンドを実行すると「imok」とレスポンスが来るようになります。

echo ruok | nc 127.0.0.1 2181

Cassandraのインストール

続いて、NoSQLデータベースシステム「Cassandra」をインストールします。

yum install dsc20

次に、Cassandraのコンフィグファイルを修正します。

cluster_name: 'midonet'
- seeds: "controller,network,compute"

また、下記2項目に関しては、ノード毎に設定値が異なるのでご注意ください。

◆controllerノード
listen_address: controller
rpc_address: controller

◆gatewayノード
listen_address: network
rpc_address: network

◆computeノード
listen_address: compute
rpc_address: compute

cassandraを起動します。

service cassandra start
chkconfig cassandra on

次に、OracleJDKを/opt/にダウンロード・解凍します。
wgetでダウンロードする場合、ライセンス同意のCookieを挿入する必要があります。

cd /opt/
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz"
tar xzf jdk-7u79-linux-x64.tar.gz

alternativesコマンドを使用して、javaの標準コマンドを変更します。

alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2
alternatives --config java
    /opt/jdk1.7.0_79/bin/javaを選択

続いてcassandra-env.shを編集します。

◆controllerノード
JVM_OPTS=”$JVM_OPTS -Djava.rmi.server.hostname=controller”

◆gatewayノード
JVM_OPTS=”$JVM_OPTS -Djava.rmi.server.hostname=network”

◆computeノード
JVM_OPTS=”$JVM_OPTS -Djava.rmi.server.hostname=compute”

最後にcassandraをrestartします。

service cassandra restart

Cassandraのインストールが正常に行えていた場合、下記コマンドで正常なレスポンスが返ってきます。
※下記はコマンド並びにレスポンス例です。

# nodetool -host 127.0.0.1 status
[...]
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns   Host ID                               Rack
UN  192.0.2.1  123.45 KB  256     33.3%  11111111-2222-3333-4444-555555555555  rack1
UN  192.0.2.2  234.56 KB  256     33.3%  22222222-3333-4444-5555-666666666666  rack1
UN  192.0.2.3  345.67 KB  256     33.4%  33333333-4444-5555-6666-777777777777  rack1

MidoNet API/CLIのインストール

MidoNetの設定作業を実施できるよう、今回はControllerノードにAPIとCLIの実行環境をインストールします。
※下記作業は全てControllerノードで実施します。

まずはapi用のパッケージをインストールします。

yum -y install midonet-api tomcat

続いてweb.xmlを編集します。

<context-param>
    <param-name>rest_api-base_uri</param-name>
    <param-value>http://controller:8081/midonet-api</param-value>
</context-param>

<context-param>
    <param-name>keystone-service_host</param-name>
    <param-value>controller</param-value>
</context-param>

<context-param>
    <param-name>keystone-admin_token</param-name>
    <param-value>ADMIN_TOKEN</param-value>
</context-param>

<context-param>
    <param-name>zookeeper-zookeeper_hosts</param-name>
    <param-value>controller:2181,network:2181,compute1:2181</param-value>
</context-param>

<context-param>
    <param-name>midobrain-properties_file</param-name>
    <param-value>/var/lib/tomcat/webapps/host_uuid.properties</param-value>
</context-param>

次にtomcatのsever.xmlに記載されているポート番号を編集します。

8080 ⇒ 8081

midonet-api.xmlを作成します。

/etc/tomcat/Catalina/localhost/midonet-api.xml

<Context
    path="/midonet-api"
    docBase="/usr/share/midonet-api"
    antiResourceLocking="false"
    privileged="true"
/>

最後にtomcatを起動すればapi設定は完了です。

systemctl enable tomcat.service
systemctl start tomcat.service

次にMidoNet CLIをインストールします。

yum install python-midonetclient

midonetrcファイルを作成します。

[cli]
api_url = http://controller:8081/midonet-api
username = admin
password = ADMIN_PASS
project_id = admin

※ADMIN_PASSはRDOで作成されたadminユーザのパスワードに置換してください。

Midolmanのインストール

最後に、ComputeノードとGatewayノードにMidoNetの分散型エージェント「midolman」をインストールします。
作業はComputeノードとGatewayノードで同様の内容となります。

まずはmidolmanをインストールします。

yum -y install midolman

midolman.confを編集します。

zookeeper_hosts = controller:2181,network:2181,compute1:2181

続いてNSDBへのアクセスを設定します。

echo << EOF | mn-conf set -t default
 > zookeeper {
 >     zookeeper_hosts = $CONTROLLER:2181,$NETWORK:2181,$COMPUTE1:2181
 > }
 >
 > cassandra {
 >     servers = $CONTROLLER,$NETWORK,$COMPUTE1
 > }
 > EOF

最後にmidolmanを起動します。

systemctl start midolman.service

以上でRDOを使用したOpenStack+MidoNet環境の導入が完了となります。

ここまでの作業では、OpenStack内部の通信は可能ですが、External Net(外部NW)を介して、物理環境の外へのアクセスができない状態となっております。

下図の緑色の四角の中はOpenStack環境なので、通常通りHorizon・apiから作成することが可能です。
青色四角内のルータがMidoNet Plugin独自のルータとなっており、このルータの作成・外部への接続を実施することにより、外部環境との通信が可能となります。

簡易論理構成図

以降の作業に関しては通常のMidoNetの設定作業となりますので、下記ページをご参照ください。
MidoNet Quick Start Guide
※MidoNet Host Registrationから先の作業が必要となります。

関連記事

image

OpenStack Summit Portland Quick レポート

by hasegawa 2013.04.172013年4月15日〜18日にかけて米国のオレゴン州ポー

記事を読む

no image

Swiftの概要 ~ Swiftによるオブジェクトストレージシステムの構築(1)

(Swift関連の記事の一覧はこちらをご覧ください)はじめまして、山縣と申します。私はビットアイル総

記事を読む

top

OpenStack API でSoftLayerを操作する “Jumpgate”

by Ikuo Kumagai (@kumagai19o) この記事はAdvent Calen

記事を読む

newton

Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Advent Calendar 201

記事を読む

no image

Nova Availability Zone と Cinder Availability Zone

OpenStack 担当 石川です。 実際に自分が使うか使わないかは置いておき、気になったオプ

記事を読む

dhcloudbuilding-121017105917-phpapp02.pdf-EF-BC-881_29-E3-83-98-E3-82-9A-E3-83-BC-E3-82-B7-E3-82-99-EF-BC-89

OpenStack Summit in San Diego 3日目

ビットアイル総研の長谷川です。今日は、Summit の3日目です。本日行われたセッションのなかから興

記事を読む

Rally-Actions

OpenStack Rally入門

RallyはOpenStackのプロジェクトの一つです。OpenStackのベンチマークツールと簡単

記事を読む

oss_on_slshowcase

CentOS 6 から7へのアップグレード

この記事は OSS on SoftLayer Showcase  の OpenStack Juno

記事を読む

no image

構成管理ツール「Ansible」のインストールと使用方法

ビットアイル総合研究所の田波です。 今回は構成管理ツール「Ansible」のインストール方法と

記事を読む

horizon

OpenStack Cinder Multiple driver backends 機能を使ってみよう

by Hiroki Ishikawa OpenStack 担当、石川です。 Grizzly

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

no image
OpenStack DBaas (Trove) を動かした話

本記事はOpenStack Advent Calendar 2015 

→もっと見る

PAGE TOP ↑