疑問
コントローラ・ネットワーク・コンピュートノードそれぞれに、どのパラメタを設定すれば良いのか?
これがわからない。
OpenStack Docs: Services and agents
これを見ると、基本コントローラ(Neutron Server)に入れておけば、ネットワークノード(Agent)はRPC経由で設定を覗く?ってこと。
エージェント側の設定が優先されるっていう記述もあり。
コントローラ・ネットワーク・コンピュートノードそれぞれに、どのパラメタを設定すれば良いのか?
これがわからない。
OpenStack Docs: Services and agents
これを見ると、基本コントローラ(Neutron Server)に入れておけば、ネットワークノード(Agent)はRPC経由で設定を覗く?ってこと。
エージェント側の設定が優先されるっていう記述もあり。
OpenStack Docs: Installation
Keystoneセットアップ実施後に、以下作業を1号機で実施する。
$ source ./adminrc
$ 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 | +-------------+----------------------------------+
$ 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
$ 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
$ 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サーバ上に配置する
6.2. aptitude、apt-get、apt コマンド
updateはパッケージインデックスの更新のみ
upgardeもfull-upgradeもアップデート
full-upgradeを使う方がより最新化される。
upgradeとfull-updateの違いは以下の通り
項目 | 内容 |
---|---|
upgrade | 他のパッケージを削除せずにアップグレードできるインストール済みパッケージだけをアップグレード(構成変更度小) |
full-upgrade | アップグレードに伴う新依存関係で不要となったパッケージは削除し最新化(構成変更度大) |
OpenStack Docs: Highly available Identity API
OpenStack Docs: Keystone Installation Tutorial
RabbitMQクラスタセットアップ実施後に、以下作業をコントローラ3台に実施する。
以下を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
$ 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停止時に正常動作を確認できなかった。
$ echo 'ServerName cnt.local' | sudo tee -a /etc/apache2/apache2.conf $ sudo systemctl restart apache2
設定ファイル編集
/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
$ 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 Docs: Memcached
OpenStack Docs: Memcached(ha-guide)
http://pikesaku.hatenablog.com/entry/2017/11/04/005013title=HAProxyセットアップ & Pacemaker組込実施後に、以下作業をコントローラ3台に実施する。
$ sudo sed -i -e 's/-l 127\.0\.0\.1/-l 192.168.1.51/' /etc/memcached.conf
$ 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 Docs: HAProxy
多機能なロードバランサとして使える多機能プロクシサーバー「HAProxy」入門 | さくらのナレッジ
多機能プロクシサーバー「HAProxy」のさまざまな設定例 | さくらのナレッジ
動かして理解するPacemaker ~CRM設定編~ その1 « Linux-HA Japan
動かして理解するPacemaker ~CRM設定編~ その2 « Linux-HA Japan
動かして理解するPacemaker ~CRM設定編~ その3 « Linux-HA Japan
Pacemaker & Corosyncセットアップ実施後に、以下作業をコントローラ3台に実施する。
$ sudo apt -y install 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セットアップ実施時に定義したもの
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 $
同一パラメタが複数指定された場合は、最後に読み込まれたものが有効