【聲明】
歡迎轉載,轉載本文請註明作者和出處
https://www.zybuluo.com/ncepuwanghui/note/389373
http://blog.csdn.net/ncepuwanghui/article/details/52034515
PDF格式下載鏈接:OpenStack Mitaka for Ubuntu 16.04 LTS 部署指南.pdf本文主要參考OpenStack官方文檔
OpenStack Documentation for Mitaka : Installation Guide for Ubuntu 14.04 (LTS)若只是想搭建OpenStack平臺,可參考以下鏈接,通過腳本自動化部署
① OpenStack Training Labs : An Automated Way To Deploy OpenStack
② 深入理解OpenStack自動化部署
③ compass4nfvgit clone https://gerrit.opnfv.org/gerrit/compass4nfv
1. 硬件服務器
- 名稱:浪潮P8000工作站
- CPU:Intel Xeon CPU E5-2620 v3 2.40GHz * 2,共12個物理核,24個邏輯核
- 內存:16 * 8 = 128GB
- 存儲:SAS 300GB * 3 = 900GB
- 網絡:千兆網卡 * 6
- 操作系統:Windows Server 2012 R2 DataCenter
2. OpenStack部署分析及規劃
2.1 目的
- 部署一個OpenStack測試環境
- 硬件虛擬化,提供一個Infrastructure-as-a-Service (IaaS)解決方案
- 基於OpenStack雲計算平臺提供Hadoop MapReduce、Spark等計算服務
- 提供OpenStack開源雲計算學習平臺
2.2 OpenStack網絡模型選擇
官方文檔中OpenStack提供了兩種網絡模型架構
Provider Networks
OpenStack最簡單的部署方式,主要利用二層網絡服務
(Layer-2 Services)(通過網橋和交換機連接不同網絡)和VLAN劃分
,其本質上是將虛擬機網絡
(Virtual Networks)通過橋接
到物理網絡
(Physical Networks)並利用物理網絡
設施提供三層網絡服務
(Layer-3 Services);此外,通過DHCP
服務向虛擬網絡實例提供IP地址。
注:該方式不支持私有自服務網絡
(Private Self-Service Networks),如三層路由服務
(Layer-3 Routing Services)。Self-Service Networks
該方式和Provider Networks
方式相比,通過諸如VXLAN
方式在自服務網絡
中支持三層路由服務
。
本文采用Provider Networks網絡模型設計
2.3 OpenStack節點硬件需求
2.4 OpenStack服務組件選擇
本文選擇OpenStack Mitaka版本
Compute-Focused OpenStack Design
根據OpenStack官方文檔,以計算服務爲主的OpenStack私有云計算平臺可選取以下組件:For a compute-focused OpenStack design architecture, the following components may be present: Identity (keystone) Dashboard (horizon) Compute (nova) Object Storage (swift) Image (glance) Networking (neutron) Orchestration (heat)
OpenStack服務組件選擇:
注:本文選擇MariaDB(MySQL的一個分支,完全兼容MySQL)開源數據庫爲OpenStack組件提供後端數據訪問服務。Service Name Component Name Brief Description Identity Service Keystone 身份服務,提供單點集成方式管理身份認證、授權、服務目錄服務 Image Service Glance 鏡像服務 Compute Service Nova 計算服務 Networking Service Neutron 網絡服務 Dashboard Service Horizon 儀表盤,訪問OpenStack服務的圖形化接口 Block Storage Service Cinder 塊存儲服務 Shared File Systems Service Manila 共享文件系統服務,用於文件存儲 Object Storage Service Swift 對象存儲服務,用於對象存儲和檢索 Orchestration Service Heat 編排服務,基於模板創建管理雲資源 Telemetry Data Collection Service Ceilometer 計量服務 Telemetry Alarming Service Aodh 警報服務 Database Service Trove 數據庫服務,用於雲部署關係型和非關係性數據庫引擎 Data Processing Service Sahara 數據處理服務,提供一個數據處理框架,如Hadoop、Spark、Storm
2.5 OpenStack節點網絡設計
OpenStack官方文檔建議網絡佈局如下:
本文采用如下網絡設計
總共3個子網:
① 互聯網連接/對外出口(External)
② Openstack管理網絡(Management)
③ VM虛擬機內網連接(Data)
注:此外,本文將Block Storage Node和Object Storage Node加入Management Network。
2.6 OpenStack節點服務器規劃
6臺Ubuntu 16.04 LTS:
① Cotroller:用於整個集羣的控制,高可靠性要求。承載數據庫(MySQL)、隊列服務器(RabbitMQ)、和最終的web入口(Apache+Memcache)。設置一塊虛擬硬盤。要求網卡eth0接External Network,eth1接Management Network子網。
② Network:網絡控制節點,高網絡吞吐型節點。設置一塊虛擬硬盤。要求3網卡,eth0接External Network,eth1接Management Network子網, eth2接Data Network子網。
③ Compute:計算節點,高內存+CPU+IO消耗型節點。設置一塊虛擬硬盤。要求網卡eth0接External Network,eth1接Management Network子網,eth2接Data Network子網。
④ BlockStorage:塊存儲節點,提供塊存儲和共享文件系統服務。設置三塊虛擬硬盤,一塊安裝操作系統,一塊用於塊存儲服務,一塊用於共享文件系統服務。要求網卡eth0接External Network,eth1接Management Network子網。
⑤ ObjectStorage:兩個對象存儲節點,提供對象存儲服務。設置三塊虛擬硬盤,一塊安裝操作系統,兩塊用於對象存儲服務。要求網卡eth0接External Network,eth1接Management Network子網。
注:上述爲了方便管理,對每個節點都添加了eth0
網絡接口,實際生產環境請根據實際情況配置。服務器配置:
Node CPU 內存 存儲 Controller 4核 16GB 100GB Network 2核 8GB 100GB Compute 16核 64GB 300GB BlockStorage 2核 8GB 100GB+100GB+100GB ObjectStorage1 2核 8GB 100GB+100GB+100GB ObjectStorage2 2核 8GB 100GB+100GB+100GB 注:此處資源分配超出了實際物理資源,可根據實際分配資源。
網絡配置:
Node eth0 eth1 eth2 External Network Management Network Data Network Controller 192.168.1.11 10.0.0.11 Network 192.168.1.21 10.0.0.21 10.0.1.21 Compute 192.168.1.31 10.0.0.31 10.0.1.31 BlockStorage 192.168.1.41 10.0.0.41 ObjectStorage1 192.168.1.51 10.0.0.51 ObjectStorage2 192.168.1.52 10.0.0.52 Subnet Mask 255.255.255.0 255.255.255.0 255.255.255.0 Gateway 192.168.1.1 10.0.0.1 10.0.1.1 注:由於實際網絡限制, External Network通過虛擬網卡
192.168.1.1
共享主機網絡來訪問外網物理主機端口映射信息:
物理機端口 虛擬機IP 虛擬機端口 服務描述 11122 192.168.1.11 22 Controller SSH 服務 12122 192.168.1.21 22 Network SSH 服務 13122 192.168.1.31 22 Compute SSH 服務 14122 192.168.1.41 22 BlockStorage SSH 服務 15122 192.168.1.51 22 ObjectStorage1 SSH 服務 15222 192.168.1.52 22 ObjectStorage2 SSH 服務 11180 192.168.1.11 80 OpenStack Dashboard 服務 6080 192.168.1.11 6080 OpenStack Compute Service of Nova Proxy 注:將虛擬機SSH端口映射到物理主機特定端口,以便外網通過物理主機訪問虛擬機。
物理主機端口:爲方便管理,針對SSH服務,將物理主機映射端口設計如下,前三位表示對應虛擬機地址末兩字節,最後兩位表示對應虛擬機端口。OpenStack服務密碼要求:
根據OpenStack官方文檔
2.7 OpenStack各節點組件規劃
節點組件信息:
Node OpenStack Service Controller mariadb-server、mongodb-server、rabbitmq-server、memcached、keystone、apache2、glance、nova-api、nova-conductor、nova-consoleauth、nova-novncproxy、nova-scheduler、neutron-server、neutron-plugin-ml2、horizon(dashboard)、cinder-api cinder-scheduler、manila-api、manila-scheduler、python-manilaclient、swift、swift-proxy、python-swiftclient、heat-api、heat-api-cfn、heat-engine、ceilometer-api、ceilometer-collector、ceilometer-agent-central、ceilometer-agent-notification、python-ceilometerclient、python-ceilometermiddleware、aodh-api、aodh-evaluator、aodh-notifier、aodh-listener、aodh-expirer、python-trove、python-troveclient、python-glanceclient、trove-common、trove-api、trove-taskmanager、trove-conductor、sahara-api、sahara-engine、sahara-templates、sahara-wsgi-api Network neutron-linuxbridge-agent、neutron-l3-agent、neutron-dhcp-agent、neutron-metadata-agent Compute nova-compute、neutron-linuxbridge-agent、kvm、ceilometer-agent-compute BlockStorage lvm2、cinder-volume、manila-share、neutron-plugin-linuxbridge-agent ObjectStorage xfsprogs、rsync、swift、swift-account、swift-container、swift-object 各節點功能可參考下圖
注:僅供參考理解,具體根據實際情況而定
2.8 用戶、密碼、地址、端口信息登記
注:
① 請提前設計好所需密碼並登記存檔,並及時登記用到的服務地址&端口信息。
② 根據實際情況,將下面Password
列替換爲實際密碼。
(若爲測試環境,建議密碼採用一定規則,方便記憶,但數據庫等服務密碼不要包含一些特殊字符,如:
、/
、+
、@
)
OpenStack節點主機用戶&密碼:
Node Hostname User Password Controller controller controller your_password Controller controller root your_password Network network network your_password Network network root your_password Compute compute compute your_password Compute compute root your_password BlockStorage blockstorage blockstorage your_password BlockStorage blockstorage root your_password ObjectStorage1 objectstorage1 objectstorage your_password ObjectStorage1 objectstorage1 root your_password ObjectStorage2 objectstorage2 objectstorage your_password ObjectStorage2 objectstorage2 root your_password OpenStack服務用戶&密碼:
Name User Password Database_PASS(MariaDB/MySQL) root your_password RABBIT_PASS openstack your_password KEYSTONE_DBPASS keystone your_password ADMIN_PASS admin your_password DEMO_PASS demo your_password GLANCE_DBPASS glance your_password GLANCE_PASS glance your_password NOVA_DBPASS nova your_password NOVA_PASS nova your_password NEUTRON_DBPASS nuetron your_password NEUTRON_PASS nuetron your_password METADATA_SECRET your_password CINDER_DBPASS cinder your_password CINDER_PASS cinder your_password MANILA_DBPASS manila your_password MANILA_PASS manila your_password SWIFT_PASS swift your_password HASH_PATH_PREFIX your_password HASH_PATH_SUFFIX your_password HEAT_DBPASS heat your_password HEAT_PASS heat your_password HEAT_DOMAIN_PASS heat_domain_admin your_password CEILOMETER_DBPASS ceilometer your_password CEILOMETER_PASS ceilometer your_password AODH_DBPASS aodh your_password AODH_PASS aodh your_password TROVE_DBPASS trove your_password TROVE_PASS trove your_password SAHARA_DBPASS sahara your_password SAHARA_PASS sahara your_password OpenStack各節點服務地址&端口
參考:Firewalls and default ports
注:可執行sudo netstat -tnlp
查看節點 IP地址 端口 服務描述 Controller 192.168.1.11 22 SSH Controller 10.0.0.11 3306 MariaDB(MySQL) Controller 10.0.0.11 27017 MongoDB Controller 10.0.0.11 5672、25672 RabbitMQ Controller 10.0.0.11 4369 Erlang端口映射守護進程(Erlang Port Mapper Daemon) Controller 10.0.0.11 11211 Memcached Controller 10.0.0.11 35357 OpenStack Identity Service of Apache HTTP Server(Admin) Controller 10.0.0.11 5000 OpenStack Identity Service of Apache HTTP Server(User) Controller 10.0.0.11 9191 OpenStack Image Service of Glance Registry Controller 10.0.0.11 9292 OpenStack Image Service of Glance API Controller 10.0.0.11 8774、8775 OpenStack Compute Service of Nova API Controller 10.0.0.11 6080 OpenStack Compute Service of Nova Proxy Controller 10.0.0.11 9696 OpenStack Networking Service of Neutron Server Controller 10.0.0.11 80 OpenStack Dashboard Service of Apache HTTP Server Controller 10.0.0.11 8776 OpenStack Block Storage Service of Cinder API Controller 10.0.0.11 8786 OpenStack Shared File Systems Service of Manila API Controller 10.0.0.11 8080 OpenStack Object Storage Service of Swift Proxy Controller 10.0.0.11 8000 OpenStack Orchestration Service of Heat API (CloudFormation) Controller 10.0.0.11 8004 OpenStack Orchestration Service of Heat API Controller 10.0.0.11 8777 OpenStack Telemetry Alarming Service of Ceilometer API Controller 10.0.0.11 8042 OpenStack Telemetry Alarming Service of Aodh API Controller 10.0.0.11 8779 OpenStack Database Service of Trove API Controller 10.0.0.11 8386 OpenStack Data Processing Service of Sahara API Network 192.168.1.21 22 SSH Compute 192.168.1.31 22 SSH Compute 192.168.122.1 53 Libvirt Dnsmasq BlockStorage 192.168.1.41 22 SSH BlockStorage 10.0.0.41 3260 OpenStack Block Storage Service of Tgtd(iSCSI target後臺服務) ObjectStorage 192.168.1.51/52 22 SSH ObjectStorage 10.0.0.51/52 873 OpenStack Object Storage Service of Remote Sync ObjectStorage 10.0.0.51/52 6000 OpenStack Object Storage Service of Object ObjectStorage 10.0.0.51/52 6001 OpenStack Object Storage Service of Container ObjectStorage 10.0.0.51/52 6002 OpenStack Object Storage Service of Account
3. 環境準備
3.1 物理主機基本配置
物理機基本配置
① 開啓物理主機虛擬化功能
② 在物理主機上安裝VMware Workstation 12.1 ProVMware虛擬機配置
① 配置虛擬機網絡
虛擬機網絡連接方式圖解:
打開VMware Workstation虛擬網絡編輯器,添加如下虛擬網卡:
其中VMnet0用於配置External Network,VMnet1用於配置Management Network子網, VMnet2用於配置Data Network子網。如下圖:
② 創建虛擬機,按前面要求設置CPU、內存大小,並新建網絡適配器同時指定網絡連接方式,各節點對應名稱如下表:Node VMnet0 VMnet1 VMnet2 Controller 網絡適配器 網絡適配器2 Network 網絡適配器 網絡適配器2 網絡適配器3 Compute 網絡適配器 網絡適配器2 網絡適配器3 BlockStorage 網絡適配器 網絡適配器2 ObjectStorage1 網絡適配器 網絡適配器2 ObjectStorage2 網絡適配器 網絡適配器2 注:虛擬機中添加網絡適配器的順序跟系統內默認網卡名
eth0
、eth1
、eth2
對應。
③ 開啓虛擬機CPU虛擬化功能
對於每個虛擬機,虛擬機設置–>處理器設置–>虛擬化引擎,選擇Intel VT-x/EPT或AMD-V/RVI
,如下圖:
④ 各節點虛擬機配置如下圖:
Controller節點:
Network節點:
Compute節點:
BlockStorage節點:
ObjectStorage1節點:
ObjectStorage2節點:
3.2 節點系統安裝
在VMware中創建虛擬機,安裝Ubuntu 16.04 LTS
- 創建虛擬機,設置CPU核心數、內存大小、存儲大小。
- 添加兩塊(或三塊)虛擬網卡
- 加載Ubuntu Server 16.04 LTS系統鏡像
- 啓動系統,選擇時區、語言,設置主機名和用戶名、密碼。
Partition disks
配置步驟:
① 單獨設置分區/dev/sda1
,大小200MB
,用於掛載/boot
選擇手動配置–>選擇硬盤–>創建新的分區表–>選擇空閒空間–>新建分區–>設置大小200MB–>選擇主分區–>選擇開始位置–>設置文件系統格式Ext4
–>設置掛載點/boot
–>設置分區。
② 設置LVM,方便擴展存儲,掛載/
和swap
配置邏輯卷LVM–>將修改寫入磁盤並配置LVM–>新建卷組–>卷組名稱:vg_system
–>按空格鍵選中剩餘空閒空間/dev/sda
–>將修改寫入磁盤並配置LVM–>新建邏輯卷–>選擇卷組vg_system
–>邏輯卷名:lv_root–>設置邏輯卷大小:91GB–>新建邏輯卷–>選擇卷組vg_system
–>邏輯卷名:lv_swap
–>設置邏輯卷大小爲剩餘空間–>完成。
③ 分別對每一個邏輯捲進行配置
磁盤格式:lv_root選擇ext4,lv_swap選擇swap area。
掛載點:lv_root選擇”/”。
最後選擇完成分區並將更改寫入磁盤,點擊確定即可。- 選擇服務器默認安裝軟件包
空格鍵選擇OpenSSH Server,方便使用SSH傳輸文件。 - 安裝Grub。
按照上述步驟,創建其他節點服務器並安裝Ubuntu 16.04 LTS系統
3.3 節點系統基本環境配置
啓用root用戶,設置root密碼
sudo passwd root
爲普通用戶添加sudo權限
只需修改/etc/sudoers
文件:
切換到root用戶,輸入命令su -
,輸入root用戶密碼。
輸入命令vi /etc/sudoers
編輯/etc/sudoers
文件,在下面內容下添加一行your_username ALL=(ALL:ALL) ALL
,輸入w!
強制保存,退出vi。# User privilege specification root ALL=(ALL:ALL) ALL # controller controller ALL=(ALL:ALL) ALL
注:如沒有修改權限,則爲
/etc/sudoers
文件添加寫權限chmod u+w /etc/sudoers
,修改後撤銷權限chmod u-w /etc/sudoers
。修改網卡命名方式
輸入ifconfig -a
查看,發現網卡名稱由udev管理命名爲ens33
和ens38
,爲了方便,將網卡名稱修改爲上述表格所示eth0
、eth1
、eth2
。
①sudo vi /etc/default/grub
把/etc/default/grub中GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX=""
改成:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
② 重新生成grub文件
sudo update-grub sudo grub-mkconfig -o /boot/grub/grub.cfg
③ 重啓系統,發現網卡名稱已經改回
eth0
、eth1
、eth2
命名格式。
注:以上步驟在Controller節點、Compute節點、Network節點配置方法相同修改各節點網卡和VMware虛擬網卡綁定關係
可選環節:若網卡和虛擬網卡綁定關係不同,可手動指定
按照前面表格所示,修改各節點網卡名稱爲對應的eth0
、eth1
、eth2
以Controller節點爲例
將默認網卡名eth0
和eth1
修改爲eth0
和eth2
sudo vi /etc/udev/rules.d/70-persistent-net.rules //如無該文件,新建一個即可
添加如下內容,其中
00:0c:29:a9:66:8c
和00:0c:29:a9:66:96
爲網卡MAC,可執行ifconfig -a
查看,根據情況自行設定:# eth0 SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:a9:66:8c", NAME="eth0" # eth2 SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:a9:66:96", NAME="eth2"
保存並重啓電腦
sudo reboot
。
注:配置完成後,不能在虛擬機設置-->網絡適配器-->高級
中點擊生成MAC,否則上面MAC地址需要修改配置。
注:Compute節點、Network節點配置方法類似設置靜態IP/DNS
以Controller節點爲例
① 修改文件sudo vi /etc/network/interfaces
,將默認生成的(下面內容可能沒有,可能不一樣,配置時視自己情況而定):auto ens33 iface ens33 inet dhcp
改爲:
#eth0 config (connect to internet) auto eth0 iface eth0 inet static address 192.168.1.11 #IP地址 netmask 255.255.255.0 #子網掩碼 gateway 192.168.1.1 #網關 dns-nameserver 192.168.1.1 #DNS # eth1 config (connect to openstack management network) auto eth1 iface eth1 inet static address 10.0.0.11 #IP地址 netmask 255.255.255.0 #子網掩碼
② 重啓網卡,使配置生效:
sudo /etc/init.d/networking restart sudo service networking restart
注:若找不到上述命令或重啓無效可嘗試下面命令:
sudo ifdown eth0 sudo ifdown eth1 sudo ifup eth0 sudo ifup eth1
注:若提示
ifdown: interface eth0 not configured
,可換下面命令嘗試:sudo ifconfig eth0 down sudo ifconfig eth1 down sudo ifconfig eth0 up sudo ifconfig eth1 up
③ 運行
ifconfig -a
查看網絡配置信息。
④ 通過ping www.baidu.com
測試能否正常訪問外網。若不能,可sudo reboot
重啓節點試試。
注:Compute節點、Network節點配置方法類似在物理主機中爲各節點SSH連接配置端口映射
可參考:windows下實現端口映射
以Controller節點爲例
① 利用Windows自帶的netsh
配置端口映射,打開cmd
命令行,輸入:
注:下面xxx.xxx.xxx.xxx
爲物理主機實際IP//配置端口映射 netsh interface portproxy add v4tov4 listenaddress=xxx.xxx.xxx.xxx listenport=11122 connectaddress=192.168.1.11 connectport=22 //或者 netsh interface portproxy add v4tov4 listenport=11122 connectaddress=192.168.1.11 connectport=22 //查看已配置的端口映射 netsh interface portproxy show v4tov4 // all 偵聽 ipv4: 連接到 ipv4: 地址 端口 地址 端口 --------------- ---------- --------------- ---------- xxx.xxx.xxx.xxx 11122 192.168.1.11 22 * 11122 192.168.1.11 22 //刪除端口映射 netsh interface portproxy delete v4tov4 listenaddress=xxx.xxx.xxx.xxx listenport=11122 netsh interface portproxy delete v4tov4 listenport=11122
② 在系統防火牆高級設置中配置入站規則
新建規則–>端口–>特定本地端口:11122–>允許連接–>選擇域/專用/公用–>名稱:VMware OpenStack Controller SSH、描述:用於VMware中OpenStack雲計算平臺Controller節點SSH連接
③ 配置完成後,可在外網主機,通過Xshell連接Controller節點,如下圖:
注:若XShell連接失敗,提示Xshell no matching outgoing encryption
,可升級Xshell版本,在鏈接的屬性(SSH–>安全性)的加密算法列表中選擇aes256-ctr,mac加密列表中選擇hmac-sha2-256,保存即可。
注:其他節點配置方法類似
配置hosts文件
以Controller節點爲例
OpenStack要求所有的節點主機之間都是通過host互信的,編輯所有節點主機的/etc/hosts文件,注意將YOUR_HOST_NAME替換成本節點主機名稱。配置完成後在每臺主機上ping通3個主機名。此外,通過配置hosts文件,可在網絡環境發生變化時提供可擴展性且便於遷移。
可參考:OpenStack Doc : Controller hosts文件配置
① 執行sudo vi /etc/hosts
,添加如下內容# config all nodes 10.0.0.11 controller 10.0.0.21 network 10.0.0.31 compute 10.0.0.41 blockstorage 10.0.0.51 objectstorage1 10.0.0.52 objectstorage2
② 註釋掉除
127.0.0.1
之外的環回地址項,如下:#127.0.1.1 controller`
注:其他節點配置方法類似
至此,節點網絡配置完成:
① Controller、Network、Compute等節點可互相ping通;
② Controller、Network、Compute等節點均可訪問外網和進行地址解析。配置ubuntu的更新源
使用阿里雲的更新源,修改配置文件sudo vi /etc/apt/sources.list
,添加:deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
更新系統
① 更新系統sudo apt update sudo apt upgrade sudo apt dist-upgrade sudo apt autoremove
可能遇到的問題:
Ubuntu系統/boot容量不足引起的無法更新系統
解決方法:
查看/boot
分區容量df -h /boot
;查看當前使用內核版本號uname -a
;刪除舊內核,輸入sudo apt-get remove linux-image-
,接着按兩下tab鍵,將顯示所有的內核版本,把目前使用的版本之前的版本全部刪除。最後執行sudo update-grub sudo grub-mkconfig -o /boot/grub/grub.cfg
② 查看系統發行版本和內核版本
network@network:~$ sudo lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 Codename: xenial network@network:~$ uname -srpi Linux 4.4.0-23-generic x86_64 x86_64
服務器時區設置
① 執行sudo tzselect
–>選擇亞洲(Asia)–>選擇中國(China)–>選擇北京(Beijing)–>
② 複製文件到/etc目錄下:sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注:若在系統安裝時已設置正確時區,可跳過該步驟。
4. OpenStack節點服務配置
4.1 OpenStack基本配置
統一時間源,安裝NTP服務
時間服務器將爲所有節點提供支持,OpenStack所有組件的時間都必須同步。本文選擇安裝chrony
。
Controller節點
① 安裝NTP服務:sudo apt-get install chrony
② 打開文件sudo vi /etc/chrony/chrony.conf
增加以下內容,使本服務器時間與外部服務器時間同步。如果不能訪問外網,NTP服務器將使用本機硬件時鐘作爲第二選擇。allow 10.0.0.0/24 server cn.pool.ntp.org iburst server 127.127.1.0 iburst
③ 重啓NTP使配置生效:
sudo service chrony restart
注:確保網絡時間服務器IP地址可以被DNS解析,如果不能,則在/etc/hosts文件中手工加入。
其他節點
① 安裝NTP服務:sudo apt-get install chrony
② 打開配置文件sudo vi /etc/chrony/chrony.conf
,刪除全部默認設置,只添加如下內容:server controller iburst
③ 重啓NTP服務:
sudo service chrony restart
驗證配置是否成功chronyc sources -v
注:若默認配置文件誤刪,可執行sudo apt-get --purge remove chrony
清除式卸載chrony,再重新安裝。配置OpenStack
安裝OpenStack client:sudo apt-get install software-properties-common sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install python-openstackclient
安裝SQL數據庫(MySQL/MariaDB)
Controller Node
① 安裝MariaDBsudo apt-get install mariadb-server python-mysqldb
② 爲MySQL的root用戶設置密碼
Database_PASS
。(將Database_PASS
替換爲前面設計的實際密碼),若無輸入密碼提示,可執行下面命令設置root用戶密碼:sudo mysqladmin -u root password Database_PASS
注:修改mysql用戶密碼可用以下命令
mysqladmin -u用戶名 -p舊密碼 password 新密碼
③ 創建文件
sudo vi /etc/mysql/mariadb.conf.d/openstack.cnf
,添加如下配置信息:[mysqld] bind-address = 10.0.0.11 default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci character-set-server = utf8
其中,bind-address用於綁定MySQL服務監聽地址到Controller節點的Management Network網口IP,以便Compute&Network節點訪問MySQL中的OpenStack配置信息。
④ 重啓MySQL數據庫:sudo service mysql restart sudo service mysql status
⑤ 查看端口監聽情況。
controller@controller:~$ netstat -ntlp | grep 3306 tcp 0 0 10.0.0.11:3306 0.0.0.0:* LISTEN -
⑥ 開啓MySQL安全保護措施
注:測試環境對安全要求較低可忽略該步驟sudo mysql_secure_installation
根據提示輸入當前root用戶密碼,根據實際需要選擇後續操作。
⑦ 測試root
用戶能否在本機localhost
正常登錄,執行以下命令:mysql -uroot -p mysql -h localhost -uroot -p
若報錯:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
解決方法:
sudo mysql -u root use mysql; update user set plugin='' where User='root'; flush privileges; exit;
注:下面步驟可省略。
⑧ 測試root
用戶是否具有遠程登錄的權限
通常,不賦予root
用戶遠程登錄的權限,即只允許root
用戶在本機localhost
上登錄。可執行如下命令測試:mysql -h controller -uroot -p mysql -h 10.0.0.11 -uroot -p
若報錯,表示當前
root
用戶沒有遠程登錄權限:ERROR 1130 (HY000): Host 'controller' is not allowed to connect to this MariaDB server
若需要賦予
root
遠程登錄權限,可執行以下命令:
注:將Database_PASS
替換爲前面設計的實際密碼mysql -uroot -p use mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Database_PASS'; FLUSH PRIVILEGES;
若不報錯,可正常登錄,表示當前
root
用戶具有遠程登錄權限。安裝NoSQL數據庫(MongoDB)
注:只有計量服務(Telemetry Service)用到
Controller Node
① 安裝MongoDBsudo apt-get install mongodb-server mongodb-clients python-pymongo
② 打開文件
sudo vi /etc/mongodb.conf
,修改配置信息:
綁定MongoDB服務監聽地址到Controller節點的Management Network網口IP。bind_ip = 10.0.0.11
MongoDB數據庫默認在目錄
/var/lib/mongodb/journal
下創建若干1GB大小的日誌文件,通過添加如下配置信息,可將每個日誌文件大小限制爲128 MB,總的日誌文件空間大小爲512MB。# Set Journal File Size smallfiles = true
③ 刪除初始日誌文件,重啓MongoDB服務:
sudo service mongodb stop sudo rm /var/lib/mongodb/journal/prealloc.* sudo service mongodb start
安裝消息隊列服務(RabbitMQ)
Controller Node
① 安裝RabbitMQsudo apt-get install rabbitmq-server
② 爲OpenStack添加用戶
openstack
sudo rabbitmqctl add_user openstack RABBIT_PASS
注:將
RABBIT_PASS
替換爲前面設計的實際密碼
③ 爲openstack
用戶配置讀、寫訪問權限:sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
安裝Memcached
身份服務(Identity Service)認證機制需要使用Memcached緩存令牌(Token)
Controller Node
① 安裝Memcachedsudo apt-get install memcached python-memcache
② 修改配置文件
sudo vi /etc/memcached.conf
,設置Memcached服務監聽地址(Controller節點的Management Network網口IP)。-l 10.0.0.11
③ 重啓Memcached服務
sudo service memcached restart
注:配置完上面幾步後,再
Controller
節點上執行netstat -ntlp
,查看上面幾種服務端口監聽是否正常。
4.2 身份服務配置(Identity Service - Keystone)
Identity服務採用RESTful設計,使用REST API提供Web服務接口。
注:常見的Web Service
方式有SOAP
、WSDL
、REST
。
部署節點:Controller Node
在MariaDB(MySQL)中創建Keystone數據庫
① 以root用戶登錄MySQLmysql -u root -p
② 創建數據庫
keystone
CREATE DATABASE keystone;
③ 授予數據庫
keystone
適當的權限
注:將KEYSTONE_DBPASS
替換爲前面設計的實際密碼。GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
注:上述授權命令中,
%
則代表了所有的host都能遠程訪問該mysql。但MySQL官方文檔指出,%
並不包括localhost
。因此需要對localhost
和%
都進行授權。
④ 測試keystone
用戶能否正常登錄mysql -hlocalhost -ukeystone -p mysql -hcontroller -ukeystone -p
⑤ 測試Controller節點上的MariaDB能否被Compute&Network節點訪問。可用
telnet
測試,分別在Compute節點和Network節點上執行以下命令:telnet controller 3306
生成臨時管理身份認證令牌(ADMIN_TOKEN)
生成一個隨機值,作爲keystone初始配置時的ADMIN_TOKENopenssl rand -hex 10
記住ADMIN_TOKEN:
d57ea40f3a5eedcc70ef
安裝Keystone和Apache HTTP Server with mod_wsgi
本文采用Apache HTTP server with mod_wsgi
監聽端口5000
和35357
提供身份服務。默認keystone
服務已經監聽端口5000
和35357
,爲避免衝突,需首先關閉keystone
服務。
① 關閉keystone
服務
新建文件sudo vi /etc/init/keystone.override
,添加內容:manual
。
② 安裝keystone
和Apache HTTP server
sudo apt-get install keystone apache2 libapache2-mod-wsgi
③ 修改配置文件
sudo vi /etc/keystone/keystone.conf
在[DEFAULT]
處,修改管理令牌admin_token
爲前面生成的ADMIN_TOKEN
值。
注:修改ADMIN_TOKEN
爲實際Token值:d57ea40f3a5eedcc70ef
admin_token = ADMIN_TOKEN
在
[database]
處,配置數據庫訪問連接。
注:將KEYSTONE_DBPASS
替換爲前面設計的實際密碼。connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
在
[token]
處,配置Fernet令牌提供者。provider = fernet
④ 將配置信息寫入到身份服務數據庫
keystone
:su root su -s /bin/sh -c "keystone-manage db_sync" keystone
⑤ 初始化Fernet keys:
sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
配置Apache HTTP Server
① 修改配置文件sudo vi /etc/apache2/apache2.conf
,將服務器名稱ServerName指向Controller節點的hostname,添加如下信息:ServerName controller
② 新建文件
sudo vi /etc/apache2/sites-available/wsgi-keystone.conf
,添加Apache HTTP Server配置信息,如下: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/apache2/keystone.log CustomLog /var/log/apache2/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/apache2/keystone.log CustomLog /var/log/apache2/keystone_access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost>
③ 啓用身份服務虛擬主機
sudo ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
④ 重啓Apache HTTP Server
sudo service apache2 restart
測試是否Apache HTTP Server是否正常:
在各節點(Controller、Compute、Network)上,執行telnet命令,看能否建立連接telnet controller 35357 telnet controller 5000
⑤ 刪除keystone配置信息默認數據庫,Ubuntu安裝包安裝keystone時默認配置採用SQLite數據庫存放,但本文改用MySQL數據庫存儲keystone配置信息,因此可刪除默認SQLite數據庫。
sudo rm -f /var/lib/keystone/keystone.db
創建服務實體(Service Entity)和API路徑(API Endpoints)
身份服務數據庫keystone
默認是空的,必須使用之前配置時生成的臨時認證令牌ADMIN_TOKEN
來初始化用於身份服務的服務實體和API路徑。
① 向openstack
命令傳遞認證令牌值和身份服務URL
有兩種方式:通過openstack命令行參數--os-token
和--os-url
;或者通過設置環境變量OS_TOKEN
和OS_URL
。建議採用設置環境變量的方式,如下:
注:修改ADMIN_TOKEN
爲前面生成的實際Token值:d57ea40f3a5eedcc70ef
export OS_TOKEN=ADMIN_TOKEN export OS_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3
② 創建服務實體
身份服務管理着一個OpenStack的服務目錄,通過服務目錄確定其他服務是否可用。創建服務實體命令如下:openstack service create --name keystone --description "OpenStack Identity" identity
③ 創建API路徑
OpenStack每個服務可使用三種API路徑變體:admin
,internal
和public
。默認情況,admin
類型的API路徑可修改用戶(user)和租戶(tenant),而internal
和public
類型的API路徑不允許該操作。創建API路徑命令如下: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
創建域(Domain)、計劃(Project)、用戶(User)、角色(Role)
① 創建默認域openstack domain create --description "Default Domain" default
② 創建管理計劃、管理用戶、管理角色
admin project
、admin user
、admin role
注:添加admin
用戶時需設置密碼ADMIN_PASS
爲前面設計的實際密碼。openstack project create --domain default --description "Admin Project" admin openstack user create --domain default --password-prompt admin openstack role create admin
注:創建的任何角色都必須映射到OpenStack配置文件
policy.json
指定的角色。
將admin
角色授予admin
計劃和admin
用戶:openstack role add --project admin --user admin admin
③ 創建服務計劃
本文創建的服務計劃每個服務僅包含一個唯一用戶,可根據實際情況調整。openstack project create --domain default --description "Service Project" service
④ 創建示例計劃、示例用戶、普通用戶角色
常規任務(非管理任務)應該使用非特權計劃和用戶。
注:添加demo
用戶時需設置密碼DEMO_PASS
爲前面設計的實際密碼。openstack project create --domain default --description "Demo Project" demo openstack user create --domain default --password-prompt demo openstack role create user
將普通用戶角色授予示例計劃和示例用戶:
openstack role add --project demo --user demo user
注:可重複執行上面步驟,創建其他需要的計劃和用戶。
驗證Keystone組件配置是否正確
① 處於安全考慮,禁用臨時身份認證令牌機制。
修改文件sudo vi /etc/keystone/keystone-paste.ini
,從[pipeline:public_api]
、[pipeline:admin_api]
,[pipeline:api_v3]
處移除admin_token_auth
配置信息。
② 取消環境變量OS_TOKEN
和OS_URL
unset OS_TOKEN OS_URL
③ 爲
admin
用戶申請一個身份認證令牌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
用戶密碼ADMIN_PASS
。(將ADMIN_PASS
替換爲前面設計的實際密碼)
若報錯:'NoneType' object has no attribute 'service_catalog'
可執行:
export OS_AUTH_TYPE=password
可能還會報錯:__init__() got an unexpected keyword argument 'token'
在執行下面創建環境腳本後重新測試發現已解決,猜測是環境變量
OS_TOKEN OS_URL
未取消,可再次執行unset OS_TOKEN OS_URL
試試。
③ 爲demo
用戶申請一個身份認證令牌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
用戶密碼DEMO_PASS
。(將DEMO_PASS
替換爲前面設計的實際密碼)
注:上述設置OpenStack命令行參數的方式比較繁瑣,可採用預先創建用戶腳本的方式,在申請身份認證令牌時,只需執行如下命令:source ~/.openstack/.admin-openrc openstack token issue
或者
source ~/.openstack/.demo-openrc openstack token issue
注:創建OpenStack客戶端環境腳本方法如下
cd ~ mkdir ~/.openstack
爲管理用戶
admin
創建OpenStack客戶端環境腳本,vi ~/.openstack/.admin-openrc
,添加
注:將下面ADMIN_PASS
替換爲前面設計的實際密碼# Add environment variables for admin 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_PASS export OS_AUTH_URL=http://controller:35357/v3 export OS_AUTH_TYPE=password export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
爲示例用戶
demo
創建OpenStack客戶端環境腳本,vi ~/.openstack/.demo-openrc
,添加
注:將下面DEMO_PASS
替換爲前面設計的實際密碼# Add environment variables for demo 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_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_AUTH_TYPE=password export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
最後,測試Identity服務是否正常,訪問
http://192.168.1.11:35357/v3
或http://192.168.1.11:5000/v3
。可在各節點上安裝curl
,訪問服務API路徑,下載查看信息,如下:sudo apt-get install curl curl http://192.168.1.11:35357/v3 curl http://192.168.1.11:5000/v3 curl http://controller:35357/v3 curl http://controller:5000/v3
得到如下信息:
{"version": {"status": "stable", "updated": "2016-04-04T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.6", "links": [{"href": "http://192.168.10.3:35357/v3/", "rel": "self"}]}}
4.3 鏡像服務配置(Image Service - Glance)
用戶可使用OpenStack鏡像服務提供的REST API
查詢、註冊、恢復虛擬機鏡像。
部署節點:Controller Node
在MariaDB中創建glance數據庫
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
glance
數據庫CREATE DATABASE glance;
③ 授予
glance
數據庫適當權限
注:將GLANCE_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
創建Glance服務實體和API路徑
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建一個glance用戶
openstack user create --domain default --password-prompt glance
輸入用戶
glance
的密碼GLANCE_PASS
(將GLANCE_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予glance
用戶和service
計劃openstack role add --project service --user glance admin
④ 創建glance服務實體
openstack service create --name glance --description "OpenStack Image" image
⑤ 創建鏡像服務API路徑
openstack endpoint create --region RegionOne image public http://controller:9292 openstack endpoint create --region RegionOne image internal http://controller:9292 openstack endpoint create --region RegionOne image admin http://controller:9292
安裝和配置Glance服務組件
① 安裝Glancesudo apt-get install glance
② 修改配置文件
sudo vi /etc/glance/glance-api.conf
。
注:將GLANCE_DBPASS
和GLANCE_PASS
替換爲前面設計的實際密碼。
在[database]
處,配置數據庫訪問連接。connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
在
[keystone_authtoken]
和[paste_deploy]
處,配置身份服務訪問。
注:註釋掉[keystone_authtoken]
處所有默認內容[keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = GLANCE_PASS [paste_deploy] flavor = keystone
在`[glance_store]處配置本地文件系統存儲和鏡像文件存儲位置。
stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/
③ 修改配置文件
sudo vi /etc/glance/glance-registry.conf
。
注:將GLANCE_DBPASS
和GLANCE_PASS
替換爲前面設計的實際密碼。
在[database]
處,配置數據庫訪問連接。connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
在
[keystone_authtoken]
和[paste_deploy]
處,配置身份服務訪問。
注:註釋掉[keystone_authtoken]
處所有默認內容[keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = GLANCE_PASS [paste_deploy] flavor = keystone
④ 將配置信息寫入glance數據庫
su root su -s /bin/sh -c "glance-manage db_sync" glance
⑥ 重啓Image Service
sudo service glance-registry restart sudo service glance-api restart
驗證Glance服務組件配置是否正確
① 設置OpenStackadmin
用戶環境變量source ~/.openstack/.admin-openrc
② 下載CirrOS系統鏡像
注:此處採用CirrOS
鏡像測試,也可自行選擇其他系統鏡像wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
③ 上傳鏡像,設置鏡像參數磁盤格式
QEMU Copy On Write 2 (QCOW2)
、容器格式bare
及可見性public
。openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public
④ 確認上傳是否成功,驗證鏡像屬性。
controller@controller:~$ openstack image list Password: +--------------------------------------+-------------------------+--------+ | ID | Name | Status | +--------------------------------------+-------------------------+--------+ | 6d07d4e1-3b9d-4986-b1d7-8dd92ec9bd2c | cirros | active | +--------------------------------------+-------------------------+--------+
4.4 計算服務配置(Compute Service - Nova)
部署節點:Controller Node
在Controller節點上需要安裝nova-api、nova-conductor、nova-consoleauth、nova-novncproxy、nova-scheduler
在MariaDB(MySQL)中創建數據庫
nova_api
和nova
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
nova_api
和nova
數據庫CREATE DATABASE nova_api; CREATE DATABASE nova;
③ 授予
nova_api
和nova
數據庫適當權限
注:將NOVA_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
創建計算服務證書和API路徑
① 設置OpenStackadmin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建
nova
用戶openstack user create --domain default --password-prompt nova
輸入用戶
nova
的密碼NOVA_PASS
(將NOVA_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予nova
用戶openstack role add --project service --user nova admin
④ 創建
nova
服務實體openstack service create --name nova --description "OpenStack Compute" compute
⑤ 創建計算服務API路徑
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s
安裝計算服務組件
① 安裝Nova組件sudo apt-get install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler
② 修改配置文件
sudo vi /etc/nova/nova.conf
。
在[DEFAULT]
處只啓用compute
和metadata
APIs,將enabled_apis=ec2,osapi_compute,metadata
修改爲:
enabled_apis = osapi_compute,metadata
在
[api_database]
和[database]
處配置數據庫訪問連接(若沒有[api_database]
和[database]
標記,則手動添加)
注:將NOVA_DBPASS
替換爲前面設計的實際密碼[api_database] connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊裏訪問
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置身份服務訪問
注:將NOVA_PASS
替換爲前面設計的實際密碼
注:註釋或刪除[keystone_authtoken]
處其他內容[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = NOVA_PASS
在
[DEFAULT]
處配置my_ip
爲Controller節點Management Network網口地址[DEFAULT] my_ip = 10.0.0.11
在
[DEFAULT]
處啓用網絡服務支持
注:默認情況下,計算服務使用主機內部防火牆驅動,因此必須禁用OpenStack網絡服務中的防火牆驅動。[DEFAULT] use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
在
[vnc]
處,使用Controller節點Management Network網口地址配置VNC代理(VNC proxy)。[vnc] vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip
在
[glance]
處配置鏡像服務API位置[glance] api_servers = http://controller:9292
在
[oslo_concurrency]
處配置lock_path
[oslo_concurrency] lock_path = /var/lib/nova/tmp
最後,由於安裝包BUG,需要在
[DEFAULT]
處移除logdir
。在[DEFAULT]
處刪除,以下內容logdir=/var/log/nova
③ 將配置信息寫入計算服務數據庫
nova
su root su -s /bin/sh -c "nova-manage api_db sync" nova su -s /bin/sh -c "nova-manage db sync" nova
④ 重啓計算服務
sudo service nova-api restart sudo service nova-consoleauth restart sudo service nova-scheduler restart sudo service nova-conductor restart sudo service nova-novncproxy restart
部署節點:Compute Node
在Compute節點上需要安裝nova-compute。
注:以下步驟在Compute節點上執行
安裝配置計算服務組件
安裝nova-compute
組件sudo apt-get install nova-compute
修改配置文件
sudo vi /etc/nova/nova.conf
① 在[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
② 在
[DEFAULT]
和[keystone_authtoken]
處配置身份服務訪問
注:將NOVA_PASS
替換爲前面設計的實際密碼
注:註釋或刪除[keystone_authtoken]
處其他內容[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = NOVA_PASS
在
[DEFAULT]
處配置my_ip
爲Compute節點Management Network網口地址[DEFAULT] my_ip = 10.0.0.31
在
[DEFAULT]
處啓用網絡服務支持[DEFAULT] use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
在
[vnc]
處配置遠程控制訪問[vnc] enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html
注: VNC服務器端監聽所有地址,VNC代理客戶端只監聽Compute節點Management Network網口地址,base URL設置Compute節點遠程控制檯瀏覽器訪問地址(若瀏覽無法解析controller,則需替換爲相應IP地址)。
在[glance]
處配置鏡像服務API[glance] api_servers = http://controller:9292
在
[oslo_concurrency]
處配置lock_path
[oslo_concurrency] lock_path = /var/lib/nova/tmp
最後,由於安裝包BUG,需要在
[DEFAULT]
處移除logdir
。在[DEFAULT]
處刪除,以下內容logdir=/var/log/nova
完成安裝,重啓計算服務
① 檢測是否支持虛擬機硬件加速egrep -c '(vmx|svm)' /proc/cpuinfo
若返回結果大於等於1,則支持,無需做額外配置;
若返回結果0,則不支持硬件加速,需要做以下額外配置:修改配置文件sudo vi /etc/nova/nova-compute.conf
中的libvirt
設置項,使用QEMU
代替KVM
。[libvirt] virt_type = qemu
② 重啓計算服務
sudo service nova-compute restart
驗證計算服務是否安裝正確
注:以下步驟需在Controller節點執行
① 設置OpenStackadmin
用戶環境變量source ~/.openstack/.admin-openrc
② 打印服務組件列表,驗證每個成功啓動和註冊的進程。
openstack compute service list
結果如下:
+--+----------------+----------+--------+-------+-----+--------------------------+ |Id| Binary | Host | Zone |Status |State| Updated At | +--+----------------+----------+--------+-------+-----+--------------------------+ | 4|nova-consoleauth|controller|internal|enabled| up |2016-05-29T06:28:52.000000| | 5|nova-scheduler |controller|internal|enabled| up |2016-05-29T06:28:51.000000| | 6|nova-conductor |controller|internal|enabled| up |2016-05-29T06:28:53.000000| | 7|nova-compute |compute |nova |enabled| up |2016-05-29T06:28:45.000000| +--+----------------+----------+--------+-------+-----+--------------------------+
4.5 網絡服務配置(Networking Service - Neutron)
部署節點:Controller Node
在MariaDB(MySQL)中創建
neutron
數據庫
① 以root用戶登錄MySQLmysql -u root -p
② 創建數據庫
neutron
CREATE DATABASE neutron;
③ 授予數據庫
neutron
適當的權限
注:將NEUTRON_DBPASS
替換爲前面設計的實際密碼。GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
創建網絡服務證書和API路徑
① 設置OpenStackadmin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建
neutron
用戶openstack user create --domain default --password-prompt neutron
輸入用戶
neutron
的密碼NEUTRON_PASS
(將NEUTRON_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予neutron
用戶openstack role add --project service --user neutron admin
④ 創建
neutron
服務實體openstack service create --name neutron --description "OpenStack Networking" network
⑤ 創建網絡服務API路徑
openstack endpoint create --region RegionOne network public http://controller:9696 openstack endpoint create --region RegionOne network internal http://controller:9696 openstack endpoint create --region RegionOne network admin http://controller:9696
安裝配置
neutron-server
服務組件
① 安裝neutron-server
組件sudo apt-get install neutron-server neutron-plugin-ml2
② 修改配置文件
sudo vi /etc/neutron/neutron.conf
在[database]
處配置網絡服務數據庫neutron
訪問連接
注:將NEUTRON_DBPASS
替換爲前面設計的實際密碼
注:首先註釋掉[database]
處已存在的默認的connection
[database] # connection = sqlite:////var/lib/neutron/neutron.sqlite connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
在
[DEFAULT]
處啓用Modular Layer 2 (ML2) plug-in
、router service
和overlapping IP addresses
[DEFAULT] core_plugin = ml2 service_plugins = router allow_overlapping_ips = True
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置身份服務訪問
注:將NEUTRON_PASS
替換爲前面設計的實際密碼
注:註釋或刪除[keystone_authtoken]
處其他配置信息[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS
在
[DEFAULT]
和[nova]
處配置網絡來通知計算節點網絡拓撲變化。
注:將NOVA_PASS
替換爲前面設計的實際密碼[DEFAULT] notify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True [nova] auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = nova password = NOVA_PASS
配置
Modular Layer 2 (ML2)
插件
ML2 plug-in使用Linux網橋機制爲OpenStack實例建立layer-2虛擬網絡設施(橋接和交換)。
修改配置文件sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
① 在[ml2]
處啓用flat
、VLAN
、VXLAN
網絡
注:在配置ML2
插件後,移除type_drivers設置項的部分值,將導致數據庫不一致。[ml2] type_drivers = flat,vlan,vxlan
② 在
[ml2]
處啓用VXLAN self-service
網絡[ml2] tenant_network_types = vxlan
③ 在
[ml2]
處啓用Linux bridge
和layer-2 population
機制[ml2] mechanism_drivers = linuxbridge,l2population
注:
Linux Bridge Agent
只支持VXLAN overlay networks
④ 在[ml2]
處啓用端口安全擴展驅動[ml2] extension_drivers = port_security
⑤ 在
[ml2_type_flat]
處配置運營商虛擬網絡爲flat network
[ml2_type_flat] flat_networks = provider
⑥ 在
[ml2_type_vxlan]
處配置自服務網絡中的VXLAN
網絡標識符範圍[ml2_type_vxlan] vni_ranges = 1:1000
⑦ 在
[securitygroup]
處啓用ipset
來增強安全組規則的效率[securitygroup] enable_ipset = True
將配置信息寫入
neutron
數據庫su root su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
爲計算服務配置網絡訪問服務
修改配置文件sudo vi /etc/nova/nova.conf
在[neutron]
處配置訪問參數,啓用元數據服務代理,配置元數據代理共享密鑰
注:將NEUTRON_PASS
和METADATA_SECRET
替換爲前面設計的實際密碼[neutron] url = http://controller:9696 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS service_metadata_proxy = True metadata_proxy_shared_secret = METADATA_SECRET
重啓計算服務API和網絡服務
sudo service nova-api restart sudo service neutron-server restart
部署節點:Network Node
在Network
節點上部署組件:neutron-linuxbridge-agent
、 neutron-l3-agent
、neutron-dhcp-agent
、neutron-metadata-agent
網絡服務部署架構有兩種方式Provider Networks
和Self-Service Networks
,在本文開頭作了簡要介紹。本文采用Self-Service Networks
方式部署。
參考文檔:Deploy Networking Service using the Architecture of Self-Service Networks
安裝網絡服務組件
sudo apt-get install neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
配置公共服務組件
公共組件配置包括認證機制、消息隊列。修改配置文件sudo vi /etc/neutron/neutron.conf
① 在[database]
處註釋掉其他所有設置項,因爲Network
節點不需要直接訪問數據庫。
② 在[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
③ 在
[DEFAULT]
和[keystone_authtoken]
處配置身份服務訪問
注:將NEUTRON_PASS
替換爲前面設計的實際密碼
注:註釋或刪除[keystone_authtoken]
處其他配置信息[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS
配置Linux網橋代理
Linux bridge agent爲實例建立了二層虛擬網絡設施,而且可以管理安全組。
修改配置文件sudo vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
① 在[linux_bridge]
處將虛擬網絡映射到物理網絡
注:將PROVIDER_INTERFACE_NAME
替換爲Network節點External Network網絡接口名稱eth0
[linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
② 在
[vxlan]
處啓用VXLAN overlay networks
,配置管理Overlay網絡的物理網絡IP地址,啓用layer-2 population
注:將OVERLAY_INTERFACE_IP_ADDRESS
替換爲Network節點Management Network網絡接口IP地址10.0.0.21
[vxlan] enable_vxlan = True local_ip = OVERLAY_INTERFACE_IP_ADDRESS l2_population = True
③ 在
[securitygroup]
處啓用安全組,並配置Linux bridge iptables firewall driver
[securitygroup] enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置三層網絡代理
L3(Layer-3) Agent
位自服務網絡提供了路由和NAT服務。
修改配置文件sudo vi /etc/neutron/l3_agent.ini
,在[DEFAULT]
處配置Linux網橋接口驅動(Linux Bridge Interface Driver)和外網網橋。[DEFAULT] interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver external_network_bridge =
注:
external_network_bridge
值故意空缺,這樣可使多個外部網絡共用一個代理。配置
DHCP
代理
修改配置文件sudo vi /etc/neutron/dhcp_agent.ini
,在[DEFAULT]
處配置Linux bridge interface driver
和Dnsmasq DHCP driver
,啓用獨立的metadata
使運營商網絡實例可以訪問虛擬網絡元信息。[DEFAULT] interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = True
配置元數據代理
元數據代理提供一些諸如證書之類的配置信息。
修改配置文件sudo vi /etc/neutron/metadata_agent.ini
,在[DEFAULT]
處配置元數據主機和共享密鑰。
注:將METADATA_SECRET
替換爲前面設計的實際密碼[DEFAULT] nova_metadata_ip = controller metadata_proxy_shared_secret = METADATA_SECRET
重啓網絡服務代理
sudo service neutron-linuxbridge-agent restart sudo service neutron-dhcp-agent restart sudo service neutron-metadata-agent restart sudo service neutron-l3-agent restart
部署節點:Compute Node
安裝網絡服務組件
sudo apt-get install neutron-linuxbridge-agent
配置公共組件
公共組件配置包括認證機制、消息隊列、插件。
修改配置文件sudo vi /etc/neutron/neutron.conf
① 在[database]
處註釋掉其他所有設置項,因爲Compute
節點不需要直接訪問數據庫。
② 在[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ
消息隊列訪問
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
③ 在
[DEFAULT]
和[keystone_authtoken]
處配置身份服務訪問
注:將NEUTRON_PASS
替換爲前面設計的實際密碼
注:註釋或刪除[keystone_authtoken]
處其他項[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS
配置網絡設置
配置Linux網橋代理,修改配置文件sudo vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
① 在[linux_bridge]
處將虛擬網絡映射到物理網絡
注:將PROVIDER_INTERFACE_NAME
替換爲Compute節點External Network網絡接口名稱eth0
。[linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
② 在
[vxlan]
處啓用VXLAN
覆蓋網絡,配置管理覆蓋網絡的物理網絡接口IP地址,啓用layer-2 population
注:將OVERLAY_INTERFACE_IP_ADDRESS
替換爲Compute節點Management Network網絡接口IP地址10.0.0.31
[vxlan] enable_vxlan = True local_ip = OVERLAY_INTERFACE_IP_ADDRESS l2_population = True
③ 在
[securitygroup]
處啓用安全組,配置Linux bridge iptables firewall driver
[securitygroup] enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置計算服務訪問網絡
修改配置文件sudo vi /etc/nova/nova.conf
① 在[neutron]
處配置訪問參數
注:將NEUTRON_PASS
替換爲前面設計的實際密碼[neutron] url = http://controller:9696 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS
② 重啓計算服務
sudo service nova-compute restart
③ 重啓Linux網橋代理
sudo service neutron-linuxbridge-agent restart
驗證網絡服務是否安裝配置正確
① 在Controller節點上設置OpenStack管理用戶admin
的環境變量source ~/.openstack/.admin-openrc
② 列出已加載的擴展包,驗證成功啓動的
neutron-server
進程neutron ext-list neutron agent-list
4.6 儀表盤服務配置(Dashboard Service - Horizon)
儀表盤是一個Web接口,可使雲管理員和用戶管理各種各樣的OpenStack資源和服務。本文采用Apache Web Server
部署Dashboard
服務。
部署節點:Controller Node
安裝
Horizon
sudo apt-get install openstack-dashboard
若遇到由於
openstack-dashboard-ubuntu-theme
無法安裝的問題,可執行如下命令:dpkg --remove --force-remove-reinstreq openstack-dashboard-ubuntu-theme
修改配置文件
sudo vi /etc/openstack-dashboard/local_settings.py
① 在controller
節點上配置horizon
使用OpenStack Service
。OPENSTACK_HOST = "controller"
② 配置允許所有主機都可以訪問
horizon
ALLOWED_HOSTS = ['*', ]
③ 配置
memcached session storage service
注:註釋掉其他session storage
配置信息SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } }
④ 啓用
Identity API version 3
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
⑤ 啓用域名支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
⑥ 配置API版本
OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 2, }
⑦ 配置通過
Dashboard
創建的用戶默認域名爲default
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
⑧ 配置通過
Dashboard
創建的用戶的角色默認爲user
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
⑨ 配置時區
注:該步驟可選配置TIME_ZONE = "Asia/Shanghai"
重新加載Apache服務
sudo service apache2 reload
驗證
Dashboard
服務是否部署成功http://controller/horizon
在物理主機中爲Dashboard外網訪問配置端口映射
① 利用Windows自帶的netsh
配置端口映射,打開cmd
命令行,輸入:netsh interface portproxy add v4tov4 listenport=11180 connectaddress=192.168.1.11 connectport=80
② 在系統防火牆高級設置中配置入站規則
新建規則–>端口–>特定本地端口:11180
–>允許連接–>選擇域/專用/公用–>名稱:VMware OpenStack Dashboard HTTP Service
、描述:用於VMware中OpenStack雲計算平臺Dashboard服務的Web訪問
③ 利用Windows自帶的netsh
配置端口映射,打開cmd
命令行,輸入:netsh interface portproxy add v4tov4 listenport=6080 connectaddress=192.168.1.11 connectport=6080
④ 在系統防火牆高級設置中配置入站規則
新建規則–>端口–>特定本地端口:6080
–>允許連接–>選擇域/專用/公用–>名稱:VMware OpenStack Compute Service of Nova Proxy
、描述:用於VMware中OpenStack雲計算平臺Nova Proxy服務的Web訪問
4.7 塊存儲服務配置(Block Storage Service - Cinder)
部署節點:Controller Node
在MariaDB(MySQL)中創建數據庫
cinder
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
cinder
數據庫CREATE DATABASE cinder;
③ 授予
cinder
數據庫適當權限
注:將CINDER_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS'; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
創建Cinder服務實體和API路徑
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建一個
cinder
用戶openstack user create --domain default --password-prompt cinder
輸入用戶
cinder
的密碼CINDER_PASS
(將CINDER_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予cinder
用戶openstack role add --project service --user cinder admin
④ 創建
cinder
和cinderv2
服務實體openstack service create --name cinder --description "OpenStack Block Storage" volume openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
⑤ 創建塊存儲服務API路徑
openstack endpoint create --region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s
安裝和配置Cinder服務組件
① 安裝Cindersudo apt-get install cinder-api cinder-scheduler
② 修改配置文件
sudo vi /etc/cinder/cinder.conf
。
注:將CINDER_DBPASS
、CINDER_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據訪問連接:[database] connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置認證服務訪問:
注:註釋或刪除[keystone_authtoken]
處其他默認設置。[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS
在
[DEFAULT]
處配置my_ip
爲Controller節點Management Networ網絡接口地址:[DEFAULT] my_ip = 10.0.0.11
在
[oslo_concurrency]
處配置lock_path
:[oslo_concurrency] lock_path = /var/lib/cinder/tmp
③ 將配置信息寫入塊存儲服務數據庫
cinder
su root su -s /bin/sh -c "cinder-manage db sync" cinder
配置計算服務調用塊存儲服務
修改配置文件sudo vi /etc/nova/nova.conf
,添加如下信息:[cinder] os_region_name = RegionOne
重啓計算服務API和塊存儲服務
sudo service nova-api restart sudo service cinder-scheduler restart sudo service cinder-api restart
部署節點:BlockStorage Node
安裝配置LVM
① 安裝LVM:sudo apt-get install lvm2
② 創建LVM物理卷
/dev/sdb
:sudo pvcreate /dev/sdb
③ 創建LVM卷組
cinder-volumes
sudo vgcreate cinder-volumes /dev/sdb
④ 配置只有OpenStack實例纔可以訪問塊存儲卷
修改配置文件sudo vi /etc/lvm/lvm.conf
,在devices
處添加一個過濾器,使OpenStack實例只允許訪問/dev/sdb
。filter = [ "a/sdb/", "r/.*/"]
注:如果塊存儲節點操作系統磁盤也使用了邏輯卷管理LVM,則在過濾器中必須將操作系統磁盤LVM所在設備
/dev/sda
也添加到允許訪問列表。例如本文各節點系統磁盤均採用LVM,則應添加下面過濾器:filter = [ "a/sda/", "a/sdb/", "r/.*/"]
注:如果Compute節點操作系統磁盤(如
/dev/sda
)也使用LVM,則必須在Compute節點上修改配置文件sudo vi /etc/lvm/lvm.conf
,將操作系統磁盤添加到過濾器允許訪問列表。如下:filter = [ "a/sda/", "r/.*/"]
安裝配置塊存儲服務組件
① 安裝cinder
sudo apt-get install cinder-volume
② 修改配置文件
sudo vi /etc/cinder/cinder.conf
注:將CINDER_DBPASS
、CINDER_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據庫訪問連接:[database] connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問服務:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置身份認證服務訪問:
注:註釋或刪除[keystone_authtoken]
處其他默認配置信息[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS
在
[DEFAULT]
處配置my_ip
爲BlockStorage節點Management Networ網絡接口地址:[DEFAULT] my_ip = 10.0.0.41
在
[lvm]
處添加LVM後端驅動、卷組、iSCSI協議和服務,如下:[lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes iscsi_protocol = iscsi iscsi_helper = tgtadm
在
[DEFAULT]
處配置LVM後端名稱(可任意設置,爲了簡單,本文設置爲lvm):[DEFAULT] enabled_backends = lvm
在
[DEFAULT]
處配置鏡像服務API路徑:[DEFAULT] glance_api_servers = http://controller:9292
在
[oslo_concurrency]
處配置lock_path
:[oslo_concurrency] lock_path = /var/lib/cinder/tmp
③ 重啓塊存儲服務
sudo service tgt restart sudo service cinder-volume restart
驗證塊存儲服務是否安裝配置正確
① 在Controller節點上設置OpenStack管理用戶admin
的環境變量source ~/.openstack/.admin-openrc
② 列出塊存儲服務組件,驗證成功啓動的
cinder
進程cinder service-list
4.8 共享文件系統服務配置(Shared File Systems Service - Manila)
共享文件系統服務可以提供對共享文件系統或分佈式文件系統的訪問。
4.8.1 Shared File Systems Service(Manila)
部署節點:Controller Node
在MariaDB(MySQL)中創建數據庫
manila
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
manila
數據庫CREATE DATABASE manila;
③ 授予
manila
數據庫適當權限
注:將MANILA_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'localhost' IDENTIFIED BY 'MANILA_DBPASS'; GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'%' IDENTIFIED BY 'MANILA_DBPASS';
創建Manila服務實體和API路徑
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建一個
manila
用戶openstack user create --domain default --password-prompt manila
輸入用戶
manila
的密碼MANILA_PASS
(將MANILA_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予manila
用戶openstack role add --project service --user manila admin
④ 創建
manila
和manilav2
服務實體openstack service create --name manila --description "OpenStack Shared File Systems" share openstack service create --name manilav2 --description "OpenStack Shared File Systems" sharev2
⑤ 創建共享文件系統服務API路徑
openstack endpoint create --region RegionOne share public http://controller:8786/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne share internal http://controller:8786/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne share admin http://controller:8786/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne sharev2 public http://controller:8786/v2/%\(tenant_id\)s openstack endpoint create --region RegionOne sharev2 internal http://controller:8786/v2/%\(tenant_id\)s openstack endpoint create --region RegionOne sharev2 admin http://controller:8786/v2/%\(tenant_id\)s
安裝和配置Manila服務組件
① 安裝Manilasudo apt-get install manila-api manila-scheduler python-manilaclient
② 修改配置文件
sudo vi /etc/manila/manila.conf
。
注:將MANILA_DBPASS
、MANILA_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據訪問連接:[database] connection = mysql+pymysql://manila:MANILA_DBPASS@controller/manila
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
處添加如下配置信息:default_share_type = default_share_type rootwrap_config = /etc/manila/rootwrap.conf
在
[DEFAULT]
和[keystone_authtoken]
處配置認證服務訪問:
注:註釋或刪除[keystone_authtoken]
處其他默認設置。[DEFAULT] auth_strategy = keystone [keystone_authtoken] memcached_servers = controller:11211 auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = manila password = MANILA_PASS
在
[DEFAULT]
處配置my_ip
爲Controller節點Management Networ網絡接口地址:[DEFAULT] my_ip = 10.0.0.11
在
[oslo_concurrency]
處配置lock_path
:[oslo_concurrency] lock_path = /var/lib/manila/tmp
③ 將配置信息寫入塊存儲服務數據庫
manila
su root su -s /bin/sh -c "manila-manage db sync" manila
重啓共享文件系統服務
sudo service manila-scheduler restart sudo service manila-api restart
部署節點:BlockStorage Node
安裝共享文件系統服務組件
① 安裝manila
sudo apt-get install manila-share python-pymysql
② 修改配置文件
sudo vi /etc/manila/manila.conf
注:將MANILA_DBPASS
、MANILA_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據庫訪問連接:[database] connection = mysql+pymysql://manila:MANILA_DBPASS@controller/manila
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問服務:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
處添加如下配置信息:default_share_type = default_share_type rootwrap_config = /etc/manila/rootwrap.conf
在
[DEFAULT]
和[keystone_authtoken]
處配置身份認證服務訪問:
注:註釋或刪除[keystone_authtoken]
處其他默認配置信息[DEFAULT] auth_strategy = keystone [keystone_authtoken] memcached_servers = controller:11211 auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = manila password = MANILA_PASS
在
[DEFAULT]
處配置my_ip
爲BlockStorage節點Management Networ網絡接口地址:[DEFAULT] my_ip = 10.0.0.41
在
[oslo_concurrency]
處配置lock_path
:[oslo_concurrency] lock_path = /var/lib/manila/tmp
安裝配置共享服務器管理
① 針對兩種不同的網絡模式(provider和self-service),共享文件系統服務支持兩種模式:
不需要驅動器支持的共享服務器管理:不需要安裝任何驅動,默認使用LVM和NFS服務方式,支持NFS和CIFS協議,通過在共享服務器創建共享卷,利用NFS爲虛擬機提供共享服務。
需要驅動器支持的共享服務器管理:需要計算(Nova),網絡(Neutron)和塊存儲管理(Cinder)服務管理共享服務器。用於創建共享服務器的信息被配置爲共享網絡。這種模式使用通用驅動程序,並需要啓用驅動控制共享服務器(DHSS), 還需要連接到公共網絡路由器。本指南採用第二種模式。
② 安裝網絡服務組件sudo apt-get install neutron-plugin-linuxbridge-agent
③ 配置網絡服務公共組件
公共組件配置包括認證機制、消息隊列、插件。修改配置文件sudo vi /etc/neutron/neutron.conf
在[database]
處註釋掉其他所有設置項,因爲BlockStorage
節點不需要直接訪問數據庫。
在[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ
消息隊列訪問
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置身份服務訪問
注:將NEUTRON_PASS
替換爲前面設計的實際密碼
注:註釋或刪除[keystone_authtoken]
處其他項[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS
④ 配置網絡設置
配置Linux網橋代理,修改配置文件sudo vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
在[linux_bridge]
處將虛擬網絡映射到物理網絡
注:將PROVIDER_INTERFACE_NAME
替換爲BlockStorage節點External Network網絡接口名稱eth0
。[linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
在
[vxlan]
處啓用VXLAN
覆蓋網絡,配置管理覆蓋網絡的物理網絡接口IP地址,啓用layer-2 population
注:將OVERLAY_INTERFACE_IP_ADDRESS
替換爲BlockStorage節點Management Network網絡接口IP地址10.0.0.41
[vxlan] enable_vxlan = True local_ip = OVERLAY_INTERFACE_IP_ADDRESS l2_population = True
在
[securitygroup]
處啓用安全組,配置Linux bridge iptables firewall driver
[securitygroup] enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
⑤ 修改配置文件
sudo vi /etc/manila/manila.conf
在[DEFAULT]
處啓用generic
和NFS/CIFS
協議:
注:下面共享後端名稱可任意設置,本指南設置爲驅動名稱。[DEFAULT] enabled_share_backends = generic enabled_share_protocols = NFS,CIFS
在
[neutron]
、[nova]
和[cinder]
處啓用這些服務的認證信息:
注:將NEUTRON_PASS
、NOVA_PASS
和CINDER_PASS
替換爲前面設計的實際密碼[neutron] url = http://controller:9696 auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS [nova] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = nova password = NOVA_PASS [cinder] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = cinder password = CINDER_PASS
在
[generic]
處配置generic
驅動:[generic] share_backend_name = GENERIC share_driver = manila.share.drivers.generic.GenericShareDriver driver_handles_share_servers = True service_instance_flavor_id = 100 service_image_name = manila-service-image service_instance_user = manila service_instance_password = manila interface_driver = manila.network.linux.interface.BridgeInterfaceDriver
⑥ 重啓服務
sudo service manila-share restart sudo service neutron-linuxbridge-agent restart
驗證共享文件系統服務和網絡服務代理是否安裝配置正確
① 在Controller節點上設置OpenStack管理用戶admin
的環境變量source ~/.openstack/.admin-openrc
② 列出共享文件系統服務組件,驗證成功啓動的
manila
進程manila service-list
③ 列出網絡服務代理
neutron agent-list
4.8.2 Manila Dashboard(Manila UI)
注:在OpenStack Mitaka發行版中Horizon中不包括Manila,需要安裝額外的插件manila-ui
才能在Horizon中顯示Share菜單。
安裝
Manila UI
查看列表:http://tarballs.openstack.org/manila-ui/sudo pip install 'http://tarballs.openstack.org/manila-ui/manila-ui-stable-mitaka.tar.gz'
在
Horizon
中啓用Manila UI
查看Manila UI
安裝路徑:find /usr -name 'manila_ui'
cd /usr/local/lib/python2.7/dist-packages/manila_ui sudo cp ./enabled/_90_manila_*.py /usr/share/openstack-dashboard/openstack_dashboard/local/enabled
配置中文語言支持
sudo apt-get install gettext python-pip python-dev build-essential cd /usr/share/openstack-dashboard/horizon sudo /usr/share/openstack-dashboard/manage.py makemessages -l en --no-obsolete sudo /usr/share/openstack-dashboard/manage.py makemessages -d djangojs -l en --no-obsolete cd /usr/share/openstack-dashboard/openstack_dashboard sudo /usr/share/openstack-dashboard/manage.py makemessages --extension=html,txt,csv --ignore=openstack -l en --no-obsolete cd /usr/share/openstack-dashboard/horizon sudo /usr/share/openstack-dashboard/manage.py compilemessages cd /usr/share/openstack-dashboard/openstack_dashboard sudo /usr/share/openstack-dashboard/manage.py compilemessages cd /usr/local/lib/python2.7/dist-packages/manila_ui sudo service apache2 reload
重新加載
Apache Web Server
sudo service apache2 reload
參考鏈接:
https://github.com/openstack/manila-ui
http://docs.openstack.org/developer/horizon/topics/install.html
https://www.howtoinstall.co/en/ubuntu/xenial/python-manila-ui
4.9 對象存儲服務配置(Object Storage Service - Swift)
通過REST API
提供對象存儲和檢索服務。
部署節點:Controller Node
創建對象存儲服務實體和API路徑
注:對象存儲服務不使用Controller節點上的SQL數據庫MariaDB,它使用每個存儲節點上的分佈式數據庫SQLite。
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建一個
swift
用戶openstack user create --domain default --password-prompt swift
輸入用戶
swift
的密碼SWIFT_PASS
(將SWIFT_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予swift
用戶openstack role add --project service --user swift admin
④ 創建
swift
服務實體openstack service create --name swift --description "OpenStack Object Storage" object-store
⑤ 創建對象存儲服務API路徑
openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%\(tenant_id\)s openstack endpoint create --region RegionOne object-store internal http://controller:8080/v1/AUTH_%\(tenant_id\)s openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1
安裝和配置Swift服務組件
① 安裝Swift相關服務組件sudo apt-get install swift swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
② 創建目錄
/etc/swift
sudo mkdir /etc/swift
③ 從對象存儲軟件源倉庫下載對象存儲代理服務配置文件
sudo curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/mitaka
② 修改配置文件
sudo vi /etc/swift/proxy-server.conf
。
在[DEFAULT]
處配置代理服務綁定端口、用戶和目錄:[DEFAULT] bind_port = 8080 user = swift swift_dir = /etc/swift
在
[pipeline:main]
處移除tempurl
和tempauth
模塊,並添加authtoken
和keystoneauth
模塊:[pipeline:main] pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
在
[app:proxy-server]
處啓用賬戶自動創建:[app:proxy-server] use = egg:swift#proxy account_autocreate = True
在
[filter:keystoneauth]
處設置操作用戶角色:[filter:keystoneauth] use = egg:swift#keystoneauth operator_roles = admin,user
在
[filter:authtoken]
處配置認證服務訪問:
注:將SWIFT_PASS
替換爲前面設計的實際密碼。
注:註釋或刪除[filter:authtoken]
處其他默認設置。[filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = swift password = SWIFT_PASS delay_auth_decision = True
在
[filter:cache]
處配置Memcached位置:[filter:cache] use = egg:swift#memcache memcache_servers = controller:11211
部署節點:ObjectStorage Node
注:每個對象存儲節點都需執行以下步驟
安裝配置
XFS
① 安裝XFS:sudo apt-get install xfsprogs rsync
② 將存儲設備
/dev/sdb
和/dev/sdc
格式化爲XFS
文件系統:sudo mkfs.xfs /dev/sdb sudo mkfs.xfs /dev/sdc
③ 創建掛載點目錄:
sudo mkdir -p /srv/node/sdb sudo mkdir -p /srv/node/sdc
④ 修改文件
sudo vi /etc/fstab
,添加如下信息:/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 /dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
⑤ 掛載設備:
sudo mount /srv/node/sdb sudo mount /srv/node/sdc
⑥ 新建或修改置文件
sudo vi /etc/rsyncd.conf
,添加如下信息:
注:將下面MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址10.0.0.51
或10.0.0.52
uid = swift gid = swift log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid address = MANAGEMENT_INTERFACE_IP_ADDRESS [account] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/account.lock [container] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/container.lock [object] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/object.lock
⑦ 修改
sudo vi /etc/default/rsync
,啓用rsync
服務:RSYNC_ENABLE=true
⑧ 啓動
rsync
服務:sudo service rsync start
安裝配置Swift服務組件
① 安裝swift
組件sudo apt-get install swift swift-account swift-container swift-object
② 從對象存儲軟件源倉庫下載賬戶、容器和對象服務配置文件
sudo curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/mitaka sudo curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/mitaka sudo curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/mitaka
③ 修改配置文件
sudo vi /etc/swift/account-server.conf
。
在[DEFAULT]
處配置綁定IP地址、綁定端口、用戶、目錄和掛載點:
注:將下面MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址10.0.0.51
或10.0.0.52
[DEFAULT] bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS bind_port = 6002 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True
在
[pipeline:main]
處啓用相關模塊:[pipeline:main] pipeline = healthcheck recon account-server
在
[filter:recon]
處配置recon(meters)
緩存:[filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift
④ 修改配置文件
sudo vi /etc/swift/container-server.conf
在[DEFAULT]
處配置綁定IP地址、綁定端口、用戶、目錄和掛載點:
注:將下面MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址10.0.0.51
或10.0.0.52
[DEFAULT] bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS bind_port = 6001 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True
在
[pipeline:main]
處啓用相關模塊:[pipeline:main] pipeline = healthcheck recon container-server
在
[filter:recon]
處配置recon(meters)
緩存:[filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift
⑤ 修改配置文件
sudo vi /etc/swift/object-server.conf
在[DEFAULT]
處配置綁定IP地址、綁定端口、用戶、目錄和掛載點:
注:將下面MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址10.0.0.51
或10.0.0.52
[DEFAULT] bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS bind_port = 6000 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True
在
[pipeline:main]
處啓用相關模塊:[pipeline:main] pipeline = healthcheck recon object-server
在
[filter:recon]
處配置recon(meters)
緩存:[filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift recon_lock_path = /var/lock
⑥ 修改掛載點目錄所有者:
sudo chown -R swift:swift /srv/node
⑦ 創建
recon
目錄,並修改所有者:sudo mkdir -p /var/cache/swift sudo chown -R root:swift /var/cache/swift sudo chmod -R 775 /var/cache/swift
部署節點:Controller Node
創建和分發初始環
創建賬戶環
① 將當前工作目錄設置爲/etc/swift
:cd /etc/swift
② 創建基礎的
account.builder
文件:sudo swift-ring-builder account.builder create 10 3 1
③ 將每個對象存儲節點設備添加到賬戶環:
sudo swift-ring-builder account.builder add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6002 --device DEVICE_NAME --weight DEVICE_WEIGHT
注:將
STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址,將DEVICE_NAME
替換爲對應的對象存儲節點上的存儲設備名稱,將DEVICE_WEIGHT
替換爲實際權重值。
注:重複以上命令,將每個存儲節點上的每個存儲設備添加到賬戶環。
例如,本文采用如下命令將每個存儲節點上的每個存儲設備添加到賬戶環:sudo swift-ring-builder account.builder add --region 1 --zone 1 --ip 10.0.0.51 --port 6002 --device sdb --weight 100 sudo swift-ring-builder account.builder add --region 1 --zone 1 --ip 10.0.0.51 --port 6002 --device sdc --weight 100 sudo swift-ring-builder account.builder add --region 1 --zone 2 --ip 10.0.0.52 --port 6002 --device sdb --weight 100 sudo swift-ring-builder account.builder add --region 1 --zone 2 --ip 10.0.0.52 --port 6002 --device sdc --weight 100
④ 驗證賬戶環內容:
sudo swift-ring-builder account.builder
⑤ 平衡賬戶環:
sudo swift-ring-builder account.builder rebalance
創建容器環
① 將當前工作目錄設置爲/etc/swift
:cd /etc/swift
② 創建基礎的
container.builder
文件:sudo swift-ring-builder container.builder create 10 3 1
③ 將每個對象存儲節點設備添加到容器環:
sudo swift-ring-builder container.builder add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6001 --device DEVICE_NAME --weight DEVICE_WEIGHT
注:將
STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址,將DEVICE_NAME
替換爲對應的對象存儲節點上的存儲設備名稱,將DEVICE_WEIGHT
替換爲實際權重值。
注:重複以上命令,將每個存儲節點上的每個存儲設備添加到容器環。
例如,本文采用如下命令將每個存儲節點上的每個存儲設備添加到容器環:sudo swift-ring-builder container.builder add --region 1 --zone 1 --ip 10.0.0.51 --port 6001 --device sdb --weight 100 sudo swift-ring-builder container.builder add --region 1 --zone 1 --ip 10.0.0.51 --port 6001 --device sdc --weight 100 sudo swift-ring-builder container.builder add --region 1 --zone 2 --ip 10.0.0.52 --port 6001 --device sdb --weight 100 sudo swift-ring-builder container.builder add --region 1 --zone 2 --ip 10.0.0.52 --port 6001 --device sdc --weight 100
④ 驗證容器環內容:
sudo swift-ring-builder container.builder
⑤ 平衡容器環:
sudo swift-ring-builder container.builder rebalance
創建對象環
① 將當前工作目錄設置爲/etc/swift
:cd /etc/swift
② 創建基礎的
object.builder
文件:sudo swift-ring-builder object.builder create 10 3 1
③ 將每個對象存儲節點設備添加到對象環:
sudo swift-ring-builder object.builder add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6000 --device DEVICE_NAME --weight DEVICE_WEIGHT
注:將
STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS
替換爲對象存儲節點Management Network
網絡接口地址,將DEVICE_NAME
替換爲對應的對象存儲節點上的存儲設備名稱,將DEVICE_WEIGHT
替換爲實際權重值。
注:重複以上命令,將每個存儲節點上的每個存儲設備添加到對象環。
例如,本文采用如下命令將每個存儲節點上的每個存儲設備添加到對象環:sudo swift-ring-builder object.builder add --region 1 --zone 1 --ip 10.0.0.51 --port 6000 --device sdb --weight 100 sudo swift-ring-builder object.builder add --region 1 --zone 1 --ip 10.0.0.51 --port 6000 --device sdc --weight 100 sudo swift-ring-builder object.builder add --region 1 --zone 2 --ip 10.0.0.52 --port 6000 --device sdb --weight 100 sudo swift-ring-builder object.builder add --region 1 --zone 2 --ip 10.0.0.52 --port 6000 --device sdc --weight 100
④ 驗證對象環內容:
sudo swift-ring-builder object.builder
⑤ 平衡對象環:
sudo swift-ring-builder object.builder rebalance
分發環配置文件
將環配置文件account.ring.gz
、container.ring.gz
和object.ring.gz
拷貝到每個對象存儲節點以及代理服務節點的/etc/swift
目錄。在每個存儲節點或代理服務節點執行以下命令:sudo scp controller@controller:/etc/swift/*.ring.gz /etc/swift
注:本文將
swift-proxy
部署到controller節點,因此無需再講環配置文件拷貝到代理服務節點的/etc/swift
目錄。若對象存儲代理服務swift-proxy
部署在其他節點,則需將環配置文件拷貝到該代理服務節點/etc/swift
目錄下。添加、分發
swift
配置文件
① 從對象存儲軟件源倉庫下載配置文件/etc/swift/swift.conf
sudo curl -o /etc/swift/swift.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/mitaka
② 修改配置文件
sudo vi /etc/swift/swift.conf
在[swift-hash]
處哈希路徑前綴和後綴
注:將HASH_PATH_PREFIX
和HASH_PATH_SUFFIX
替換爲前面設計的唯一值。[swift-hash] swift_hash_path_suffix = HASH_PATH_SUFFIX swift_hash_path_prefix = HASH_PATH_PREFIX
在
[storage-policy:0]
處設置默認存儲策略:[storage-policy:0] name = Policy-0 default = yes
③ 分發
swift
配置文件
將/etc/swift/swift.conf
拷貝到每個對象存儲節點以及代理服務節點的/etc/swift
目錄。在每個存儲節點或代理服務節點執行以下命令:sudo scp controller@controller:/etc/swift/swift.conf /etc/swift
④ 在所有存儲節點和代理服務節點上設置swift配置目錄所有權
sudo chown -R root:swift /etc/swift
重啓服務,完成安裝
① 在Controller節點和其他Swift代理服務節點上執行:sudo service memcached restart sudo service swift-proxy restart
② 在所有對象存儲節點上執行:
注:忽略其他未配置的服務報錯信息sudo swift-init all start
驗證對象存儲服務是否安裝配置正確
① 在Controller節點上設置OpenStack示例用戶demo
的環境變量source ~/.openstack/.demo-openrc
② 查看對象存儲服務狀態
controller@controller:~$ swift stat Account: AUTH_4bedcb61d9eb47cfb5fc79ea4a1a03b0 Containers: 0 Objects: 0 Bytes: 0 X-Put-Timestamp: 1465023102.25072 X-Timestamp: 1465023102.25072 X-Trans-Id: tx4a14ec8f1e6c46179a9b8-0057527a7d Content-Type: text/plain; charset=utf-8
③ 創建一個容器
container1
openstack container create container1
④ 上傳一個測試文件到容器
container1
注:將FILE
替換爲任意本地測試文件名openstack object create container1 FILE
⑤ 列出容器
container1
中的文件:openstack object list container1
⑥ 從容器
container1
下載文件:openstack object save container1 FILE
4.10 編排服務配置(Orchestration Service - Heat)
提供一種基於模板的編排,用於創建和管理雲資源。
部署節點:Controller Node
在MariaDB(MySQL)中創建數據庫
heat
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
heat
數據庫CREATE DATABASE heat;
③ 授予
heat
數據庫適當權限
注:將HEAT_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'HEAT_DBPASS'; GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'HEAT_DBPASS';
創建Orchestration服務實體和API路徑
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 在OpenStack中創建一個
heat
用戶openstack user create --domain default --password-prompt heat
輸入用戶
heat
的密碼HEAT_PASS
(將HEAT_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予heat
用戶openstack role add --project service --user heat admin
④ 創建
heat
和heat-cfn
服務實體openstack service create --name heat --description "Orchestration" orchestration openstack service create --name heat-cfn --description "Orchestration" cloudformation
⑤ 創建Orchestration服務API路徑
openstack endpoint create --region RegionOne orchestration public http://controller:8004/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne orchestration internal http://controller:8004/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne orchestration admin http://controller:8004/v1/%\(tenant_id\)s openstack endpoint create --region RegionOne cloudformation public http://controller:8000/v1 openstack endpoint create --region RegionOne cloudformation internal http://controller:8000/v1 openstack endpoint create --region RegionOne cloudformation admin http://controller:8000/v1
創建Orchestration管理域、用戶、角色
① 創建heat
域openstack domain create --description "Stack projects and users" heat
② 創建
heat_domain_admin
用戶openstack user create --domain heat --password-prompt heat_domain_admin
輸入
heat_domain_admin
用戶密碼HEAT_DOMAIN_PASS
(將HEAT_DOMAIN_PASS
替換爲前面設計的實際密碼)。
③ 將admin
角色授予heat_domain_admin
用戶openstack role add --domain heat --user-domain heat --user heat_domain_admin admin
④ 創建
heat_stack_owner
角色openstack role create heat_stack_owner
⑤ 將角色
heat_stack_owner
授予示例項目和用戶openstack role add --project demo --user demo heat_stack_owner
注:必須將
heat_stack_owner
角色授予管理stack的每一個用戶。
⑥ 創建heat_stack_user
角色openstack role create heat_stack_user
注: Orchestration服務自動將角色
heat_stack_user
授予stack部署期間創建的用戶,爲了避免衝突,不要講角色heat_stack_owner
授予任何用戶。安裝和配置Orchestration服務組件
① 安裝Orchestrationsudo apt-get install heat-api heat-api-cfn heat-engine
② 修改配置文件
sudo vi /etc/heat/heat.conf
。
注:將HEAT_DBPASS
、HEAT_PASS
、HEAT_DOMAIN_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據訪問連接:[database] connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[keystone_authtoken]
、[trustee]
、[clients_keystone]
和[ec2authtoken]
處配置認證服務訪問:[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = heat password = HEAT_PASS [trustee] auth_plugin = password auth_url = http://controller:35357 username = heat password = HEAT_PASS user_domain_name = default [clients_keystone] auth_uri = http://controller:35357 [ec2authtoken] auth_uri = http://controller:5000
在
[DEFAULT]
處配置元數據和等待條件URLs[DEFAULT] heat_metadata_server_url = http://controller:8000 heat_waitcondition_server_url = http://controller:8000/v1/waitcondition
在
[DEFAULT]
處配置stack域和管理證書:[DEFAULT] stack_domain_admin = heat_domain_admin stack_domain_admin_password = HEAT_DOMAIN_PASS stack_user_domain_name = heat
③ 將配置信息寫入Orchestration服務數據庫
heat
su root su -s /bin/sh -c "heat-manage db_sync" heat
重啓服務,完成安裝
sudo service heat-api restart sudo service heat-api-cfn restart sudo service heat-engine restart
驗證編排服務是否安裝配置正確
① 在Controller節點上設置OpenStack示例用戶admin
的環境變量source ~/.openstack/.admin-openrc
② 列出服務組件,驗證每個進程是否成功啓動和註冊
openstack orchestration service list
4.11 計量服務配置(Telemetry Service - Ceilometer)
提供監控和計量功能,提供OpenStack雲計算的賬單,性能指標,擴展性和滿意度的調查表。
4.11.1 Telemetry Data Collection Service (Ceilometer)
部署節點:Controller Node
爲Telemetry服務創建數據庫、服務證書、API端點
① 在MongoDB
中創建數據庫ceilometer
注:將CEILOMETER_DBPASS
替換爲前面設計的實際密碼sudo mongo --host controller --eval ' db = db.getSiblingDB("ceilometer"); db.createUser({user: "ceilometer", pwd: "CEILOMETER_DBPASS", roles: [ "readWrite", "dbAdmin" ]})'
注:若執行失敗,則可能是未授權插入用戶,需要在
/etc/mongodb.conf
中臨時註釋掉授權項auth
,然後重啓MongoDB數據庫,重新執行命令。
② 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
③ 在OpenStack中創建一個
ceilometer
用戶openstack user create --domain default --password-prompt ceilometer
輸入用戶
ceilometer
的密碼CEILOMETER_PASS
(將CEILOMETER_PASS
替換爲前面設計的實際密碼)。
④ 將admin
角色授予ceilometer
用戶openstack role add --project service --user ceilometer admin
⑤ 創建
ceilometer
服務實體openstack service create --name ceilometer --description "Telemetry" metering
⑥ 創建Telemetry服務API路徑
openstack endpoint create --region RegionOne metering public http://controller:8777 openstack endpoint create --region RegionOne metering internal http://controller:8777 openstack endpoint create --region RegionOne metering admin http://controller:8777
安裝和配置Telemetry服務組件
① 安裝Telemetrysudo apt-get install ceilometer-api ceilometer-collector ceilometer-agent-central ceilometer-agent-notification python-ceilometerclient
② 修改配置文件
sudo vi /etc/ceilometer/ceilometer.conf
。
注:將CEILOMETER_DBPASS
、CEILOMETER_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據訪問連接:[database] connection = mongodb://ceilometer:CEILOMETER_DBPASS@controller:27017/ceilometer
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置認證服務訪問:[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = ceilometer password = CEILOMETER_PASS
在
[service_credentials]
處配置服務證書[service_credentials] auth_type = password auth_url = http://controller:5000/v3 project_domain_name = default user_domain_name = default project_name = service username = ceilometer password = CEILOMETER_PASS interface = internalURL region_name = RegionOne
重啓服務,完成安裝
sudo service ceilometer-agent-central restart sudo service ceilometer-agent-notification restart sudo service ceilometer-api restart sudo service ceilometer-collector restart
部署節點:Controller Node
啓用鏡像服務計量
① 修改配置文件sudo vi /etc/glance/glance-api.conf
和sudo vi /etc/glance/glance-registry.conf
在[DEFAULT]
、[oslo_messaging_notifications]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_notifications] driver = messagingv2 [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
② 重啓服務,完成安裝
sudo service glance-registry restart sudo service glance-api restart
部署節點:Compute Node
啓用計算服務計量
① 在Compute節點上安裝計量服務代理sudo apt-get install ceilometer-agent-compute
② 修改配置文件
sudo vi /etc/ceilometer/ceilometer.conf
注:將RABBIT_PASS
和CEILOMETER_PASS
替換爲前面設計的實際密碼
在[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置認證服務訪問:[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = ceilometer password = CEILOMETER_PASS
在
[service_credentials]
處配置服務證書[service_credentials] auth_url = http://controller:5000/v2.0 username = ceilometer project_name = service password = CEILOMETER_PASS interface = internalURL region_name = RegionOne
配置計算服務使用計量服務
修改配置文件sudo vi /etc/nova/nova.conf
,在[DEFAULT]
處配置通知信息:[DEFAULT] instance_usage_audit = True instance_usage_audit_period = hour notify_on_state_change = vm_and_task_state notification_driver = messagingv2
重啓服務,完成安裝
sudo service ceilometer-agent-compute restart sudo service nova-compute restart
啓用塊存儲服務計量
① 修改配置文件sudo vi /etc/cinder/cinder.conf
注:在Controller和BlockStorage節點上都要修改。
在[oslo_messaging_notifications]
處配置消息通知驅動[oslo_messaging_notifications] driver = messagingv2
② 在Controller節點上重啓服務
sudo service cinder-api restart sudo service cinder-scheduler restart
③ 在BlockStorage節點上重啓服務
sudo service cinder-volume restart
啓用對象存儲服務計量
計量服務通過輪詢和通知相結合的方式收集對象存儲計量信息。
① 在Controller節點上創建角色ResellerAdmin
,並將該角色授予ceilometer
用戶source ~/.openstack/.admin-openrc openstack role create ResellerAdmin openstack role add --project service --user ceilometer ResellerAdmin
② 安裝計量服務中間件
sudo apt-get install python-ceilometermiddleware
③ 修改配置文件
sudo vi /etc/swift/proxy-server.conf
注:該步驟需要在Controller節點和其他運行對象存儲代理服務的節點上執行。
在[filter:keystoneauth]
處添加ResellerAdmin
角色:[filter:keystoneauth] operator_roles = admin, user, ResellerAdmin
在
[pipeline:main]
處添加ceilometer`:[pipeline:main] pipeline = ceilometer catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
在
[filter:ceilometer]
處配置通知服務:
注:將RABBIT_PASS
替換爲前面設計的實際密碼[filter:ceilometer] paste.filter_factory = ceilometermiddleware.swift:filter_factory control_exchange = swift url = rabbit://openstack:RABBIT_PASS@controller:5672/ driver = messagingv2 topic = notifications log_level = WARN
④ 重啓對象存儲代理服務
sudo service swift-proxy restart
4.11.2 Telemetry Alarming Service (Aodh)
部署節點:Controller
爲Telemetry Alarming服務創建數據庫、服務證書、API端點
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
aodh
數據庫CREATE DATABASE aodh;
③ 授予
aodh
數據庫適當權限
注:將AODH_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'localhost' IDENTIFIED BY 'AODH_DBPASS'; GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'%' IDENTIFIED BY 'AODH_DBPASS';
④ 設置OpenStack中
admin
用戶環境變量source ~/.openstack/.admin-openrc
⑤ 在OpenStack中創建一個
aodh
用戶openstack user create --domain default --password-prompt aodh
輸入用戶
aodh
的密碼AODH_PASS
(將AODH_PASS
替換爲前面設計的實際密碼)。
⑥ 將admin
角色授予aodh
用戶openstack role add --project service --user aodh admin
⑦ 創建
aodh
服務實體openstack service create --name aodh --description "Telemetry" alarming
⑧ 創建Alarming服務API路徑
openstack endpoint create --region RegionOne alarming public http://controller:8042 openstack endpoint create --region RegionOne alarming internal http://controller:8042 openstack endpoint create --region RegionOne alarming admin http://controller:8042
安裝配置Telemetry Alarming服務組件
① 安裝組件sudo apt-get install aodh-api aodh-evaluator aodh-notifier aodh-listener aodh-expirer python-ceilometerclient
② 修改配置文件
sudo vi /etc/aodh/aodh.conf
注:將AODH_DBPASS
、AODH_PASS
和RABBIT_PASS
替換爲前面設計的實際密碼。
在[database]
處配置數據訪問連接:[database] connection = mysql+pymysql://aodh:AODH_DBPASS@controller/aodh
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[DEFAULT]
和[keystone_authtoken]
處配置認證服務訪問:[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = aodh password = AODH_PASS
在
[service_credentials]
處配置服務證書[service_credentials] auth_type = password auth_url = http://controller:5000/v3 project_domain_name = default user_domain_name = default project_name = service username = aodh password = AODH_PASS interface = internalURL region_name = RegionOne
③ 修改配置文件
sudo vi /etc/aodh/api_paste.ini
修改[filter:authtoken]
如下:[filter:authtoken] oslo_config_project = aodh
④ 重啓Alarming服務
sudo service aodh-api restart sudo service aodh-evaluator restart sudo service aodh-notifier restart sudo service aodh-listener restart
驗證Telemetry服務是否安裝配置正確
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 列出可用計量信息
ceilometer meter-list`
③ 利用鏡像服務下載鏡像
CirrOS
IMAGE_ID=$(glance image-list | grep 'cirros' | awk '{ print $2 }') glance image-download $IMAGE_ID > /tmp/cirros.img
④ 重新列出可用計量信息,驗證上一步鏡像下載計量信息
ceilometer meter-list
⑤ 從
image.download meter
中檢索用量統計信息ceilometer statistics -m image.download -p 60
⑥ 刪除下載的臨時測試鏡像
sudo rm /tmp/cirros.img
4.12 數據庫服務配置(Database Service - Trove)
4.12.1 Database Service(Trove)
部署節點:Controller
爲Database服務創建數據庫、服務證書、API端點
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
trove
數據庫CREATE DATABASE trove;
③ 授予
trove
數據庫適當權限
注:將TROVE_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' IDENTIFIED BY 'TROVE_DBPASS'; GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' IDENTIFIED BY 'TROVE_DBPASS';
④ 設置OpenStack中
admin
用戶環境變量source ~/.openstack/.admin-openrc
⑤ 在OpenStack中創建一個
trove
用戶openstack user create --domain default --password-prompt trove
輸入用戶
trove
的密碼TROVE_PASS
(將TROVE_PASS
替換爲前面設計的實際密碼)。
⑥ 將admin
角色授予trove
用戶openstack role add --project service --user trove admin
⑦ 創建
trove
服務實體openstack service create --name trove --description "Database" database
⑧ 創建Database服務API路徑
openstack endpoint create --region RegionOne database public http://controller:8779/v1.0/%\(tenant_id\)s openstack endpoint create --region RegionOne database internal http://controller:8779/v1.0/%\(tenant_id\)s openstack endpoint create --region RegionOne database admin http://controller:8779/v1.0/%\(tenant_id\)s
安裝配置Database服務組件
① 安裝組件sudo apt-get update sudo apt-get install python-trove python-troveclient python-glanceclient trove-common trove-api trove-taskmanager trove-conductor
② 在目錄
/etc/trove
下,修改文件trove.conf
、trove-taskmanager.conf
和trove-conductor.conf
,對於每個文件,執行下面步驟。
注:將TROVE_DBPASS
和RABBIT_PASS
替換爲前面設計的實際密碼
在[DEFAULT]
和[database]
處修改如下項的值:[DEFAULT] log_dir = /var/log/trove trove_auth_url = http://controller:5000/v2.0 nova_compute_url = http://controller:8774/v2 cinder_url = http://controller:8776/v1 swift_url = http://controller:8080/v1/AUTH_ notifier_queue_hostname = controller [database] connection = mysql://trove:TROVE_DBPASS@controller/trove
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
③ 檢查
api-paste.ini
是否在/etc/trove
目錄下ll /etc/trove
④ 修改配置文件
sudo vi /etc/trove/trove.conf
,檢查確認下面所列設置項的值。
注:將TROVE_PASS
替換爲前面設計的實際密碼[DEFAULT] auth_strategy = keystone add_addresses = True network_label_regex = .* api_paste_config = /etc/trove/api-paste.ini [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = trove password = TROVE_PASS
⑤ 修改配置文件
sudo vi /etc/trove/trove-taskmanager.conf
,檢查確認下面所列設置項的值。
注:將ADMIN_PASS
替換爲前面設計的實際密碼[DEFAULT] nova_proxy_admin_user = admin nova_proxy_admin_pass = ADMIN_PASS nova_proxy_admin_tenant_name = service taskmanager_manager = trove.taskmanager.manager.Manager
⑥ 修改配置文件
sudo vi /etc/trove/trove-guestagent.conf
,檢查確認下面所列設置項的值。
注:將RABBIT_PASS
和ADMIN_PASS
替換爲前面設計的實際密碼rabbit_host = controller rabbit_password = RABBIT_PASS nova_proxy_admin_user = admin nova_proxy_admin_pass = ADMIN_PASS nova_proxy_admin_tenant_name = service trove_auth_url = http://controller:35357/v2.0
⑦ 將配置信息寫入
trove
數據庫su root su -s /bin/sh -c "trove-manage db_sync" trove
注:若報錯:
InternalError: (pymysql.err.InternalError) (1832, u"Cannot change column 'datastore_version_id': used in a foreign key constraint 'instances_ibfk_1'") [SQL: u'\nALTER TABLE instances CHANGE COLUMN datastore_version_id datastore_version_id VARCHAR(36) NOT NULL']
原因是MariaDB 10.0+中對外鍵約束列變更時要求更嚴。一種變通的解決方案如下:
首先,關閉外鍵約束檢查功能:mysql -uroot -p use trove; SET GLOBAL foreign_key_checks=0;
然後,重新執行上述命令。最後,在開啓外鍵約束檢查功能。
mysql -uroot -p use trove; SET GLOBAL foreign_key_checks=1;
參考鏈接:https://bugs.launchpad.net/trove/+bug/1473226
⑧ 重啓服務完成安裝
由於Ubuntu安裝包存在一個BUG,需要修改/etc/init/trove-taskmanager.conf
和/etc/init/trove-conductor.conf
文件。
在上述兩個文件中,分別找到如下位置:exec start-stop-daemon --start --chdir /var/lib/trove \ --chuid trove:trove --make-pidfile --pidfile /var/run/trove/trove-taskmanager.pid \ --exec /usr/bin/trove-taskmanager -- ${DAEMON_ARGS}
注意:上述參數中缺少
--config-file
(或者參數配置文件路徑有誤),對兩個文件應修改如下:exec start-stop-daemon --start --chdir /var/lib/trove \ --chuid trove:trove --make-pidfile --pidfile /var/run/trove/trove-taskmanager.pid \ --exec /usr/bin/trove-taskmanager -- \ --config-file=/etc/trove/trove-taskmanager.conf ${DAEMON_ARGS}
exec start-stop-daemon --start --chdir /var/lib/trove \ --chuid trove:trove --make-pidfile --pidfile /var/run/trove/trove-conductor.pid \ --exec /usr/bin/trove-conductor -- \ --config-file=/etc/trove/trove-conductor.conf ${DAEMON_ARGS}
最後,重啓數據庫服務:
sudo service trove-api restart sudo service trove-taskmanager restart sudo service trove-conductor restart
驗證Database服務是否安裝配置正確
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 列出數據庫信息
trove list
③ 添加數據存儲到
trove
選擇一個數據庫類型,如MySQL
、MongoDB
,創建一個trove
鏡像。
參考鏈接:
Building Guest Images for OpenStack Trove
OpenStack Trove 專用鏡像製作
上傳鏡像到Glance:glance image-create --name "mysqlTest" --disk-format qcow2 --container-format bare --file mysql-5.6.qcow2
創建一個數據存儲:
su root su -s /bin/sh -c "trove-manage --config-file /etc/trove/trove.conf datastore_update mysql ''" trove
④ 使用新的鏡像更新數據存儲
su -s /bin/sh -c "trove-manage --config-file /etc/trove/trove.conf datastore_version_update mysql mysql-5.6 mysql glance_image_ID '' 1" trove
⑤ 創建一個數據庫實例
4.12.2 Trove Dashboard
參考鏈接:https://github.com/openstack/trove-dashboard
安裝
Trove Dashboard
查看列表:http://tarballs.openstack.org/trove-dashboardsudo pip install 'http://tarballs.openstack.org/trove-dashboard/trove-dashboard-stable-mitaka.tar.gz'
在
Horizon
中啓用Trove Dashboard
查看Trove Dashboard
安裝路徑:find /usr -name trove_dashboard
cd /usr/local/lib/python2.7/dist-packages/trove_dashboard sudo cp ./enabled/_17*.py /usr/share/openstack-dashboard/openstack_dashboard/local/enabled
重新加載
Apache Web Server
sudo service apache2 reload
4.13 數據處理服務配置(Data Processing Service - Sahara)
4.13.1 Data Processing Service(Sahara)
部署節點:Controller
創建數據庫
sahara
① 以root
用戶登錄MySQLmysql -u root -p
② 創建
sahara
數據庫CREATE DATABASE sahara;
③ 授予
CREATE DATABASE sahara;
數據庫適當權限
注:將SAHARA_DBPASS
替換爲前面設計的實際密碼GRANT ALL PRIVILEGES ON sahara.* TO 'sahara'@'localhost' IDENTIFIED BY 'SAHARA_DBPASS'; GRANT ALL PRIVILEGES ON sahara.* TO 'sahara'@'%' IDENTIFIED BY 'SAHARA_DBPASS';
④ 設置OpenStack中
admin
用戶環境變量source ~/.openstack/.admin-openrc
⑤ 在OpenStack中創建一個
sahara
用戶openstack user create --domain default --password-prompt sahara
輸入用戶
sahara
的密碼SAHARA_PASS
(將SAHARA_PASS
替換爲前面設計的實際密碼)。
⑥ 將admin
角色授予sahara
用戶openstack role add --project service --user sahara admin
⑦ 創建
Sahara Data Processing
服務實體sahara
openstack service create --name sahara --description "Sahara Data Processing" data-processing
⑧ 創建
Sahara Data Processing
服務API路徑openstack endpoint create --region RegionOne data-processing public http://controller:8386/v1.1/%\(tenant_id\)s openstack endpoint create --region RegionOne data-processing internal http://controller:8386/v1.1/%\(tenant_id\)s openstack endpoint create --region RegionOne data-processing admin http://controller:8386/v1.1/%\(tenant_id\)s
安裝配置
sahara
① 安裝sahara
sudo apt-get install sahara
① 修改配置文件
sudo vi /etc/sahara/sahara.conf
注:將SAHARA_DBPASS
和SAHARA_PASS
替換爲前面設計的實際密碼
在[database]
處配置數據庫連接:[database] connection = mysql://sahara:SAHARA_DBPASS@controller/sahara
在
[DEFAULT]
、[keystone_authtoken]
和[paste_deploy]
處,配置身份服務訪問:[DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = sahara password = SAHARA_PASS identity_uri = http://controller:35357 admin_tenant_name = service admin_user = sahara admin_password = SAHARA_PASS [paste_deploy] flavor = keystone
在
[DEFAULT]
處配置網絡服務:[DEFAULT] use_neutron = true use_namespaces=True use_rootwrap=True rootwrap_command='sudo sahara-rootwrap /etc/sahara/rootwrap.conf' use_floating_ips = true verbose = true log_file = sahara.log log_dir = /var/log/sahara
在
[oslo_messaging_notifications]
處配置通知服務:[oslo_messaging_notifications] enable = true driver = messaging
在
[oslo_concurrency]
處配置lock_path
[oslo_concurrency] lock_path = /var/lib/sahara/tmp
在
[DEFAULT]
和[oslo_messaging_rabbit]
處配置RabbitMQ消息隊列訪問:
注:將RABBIT_PASS
替換爲前面設計的實際密碼[DEFAULT] rpc_backend = rabbit [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS
在
[infrastructure_engine]
處配置編排服務:[DEFAULT] infrastructure_engine = heat
在
[service_credentials]
處添加如下內容:[service_credentials] auth_type = password auth_url = http://controller:5000/v3 project_domain_name = default user_domain_name = default project_name = service username = sahara password = SAHARA_PASS interface = internalURL region_name = RegionOne
② 配置MySQL
sudo vi /etc/mysql/mariadb.conf.d/openstack.cnf
,添加如下內容:[mysqld] max_allowed_packet = 256M
重啓數據庫:
sudo service mysql restart
③ 將配置寫入數據庫:
sudo sahara-db-manage --config-file /etc/sahara/sahara.conf upgrade head
④ 啓動
sahara
服務sudo service sahara-api start sudo service sahara-engine start
4.13.2 Sahara Dashboard
參考鏈接:https://github.com/openstack/sahara-dashboard
安裝
Sahara Dashboard
查看列表:http://tarballs.openstack.org/sahara-dashboardsudo pip install 'http://tarballs.openstack.org/sahara-dashboard/sahara-dashboard-stable-mitaka.tar.gz'
在
Horizon
中啓用Sahara Dashboard
查看sahara Dashboard
安裝路徑:find /usr -name sahara_dashboard
cd /usr/local/lib/python2.7/dist-packages/sahara_dashboard sudo cp ./enabled/_18*.py /usr/share/openstack-dashboard/openstack_dashboard/local/enabled
重新加載
Apache Web Server
sudo service apache2 reload
5. 啓動實例
5.1 創建虛擬網絡
部署節點:Controller Node
5.1.1 Provider Network
網絡結構
Provider Network中一個實例通過二層網絡(橋接或交換)來訪問外部網絡,該網絡包含一個DHCP服務器來給實例提供IP地址。
如下圖:創建Provider Network
① 設置OpenStack中admin
用戶環境變量source ~/.openstack/.admin-openrc
② 創建網絡
provider
:neutron net-create --shared --provider:physical_network provider --provider:network_type flat provider
其中,
--shared
設置允許所有項目訪問虛擬網絡,--provider:physical_network provider
和--provider:network_type flat
將扁平虛擬網絡通過Network節點的eth0
口連接到扁平物理網絡。相關配置文件如下:Controller
節點上的/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2_type_flat] flat_networks = provider
Network
節點上的/etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge] physical_interface_mappings = provider:eth0
③ 創建子網
neutron subnet-create --name provider --allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS --dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY provider PROVIDER_NETWORK_CIDR
其中,
START_IP_ADDRESS
和END_IP_ADDRESS
是將分配給實例的子網的起始IP和結束IP地址,需要替換爲實際起始結束IP地址(這個IP地址範圍不能包括任何已存在的活動IP);DNS_RESOLVER
是域名服務器,需替換爲實際DNS服務器IP(可查看DNS服務器配置文件/etc/resolv.conf
);PROVIDER_NETWORK_GATEWAY
是外部網絡網關IP,替換爲實際網關IP。例如,本文執行如下命令創建子網:neutron subnet-create --name provider --allocation-pool start=192.168.1.100,end=192.168.1.200 --dns-nameserver 192.168.1.1 --gateway 192.168.1.1 provider 192.168.1.0/24
5.1.2 Self-Service Network
網絡結構
Self-Service網絡通過NAT
連接到物理網絡,包含一個DHCP服務器爲實例提供IP地址,Self-Service網絡中的實例可自動訪問外部網絡,但外部網絡主機訪問Self-Service網絡中的實例需要配置浮動IP纔可以。其他普通用戶也可以創建Self-Service網絡,因爲該網絡只提供普通用戶項目下實例之間的連通性。
注:創建Self-Service網絡前必須先創建Provider網絡。
網絡結構如下圖:創建Self-Service Network
① 設置OpenStack中demo
用戶環境變量source ~/.openstack/.demo-openrc
② 創建網絡:
neutron net-create selfservice
注:普通用戶在上述命令中無法提供額外參數,相關參數在
Controller
節點上的/etc/neutron/plugins/ml2/ml2_conf.ini
文件中配置:[ml2] tenant_network_types = vxlan [ml2_type_vxlan] vni_ranges = 1:1000
③ 創建子網
neutron subnet-create --name selfservice --dns-nameserver DNS_RESOLVER --gateway SELFSERVICE_NETWORK_GATEWAY selfservice SELFSERVICE_NETWORK_CIDR
注:子網IP段可參考RFC1918中關於私有地址空間的規定,如下
10.0.0.0 - 10.255.255.255 (10/8 prefix) 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
本文采用如下命令創建子網:
neutron subnet-create --name selfservice --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 selfservice 172.16.1.0/24
④ 創建配置虛擬路由器
Self-Service網絡通過虛擬路由器(如實現雙向NAT)連接到Provider網絡。每個虛擬路由器包含至少一個連接到Self-Service網絡的接口和一個位於Provider網絡的網關。Provider網絡必須包含router:external
設置項,以便Self-Service網絡虛擬路由器可連接到外部網絡,可以網絡創建時或創建後添加(必須具有admin
或其他特權用戶權限)。如下:source ~/.openstack/.admin-openrc neutron net-update provider --router:external source ~/.openstack/.demo-openrc neutron router-create router neutron router-interface-add router selfservice neutron router-gateway-set router provider
⑤ 驗證配置是否正確
在Network
節點上執行ip netns
,列出網絡命名空間:qdhcp-20b2a466-cd25-4b9a-9194-2b8005a8b547 (id: 2) qdhcp-e82fd421-79dc-446d-82dc-3cfb5a491644 (id: 1) qrouter-70837112-c3e0-4702-b4e4-ee9ce9cc4b8f (id: 0)
設置
admin
環境變量:source ~/.openstack/.admin-openrc
列出
router
路由器網絡接口,查看連接Provider網絡的網關IP:neutron router-port-list router
可看到
router
路由器連接Provider網絡的網關IP爲192.168.1.101
在Controller節點或其他OpenStack節點或物理主機上ping上述網關:ping -c 4 192.168.1.101
5.2 創建虛擬機類型模板(Flavor)
部署節點:Controller Node
爲
CirrOS
鏡像創建用於測試的虛擬機類型模板m1.nano
。source ~/.openstack/.admin-openrc openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
5.3 生成密鑰對
部署節點:Controller Node
大多數雲平臺鏡像支持公鑰認證而不支持傳統的口令認證,在啓動實例前必須爲計算服務添加一個公鑰。生成密鑰對步驟如下:
設置普通用戶
demo
的認證環境變量source ~/.openstack/.demo-openrc
生成一個密鑰對
ssh-keygen -q -N "" openstack keypair create --public-key ~/.ssh/id_rsa.pub demokey
注:上面可以跳過
ssh-keygen
命令,直接使用已有的公鑰。驗證公鑰對
openstack keypair list
5.4 添加安全組規則
部署節點:Controller Node
默認安全組規則適用於所有實例,並且包含防火牆規則,該防火牆規則拒絕遠程訪問實例。對於Linux鏡像,建議至少允許ICMP (ping)
和secure shell (SSH)
。添加規則到默認安全組步驟如下:
添加規則允許ICMP協議
openstack security group rule create --proto icmp default
添加規則允許
secure shell (SSH)
訪問openstack security group rule create --proto tcp --dst-port 22 default
5.5 啓動實例
部署節點:Controller Node
啓動實例前,至少需要制定虛擬機模板類型、鏡像名稱、網絡、安全組、密鑰對和實例名稱。
設置普通用戶
demo
的認證環境變量source ~/.openstack/.demo-openrc
列出可用虛擬機模板
虛擬機模板指定了處理器、內存、存儲等虛擬資源的分配概況。openstack flavor list
列出可用鏡像
openstack image list
列出可用網路
openstack network list
注:若實例啓動使用Provider網絡
provider
,或者使用Self-Service網絡selfservice
,則必須使用ID代替名稱來使用該網絡名稱。列出可用安全組
openstack security group list
在Provider網絡中啓動實例
注:將PROVIDER_NET_ID
替換爲實際Provider網絡ID。openstack server create --flavor m1.nano --image cirros --nic net-id=PROVIDER_NET_ID --security-group default --key-name demokey provider-instance
獲取Provider網絡
provider
的網絡ID:export PROVIDER_NET_ID=$(openstack network list | awk '/ provider / { print $2 }')
例如本文采用如下命令啓動實例:
openstack server create --flavor m1.nano --image cirros --nic net-id=$PROVIDER_NET_ID --security-group default --key-name demokey provider-instance-cirros
在Self-Service網絡中啓動實例
注:將SELFSERVICE_NET_ID
替換爲實際Self-Service網絡ID。openstack server create --flavor m1.nano --image cirros --nic net-id=SELFSERVICE_NET_ID --security-group default --key-name demokey selfservice-instance
獲取Self-Service網絡
selfservice
的網絡ID:export SELFSERVICE_NET_ID=$(openstack network list | awk '/ selfservice / { print $2 }')
例如本文采用如下命令啓動實例:
openstack server create --flavor m1.nano --image cirros --nic net-id=$SELFSERVICE_NET_ID --security-group default --key-name demokey selfservice-instance-cirros
查看實例狀態
openstack server list
使用虛擬控制檯訪問實例
① 獲取一個Virtual Network Computing (VNC)
會話URL,通過Web瀏覽器訪問該URL。controller@controller:~$ openstack console url show provider-instance-cirros +-----+-------------------------------------------------------------------------------+ |Field| Value | +-----+-------------------------------------------------------------------------------+ |type | novnc | | url |http://controller:6080/vnc_auto.html?token=5ed8f684-7ee5-4c10-aa5d-6bbd8f55cd1f| +-----+-------------------------------------------------------------------------------+ controller@controller:~$ openstack console url show selfservice-instance-cirros +-----+-------------------------------------------------------------------------------+ |Field| Value | +-----+-------------------------------------------------------------------------------+ |type | novnc | | url |http://controller:6080/vnc_auto.html?token=ba0af1cb-83b6-4757-8b58-8951d4933ff9| +-----+-------------------------------------------------------------------------------+
注:若客戶端主機無法解析
controller
可在客戶機hosts文件中添加對應規則,或者直接將controller
替換爲對應IP地址。
② 通過Web瀏覽器訪問上述URL,輸入用戶密碼(cirros/cubswin:)
),進入Cirros系統後,驗證網絡連通性。
對於Provider網絡虛擬機:ping -c 4 192.168.1.1 ping -c 4 openstack.org ifconfig -a
對於Self-Service網絡虛擬機:
ping -c 4 172.16.1.1 ping -c 4 openstack.org ifconfig -a
遠程訪問實例
對於Provider網絡虛擬機:
① 在Controller節點或其他任何位於物理網絡中的節點上,測試能否連通實例。ping -c 4 192.168.1.102
② 使用SSH訪問實例
ssh cirros@192.168.1.102
對於Self-Service網絡虛擬機:
③ 在Provider虛擬網絡中創建浮動IPopenstack ip floating create provider
④ 將上述浮動IP和實例相關聯
openstack ip floating add 192.168.1.103 selfservice-instance-cirros
⑤ 查看浮動IP綁定狀態
openstack server list
⑥ 在Controller節點或其他任何位於物理網絡中的節點上,驗證浮動IP能否連通
ping -c 4 192.168.1.103
⑦ 使用SSH訪問實例
ssh cirros@192.168.1.103
5.6 測試塊存儲服務
部署節點:Controller Node
創建一個卷
① 設置普通用戶demo
的環境變量source ~/.openstack/.demo-openrc
② 創建一個1GB的卷
openstack volume create --size 1 volume1
③ 列出可用卷
openstack volume list
將一個卷添加到指定實例
① 添加捲到實例
注:將INSTANCE_NAME
和VOLUME_NAME
替換爲實際實例名和卷名。openstack server add volume INSTANCE_NAME VOLUME_NAME
例如,本文執行如下命令添加捲到實例:
openstack server add volume provider-instance-cirros volume1
② 查看卷狀態
openstack volume list
③ 通過SSH登錄實例,使用
fdisk
命令驗證新添加的卷設備/dev/sdb
ssh cirros@192.168.1.102 sudo fdisk -l
注:在使用卷之前,必須在塊設備上創建文件系統並將其掛載到系統中。
5.7 測試編排服務
部署節點:Controller Node
創建一個模板
編排服務採用模板來設計棧。創建文件demo-template.yml
,添加如下內容:heat_template_version: 2015-10-15 description: Launch a basic instance with CirrOS image using the ``m1.nano`` flavor, ``demokey`` key, and one network. parameters: NetID: type: string description: Network ID to use for the instance. resources: server: type: OS::Nova::Server properties: image: cirros flavor: m1.nano key_name: demokey networks: - network: { get_param: NetID } outputs: instance_name: description: Name of the instance. value: { get_attr: [ server, name ] } instance_ip: description: IP address of the instance. value: { get_attr: [ server, first_address ] }
創建一個棧
① 設置普通用戶demo
的環境變量source ~/.openstack/.demo-openrc
② 查看可用網絡:
openstack network list
③ 設置環境變量
NET_ID
,如下將NET_ID
設置爲provider
網絡ID:export NET_ID=$(openstack network list | awk '/ provider / { print $2 }')
④ 在
provider
網絡中創建含有一個Cirros實例的棧openstack stack create -t demo-template.yml --parameter "NetID=$NET_ID" stack
⑤ 列出可用棧
openstack stack list
⑥ 查看實例名和IP,和OpenStack客戶端輸出信息作比較
controller@controller:~$ openstack stack output show --all stack +---------------+-------------------------------------------------+ | Field | Value | +---------------+-------------------------------------------------+ | instance_name | { | | | "output_value": "stack-server-zxf6yokswyje", | | | "output_key": "instance_name", | | | "description": "Name of the instance." | | | } | | instance_ip | { | | | "output_value": "192.168.1.104", | | | "output_key": "instance_ip", | | | "description": "IP address of the instance." | | | } | +---------------+-------------------------------------------------+
⑦ 查看OpenStack客戶端信息
openstack server list
⑧ 刪除棧
openstack stack delete --yes stack
5.8 測試共享文件系統服務
部署節點:Controller Node
創建服務鏡像
根據傳統的部署方式,需要從一個支持諸如NFS/CIFS等網絡文件系統的鏡像中創建一個實例,來評估共享文件系統。本文爲了降低資源要求,測試實例採用CirrOS
鏡像,但CirrOS
鏡像不支持網絡文件系統。爲了評估共享文件系統服務,本文采用支持網絡文件系統的manila-share-service
鏡像創建一個普通實例,通過限制內存爲256MB來減少對資源的消耗。
① 下載manila-share-service
鏡像wget http://tarballs.openstack.org/manila-image-elements/images/manila-service-image-master.qcow2
② 設置普通用戶
admin
的環境變量source ~/.openstack/.admin-openrc
③ 添加鏡像到鏡像服務
openstack image create "manila-service-image" --file manila-service-image-master.qcow2 --disk-format qcow2 --container-format bare --public
③ 爲支持上述鏡像服務創建一個新的模板類型
openstack flavor create manila-service-flavor --id 100 --ram 256 --disk 0 --vcpus 1
創建共享
根據共享文件系統服務配置時選擇的模式,本文采用需要共享驅動器支持的共享服務器管理模式,因此創建一個需要共享服務器管理支持的共享。在創建共享之前,啓用DHSS模式的通用驅動需要定義至少一個鏡像、一個類型模板、一個網絡和一個共享網絡(用於創建提供NFS/CIFS服務的共享服務器)。步驟如下:
① 創建共享類型
設置普通用戶admin
的環境變量:source ~/.openstack/.admin-openrc
創建啓用DHSS的默認共享類型:
manila type-create generic_share_type True
② 創建共享網絡
設置普通用戶demo
的環境變量:source ~/.openstack/.demo-openrc
列出可用網絡,獲取Self-Service網絡
selfservice
的網絡ID及其子網ID:neutron net-list
獲取
selfservice
網絡ID:export SELFSERVICE_NET_ID=$(openstack network list | awk '/ selfservice / { print $2 }')
獲取
selfservice
子網ID:export SELFSERVICE_SUBNET_ID=$(openstack subnet list | awk '/ selfservice / { print $2 }')
利用
selfservice
網絡ID和子網ID創建共享網絡:manila share-network-create --name selfservice-net-share1 --neutron-net-id $SELFSERVICE_NET_ID --neutron-subnet-id $SELFSERVICE_SUBNET_ID
③ 創建共享
設置普通用戶demo
的環境變量:source ~/.openstack/.demo-openrc
利用共享網絡創建一個NFS共享:
manila create NFS 1 --name share2 --share-network selfservice-net-share1 --share-type generic_share_type
查看可用共享,等待一段時間,新創建的共享狀態將從
creating
變爲available
:manila list
注:若創建共享出錯,可參考6.11
創建支持NFS的測試實例
① 獲取Self-Service網絡selfservice
的網絡ID:export SELFSERVICE_NET_ID=$(openstack network list | awk '/ selfservice / { print $2 }')
② 啓動實例:
openstack server create --flavor manila-service-flavor --image manila-service-image --nic net-id=$SELFSERVICE_NET_ID --security-group default --key-name demokey selfservice-instance-manila
③ 查看實例狀態
openstack server list
④ 使用虛擬控制檯訪問實例
獲取一個Virtual Network Computing (VNC)
會話URL,通過Web瀏覽器訪問該URL。controller@controller:~$ openstack console url show selfservice-instance-manila | awk '/ url / { print $4 }' http://controller:6080/vnc_auto.html?token=2d11eb78-f15c-4e55-a9ef-9efe5ae33ea2
注:用戶名密碼均爲
manila
掛載共享到測試實例
① 在嘗試通過網絡掛載共享前,配置使實例可以訪問新建共享:manila access-allow share2 ip INSTANCE_IP_ADDRESS
注:將
INSTANCE_IP_ADDRESS
替換爲selfservice
網絡實例IP地址(本文此處可用實例selfservice-instance-manila
的IP地址)
② 確定共享的對外IP地址:manila show share2 | grep path
例如,本文得到的
path
爲:10.254.0.22:/shares/share-fc9f6166-f2ee-4785-ba24-d7e7a598e161
。
③ 在測試實例selfservice-instance-manila
上創建一個掛載點mkdir ~/test_folder
④ 根據共享地址在實例上掛載NFS共享,在測試實例上執行如下掛載命令:
sudo mount -t nfs 10.254.0.22:/shares/share-fc9f6166-f2ee-4785-ba24-d7e7a598e161 ~/test_folder
6. 遇到的問題
6.1 安裝MariaDB時mariadb.cnf
配置問題
問題
安裝MySQL後卸載,刪除/etc/mysql/
下所有文件,重新安裝MariaDB時報錯。
問題 ①:找不到配置文件mariadb.cnf
Setting up mariadb-common (10.0.24-7) ... update-alternatives: error: alternative path /etc/mysql/mariadb.cnf doesn't exist dpkg: error processing package mariadb-common (--configure): subprocess installed post-installation script returned error exit status 2 Errors were encountered while processing: mariadb-common E: Sub-process /usr/bin/dpkg returned an error code (1)
問題 ②: 依賴包
mariadb-server-10.0
未配置Setting up libhttp-message-perl (6.11-1) ... dpkg: dependency problems prevent configuration of mariadb-server: mariadb-server depends on mariadb-server-10.0 (>= 10.0.24-7); however: Package mariadb-server-10.0 is not configured yet. dpkg: error processing package mariadb-server (--configure):No apport report written because the error message indicates its a followup error from a previous failure. dependency problems - leaving unconfigured Processing triggers for libc-bin (2.23-0ubuntu3) ... Errors were encountered while processing: mariadb-server-10.0 mariadb-server E: Sub-process /usr/bin/dpkg returned an error code (1)
原因
問題 ①: 重裝MariaDB時將配置文件刪除,導致找不到配置文件mariadb.cnf
。解決方法
問題 ①: 在/etc/mysql/
下新建一個mariadb.cnf
文件,或者從別的電腦上拷貝一個mariadb.cnf
到該目錄。
問題 ②: 徹底清除配置文件,刪除軟件,重新安裝。sudo service mysql stop sudo apt-get purge mysql* mariadb* sudo apt autoremove sudo rm -r /var/lib/mysql sudo rm -r /var/log/mysql sudo rm -r /etc/mysql sudo reboot sudo apt-get install mariadb-server
6.2 MariaDB監聽地址無法綁定到指定IP
問題
在/etc/mysql/conf.d/openstack.cnf
中指定了bind_address = 10.0.0.11
,但是netstat -ntlp
顯示MySQL仍然綁定在地址127.0.0.1
,導致其他節點無法訪問數據庫。原因
① 查看mysqld默認參數,執行:/usr/sbin/mysqld --print-defaults
/usr/sbin/mysqld would have been started with the following arguments: --bind-address=10.0.0.11 --default-storage-engine=innodb --innodb_file_per_table --collation-server=utf8_general_ci --character-set-server=utf8 --log-error --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --bind-address=127.0.0.1 --key_buffer_size=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=10 --max_binlog_size=100M --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
發現參數開頭是自定義配置信息,後面又添加了其他參數被覆蓋了
② 啓動mysql服務,查看後臺進程,如下:root 28195 1 0 18:31 ? 00:00:00 /bin/bash /usr/bin/mysqld_safe root 28196 1 0 18:31 ? 00:00:00 logger -p daemon err -t /etc/init.d/mysql -i mysql 28360 28195 0 18:31 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-error --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 root 28361 28195 0 18:31 ? 00:00:00 logger -t mysqld -p daemon error
發現服務啓動時候傳入的參數和上一步查到的默認參數不一致,而且添加了
--skip-log-error
,導致/var/log/mysql/error.log
不再記錄錯誤信息。
③ 查看/etc/mysql/mariadb.cnf
可以看到配置文件加載順序:The MariaDB/MySQL tools read configuration files in the following order: 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults, 2. "/etc/mysql/conf.d/*.cnf" to set global options. 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options. 4. "~/.my.cnf" to set user-specific options.
發現
/etc/mysql/mariadb.conf.d/
下的50-server.cnf
和50-mysqld_safe.cnf
文件中設置了默認配置信息,根據加載順序,覆蓋了/etc/mysql/conf.d/
下的配置信息。解決方法
根據需要修改50-server.cnf
和50-mysqld_safe.cnf
即可。
6.3 neutron-l3-agent無法啓動且日誌文件不更新
問題
neutron-l3-agent
無法啓動,日誌文件/var/log/neutron/neutron-l3-agent.log
沒有記錄任何信息。原因
① 查看日誌/var/log/neutron/neutron-l3-agent.log
發現報錯信息如下:5400 ERROR neutron.agent.l3.agent [-] An interface driver must be specified l3-agent cannot check service plugins enabled on the neutron server
造成這個錯誤的原因是,第一次誤將
neutron-server
和neutron-plugin-ml2
安裝在Network
節點上,導致找不到服務。
解決方法:
將neutron-server
和neutron-plugin-ml2
重新安裝在Controller
節點即可。② 在執行
sudo service neutron-l3-agent restart
啓動後,迅速執行ps -ef | grep neutron-l3-agent
,可以看到後臺進程信息,如下:network@network:~$ ps -ef | grep neutron-l3-agent neutron 7269 1 30 21:38 ? 00:00:01 /usr/bin/python /usr/bin/neutron-l3-agent --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/l3_agent.ini --config-file=/etc/neutron/fwaas_driver.ini --log-file=/var/log/neutron/neutron-l3-agent.log network 7284 2453 0 21:38 pts/0 00:00:00 grep --color=auto neutron-l3-agent
③ 從上一步獲取
neutron-l3-agent
啓動命令行參數,手動執行啓動,如下,獲取啓動錯誤信息:root@network:/var/log/neutron# /usr/bin/python /usr/bin/neutron-l3-agent --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/l3_agent.ini --config-file=/etc/neutron/fwaas_driver.ini --log-file=/var/log/neutron/neutron-l3-agent.log Guru mediation now registers SIGUSR1 and SIGUSR2 by default for backward compatibility. SIGUSR1 will no longer be registered in a future release, so please use SIGUSR2 to generate reports. Traceback (most recent call last): File "/usr/bin/neutron-l3-agent", line 10, in <module> sys.exit(main()) File "/usr/lib/python2.7/dist-packages/neutron/cmd/eventlet/agents/l3.py", line 17, in main l3_agent.main() File "/usr/lib/python2.7/dist-packages/neutron/agent/l3_agent.py", line 51, in main common_config.init(sys.argv[1:]) File "/usr/lib/python2.7/dist-packages/neutron/common/config.py", line 243, in init **kwargs) File "/usr/lib/python2.7/dist-packages/oslo_config/cfg.py", line 2164, in __call__ raise ConfigFilesNotFoundError(self._namespace._files_not_found) oslo_config.cfg.ConfigFilesNotFoundError: Failed to find some config files: /etc/neutron/fwaas_driver.ini
④ 由最後一行可發現是找不到文件
/etc/neutron/fwaas_driver.ini
導致無法啓動的。這是因爲之前爲了重新安裝,刪除了Network
節點上的部署的neutron
相關的所有組件,並刪除了/etc/neutron/
下所有配置文件。重新安裝後導致缺失/etc/neutron/fwaas_driver.ini
,從而導致neutron-l3-agent
無法啓動且日誌文件/var/log/neutron/neutron-l3-agent.log
沒有記錄任何信息。解決方法
從Controller
節點拷貝一份到Network
節點,執行命令:sudo scp controller@controller:/etc/neutron/fwaas_driver.ini /etc/neutron/fwaas_driver.ini
輸入
controller
用戶密碼,完成拷貝。
爲了保持權限一致,查看fwaas_driver.ini
在Controller
節點上的權限:controller@controller:~$ ll /etc/neutron/fwaas_driver.ini -rw-r--r-- 1 root neutron 149 Apr 8 08:15 /etc/neutron/fwaas_driver.ini network@network:~$ ll /etc/neutron/fwaas_driver.ini -rw-r--r-- 1 root root 149 May 30 22:14 /etc/neutron/fwaas_driver.ini network@network:~$ sudo chgrp neutron /etc/neutron/fwaas_driver.ini network@network:~$ ll /etc/neutron/fwaas_driver.ini -rw-r--r-- 1 root neutron 149 May 30 22:14 /etc/neutron/fwaas_driver.ini
6.4 Apache服務無法啓動
問題
執行sudo service apache2 start
發現Apache服務無法啓動,2016-07-24 17:55:29.873 112434 CRITICAL keystone [req-8a1299fa-c406-4d70-bd33-9b8eb509a76d - - - - -] error: [Errno 98] Address already in use
原因
官方安裝文檔中的關閉keystone
服務的方法不起作用,重啓後 默認keystone
服務未禁止自啓動,已經監聽端口5000和35357,發生衝突。可執行ps -ef | grep keystone
查看keystone
服務進程信息。解決方法
① 安裝sysv-rc-conf
sudo apt-get install sysv-rc-conf
查看系統運行級別
who -r
② 執行sudo sysv-rc-conf
可看到keystone
默認運行級別爲2345
,取消選中。
參考:http://blog.163.com/thinki_cao/blog/static/839448752012112694037995/
③ 修改啓動配置文件sudo vi /etc/init/keystone.conf
,將start on runlevel [2345]
修改爲start on runlevel []
③ 重新啓動服務sudo reboot
④ 若重啓後發現默認
keystone
服務仍然自動啓動,可執行sudo service keystone stop sudo rm /lib/systemd/system/keystone.service sudo rm /etc/systemd/system/multi-user.target.wants/keystone.service sudo reboot
6.5 雲主機狀態錯誤,無法啓動
問題
創建雲主機,狀態錯誤,無法啓動,提示NoValidHost: No valid host was found. There are not enough hosts available.
。查看日誌sudo /var/log/nova/nova-conductor.log
2016-07-19 10:48:36.873 12190 WARNING nova.scheduler.utils [req-7233346a-5a7d-4af0-9f3d-39d23b567984 905f5309838b4839bdebc2c400488f87 22b3450f6e734442a155ad56ce2382d7 - - -] [instance: fa47a094-d1b5-41ab-9636-780025afb273] Setting instance to ERROR state. 2016-07-19 11:35:03.463 12188 ERROR nova.scheduler.utils [req-a47318b9-a386-41bc-a527-d6764d2b9917 905f5309838b4839bdebc2c400488f87 22b3450f6e734442a155ad56ce2382d7 - - -] [instance: 2d1f1eba-2034-4515-9382-9c75436da40d] Error from last host: compute (node compute): [u'Traceback (most recent call last):\n', u' File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 1926, in _do_build_and_run_instance\n filter_properties)\n', u' File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2116, in _build_and_run_instance\n instance_uuid=instance.uuid, reason=six.text_type(e))\n', u"RescheduledException: Build of instance 2d1f1eba-2034-4515-9382-9c75436da40d was re-scheduled: Request Failed: internal server error while processing your request.\nNeutron server returns request_ids: ['req-822378f2-1544-4f73-88fd-34de66547565']\n"] 2016-07-19 11:35:03.546 12188 WARNING nova.scheduler.utils [req-a47318b9-a386-41bc-a527-d6764d2b9917 905f5309838b4839bdebc2c400488f87 22b3450f6e734442a155ad56ce2382d7 - - -] Failed to compute_task_build_instances: No valid host was found. There are not enough hosts available. ...... NoValidHost: No valid host was found. There are not enough hosts available.
原因
在controller
節點上,/etc/neutron/neutron.conf
文件中未指定lock_path
,發生網絡服務neutron異常,無法訪問目標主機。解決方法
參考下面 6.6
6.6 創建路由失敗,缺少lock_path
問題
controller@controller:~$ neutron router-interface-add router selfservice Request Failed: internal server error while processing your request. Neutron server returns request_ids: ['req-0dbe9380-5c83-48ec-b012-a1f258ef3e0d']
原因
未指定lock_path
在controller
節點上,查看日誌sudo vi /var/log/neutron/neutron-server.log
2016-07-19 19:25:36.734 15677 ERROR oslo_messaging.rpc.dispatcher [req-adc3fe7b-9fcf-4280-8a0b-b98d018be7b2 - - - - -] Exception during message handling: value required for option: lock_path 2016-07-19 19:25:36.734 15677 ERROR oslo_messaging.rpc.dispatcher RequiredOptError: value required for option: lock_path
解決方法
在controller
節點上,修改配置文件sudo vi /etc/neutron/neutron.conf
,在[oslo_concurrency]
處添加如下內容[oslo_concurrency] lock_path = /var/lib/neutron/tmp
將修改寫入數據庫,重啓服務
su root su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron sudo service neutron-server restart
6.7 bridge-nf-call-arptables
不存在
問題
查看日誌sudo vi /var/log/neutron/neutron-linuxbridge-agent.log
,顯示錯誤:2016-07-19 19:52:01.365 6194 ERROR neutron.agent.linux.utils [req-b8081842-66f0-487e-91c0-62127d7830f2 - - - - -] Exit code: 255; Stdin: ; Stdout: ; Stderr: sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-arptables: No such file or directory
原因
sudo ll /proc/sys/net/bridge/bridge-nf-call-arptables
發現文件存在,但暫時還未發現影響哪個組件的哪個功能,待解決
6.8 計量數據收集服務異常
問題
查看日誌sudo vi /var/log/ceilometer/ceilometer-agent-central.log
2016-07-19 20:45:47.074 7482 ERROR ceilometer.agent.manager [req-57db422d-f131-4c99-97cc-fd874956efbc admin - - - -] Skipping endpoint, keystone issue: The request you have made requires authentication. (HTTP 401) (Request-ID: req-69262a02-156c-4b5f-ab3f-924190a6cd98) (HTTP 401) 2016-07-19 20:45:47.078 7482 INFO ceilometer.agent.manager [req-57db422d-f131-4c99-97cc-fd874956efbc admin - - - -] Skip pollster power, no resources found this cycle
原因
待解決
6.9 計量警報服務異常
問題
計量警報服務,後臺日誌一直報錯,sudo vi /var/log/aodh/aodh-evaluator.log
2016-07-19 20:34:20.605 7474 ERROR aodh.evaluator [-] alarm evaluation cycle failed ...... 2016-07-19 20:33:20.547 7474 ERROR aodh.evaluator ProgrammingError: (pymysql.err.ProgrammingError) (1146, u"Table 'aodh.alarm' doesn't exist") [SQL: u'SELECT alarm.alarm_id AS alarm_alarm_id, alarm.enabled AS alarm_enabled, alarm.name AS alarm_name, alarm.type AS alarm_type, alarm.severity AS alarm_severity, alarm.description AS alarm_description, alarm.timestamp AS alarm_timestamp, alarm.user_id AS alarm_user_id, alarm.project_id AS alarm_project_id, alarm.state AS alarm_state, alarm.state_timestamp AS alarm_state_timestamp, alarm.ok_actions AS alarm_ok_actions, alarm.alarm_actions AS alarm_alarm_actions, alarm.insufficient_data_actions AS alarm_insufficient_data_actions, alarm.repeat_actions AS alarm_repeat_actions, alarm.rule AS alarm_rule, alarm.time_constraints AS alarm_time_constraints \nFROM alarm \nWHERE alarm.enabled = true AND alarm.type != %(type_1)s ORDER BY alarm.timestamp DESC'] [parameters: {u'type_1': 'event'}] 2016-07-19 20:33:20.547 7474 ERROR aodh.evaluator
原因
待解決
6.10 數據庫服務異常
問題
2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task [-] Error during Manager.publish_exists_event 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task Traceback (most recent call last): 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/dist-packages/oslo_service/periodic_task.py", line 220, in run_periodic_tasks 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task task(self, context) 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/dist-packages/trove/taskmanager/manager.py", line 407, in publish_exists_event 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task self.admin_context) 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/dist-packages/trove/extensions/mgmt/instances/models.py", line 178, in publish_exist_events ...... 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task Unauthorized: The request you have made requires authentication. (HTTP 401) 2016-07-19 21:09:00.184 7909 ERROR oslo_service.periodic_task
原因
待解決
6.11 manila
創建共享錯誤
問題
創建共享,顯示狀態錯誤,在blockstorage
節點上查看日誌sudo vi /var/log/neutron/neutron-linuxbridge-agent.log
2016-07-19 22:28:44.914 5844 ERROR neutron.plugins.ml2.drivers.agent._common_agent [req-1e855d21-1292-498a-bf78-388528b5cc97 - - - - -] Error in agent loop. Devices info: {'current': set(['tap5636fd8b-48']), 'timestamps': {'tap5636fd8b-48': None}, 'removed': set([]), 'added': set(['tap5636fd8b-48']), 'updated': set([])} 2016-07-19 22:28:41.967 5844 INFO neutron.agent.securitygroups_rpc [req-1e855d21-1292-498a-bf78-388528b5cc97 - - - - -] Preparing filters for devices set(['tap5636fd8b-48']) 2016-07-19 22:28:42.335 5844 ERROR neutron.agent.linux.utils [req-1e855d21-1292-498a-bf78-388528b5cc97 - - - - -] Exit code: 255; Stdin: ; Stdout: ; Stderr: sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-arptables: No such file or directory
查看日誌
sudo vi /var/log/manila/manila-share.log
,顯示無法獲取共享服務器:2016-07-19 22:34:08.628 6095 ERROR manila.share.manager [req-c68dc620-0eb4-4847-a271-3ccd76509f48 18d3670a039649299ed141229c509b62 4bedcb61d9eb47cfb5fc79ea4a1a03b0 - - -] Creation of share instance a7c60e8e-9368-4869-abea-ad6196c3ce07 failed: failed to get share server. 2016-07-19 22:34:08.660 6095 ERROR oslo_messaging.rpc.dispatcher [req-c68dc620-0eb4-4847-a271-3ccd76509f48 18d3670a039649299ed141229c509b62 4bedcb61d9eb47cfb5fc79ea4a1a03b0 - - -] Exception during message handling: SSH connection has not been established to 10.254.0.19 in 300s. Giving up.
原因
在安裝配置共享服務時網絡配置有錯,無法更新網絡拓撲變化。創建的網絡manila_service_network
在節點BlockStorage
上的端口manila:share
未能及時加入到vxlan
,導致創建共享時,網絡不通,無法連接節點BlockStorage
上的共享網絡。① 查看
BlockStorage
節點上的共享服務網絡端口source ~/.openstack/.admin-openrc openstack network list openstack port list
最後得到端口ID:
5636fd8b-48
② 查看
BlockStorage
節點接口信息blockstorage@blockstorage:~$ ifconfig -a ns-5636fd8b-48 Link encap:Ethernet HWaddr fa:16:3e:76:15:f3 tap5636fd8b-48 Link encap:Ethernet HWaddr a2:22:f6:eb:de:dd vxlan-71 Link encap:Ethernet HWaddr 5a:ff:85:17:37:af
③ 查看網橋信息
blockstorage@blockstorage:~$ brctl show bridge name bridge id STP enabled interfaces brqe82fd421-79 8000.5aff851737af no vxlan-71
可見端口
tap5636fd8b-48
未綁定到網橋brqe82fd421-79
,不能訪問vxlan-71
解決方法:
手動添加端口tap5636fd8b-48
到網橋brqe82fd421-79
參考:
https://ask.openstack.org/en/question/92678
https://ask.openstack.org/en/question/92395sudo brctl addif brqe82fd421-79 tap5636fd8b-48 brctl show bridge name bridge id STP enabled interfaces brqe82fd421-79 8000.5aff851737af no tap5636fd8b-48 vxlan-71
6.12 無法獲取雲硬盤一致性組
問題
點擊Dashboard
中的雲硬盤一致性組,提示“錯誤:無法獲取雲硬盤一致性組”controller@controller:~$ cinder consisgroup-list ERROR: Policy doesn't allow consistencygroup:get_all to be performed. (HTTP 403) (Request-ID: req-45148cb9-ba43-4a66-bd57-0e4f7cfcb6bb)
原因
在cinder
策略配置文件中禁用了一致性組API解決方法
① 修改配置文件sudo vi /etc/cinder/policy.json
,刪除`consistencygroup
規則下的group:nobody
來啓用一致性組API。可用vim打開文件,執行如下命令。:1,$ s/group:nobody//g
② 重啓塊存儲API服務
sudo service cinder-api restart
參考鏈接
- OpenStack Doc: Architecture Design Guide - Compute focused
- OpenStack Doc: Installation Guide for Ubuntu 14.04 (LTS)
- OpenStack Configuration Reference
- OpenStack Training Labs : An Automated Way To Deploy OpenStack
- OpenStack 架構設計指南
- OpenStack 雲計算平臺管理員手冊
- 搭建Openstack集羣
- VMWare搭建Openstack——Ubuntu14.04操作系統安裝
- OpenStack Folsom Install Guide
- OpenStack快速入門之二:OpenStack安裝與配置
- 使用vmware 創建Openstack 開發環境
- CHUCK手把手帶你搞定OPENSTACK
- windows下實現端口映射
- OpenStack搭建02-基礎環境一
- Openstack學習筆記及問題彙總
- Keystone安裝時MySQL授權localhost&%區別及授權錯誤解決辦法
- MariaDB配置文件my.cnf
- openstack中的metadata server
- Building Guest Images for OpenStack Trove
- OpenStack Trove 專用鏡像製作