pikesaku’s blog

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

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