pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

OpenStack OpenvSwitch & セルフサービスネットワーク & L3HAによるネットワークノード冗長化構成時の要チェック公式ドキュメント一覧

項目 英語 日本語(Google翻訳) 日本語(ユーザー会翻訳)
Install Guide OpenStack Docs: Networking service Google 翻訳 OpenStack Docs: Networking サービス
NW Guide TOP OpenStack Docs: OpenStack Networking Guide Google 翻訳 OpenStack Docs: OpenStack ネットワークガイド
NW Guide OVSメカニズムドライバ OpenStack Docs: Open vSwitch mechanism driver Google 翻訳 OpenStack Docs: Open vSwitch mechanism driver
NW Guide OVS & セルフサービスNW OpenStack Docs: Open vSwitch: Self-service networks Google 翻訳 OpenStack Docs: Open vSwitch: Self-service networks
NW Guide OVS & L3HA OpenStack Docs: Open vSwitch: High availability using VRRP Google 翻訳 OpenStack Docs: Open vSwitch: High availability using VRRP
HAガイド(NW) OpenStack Docs: Configuring the networking services Google 翻訳 OpenStack Docs: ネットワークサービスの設定
パラメタ一覧 OpenStack Docs: Neutron Configuration Options Google 翻訳 -
Security Guide TOP OpenStack Docs: Networking Google 翻訳 -
Security Guide NWアーキテクチャ OpenStack Docs: Networking architecture Google 翻訳 -
Security Guide BestPractices OpenStack Docs: Networking services security best practices Google 翻訳 -

 
 

疑問

コントローラ・ネットワーク・コンピュートノードそれぞれに、どのパラメタを設定すれば良いのか?
これがわからない。
OpenStack Docs: Services and agents
これを見ると、基本コントローラ(Neutron Server)に入れておけば、ネットワークノード(Agent)はRPC経由で設定を覗く?ってこと。
エージェント側の設定が優先されるっていう記述もあり。

 
 

OpenStack環境構築メモ(Glanceセットアップ)

参考

OpenStack Docs: Installation
 
Keystoneセットアップ実施後に、以下作業を1号機で実施する。

認証情報読み込み

$ source ./adminrc

  

①Serviceプロジェクト作成

$ openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 696fc908b07c407eafdb74892f4a8ae5 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
+-------------+----------------------------------+

 

②Glanceユーザー作成 & Serviceプロジェクトへの管理者ロール割り当て

$ openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | ec86ed75c9f44708aa7bab73681c0138 |
| name                | glance                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

 

$ openstack role add --project service --user glance admin

 

③Glanceサービス登録

$ openstack service create --name glance --description "OpenStack Image" image
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image                  |
| enabled     | True                             |
| id          | 7ac6966d194c4abea13792d55868748f |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+

 

④エンドポイント登録

$ openstack endpoint create --region RegionPike image public http://cnt.pikesaku.net:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | c9e2593ff25947b6a0efb6750b84593a |
| interface    | public                           |
| region       | RegionPike                       |
| region_id    | RegionPike                       |
| service_id   | 7ac6966d194c4abea13792d55868748f |
| service_name | glance                           |
| service_type | image                            |
| url          | http://cnt.pikesaku.net:9292     |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionPike image internal http://cnt.local:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 82cc66e6d3e546b285f4774883523a94 |
| interface    | internal                         |
| region       | RegionPike                       |
| region_id    | RegionPike                       |
| service_id   | 7ac6966d194c4abea13792d55868748f |
| service_name | glance                           |
| service_type | image                            |
| url          | http://cnt.local:9292            |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionPike image admin http://cnt.local:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 3a3ef74285634f61900d1168a594d69f |
| interface    | admin                            |
| region       | RegionPike                       |
| region_id    | RegionPike                       |
| service_id   | 7ac6966d194c4abea13792d55868748f |
| service_name | glance                           |
| service_type | image                            |
| url          | http://cnt.local:9292            |
+--------------+----------------------------------+

 

⑤パッケージインストール

以下は3台のコントローラで実施する

$ sudo apt -y install glance

 

Glance用DB & ユーザー作成

$ mysql -uroot -p[DB_PASSWORD] -e 'CREATE DATABASE glance;'
$ mysql -uroot -p[DB_PASSWORD] -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '[GLANCE_DB_PASSWORD]';"
$ mysql -uroot -p[DB_PASSWORD] -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '[GLANCE_DB_PASSWORD]';"

 

ひとまず今日はここまで。。。

OpenStack Docs: Install and configure (Ubuntu)

"1. Install the packages:"まで完了

コンポーネントにKepstoneのVIPを指定
OpenStack Docs: Highly available Identity API
 
memcached・rabbitmqとの接続冗長化はkerstoneセットアップを参照
 
NFSサーバ上に配置する
 

aptの使い方メモ

参考

6.2. aptitude、apt-get、apt コマンド
 
updateはパッケージインデックスの更新のみ
upgardeもfull-upgradeもアップデート
full-upgradeを使う方がより最新化される。

upgradeとfull-updateの違いは以下の通り

項目 内容
upgrade 他のパッケージを削除せずにアップグレードできるインストール済みパッケージだけをアップグレード(構成変更度小)
full-upgrade アップグレードに伴う新依存関係で不要となったパッケージは削除し最新化(構成変更度大)

OpenStack環境構築メモ(Keystoneセットアップ)

参考URL

OpenStack Docs: Highly available Identity API
OpenStack Docs: Keystone Installation Tutorial
 
RabbitMQクラスタセットアップ実施後に、以下作業をコントローラ3台に実施する。
 

①DB作成

以下を1号機で実施

$ mysql -uroot -p[DB_PASSWORD] -e 'CREATE DATABASE keystone;'
$ mysql -uroot -p[DB_PASSWORD] -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '[KEYSTONE_DB_PASSWORD]';"
$ mysql -uroot -p[DB_PASSWORD] -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '[KEYSTONE_DB_PASSWORD]';"

 

パッケージインストール

$ sudo apt -y install keystone apache2 libapache2-mod-wsgi

 

設定ファイル編集

$ sudo crudini --set /etc/keystone/keystone.conf database connection 'mysql+pymysql://keystone:[KEYSTONE_DB_PASSWORD]@cnt/keystone'
$ sudo crudini --set /etc/keystone/keystone.conf token provider 'fernet'
$ sudo crudini --set /etc/keystone/keystone.conf cache memcache_servers 'cnt1:11211,cnt2:11211,cnt3:11211'
$ sudo crudini --set /etc/keystone/keystone.conf DEFAULT transport_url 'rabbit://cnt1:5672,cnt2:5672,cnt3:5672'
$ sudo crudini --set /etc/keystone/keystone.conf oslo_messaging_notifications transport_url 'rabbit://cnt1:5672,cnt2:5672,cnt3:5672'
$ sudo crudini --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_retry_interval 1
$ sudo crudini --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_retry_backoff 2
$ sudo crudini --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_max_retries 0
$ sudo crudini --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_durable_queues 'true'
$ sudo crudini --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_ha_queues 'true'

※以下URLに従いmemcached, rabbitmq連携部分の冗長化設定を実施
OpenStack Docs: Installing Memcached
OpenStack Docs: Messaging service for high availability
 

Keystone用DB展開 & キーレポジトリ初期化 & Keystone設定

$ sudo su -
# su -s /bin/sh -c "keystone-manage db_sync" keystone
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# keystone-manage bootstrap --bootstrap-password [ADMIN_PASSWORD] --bootstrap-admin-url http://cnt.local:35357/v3/ --bootstrap-internal-url http://cnt.local:5000/v3/ --bootstrap-public-url http://cnt.pikesaku.net:5000/v3/ --bootstrap-region-id RegionPike

※fernet_setup, credential_setupはDB変更しない。/etc/keystone/fernet-keys, /etc/keystone/credential-keys配下のファイルを更新した為、上記コマンドは全サーバで実行した方が良いと判断。実際に試験を実施し、上記を全サーバで実行しないと、1号機apache停止時に正常動作を確認できなかった。
 

Apache設定変更 & 再起動

$ echo 'ServerName cnt.local' | sudo tee -a /etc/apache2/apache2.conf
$ sudo systemctl restart apache2

 

KeystoneのHAProxyへの組み込み

設定ファイル編集
/etc/haproxy/haproxy.cfgに以下を追加

listen keystone_admin_endpoint
	bind 192.168.1.50:35357
	balance source
	option tcpka
	option httpchk
	option tcplog
	server cnt1 192.168.1.51:35357       inter 2000 rise 2 fall 5
	server cnt2 192.168.1.52:35357 check inter 2000 rise 2 fall 5
	server cnt3 192.168.1.53:35357 check inter 2000 rise 2 fall 5

listen keystone_internal_endpoint
	bind 192.168.1.50:5000
	balance source
	option tcpka
	option httpchk
	option tcplog
	server cnt1 192.168.1.51:5000       inter 2000 rise 2 fall 5
	server cnt2 192.168.1.52:5000 check inter 2000 rise 2 fall 5
	server cnt3 192.168.1.53:5000 check inter 2000 rise 2 fall 5

listen keystone_public_endpoint
	bind 192.168.0.50:5000
	balance source
	option tcpka
	option httpchk
	option tcplog
	server cnt1 192.168.0.51:5000       inter 2000 rise 2 fall 5
	server cnt2 192.168.0.52:5000 check inter 2000 rise 2 fall 5
	server cnt3 192.168.0.53:5000 check inter 2000 rise 2 fall 5

 

haproxy再起動

$ sudo systemctl restart haproxy

 

動作確認

1号機で以下ファイルを生成
./adminrc

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=[ADMIN_PASSWORD]
export OS_AUTH_URL=http://cnt.local:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

 
1号機で以下コマンドを実行

$ source ./adminrc

 
以下コマンドが正常に実行できることを確認

$ openstack project list -c Name
+-------+
| Name  |
+-------+
| admin |
+-------+

 
1号機のapacheを停止し、上記が正常に実行できることを確認
2号機のapacheを停止し、上記が正常に実行できることを確認
3号機のapacheを停止し、上記が失敗することを確認(以下エラーが出る)

$ openstack project list -c Name
Failed to discover available identity versions when contacting http://cnt.local:35357/v3. Attempting to parse version from URL.
Unable to establish connection to http://cnt.local:35357/v3/auth/tokens: ('Connection aborted.', BadStatusLine("''",))

 

備考

HAProxyはSNATする。

APIは以下URL参照
OpenStack Docs: Mapping of policy target to API

全コントローラを停止した場合、起動時に以下オペレーションが必要
 
rabbitmq起動
2,3号機で以下コマンド実行

$ sudo systemctl start rabbitmq-server

 
mariadb起動
最後に停止したサーバで以下コマンド実行

$ sudo galera_new_cluster 

他サーバで以下コマンド実行

$ sudo systemctl start mariadb

OpenStack環境構築メモ(memcachedセットアップ)

memcachedインストール

$ sudo apt -y install memcached python-memcache

 

②設定ファイル編集

sedで置換後のIPアドレスはノード毎に適宜変更

$ sudo sed -i -e 's/-l 127\.0\.0\.1/-l 192.168.1.51/' /etc/memcached.conf

 

memcached再起動・動作確認

$ sudo systemctl restart memcached
$ sudo netstat -lpnt | egrep memcache
tcp        0      0 192.168.0.51:11211      0.0.0.0:*               LISTEN      3160/memcached 
$

OpenStack環境構築メモ(HAProxyセットアップ & Pacemaker組込)

カーネルパラメタ変更

$ echo 'net.ipv4.ip_nonlocal_bind = 1' | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

 

②HAProxyインストール

$ sudo apt -y install haproxy

 

③HAproxy設定ファイル編集

/etc/haproxy/haproxy.cfg

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin
	stats timeout 30s
	user haproxy
	group haproxy
	daemon
	maxconn 4000

	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

	# Default ciphers to use on SSL-enabled listening sockets.
	# For more information, see ciphers(1SSL). This list is from:
	#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
	ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
	ssl-default-bind-options no-sslv3

defaults
	log	global
        timeout connect 5000
        timeout client  50000
        timeout server  50000

listen galera_cluster
	bind 192.168.1.50:3306
	balance source
	mode tcp
	option tcpka
	option mysql-check user haproxy
	server cnt1 192.168.1.51:3306             inter 2000 rise 2 fall 5
	server cnt2 192.168.1.52:3306 check inter 2000 rise 2 fall 5
	server cnt3 192.168.1.53:3306 check inter 2000 rise 2 fall 5

 
④HAProxyのDB死活監視で利用するユーザーをDBに登録
以下は1号機のみで実施

$ mysql -uroot -pPASSWORD -e "create user 'haproxy'@'192.168.1.51';"
$ mysql -uroot -pPASSWORD -e "create user 'haproxy'@'192.168.1.52';"
$ mysql -uroot -pPASSWORD -e "create user 'haproxy'@'192.168.1.53';"

 
⑤PacemakerリソースとしてHAProxyを組み込む
以下は1号機のみで実施

$ sudo crm configure primitive haproxy lsb:haproxy op monitor interval="1s"
$ sudo crm configure colocation vip-with-haproxy inf: vip-public vip-local haproxy
$ sudo crm configure order haproxy-after-vip mandatory: vip-public vip-local haproxy

※上記のvip-publicとvip-localは、Pacemaker & Corosyncセットアップ実施時に定義したもの

mariadbのmy.cnfについて

疑問点

 
my.cnfにはセクションが色々ある。どの機能が、どのセクションを読み込むの?
mysqldセクションが複数ファイルに描かれる場合もあり。この場合は、どっちが有効?
my.cnfファイルが複数ある場合あり、どれが読まれるの?
 

回答

 
mariadb.com
 
コマンド毎に読み込まれるセクションが決まっている。
どのセクションを読むかは、以下コマンドで確認できる。

$ [コマンド] --help --verbose

 
mysqldの場合、以下メッセージが出力される。

$ mysqld --help --verbose
〜省略〜
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 
The following groups are read: mysqld server mysqld-10.2 mariadb mariadb-10.2 client-server galera
〜省略〜

 
以下を確認できる

  • 読み込まれる設定ファイル・順番
  • 読み込まれるセクション

 
更に上記URLによると

各設定ファイルは コマンド --help --verbose が示した順番で、一度ずつ読み込まれます。 各設定オプションは、その出現順にコマンドラインオプションで指定するのと同じ効果があります。

 
最後に読み込まれたパラメタが有効になるっぽい
 
有効なパラメタは以下方法で確認できる。

$ my_print_defaults [コマンド]

 

$ my_print_defaults mysqld|egrep max_connections
--max_connections=100
--max_connections=4096
$ mysql -s -N -uroot -pPASSWORD -e 'show variables' | egrep max_connections
extra_max_connections	1
max_connections	4096
$ 

 
同一パラメタが複数指定された場合は、最後に読み込まれたものが有効