全サービスを同時に更新する方式による OpenStack のアップグレード
更新 -
1. 概要
本記事で解説する OpenStack のアップグレード方法では、OpenStack サービスを同時に無効化してからアップグレードを実行し、アップグレードプロセスの完了後に全サービスを有効化する必要があります。この方法は、Red Hat Enterprise Linux OpenStack Platform 5 へのアップグレード方法の中で最も簡単な方法です。
この方法では、すべての OpenStack サービスが停止し、オーケストレーションは一切必要ありません。Red Hat Enterprise Linux バージョン (6.4 から 6.5 へ) のアップグレードの必要がない場合には、仮想マシンのワークロードの稼働状態を維持することができます。
大規模な環境の場合は、このアップグレードにより、データベーススキーマのアップグレード完了までのダウンタイムが長時間に及ぶ可能性があります。あらかじめテスト環境でアップグレード手順のリハーサルを実行し、特定の時間帯にダウンタイムを計画してアップグレードを行うことによって、ダウンタイムによる影響を軽減することができます。
注意
本記事に記載する手順は、Red Hat Enterprise Linux OpenStack Platform の全ドキュメントに適用されているアーキテクチャー命名規則に従っています。この規則について十分理解していない場合は、手順を開始する前にこちらのリンクを参照してください。
2. RHN/CDN チャンネル
本セクションでは、Red Hat Enterprise Linux OpenStack Platform 5 のデプロイに必要なチャンネルおよびリポジトリの設定について説明します。
警告
旧バージョンの Red Hat OpenStack リポジトリは利用可能な状態ですが、Red Hat Enterprise Linux OpenStack Platform 5 のインストールの前に、お使いのシステムからこれらのリポジトリへアクセスできないようにする必要があります。たとえば、CDN の場合、以下のリポジトリは無効にするか、サブスクライブを解除してください。
-
Red Hat OpenStack 1.0 (Essex) -- rhel-server-ost-6-preview-rpms
-
Red Hat OpenStack 2.1 (Folsom) -- rhel-server-ost-6-folsom-rpms
-
Red Hat Enterprise Linux OpenStack Platform 3 (Grizzly) -- rhel-server-ost-6-3-rpms
-
Red Hat Enterprise Linux OpenStack Platform 4 Beta (Havana) -- rhel-6-server-openstack-beta-rpms
-
Red Hat Enterprise Linux OpenStack Platform 4 (Havana) -- rhel-6-server-openstack-4.0-rpms
注意
cloud-init を必要とする、カスタムの Red Hat Enterprise Linux ゲストイメージを作成する場合は、Red Hat Common for RHEL Server チャンネルの使用を推奨します。
Red Hat Enterprise Linux 6 の場合は、以下のコマンドを実行します。
#
subscription-manager repos \
--enable=rhel-6-server-rh-common-rpms
2.1. コンテンツ配信ネットワーク (CDN) チャンネル
コンテンツ配信ネットワークから Red Hat Enterprise Linux OpenStack Platform 5 をインストールすることができます。そのためには、正しいチャンネルを使用するように subscription-manager を設定します。
CDN チャンネルを有効にするには、以下のコマンドを実行します。
#
subscription-manager repos --enable=[reponame]
CDN チャンネルを無効にするには、以下のコマンドを実行します。
#
subscription-manager repos --disable=[reponame]
表 1. 必須チャンネル
チャンネル | リポジトリ名 |
---|---|
Red Hat OpenStack 5.0 Beta (RPMS) for Server 6 |
rhel-6-server-openstack-5.0-rpms
|
Red Hat Enterprise Linux 6 Server (RPMS) |
rhel-6-server-rpms
|
表 2. 任意チャンネル
チャンネル | リポジトリ名 |
---|---|
RHEL Server Load Balancer (v6 for 64-bit x86_64) |
rhel-lb-for-rhel-6-server-rpms
|
Red Hat Enterprise Linux 6 Server - Optional |
rhel-6-server-optional-rpms
|
CDN を使用する場合、Red Hat Enterprise Linux OpenStack Platform 5 が正常に機能するように、以下のチャンネルは無効にする必要があります。
表 3. 無効にするチャンネル
チャンネル | リポジトリ名 |
---|---|
Red Hat CloudForms Management Engine |
"cf-me-*"
|
Red Hat CloudForms Tools for RHEL 6 |
"rhel-6-server-cf-*"
|
Red Hat Enterprise Virtualization |
"rhel-6-server-rhev*"
|
Red Hat Enterprise Linux 6 Server - Extended Update Support (EUS) |
"*-eus-rpms"
|
Red Hat Software Collections |
"rhel-server-rhscl-6-rpms"
|
2.2. Red Hat Network (RHN) チャンネル
Red Hat Enterprise Linux OpenStack Platform 5 は Red Hat Network (RHN) からインストールすることができます。
RHN 経由でチャンネルを追加するには、以下のコマンドを実行します。
#
rhn-channel --add --channel=[reponame]
RHN 経由でチャンネルを削除するには、以下のコマンドを実行します。
#
rhn-channel --remove --channel=[reponame]
表 4. 必須チャンネル
チャンネル | リポジトリ名 |
---|---|
Red Hat OpenStack 5.0 for RHEL 6 Server x86_64 |
rhel-x86_64-server-6-ost-5
|
Red Hat Enterprise Linux Server (v6 for 64-bit AMD64 / Intel64) |
rhel-x86_64-server-6
|
表 5. 任意チャンネル
チャンネル | リポジトリ名 |
---|---|
RHEL Server Load Balancer (v6 for 64-bit x86_64) |
rhel-x86_64-server-lb-6
|
RHEL Server Optional (v. 6 64-bit x86_64) |
rhel-x86_64-server-optional-6
|
MRG Messaging v2 (for RHEL 6 Server x86_64) |
rhel-x86_64-server-6-mrg-messaging-2
|
3. 全 OpenStack サービスの同時アップグレード
一括でアップグレードを行うには、各ホストで以下の手順を実行してください。
手順 1. ホスト上の OpenStack コンポーネントのアップグレード
-
openstack-utils
パッケージが確実にインストールされていることを確認します。#
yum install openstack-utils
-
全ノードで OpenStack サービスをすべて停止します。このステップは、サービスがどのようにノードに分散されているかによって異なります。1 つのノードで実行されている OpenStack サービスをすべて停止するには、そのノードにログインして以下のコマンドを実行します。
#
openstack-service stop
-
全パッケージの完全なアップグレードを実行してから、Identity Service 内の期限切れトークンをフラッシュします (データベースの同期の所要時間が短縮される可能性があります)。
#
yum upgrade
#
keystone-manage token_flush
-
データベースを使用する各サービスのデータベーススキーマをアップグレードします。この操作を行うには、サービスをホストしているノードにログインして以下のコマンドを実行します。
#
openstack-db --service SERVICENAME --update
SERVICENAME は、サービスのプロジェクト名に置き換えます。たとえば、Idenitity Service のデータベーススキーマをアップグレードするためのコマンドは以下のようになります。#
openstack-db --service keystone --update
表 6. データベースを使用する各 OpenStack サービスのプロジェクト名
サービス プロジェクト名 Identity keystone Block Storage cinder Image Service glance Compute nova Networking neutron Orchestration heat Dashboard horizon -
上記の操作によって生成された設定ファイルを確認します。アップグレードされたパッケージには、Red Hat Enterprise Linux OpenStack Platform 5 バージョンのサービスに適した
.rpmnew
ファイルがインストールされているはずです。
4. libvirt_vif_driver の設定
旧ハイブリッドドライバーは非推奨となったため、アップグレードプロセスの一環として、
/etc/nova/nova.conf
で正しい libvirt_vif_driver
を設定する必要があります。そのためには、Compute API ホストで以下のコマンドを実行してください。
#
openstack-config --set /etc/nova/nova.conf \
DEFAULT libvirt_vif_driver nova.virt.libvirt.vif.LibvirtGenericVIFDriver
次に、各コンピュートノードを設定して、VIF プラギングが失敗した場合にはインスタンスのブートが失敗するようにする必要があります。そのためには、各コンピュートノードで以下のコマンドを実行してください。
#
openstack-config --set /etc/nova/nova.conf \
DEFAULT vif_plugging_is_fatal true
#
openstack-config --set /etc/nova/nova.conf \
DEFAULT vif_plugging_timeout VIFTIMEOUT
VIFTIMEOUT は、VIF プラギングの試行が失敗するまでの待ち時間 (秒単位) に置き換えます。VIFTIMEOUT の推奨値は
300
です。
5. Compute Service と Networking Service 間の対話の設定
本リリースの OpenStack Networking Service では、新規インターフェース設定の要求に応答して、Compute Service へアクティブに通知できるようになりました。この設定は、以下の手順に従って行います。
手順 2. neutron と nova の対話の設定
-
ポートのステータスがアクティブに切り替わった時に
neutron
がnova
に通知するように設定します。#
openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
-
neutron
が Compute API サービスの新規アドレスを使用するように設定します。#
openstack-config --set /etc/neutron/neutron.conf DEFAULT nova_url http://COMPUTEAPIADDRESS:8774/v2
-
neutron
に必要な認証情報を提供します。#
openstack-config --set /etc/neutron/neutron.conf DEFAULT nova_admin_username NOVAADMIN
#
openstack-config --set /etc/neutron/neutron.conf DEFAULT nova_admin_password NOVAPASSWD
#
openstack-config --set /etc/neutron/neutron.conf DEFAULT nova_admin_tenant_id NOVATENANT
#
openstack-config --set /etc/neutron/neutron.conf DEFAULT nova_admin_auth_url KEYSTONEENDPOINT
-
NOVAADMIN は、OpenStack 環境で管理者権限のあるユーザーに置き換えます。
注意
『OpenStack のデプロイ: 実習環境 (手動設定)』ガイドの例では、Compute Service 専用にadmin
ロールを持つcompute
というユーザーと、services
というテナントを作成します。このユーザーは、NOVAADMIN として適切です。 -
NOVAPASSWD は、NOVAADMIN に対応するパスワードに置き換えます。
-
NOVATENANT は、NOVAADMIN に関連付けられたプライマリテナントの UUID に置き換えます。
-
KEYSTONEENDPOINT は、
keystone
サービスの管理エンドポイントの URL に置き換えます。
-
neutron
と nova
間の対話に関連する利用可能な設定についての詳しい情報は、OpenStack Networking をアップグレードした後に生成される /etc/neutron/neutron.conf.rpmnew
ファイルを参照してください。
6. OpenStack Networking エージェントの ML2 への移行
OpenStack Networking 用の Open vSwitch (OVS) および LinuxBridge プラグインは、本リリースでは非推奨となりました。このため、以前のバージョンの OpenStack Networking デプロイメントでこれらのいずれかのプラグインを使用していた場合には、アップグレードの完了後にプラグインのデータベースを ML2 に移行する必要があります。本リリースには、この移行を実行することができる python スクリプト (neutron.db.migration.migrate_to_ml2) が含まれています。
警告
このスクリプトを使用して適用されたデータベースの変更は元に戻すことができません。このため、このスクリプトをテストまたは使用する前には、プラグインのデータベースをバックアップしておいてください。
データベースを ML2 に移行する前には、以下の手順に従って、あらかじめ ML2 の初期設定を行う必要があります。
手順 3. ML2 の初期設定
-
openstack-neutron-ml2 パッケージをインストールします。
#
yum install openstack-neutron-ml2
-
Networking を ML2 設定ファイル
ml2_conf.ini
にダイレクトするためのシンボリックリンクを作成します。#
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
-
ml2_conf.ini
ファイルの[ml2]
セクションに必要なプラグインの設定を追加します。
表 7. ML2 に必要なプラグイン設定
設定オプション 説明 mechanism_drivers neutron.ml2.type_drivers 名前空間から読み込むネットワークメカニズムドライバーのエントリポイントのコンマ区切りの順序付きリスト。サポートされている値は local
、flat
、vlan
、gre
、およびvxlan
です。tenant_network_types テナントネットワークとして割り当てる network_types
のコンマ区切りの順序付きリスト。サポートされている値は、openvswitch
、linuxbridge
、およびl2population
です。type_drivers neutron.ml2.type_drivers 名前空間から読み込むネットワークタイプドライバーのエントリポイントのコンマ区切りリスト。サポートされている値は mechanism_drivers
と同じです。 -
選択したメカニズムドライバーの必須設定を追加します。ネットワークタイプドライバー (
type_drivers
) 別の必須設定は、以下の表を参照してください。
表 8. ドライバータイプ別の必須設定
type_driver セクション 設定オプション 説明 flat [ml2_type_flat] flat_networks フラットなネットワークを作成可能な physical_network 名のリスト。フラットなネットワークに、任意の physical_network
名を割り当てられるようにするには、<literal>*</literal> を使用します。gre [ml2_type_gre] tunnel_id_ranges テナントネットワークの割り当てに使用できる GRE トンネリング ID の範囲を列挙した MIN:MAX トンネリングタプルのコンマ区切りリスト vlan [ml2_type_vlan] network_vlan_ranges VLAN プロバイダーとテナントネットワークが使用可能な物理ネットワーク名の一覧。この一覧に記載する各名前には、テナントネットワークへの割り当てに使用可能な VLAN タグの範囲を含めることができます。各名前の構文は、physical_network:vlan_min:vlan_max または physical_network の形式にすることができます。 vxlan (全 2 中の 1) [ml2_type_vxlan] vni_ranges テナントネットワークの割り当てに使用できる VXLAN VNI ID の範囲を列挙した MIN:MAX タプルのコンマ区切りリスト vxlan (全 2 中の 2) [ml2_type_vxlan] vxlan_group VXLAN のマルチキャストグループ。未設定の場合には、VXLAN マルチキャストモードが無効になります。
注意
ML2 プラグインの設定についての詳しい説明が必要な場合は、「Modular Layer 2 (ML2) の概要」を参照してください。
ML2 の初期設定が完了したら、次に旧ネットワークエージェントを移行して、ネットワーク設定の更新を完了します。
手順 4. ML2 への移行
-
neutron.db.migration.migrate_to_ml2 を使用してプラグインのデータベースを移行するには、以下のコマンドを実行します。
#
python -m neutron.db.migration.migrate_to_ml2 PLUGIN mysql://DBADMIN:DBPASS@DBHOST/DBNAME
-
PLUGIN は、使用していた元のプラグインに置き換えます。サポートされている値は
linuxbridge
およびopenvswitch
です。 -
DBADMIN は、OpenStack Networking データベースの有効な管理ユーザー名 (例:
neutron
) に置き換えます。 -
DBPASS は DBADMIN に対応するパスワードに置き換えます。
-
DBHOST は、OpenStack Networking データベースホストの IP アドレスに置き換えます。
-
DBNAME は OpenStack Networking データベースの名前に置き換えます。デフォルトでは、Packstack により
ovs_neutron
またはneutron_linux_bridge
という名前が選択したプラグインに応じて割り当てられます。
注意
Networking Service が使用する DBADMIN、DBPASS、DBHOST、および DBNAME の実際の値は、/etc/neutron/neutron.conf
の[database]
セクションに設定されます。具体的には、これらの値は以下の構文でconnection
の設定値に設定されます。connection = mysql://DBADMIN:DBPASS@DBHOST/DBNAME
オプションのパラメーターには以下が含まれます。-
--tunnel-type TUNNEL
: プラグインがトンネリングを使用するように設定した場合には、このパラメーターを使用してトンネリングデータの移行も行ってください。TUNNEL は設定したトンネリングのタイプに置き換えます。サポートされている値はGRE
およびVXLAN
です。 -
--vxlan-udp-port VXLANPORT
: VXLAN トンネリングデータを移行する場合には、このパラメーターを使用して VXLAN トンネルが使用すべき UDP ポートを指定します (それに応じて VXLANPORT を置き換えてください)。このパラメーターを--tunnel-type VXLAN
とともに使用しなかった場合、VXLAN トンネルはデフォルトでポート4789
を使用します。
-
-
プラグインデータベースの移行が完了したら、手動で ML2 プラグインを有効化します。そのためには、まず
/etc/neutron/neutron.conf
設定ファイルを開いて、core_plugin
パラメーターを ML2 プラグインに設定します。core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
-
次に、L3 ルータープラグイン (
neutron.services.l3_router.l3_router_plugin.L3RouterPlugin
) をservice_plugins
パラメーターに追加します。service_plugins = neutron.services.firewall.fwaas_plugin.FirewallPlugin,neutron.services.l3_router.l3_router_plugin.L3RouterPlugin
両パラメーターは/etc/neutron/neutron.conf
のDEFAULT
セクションにあります。設定ファイルを手動で設定する場合には、各行頭に空白文字が入らないようにしてください。空白文字が入ってしまうと解析エラーが生じて、サービスが正常に機能しなくなる可能性があります。
注意
ML2 プラグインの手動設定についての詳しい説明は、『OpenStack のデプロイ: 実習環境 (手動設定)』の「Networking Service プラグインの設定」のセクションを参照してください。
7. OpenStack Networking のアップグレードの最終段階
セクション 6「OpenStack Networking エージェントの ML2 への移行」に従ってネットワークエージェント ML2 に移行した後には、最終の設定変更を追加して Networking Service のアップグレードを完了することができます。
手順 5. アップグレードを完了するための OpenStack Networking Service の設定
-
全 Networking Service エージェントでハートビートを長く設定します。以下のコマンドを実行すると、本リリースの推奨値が設定されます。Networking コントローラーノードで以下のコマンドを実行します。
#
openstack-config --set /etc/neutron/neutron.conf DEFAULT agent_down_time 75
次に、Networking Service エージェントをホストしている各ノードで以下のコマンドを実行します。#
openstack-config --set /etc/neutron/neutron.conf agent report_interval 30
上記の設定により、Networking Service は 30 秒ごとにエージェントが停止しているかどうかを確認するようになります。エージェントは、75 秒間到達不可の場合にのみdown
状態と宣言されます。 -
dnsmasq
プロセスを強制終了します (この操作は、DHCP エージェントが機能するために必要です)。#
killall dnsmasq
-
OpenStack Networking Service を再起動して、全設定を適用します。そのためには、Networking Service をホストしている全ノードで以下のコマンドを実行してください。
#
openstack-service start neutron
8. インスタンスへのコンソールアクセスを許可するためのファイウォール設定
一部のファイアウォール設定により、アップグレード後にコンソールへアクセスできなくなる可能性があります。そのような問題が発生した場合には、サービスノード上のファイアウォールを設定してコンソールアクセスを許可するようにする必要があります。そのためには以下の手順に従ってください。
手順 6. Compute Service トラフィックを許可するためのファイアウォール設定
-
Compute Service ホストに
root
ユーザーとしてログインします。 -
テキストエディターで
/etc/sysconfig/iptables
ファイルを開きます。 -
このファイルに以下の行を追記して、コンソールトラフィックに使用するポートで、TCP トラフィックを許可する INPUT ルールを追加します。
-A INPUT -p tcp --dport 5900:6900 -j ACCEPT
新規ルールは、トラフィックを REJECT する INPUT ルールよりも前に記載する必要があります。 -
/etc/sysconfig/iptables
ファイルへの変更を保存します。 -
iptables
サービスを再起動して、変更を有効にします。#
service iptables restart
注意
以下にあげる例のようなモジュールのアップロードに関するエラーは無視しても問題ありません。
#
service iptables restart
iptables: Setting chains to policy ACCEPT: mangle nat filte[ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: iptable_nat iptable_filter ip[FAILED]t iptable_filter ip_tables iptables: Applying firewall rules: [ OK ]
ファイアウォールは、すでに使用中のモジュールは再読み込みしませんが、それによって、必要なファイアウォールルールが適用されなくなることはないはずです。
9. Dashboard の手動によるローカル設定
通常、Red Hat Enterprise Linux OpenStack Platform 5 のサービスは、旧デプロイメントの設定ファイルを使用して実行されます。ただし、Dashboard のファイルは 2 つのバージョン間で大幅に変更されるため、サービスを正常に機能させるには手動で設定する必要があります。
手順 7. アップグレードに向けた手動による Dashboard のローカル設定
-
既存の
/etc/openstack-dashboard/local_settings
ファイルをバックアップします。 -
/etc/openstack-dashboard/local_settings
の内容をlocal_settings.rpmnew
の内容に置き換えます。 -
バックアップした
/etc/openstack-dashboard/local_settings
からOPENSTACK_HOST
とSECRET_KEY
の値を使用して、新しい/etc/openstack-dashboard/local_settings
ファイルを更新します。バックアップした/etc/openstack-dashboard/local_settings
ファイルにその他の必要なデフォルト以外の設定がある場合には、それらの設定も新しい/etc/openstack-dashboard/local_settings
ファイルにコピーしてください。 -
Django 1.5 (またはそれ以降のバージョン) を実行している場合には、
local_settings
ファイルでALLOWED_HOSTS
が正しく設定されていることを確認する必要があります。ALLOWED_HOSTS
には、Dashboard Service と接続する際に使用することのできるホスト名の一覧が記載されています。-
ユーザーが "http://dashboard.example.com" を使用して Dashboard Service にアクセスする場合には、以下のように設定します。
ALLOWED_HOSTS=['dashboard.example.com']
-
Dashboard Service をローカルシステムで実行している場合には、以下の設定を使用することができます。
ALLOWED_HOSTS=['localhost']
-
ユーザーがホスト名の代わりに、またはホスト名に加えて IP アドレスを使用する場合の例は以下のようになります。
ALLOWED_HOSTS=['dashboard.example.com', '192.168.122.200']
注意
ALLOWED_HOSTS
の設定についての詳しい説明は Django のマニュアル を参照してください。 -
-
Web サーバーを再起動して全変更を適用します。
#
service httpd restart
10. データベースサーバーのアップグレード
Red Hat Enterprise Linux OpenStack Platform 5.0 より、Red Hat Enterprise Linux OpenStack Platform のサポート対象データベースサーバーは MariaDB となりました。Red Hat Enterprise Linux OpenStack Platform 4.0 から Red Hat Enterprise Linux OpenStack Platform 5.0 にアップグレードする際に、データベースサーバーが Red Hat Enterprise Linux 6.5 以前のバージョンを実行するシステムにインストールされている場合には、データベースサーバーを MySQL から MariaDB に手動でアップグレードする必要があります。
重要
以下の手順を実行する前に、データベースサーバーがインストールされているマシンで Red Hat OpenStack 4.0 チャンネルを無効にし、かつ Red Hat OpenStack 5.0 for Server 6 チャンネルを有効にする必要があります。
手順 8. データベースサーバーのアップグレード
-
Red Hat Enterprise Linux OpenStack Platform 環境の各ノードから、データベースサーバーにアクセスする Red Hat Enterprise Linux OpenStack Platform サービスをすべて停止します。
-
データベースサーバーがインストールされているシステムでデータベースサーバーを停止します。
#
service mysqld stop
-
MySQL サーバーのパッケージを削除します。
#
yum -y remove mysql-server
-
全パッケージを最新の状態にします。
#
yum -y update
-
MariaDB サーバーのパッケージをインストールします。
#
yum -y install mariadb-galera-server
-
データベースサーバーがブート時に起動するように設定します。
#
chkconfig mysqld on
-
データベースサーバーを起動します。
#
service mysqld start
-
内部
mysql
データベーススキーマをアップグレードします。プロンプトが表示されたら管理ユーザーのパスワードを入力します。#
mysql_upgrade -u root -p
-
Red Hat Enterprise Linux OpenStack Platform 環境の各ノードから、データベースサーバーにアクセスする Red Hat Enterprise Linux OpenStack Platform サービスをすべて起動します。
データベースサーバーを MySQL から MariaDB にアップグレードしました。以前データベースサーバーとの対話に使用していたコマンドはすべてそのまま使用することができます。
11. OpenStack の再起動
パッケージのアップグレードで再起動が必要な場合には (例: アップグレードの一環として新規カーネルがインストールされた場合など)、OpenStack サービスが無効な状態のうちに、影響を受けたホストを再起動してください。
OpenStack サービスを再起動するには、各ノードで以下のコマンドを実行します。
#
openstack-service start
12. RabbitMQ と QPid
RabbitMQ は、Red Hat Enteprise Linux OpenStack Platform 5 の推奨メッセージブローカーとなりました。このため、アップグレードの後に RabbitMQ への移行を行うことをお勧めします。
その手順については https://access.redhat.com/articles/1167113 を参照してください。