目錄
Openstack-Mitaka 高可用之 概述
Openstack-Mitaka 高可用之 環境初始化
Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
Openstack-Mitaka 高可用之 memcache
Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
Openstack-Mitaka 高可用之 認證服務(keystone)
OpenStack-Mitaka 高可用之 鏡像服務(glance)
Openstack-Mitaka 高可用之 計算服務(Nova)
Openstack-Mitaka 高可用之 網絡服務(Neutron)
Openstack-Mitaka 高可用之 Dashboard
Openstack-Mitaka 高可用之 啟動一個實例
Openstack-Mitaka 高可用之 測試
Identity 服務簡介
Identity為認證管理,授權管理和服務目錄服務管理提供單點整合。其它Openstack服務將身份認證服務當作統一API來使用。
當某個Openstack服務收到來自用戶的請求時,該服務會直接詢問Identitiy服務,驗證該用戶是否有權限進行此次請求。
keystone各組件概念:
(1)用戶:使用openstack雲服務的用戶、系統或者服務,身份服務驗證用戶提交的請求。用戶需要登錄,然后可能會分配令牌已訪問資源。多用戶可以直接分配給特定的租戶,並且表現的就像他們包含該租戶內。
(2)認證信息:確認用戶身份的數據。比如用戶名和密碼,用戶名和API鍵,或者身份服務提供的認證令牌
(3)認證:確認用戶身份的過程。Openstack身份服務通過驗證用戶提供的認證信息確認請求,當認證信息被驗證后,Openstack認證服務發給用戶認證令牌,在后續的請求中用戶將使用該令牌。
(4)令牌:文本形式的字母-數字字符串,使用該字符串訪問Openstack的API和資源。令牌在有限的時間內是有效的,可能在任何時間被取消。
(5)租戶:分組或隔離資源容器,租戶也用於分組或隔離身份對象。基於服務操作者,租戶可能映射為客戶、組織或項目
(6)服務:一個openstack服務提供了一個或多個端點,在端點內用戶可以訪問資源或者執行操作。
(7)角色:定義了執行特定操作的用戶權限的集合。在身份服務中,發給用戶的令牌包括角色的列表。被用戶訪問的服務確定如何解釋用戶擁有的角色和每個角色可以訪問的操作和資源。
(8)keystone客戶端:openstack身份服務API的命令行接口。
Keystone 拓撲圖
keystone驗證的過程:
keystone安裝和配置
在配置opnstack身份認證前,必須創建一個數據庫和管理員令牌
用 galera用戶連接到mariadb集群創建數據庫
[root@controller1 ~]# mysql -ugalera -pgalera -h 192.168.0.10 MariaDB [(none)]> CREATE DATABASE keystone; Query OK, 1 row affected (0.10 sec) 對庫授權並新增用戶keystone MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
生成一個隨機值在初始的配置中作為管理員的令牌
[root@controller1 ~]# openssl rand -hex 10 8c67dd7baaf367136f01
安裝配置組件:
三個節點安裝:
# yum install openstack-keystone httpd mod_wsgi python-openstackclient -y 編輯配置文件: [root@controller1 ~]# vim /etc/keystone/keystone.conf [DEFAULT] ... admin_token = ADMIN_TOKEN # ADMIN_TOKEN 替換為openssl 生成的隨機字符串,例如: admin_token = 8c67dd7baaf367136f01 在[database] 部分,配置數據庫訪問 [database] ... connection = mysql+pymysql://keystone:keystone@controller/keystone # 注意這里 controller 已經在/etc/hosts 中解析為 vip 地址 在``[token]``部分,配置Fernet UUID令牌的提供者。 [token] ... provider = fernet 初始化身份認證服務的數據庫: # su -s /bin/sh -c "keystone-manage db_sync" keystone 初始化Fernet keys: # keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 將初始化后的key拷貝到其他controller節點,否則在haproxy調取的時候會報錯 [root@controller1 /etc/keystone]# scp -r fernet-keys/ controller2:/etc/keystone/ 1 100% 44 0.0KB/s 00:00 0 100% 44 0.0KB/s 00:00 [root@controller1 /etc/keystone]# scp -r fernet-keys/ controller3:/etc/keystone/ 1 100% 44 0.0KB/s 00:00 0 注意權限問題 # chown -R keystone:keystone fernet-keys/
配置 apache 服務器
修改文件 /etc/httpd/conf/httpd.conf 中ServerName 為本地管理地址 Listen 192.168.0.11:80 … ServerName controller1 用下面的內容創建文件 /etc/httpd/conf.d/wsgi-keystone.conf,記得修改監聽到本地,這樣haproxy監聽的vip才能啟動 Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost> <VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost> 檢查http是否有語法報錯 [root@controller1 ~]# httpd -t Syntax OK
將 /etc/keystone/keystone.conf 、 /etc/httpd/conf.d/wsgi-keystone.conf 拷貝到controller2 controller3
[root@controller1 ~]# scp /etc/keystone/keystone.conf controller2:/etc/keystone/ keystone.conf 100% 111KB 111.1KB/s 00:00 [root@controller1 ~]# scp /etc/keystone/keystone.conf controller3:/etc/keystone/ keystone.conf 100% 111KB 111.1KB/s 00:00 [root@controller1 ~]# scp /etc/httpd/conf.d/wsgi-keystone.conf controller2:/etc/httpd/conf.d/ wsgi-keystone.conf 100% 1039 1.0KB/s 00:00 [root@controller1 ~]# scp /etc/httpd/conf.d/wsgi-keystone.conf controller3:/etc/httpd/conf.d/ wsgi-keystone.conf 100% 1039 1.0KB/s 00:00
初始化Fernet keys
這里有個天坑。每個節點都需要生成fernet keys 但是三個節點的 fernet keys 必須保持一致,否則認證的時候會報錯。
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 將controller1節點的fernet keys 覆蓋其他節點的keys,注意權限問題。 [root@controller1 keystone]# scp -r fernet-keys controller2:/etc/keystone/ 1 100% 44 0.0KB/s 00:00 0 100% 44 0.0KB/s 00:00 [root@controller1 keystone]# scp -r fernet-keys controller3:/etc/keystone/ 1 100% 44 0.0KB/s 00:00 0 100% 44 0.0KB/s 00:00 # chown -R keystone:keystone fernet-keys/ 再次重啟httpd服務。 # systemctl restart httpd
這篇文章說的很清楚。
http://blog.csdn.net/quqi99/article/details/52373086
記得修改/etc/httpd/conf/httpd.conf 中的 ServerName
三個節點執行啟動服務:
# systemctl enable httpd ; systemctl restart httpd
將啟動的http,共兩個端口35357、5000加入到haproxy中:
listen galera_cluster mode tcp bind 192.168.0.10:3306 balance source option mysql-check user haproxy server controller1 192.168.0.11:3306 check inter 2000 rise 3 fall 3 server controller2 192.168.0.12:3306 check inter 2000 rise 3 fall 3 server controller3 192.168.0.13:3306 check inter 2000 rise 3 fall 3 listen keystone_admin_cluster mode http bind 192.168.0.10:35357 balance source # 認證服務必須使用源地址綁定的輪詢算法,因為認證信息是在本地填寫的。 server controller1 192.168.0.11:35357 check inter 2000 rise 3 fall 3 server controller2 192.168.0.12:35357 check inter 2000 rise 3 fall 3 server controller3 192.168.0.13:35357 check inter 2000 rise 3 fall 3 listen keystone_public_internal_cluster mode http bind 192.168.0.10:5000 balance source server controller1 192.168.0.11:5000 check inter 2000 rise 3 fall 3 server controller2 192.168.0.12:5000 check inter 2000 rise 3 fall 3 server controller3 192.168.0.13:5000 check inter 2000 rise 3 fall 3 嘗試啟動並查看監聽 [root@controller1 ~]# systemctl restart haproxy [root@controller1 ~]# netstat -ntplu | grep ha tcp 0 0 192.168.0.10:5672 0.0.0.0:* LISTEN 34219/haproxy tcp 0 0 192.168.0.10:3306 0.0.0.0:* LISTEN 34219/haproxy tcp 0 0 192.168.0.10:35357 0.0.0.0:* LISTEN 34219/haproxy udp 0 0 0.0.0.0:50050 0.0.0.0:* 34218/haproxy
將修改后的haproxy拷貝到其他controller節點,所有的controller節點的haproxy.cfg必須保持一致。
創建服務實體和API端點
配置認證令牌,最好在三個節點都執行: [root@controller1 ~]# export OS_TOKEN=8c67dd7baaf367136f01 [root@controller1 ~]# export OS_URL=http://controller:35357/v3 [root@controller1 ~]# export OS_IDENTITY_API_VERSION=3 創建服務實體和身份認證服務: [root@controller1 ~]# openstack service create --name keystone --description "OpenStack Identity" identity
創建認證服務的API端點
身份認證服務管理了一個與環境相關的API端點目錄,服務使用這個目錄來決定如何與環境中的其他服務進行通信
以下操作在任意一個controller節點執行:
# openstack endpoint create --region RegionOne identity public http://controller:5000/v3 # openstack endpoint create --region RegionOne identity internal http://controller:5000/v3 # openstack endpoint create --region RegionOne identity admin http://controller:35357/v3 # openstack domain create --description "Default Domain" default # openstack project create --domain default --description "Admin Project" admin # openstack user create --domain default --password-prompt admin # 創建admin用戶,密碼設置為 admin # openstack role create admin # openstack role add --project admin --user admin admin # openstack project create --domain default --description "Service Project" service # openstack project create --domain default --description "Demo Project" demo # openstack user create --domain default --password-prompt demo # 創建demo用戶,密碼設置為 demo # openstack role create user # openstack role add --project demo --user demo user
驗證:
# unset OS_TOKEN OS_URL # openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue 密碼:admin # openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue 密碼:demo
創建admin用戶認證信息腳本
[root@controller1 ~]# vim admin-openrc 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 export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
創建demo用戶認證信息腳本
[root@controller1 ~]# vim demo-openrc export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=demo export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
拷貝到其他節點上做備份:
[root@controller1 ~]# scp admin-openrc demo-openrc controller2:/root/ admin-openrc 100% 261 0.3KB/s 00:00 demo-openrc 100% 257 0.3KB/s 00:00 [root@controller1 ~]# scp admin-openrc demo-openrc controller3:/root/ admin-openrc 100% 261 0.3KB/s 00:00 demo-openrc 100% 257 0.3KB/s 00:00
使用腳本
[root@controller1 ~]# . admin-openrc
請求認證令牌
[root@controller1 ~]# openstack token issue
成功。keystone部署成功。