RDOを使用したOpenStack+MidoNet環境のインストール
ビットアイル総合研究所 田波です。
今回は以前紹介したRDOを使用して、OpenStack+MidoNetを導入する手順を紹介します。
RDOのインストール方法は以前の記事「RDOを使用したOpenStack Juno環境の構築」で紹介しておりますので、そちらも併せてご覧ください。
以下公式サイトにRDO+MidoNetの手順が紹介されていますが、1台構成のみの手順の為、今回は3台構成での手順を紹介したいと思います。
MidoNetとは
MidoNetはミドクラが作った、オープンソースのクラウドIaaS向けネットワーク仮想化プラットフォームです。
OpenStackと組み合わせることで、デフォルトのNeutron ML2 Pluginとは異なり、分散仮想ルート等の機能が使用可能になります。
詳細は下記の公式サイトをご参照ください。
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から先の作業が必要となります。
関連記事
-
-
Swift のグローバルクラスタ (3) Icehouse 開発版でのテスト結果
2014.4.14 by You Yamagata 山縣です。 前回・前々回でグローバルクラスタ対応
-
-
OpenStackで使用可能なWindows10イメージの作成方法
ビットアイルの田波です。 久々の更新です。 今回はWindows10イメージをOpenStack上
-
-
OpenStack Summit in Paris (Day3)
by Ikuo Kumagai (@kumagai19o) 少し遅れましたがOpenStack S
-
-
サーバ1台でのクラスタの構築 ~ Swiftによるオブジェクトストレージシステムの構築(2)
by yamagata 2013/1/21(Swift関連の記事の一覧はこちらをご覧ください)(1/
-
-
CLIによるSwiftへのアクセス(前編) ~ Swiftによるオブジェクトストレージシステムの構築(3)
by yamagata 2013/1/30(Swift関連の記事の一覧はこちらをご覧ください)(2/
-
-
Grizzlyの新機能(1) ~ Swiftによるオブジェクトストレージシステムの構築(8)
by You Yamagata 2013.04.24(Swift関連の記事の一覧はこちらをご覧くださ
-
-
RDOを使用したOpenStack Juno環境の構築
ビットアイル総合研究所 田波です。 今回はRDOを使用してOpenStack Juno環境を構築し
-
-
Swiftの概要 ~ Swiftによるオブジェクトストレージシステムの構築(1)
(Swift関連の記事の一覧はこちらをご覧ください)はじめまして、山縣と申します。私はビットアイル総
-
-
Grizzlyの新機能(2) SLO ~ Swiftによるオブジェクトストレージシステムの構築(10)
by You Yamagata 2013.06.10 (Swift関連の記事の一覧は
-
-
OpenStack DBaas (Trove) を動かした話
本記事はOpenStack Advent Calendar 2015 12/17 のエントリー記事で