OpenStack知識點總結


一:雲計算

    一、起源

       1. 雲計算這個概念首次在2006年8月的搜索引擎會議上提出,成為了繼互聯網、計算機后信息時代的又一種革新(互聯網第三次革命)。

       2. 雲計算的核心是將資源協調在一起,使用戶通過網絡就可以獲取到無限的資源並且不受時間和空間的限制,為用戶提供一種全新的體驗。

 

    二、基本概念

       1. 定義

           1. 官方:雲計算是一種按使用量付費的模式(資源服務模式),該模式可以實現隨時隨地、便捷按需的從可配置資源共享池中獲取所需的資源。

           2. 百度百科:雲計算是基於互聯網的相關服務的增加、使用和交付模式,通常涉及通過互聯網來提供動態易擴展且經常是虛擬化的資源。

 

       2. 特點

           1. 按需部署:根據用戶的需求快速配備計算能力及資源分配。

           2. 資源池化:供應商的資源被池化,以多用戶租用模式被不同客戶使用。

           3. 快速伸縮:資源可以彈性的部署和釋放。

           4. 可靠性高:倘若服務器故障也不影響計算與應用的正常運行。

 

       3. 分類

           1. 私有雲:雲計算基礎設施由一個單一的組織部署和使用。

           2. 公有雲:雲計算基礎設施被部署給廣泛的公眾公開使用。

           3. 混合雲:使用標准或專有的技術組合以上兩種雲。

 

       4. 服務類型

           1. IaaS(基礎設施即服務):提供商提供虛擬化計算資源,如虛擬機、存儲、網絡和操作系統。

           2. PaaS(平台即服務):通過互聯網為開發人員提供構建應用程序和服務的平台。

           3. SaaS(軟件即服務):通過互聯網為用戶提供按需軟件付費應用程序。

            

 

    三、平台分類

       1. 從技術應用划分

           1. 以數據存儲為主的存儲型雲平台

           2. 以數據處理為主的計算型雲平台

           3. 計算和存儲兼顧的綜合型雲平台

 

       2. 從是否收費划分

           1. 開源雲平台:AbiCloud、Hadoop、Eucalyptus、MongoDB、OpenStack

           2. 商業化雲平台:Google、IBM、Oracle、Amazon、阿里雲等

 

    四、應用

       1. 存儲雲:雲存儲是一個以數據存儲和管理為核心的雲計算系統。用戶可以將本地的資源上傳至雲端上,可以在任何地方連入互聯網來獲取雲上的資源。

       2. 醫療雲:使用雲計算來創建醫療健康服務雲平台,實現了醫療資源的共享和醫療范圍的擴大

       3. 金融雲:利用雲計算的模型,將信息、金融和服務等功能分散到龐大分支機構構成的互聯網“雲”中,共享互聯網資源,從而解決現有問題並且達到高效、低成本的目標。

       4. 教育雲:教育雲可以將所需要的任何教育硬件資源虛擬化,然后將其傳入互聯網中,以向教育機構和學生老師提供一個方便快捷的平台。

 

    五、虛擬化

       1. 虛擬化技術

           1. 定義:虛擬化是一個廣義上的術語,是指計算元件在虛擬的基礎上而不是真實的基礎上運行,是一個為了簡化管理,優化資源的解決方案。

                

 

           2. 分類 

               1. 桌面虛擬化:在本地計算機顯示和操作遠程計算機桌面,在遠程計算機執行程序和儲存信息。

               2. 應用虛擬化:在操作系統和應用程序間建立虛擬環境。

               3. 服務器虛擬化:將服務器物理資源抽象成邏輯資源形成動態管理的“資源池“”。

               4. 網絡虛擬化:將不同網絡的硬件和軟件資源結合成一個虛擬的整體。

               5. 存儲虛擬化:將實體存儲空間分隔成不同的邏輯存儲空間。

 

       2. 雲計算和虛擬化的關系

           

        3. 虛擬化的優點

            1. 提高IT資源利用率,加速應用部署,提高應用兼容性。

            2. 顯著減少了服務器的數量,企業不動資產和管理成本。

 

二:OpenStack

    一、簡介

       1. 定義

           1. 百度百科:OpenStack是一個開源的雲計算管理平台項目,由NASA(美國國家航空航天局)和Rackspace合作研發並發起,以Apache許可證授權的開源代碼項目。

           2. 官方:OpenStack是一個雲操作系統,通過數據中心可控制大型的計算、存儲、網絡等資源池。所有的管理通過前端界面管理員就可以完成,同樣也可以通過web接口讓最終用戶部署資源。

 

       2. 發展歷程

           

 

    二、核心架構

       1. 物理架構圖

           

 

       2. 邏輯架構圖

          

 

       3. 概念架構圖

          

 

    三、核心項目

       1. 共享服務組件

           1. 數據庫服務(database service):Mariadb及Mongodb。

           2. 消息傳輸(Message Queues)::RabbitMQ

           3. 緩存(cache):Memcached

           4. 時間同步(time sync):ntp

           5. 存儲(storge provider):ceph,GFS,LVM,ISICI等

           6. 高可用及負載均衡:pacemaker,HAproxy,keepalived,lvs

 

       2. 核心組件

           1. 認證服務(Identity Service):Keystone。提供了其余所有組件的認證信息/令牌的管理,創建,修改等等,使用MySQL作為統一的數據庫。

           2. 鏡像服務(Image Service):Glance。提供了對虛擬機部署的時候所能提供的鏡像的管理,包含鏡像的導入,格式,以及制作相應的模板

           3. 計算服務(compute):Nova。負責維護和管理雲計算計算資源,維護和管理計算和網絡。

           4. 網絡服務(Network):Neutron。提供了對網絡節點的網絡拓撲管理,同時提供Neutron在Horizon的管理面板

           5. Web界面服務(Dashboard):Horizon。提供了以Web的形式對所有節點的所有服務的管理

           6. 塊存儲服務(Block Storage):Cinder。為運行實例提供穩定的數據塊存儲服務

           7. 對象存儲(Object Storage):Swift。為Glance提供鏡像存儲和卷備份服務

           8. 測量(Metering):Ceillrmeter。提供對物理資源以及虛擬資源的監控,並記錄這些數據,對該數據進行分析,在一定條件下觸發相應動作

           9. 部署編排(Orchestration):Heat。提供了基於模板來實現雲環境中資源的初始化,依賴關系處理,部署等基本操作,也可以解決自動收縮,負載均衡等高級特性。

         10. 數據庫服務(Database Service):Trove。提供可擴展和可靠的關系和非關系數據庫引擎服務

              

 

    四、組件詳解

       1. RabbitMQ

           1. 概念:實現了AMQP( 高級消息隊列協議 )的流行消息隊列系統 ,用於在分布式系統中存儲轉發消息,在 易用性、擴展性、高可用性等方面表現不俗。

           2. 特點

               1. 開源,性能優秀,穩定性保障。

               2. 提供可靠性消息投遞模式、返回模式和HA模式、表達式配置及鏡像隊列模型

               3. 集群模式豐富,語Spring AMQP完美整合,保證數據不丟失的前提做到高可靠性和可用性

 

           3. 核心概念

              

 

           4. 工作原理

               1. 客戶端連接到消息隊列服務器,打開一個channel。

               2. 客戶端聲明一個exchange,並設置相關屬性。

               3. 客戶端聲明一個queue,並設置相關屬性。

               4. 客戶端使用routing key,在exchange和queue之間建立好綁定關系。

               5. 客戶端投遞消息到exchange。

               6. exchange接收到消息后,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列里。

                  

 

           5. 常用操作

              

 

       2. Memcached

           1. 概念:Memcached 是一個開源的、高性能的分布式內存對象緩存系統。通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高網站訪問速度,加速動態WEB應用、減輕數據庫負載。

           2. 緩存流程

               1. 檢查客戶端請求的數據是否在 Memcache 中,如果存在,直接將請求的數據返回,不在對數據進行任何操作。

               2. 如果請求的數據不在 Memcache 中,就去數據庫查詢,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份 Memcache 中

               3. 每次更新數據庫的同時更新 Memcache 中的數據庫,確保數據信息一致性。

               4. 當分配給 Memcache 內存空間用完后,會使用 LRU 策略加到其失效策略,失效的數據首先被替換掉,然后再替換掉最近未使用的數據。

                    

 

       3. Keystone

           1. 作用:認證服務,提供了其余所有組件的認證信息/令牌的管理,創建,修改等等,使用MySQL作為統一的數據庫。

           2. 核心概念

              

 

           3. 工作原理

              

 

           4. 工作流程(在各個組件中的作用)

                

 

       4. Glance

           1. 作用:鏡像服務,提供了對虛擬機部署的時候所能提供的鏡像的管理,包含鏡像的導入,格式,以及制作相應的模板

           2. 核心概念

             

 

           3. 工作原理

               1. Glance-api:接收REST API的請求,然后通過其他模塊來完成諸如鏡像的查找、獲取、上傳、刪除等操作,默認監聽端口9292。

               2. Glance-registry:用於與MariaDB數據庫交互,用於存儲或獲取鏡像的元數據(metadata),默認監聽端口9191。

               3. Store Adapter:通過提供的存儲接口來獲取鏡像

                  

 

       5. Nova(核心)

           1. 作用:負責維護和管理的網絡和存儲,提供計算服務

           2. 核心組件

              

 

           3. 虛擬機創建流程

              

 

       6. Horizon

           1. 作用:web界面服務(Dashboard),提供了以Web的形式對所有節點的所有服務的管理

           2. 區域(Region)

               1. 地理上的概念,可以理解為一個獨立的數據中心,每個所定義的區域有自己獨立的Endpoint;

               2. 區域之間是完全隔離的,但多個區域之間共享同一個Keystone和Dashboard(目前Openstack中的Dashboard還不支持多個區域);

               3. 區域的設計更多側重地理位置的概念,用戶可以選擇離自己更新的區域來部署自己的服務,選擇不同的區域主要是考慮那個區域更靠近自己;

               4. 區域的概念是由Amazon在AWS中提出,主要是解決容錯能力和可靠性;

 

           3. 可用性區域(Availability Zone)

               1. AZ是在Region范圍內的再次切分,例如可以把一個機架上的服務器划分為一個AZ,划分AZ是為了提高容災能力和提供廉價的隔離服務;

               2. AZ主要是通過冗余來解決可用性的問題,在Amazon的聲明中,Instance不可用是指用戶所有AZ中的同一個Instance都不可達才表明不可用;

               3. AZ是用戶可見的一個概念,並可選擇,是物理隔離的,一個AZ不可用不會影響其他的AZ,用戶在創建Instance的時候可以選擇創建到那些AZ中;

 

           4. Host Aggreates:一組具有共同屬性的節點集合,如以CPU作為區分類型的一個屬性

                

 

           5. Cell

               1. 概念:nova為了增加橫向擴展以及分布式、大規模(地理位置級別)部署的能力,同時又不增加數據庫和消息中間件的復雜度,引入了cell的概念,並引入了nova-cell服務。

               2. 作用

                   1. 解決OpenStack的擴展性和規模瓶頸

                   2. 每個Cell都有自己獨立的DB和AMQP,不與其他模塊共用DB和AMQP,解決了大規模環境中DB和AMQP的瓶頸問題;

                   3. Cell實現了樹形結構(通過消息路由)和分級調度(過濾算法和權重算法),Cell之間通過RPC通訊,解決了擴展性問題;

                        

 

       7. Cinder

           1. 作用:存儲服務,為運行實例提供穩定的數據塊存儲服務

           2. 核心組件

              

 

           3. 工作流程

               

               1. 用戶向 cinder-api發送創建volume的請求

               2. cinder-api對請求做一些必要處理后,通過 Messaging將創建消息發送給cinder-scheduler

               3. cinder-scheduler從 Messaging 獲取到 cinder-api發給它的消息,然后執行調度算法,從若干計存儲點中選出節點 A

               4. cinder-scheduler通過 Messaging 將創建消息發送給存儲節點A

               5. 存儲節點 A 的 cinder-volume從 Messaging 中獲取到 cinder-scheduler發給它的消息,然后通過 driver 在 volume provider 上創建 volume。

 

三:先電雲計算基礎架構服務平台搭建

    一、搭建雲平台(單雙節點)

       1. 創建虛擬機並配置網絡

           1. 虛擬機規格(單雙節點均可用)

             

 

           2. 網絡配置

              

 

       2. 基本環境配置

          

 

       3. 編輯環境變量

          

 

       4. 執行腳本安裝服務

           1. 單節點(computer改為compute)

              

 

           2. 雙節點(computer改為compute)

              

 

    二、腳本詳解

       1. 基礎配置腳本:iaas-pre-host.sh

 1 #/bin/bash
 2 source /etc/xiandian/openrc.sh  #加載配置文件
 3 # config env network
 4 # 關閉防火牆,將標准和錯誤輸出永久丟棄
 5 systemctl  stop firewalld.service
 6 systemctl  disable  firewalld.service >> /dev/null 2>&1  ## 將
 7 # 關閉網絡管理器,將標准和錯誤輸出永久丟棄
 8 systemctl stop NetworkManager >> /dev/null 2>&1
 9 systemctl disable NetworkManager >> /dev/null 2>&1
10 # 設置selinux的值為permissive
11 sed -i 's/SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
12 setenforce 0
13 # 刪除防火牆和網絡管理器軟件包,重啟網絡服務
14 yum remove -y NetworkManager firewalld
15 service network restart
16 #----  ntp  ---------------------------------
17 # 安裝ntp和iptables服務,執行不成功報錯並退出
18 yum install ntp  iptables-services  -y 
19 if [ 0  -ne  $? ]; then
20         echo -e "\033[31mThe installation source configuration errors\033[0m"
21         exit 1
22 fi
23 # 開啟iptables防火牆並清空規則列
24 systemctl enable iptables
25 systemctl restart iptables
26 iptables -F
27 iptables -X
28 iptables -X
29 service iptables save
30 # install package
31 # 提高SSH的連接速度
32 sed -i -e 's/#UseDNS yes/UseDNS no/g' -e 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config   
33 # 更新軟件包
34 yum upgrade -y
35 # 安裝openstack的selinux管理包、客戶端以及ini配置文件編輯器
36 yum -y install openstack-selinux python-openstackclient crudini -y
37 # 如果控制節點的IP地址不為空,就使用配置的主機名 
38 if [[ `ip a |grep -w $HOST_IP ` != '' ]];then 
39         hostnamectl set-hostname $HOST_NAME
40 # 如果計算節點的IP地址不為空,就使用配置的主機名
41 elif [[ `ip a |grep -w $HOST_IP_NODE ` != '' ]];then 
42         hostnamectl set-hostname $HOST_NAME_NODE
43 # 否則統一設置為配置的控制節點主機名
44 else
45         hostnamectl set-hostname $HOST_NAME
46 fi
47 # 配置主機名映射 ,首先刪除原來配置,然后配置新的主機名映射
48 sed -i -e "/$HOST_NAME/d" -e "/$HOST_NAME_NODE/d" /etc/hosts
49 echo "$HOST_IP $HOST_NAME" >> /etc/hosts
50 echo "$HOST_IP_NODE $HOST_NAME_NODE" >> /etc/hosts
51 printf "\033[35mPlease Reboot or Reconnect the terminal\n\033[0m"
iaas-pre-host.sh腳本解讀

 

       2. 數據庫服務腳本:iaas-install-msyql.sh

 1 #!/bin/bash
 2 source /etc/xiandian/openrc.sh  # 加載配置文件
 3 
 4 # ①ping控制節點最多四次並將標准和錯誤輸出永久丟棄,如果執行失敗后打印錯誤信息並退出
 5 ping $HOST_IP -c 4 >> /dev/null 2>&1
 6 if [ 0  -ne  $? ]; then
 7         echo -e "\033[31m Warning\nPlease make sure the network configuration is correct!\033[0m"
 8         exit 1
 9 fi
10 # ②配置時鍾服務器
11 sed -i  -e '/server/d' -e "/fudge/d" /etc/ntp.conf  # 刪除默認
12 sed -i  -e "1i server 127.127.1.0" -e "2i fudge 127.127.1.0 stratum 10" /etc/ntp.conf  # 配置時鍾服務器
13 systemctl restart ntpd 
14 systemctl enable ntpd
15 
16 # ③安裝MySQL的客戶端、服務及與Python自動化(expect)交互工具,MongoDB客戶端及服務,消息隊列服務,緩存服務及與Python交互工具
17 yum install mariadb mariadb-server python2-PyMySQL expect mongodb-server mongodb rabbitmq-server memcached python-memcached -y
18 # 編輯配置文件,設置MySQL數據庫默認引擎,數據庫的編碼,最大連接數
19 sed -i  "/^symbolic-links/a\default-storage-engine = innodb\ninnodb_file_per_table\ncollation-server = utf8_general_ci\ninit-connect = 'SET NAMES utf8'\ncharacter-set-server = utf8\nmax_connections=10000" /etc/my.cnf
20 crudini --set /usr/lib/systemd/system/mariadb.service Service LimitNOFILE 10000
21 crudini --set /usr/lib/systemd/system/mariadb.service Service LimitNPROC 10000
22 systemctl daemon-reload  # 使配置文件生效
23 systemctl enable mariadb.service
24 systemctl restart mariadb.service
25 
26 #④自動化執行MySQL的安全配置向導
27 expect -c " # 自動執行腳本
28 spawn /usr/bin/mysql_secure_installation # 執行安全配置向導命令
29 expect \"Enter current password for root (enter for none):\"  # 修改root密碼
30 send \"\r\"
31 expect \"Set root password?\"  # 設置密碼
32 send \"y\r\" 
33 expect \"New password:\"  # 新密碼
34 send \"$DB_PASS\r\"
35 expect \"Re-enter new password:\"  # 確認新密碼
36 send \"$DB_PASS\r\"
37 expect \"Remove anonymous users?\" # 刪除匿名用戶
38 send \"y\r\" 
39 expect \"Disallow root login remotely?\"  # 允許遠程登錄
40 send \"n\r\"
41 expect \"Remove test database and access to it?\"  # 刪除test數據庫並訪問
42 send \"y\r\"
43 expect \"Reload privilege tables now?\" # 刷新權限表
44 send \"y\r\"
45 expect eof # 腳本結束運行
46 "
47 
48 # mongo
49 # 刪除配置文件有bind_ip的行並將以smallfiles.開頭和結尾的字符串替換為smallfiles=true
50 sed -i -e '/bind_ip/d' -e 's/#smallfiles.*/smallfiles=true/g' /etc/mongod.conf 
51 systemctl enable mongod.service
52 systemctl restart mongod.service
53 
54 # rabbitmq
55 systemctl enable rabbitmq-server.service
56 systemctl restart rabbitmq-server.service
57 rabbitmqctl add_user $RABBIT_USER $RABBIT_PASS
58 rabbitmqctl set_permissions $RABBIT_USER ".*" ".*" ".*"
59 
60 # memcache
61 systemctl enable memcached.service
62 systemctl restart memcached.service
iaas-install-msyql.sh

 

       3. 身份認證服務腳本:iaas-install-keystone.sh

  1 #!/bin/bash
  2 # 加載配置文件並安裝keystone和HTTP服務及與Python交互接口
  3 source /etc/xiandian/openrc.sh
  4 yum install -y openstack-keystone httpd mod_wsgi
  5 
  6 # 登錄MySQL數據庫創建keystone用戶並授予本地和遠程權限
  7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS keystone ;"
  8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '$KEYSTONE_DBPASS' ;"
  9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '$KEYSTONE_DBPASS' ;"
 10 
 11 # 設置MySQL和Python連接,設置ADMIN_TOKEN令牌替換原來的值
 12 crudini --set /etc/keystone/keystone.conf database connection  mysql+pymysql://keystone:$KEYSTONE_DBPASS@$HOST_NAME/keystone
 13 ADMIN_TOKEN=$(openssl rand -hex 10) # 產生隨機數
 14 crudini --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
 15 crudini --set /etc/keystone/keystone.conf token provider  fernet  # 安全消息傳遞格式
 16 # 同步數據庫並運行keystone,初始化Fernet密鑰存儲用於token加密。,最后添加到hpptd服務
 17 su -s /bin/sh -c "keystone-manage db_sync" keystone
 18 keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
 19 sed -i "s/#ServerName www.example.com:80/ServerName $HOST_NAME/g" /etc/httpd/conf/httpd.conf 
 20 
 21 # 配置普通用戶(5000)和管理員(35357)的httpd服務(新版本是沒有區別的,都使用5000)
 22 cat >/etc/httpd/conf.d/wsgi-keystone.conf<<- EOF #標准輸出重定向(cat >) 和標准輸入重定向(<<- EOF,結束為EOF)
 23 Listen 5000
 24 Listen 35357
 25 <VirtualHost *:5000>
 26     WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
 27     WSGIProcessGroup keystone-public
 28     WSGIScriptAlias / /usr/bin/keystone-wsgi-public
 29     WSGIApplicationGroup %{GLOBAL}
 30     WSGIPassAuthorization On
 31     ErrorLogFormat "%{cu}t %M"
 32     ErrorLog /var/log/httpd/keystone-error.log
 33     CustomLog /var/log/httpd/keystone-access.log combined
 34     <Directory /usr/bin>
 35         Require all granted
 36     </Directory>
 37 </VirtualHost>
 38 
 39 <VirtualHost *:35357>
 40     WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
 41     WSGIProcessGroup keystone-admin
 42     WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
 43     WSGIApplicationGroup %{GLOBAL}
 44     WSGIPassAuthorization On
 45     ErrorLogFormat "%{cu}t %M"
 46     ErrorLog /var/log/httpd/keystone-error.log
 47     CustomLog /var/log/httpd/keystone-access.log combined
 48     <Directory /usr/bin>
 49         Require all granted
 50     </Directory>
 51 </VirtualHost>
 52 
 53 EOF
 54 
 55 systemctl enable httpd.service
 56 systemctl start httpd.service
 57 
 58 # 創建臨時環境變量
 59 export OS_TOKEN=$ADMIN_TOKEN  #配置的Token
 60 export OS_URL=http://$HOST_NAME:35357/v3  # 手動指定Endpoint,版本v3
 61 export OS_IDENTITY_API_VERSION=3  # 認證版本
 62 
 63 # 創建服務實體和API端點
 64 openstack service create --name keystone --description "OpenStack Identity" identity  # 創建keystone身份認證服務
 65 openstack endpoint create --region RegionOne identity public http://$HOST_NAME:5000/v3    # 創建處理外部訪問端點
 66 openstack endpoint create --region RegionOne identity internal http://$HOST_NAME:5000/v3  # 創建處理內部訪問端點
 67 openstack endpoint create --region RegionOne identity admin http://$HOST_NAME:35357/v3  # 創建處理admin端點
 68 
 69 ## 創建域、租戶、用戶和角色
 70 openstack domain create --description "Default Domain" $DOMAIN_NAME  # 創建默認域
 71 # 創建admin
 72 openstack project create --domain $DOMAIN_NAME --description "Admin Project" admin  # 創建admin租戶,擁有平台最高權限
 73 openstack user create --domain $DOMAIN_NAME --password $ADMIN_PASS admin  # 創建admin用戶
 74 openstack role create admin  # 創建admin權限
 75 openstack role add --project admin --user admin admin  # 授予admin用戶admin權限
 76 # 創建service
 77 openstack project create --domain $DOMAIN_NAME --description "Service Project" service  # 創建service租戶,代表平台內所有的服務
 78 # 創建demo
 79 openstack project create --domain $DOMAIN_NAME --description "Demo Project" demo  # 創建demo租戶,演示測試的普通用戶
 80 openstack user create --domain $DOMAIN_NAME --password $DEMO_PASS demo  #  創建demo(普通)用戶
 81 openstack role create user  # 創建普通用戶權限
 82 openstack role add --project demo --user demo user  # 授予demo用戶普通用戶權限
 83 # 刪除前面臨時創建的環境變量
 84 unset OS_TOKEN OS_URL 
 85 
 86 # 使用標准輸出和輸入創建admin環境變量寫入admin-openrc.sh配置文件
 87 cat > /etc/keystone/admin-openrc.sh <<-EOF
 88 export OS_PROJECT_DOMAIN_NAME=$DOMAIN_NAME   # 域名
 89 export OS_USER_DOMAIN_NAME=$DOMAIN_NAME   # 域名
 90 export OS_PROJECT_NAME=admin  # 租戶
 91 export OS_USERNAME=admin  # 用戶
 92 export OS_PASSWORD=$ADMIN_PASS  # 用戶密碼
 93 export OS_AUTH_URL=http://$HOST_NAME:35357/v3  # Endpoint
 94 export OS_IDENTITY_API_VERSION=3  # 認證版本
 95 export OS_IMAGE_API_VERSION=2  # 鏡像版本
 96 EOF
 97 
 98 # 使用標准輸出和輸入創建demo(普通用戶)環境變量寫入admin-openrc.sh配置文件
 99 cat > /etc/keystone/demo-openrc.sh <<-EOF
100 export OS_PROJECT_DOMAIN_NAME=$DOMAIN_NAME
101 export OS_USER_DOMAIN_NAME=$DOMAIN_NAME
102 export OS_PROJECT_NAME=demo
103 export OS_USERNAME=demo
104 export OS_PASSWORD=$DEMO_PASS
105 export OS_AUTH_URL=http://$HOST_NAME:35357/v3
106 export OS_IDENTITY_API_VERSION=3
107 export OS_IMAGE_API_VERSION=2
108 EOF
iaas-install-keystone.sh

 

       4. 鏡像服務腳本:iaas-install-glance.sh

 1 #!/bin/bash
 2 #### 加載腳本配置文件和keystone的admin配置文件
 3 source /etc/xiandian/openrc.sh
 4 source  /etc/keystone/admin-openrc.sh 
 5 #### 創建glance用戶並授予本地和遠程登錄權限
 6 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS glance ;"
 7 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '$GLANCE_DBPASS' ;"
 8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '$GLANCE_DBPASS' ;"
 9 #### 安裝glance服務組件
10 yum install -y openstack-glance 
11 #### 創建glance用戶並授予admin權限
12 openstack user create --domain $DOMAIN_NAME --password $GLANCE_PASS glance
13 openstack role add --project service --user glance admin
14 #### 創建鏡像服務及處理外部、內部和admin的訪問端口
15 openstack service create --name glance --description "OpenStack Image" image
16 openstack endpoint create --region RegionOne image public http://$HOST_NAME:9292
17 openstack endpoint create --region RegionOne image internal http://$HOST_NAME:9292
18 openstack endpoint create --region RegionOne image admin http://$HOST_NAME:9292
19 
20 #### 配置glance-api來接收請求並完成各種操作
21 # 配置數據庫連接
22 crudini --set /etc/glance/glance-api.conf database connection  mysql+pymysql://glance:$GLANCE_DBPASS@$HOST_NAME/glance # 連接glance數據庫
23 # 配置keystone身份認證
24 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_uri http://$HOST_NAME:5000   # 普通用戶訪問端點
25 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理員訪問端點
26 crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers  $HOST_NAME:11211 # 緩存服務 
27 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
28 crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name $DOMAIN_NAME  # 租戶
29 crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name $DOMAIN_NAME  # 用戶
30 crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name service  # service租戶
31 crudini --set /etc/glance/glance-api.conf keystone_authtoken username glance  # 用戶名
32 crudini --set /etc/glance/glance-api.conf keystone_authtoken password $GLANCE_PASS  # 密碼
33 crudini --set /etc/glance/glance-api.conf paste_deploy flavor keystone 
34 crudini --set /etc/glance/glance-api.conf paste_deploy config_file  /usr/share/glance/glance-api-dist-paste.ini 
35 #配置虛擬機鏡像的存儲
36 crudini --set /etc/glance/glance-api.conf glance_store stores file,http  # 配置虛擬機鏡像的存儲方式
37 crudini --set /etc/glance/glance-api.conf glance_store $DOMAIN_NAME'_store' file  # 配置虛擬機鏡像的存儲形式
38 crudini --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/ # 配置虛擬機鏡像的存儲路徑
39 
40 #### 配置glance-registry來交互數據庫並完成鏡像的存儲和獲取的元數據
41 crudini --set /etc/glance/glance-registry.conf database connection  mysql+pymysql://glance:$GLANCE_DBPASS@$HOST_NAME/glance
42 crudini --set /etc/glance/glance-registry.conf keystone_authtoken auth_uri http://$HOST_NAME:5000
43 crudini --set /etc/glance/glance-registry.conf keystone_authtoken auth_url http://$HOST_NAME:35357
44 crudini --set /etc/glance/glance-registry.conf keystone_authtoken memcached_servers $HOST_NAME:11211
45 crudini --set /etc/glance/glance-registry.conf keystone_authtoken auth_type password
46 crudini --set /etc/glance/glance-registry.conf keystone_authtoken project_domain_name $DOMAIN_NAME
47 crudini --set /etc/glance/glance-registry.conf keystone_authtoken user_domain_name $DOMAIN_NAME
48 crudini --set /etc/glance/glance-registry.conf keystone_authtoken project_name service
49 crudini --set /etc/glance/glance-registry.conf keystone_authtoken username glance
50 crudini --set /etc/glance/glance-registry.conf keystone_authtoken password $GLANCE_PASS
51 crudini --set /etc/glance/glance-registry.conf paste_deploy flavor keystone
52 crudini --set /etc/glance/glance-registry.conf paste_deploy config_file  /usr/share/glance/glance-registry-dist-paste.ini
53 
54 #### 將glance服務信息同步到數據庫
55 su -s /bin/sh -c "glance-manage db_sync" glance
56 
57 #### 開啟glance的相關服務
58 systemctl enable openstack-glance-api.service openstack-glance-registry.service
59 systemctl restart openstack-glance-api.service openstack-glance-registry.service
iaas-install-glance.sh

 

       5. 計算服務腳本:iaas-install-nova-{controller,comput}.sh

 1 #!/bin/bash
 2 #### 加載腳本配置文件和keystone的admin配置文件
 3 source /etc/xiandian/openrc.sh
 4 source /etc/keystone/admin-openrc.sh
 5 
 6 #### 創建nova和nova_api用戶並授予本地和遠程登錄權限
 7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova ;"
 8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
 9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
10 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS nova_api ;"
11 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '$NOVA_DBPASS' ;"
12 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '$NOVA_DBPASS' ;"
13 
14 #### 創建nova用戶並授予admin權限,創建計算服務,創建處理外部、內部和admin訪問端口
15 openstack user create --domain $DOMAIN_NAME --password $NOVA_PASS nova
16 openstack role add --project service --user nova admin
17 openstack service create --name nova --description "OpenStack Compute" compute
18 openstack endpoint create --region RegionOne compute public http://$HOST_NAME:8774/v2.1/%\(tenant_id\)s
19 openstack endpoint create --region RegionOne compute internal http://$HOST_NAME:8774/v2.1/%\(tenant_id\)s
20 openstack endpoint create --region RegionOne compute admin http://$HOST_NAME:8774/v2.1/%\(tenant_id\)s
21 
22 #### 安裝nova的核心組件
23 yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler
24 
25 #### 配置計算服務
26 # 配置數據庫連接
27 crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova
28 crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:$NOVA_DBPASS@$HOST_NAME/nova_api
29 # 配置默認服務信息
30 crudini --set /etc/nova/nova.conf DEFAULT enabled_apis  osapi_compute,metadata # 停止使用EC2 API
31 crudini --set /etc/nova/nova.conf DEFAULT rpc_backend  rabbit  # 配置rpc_backend為rabbit
32 crudini --set /etc/nova/nova.conf DEFAULT auth_strategy   keystone  # 配置認證方式為keystone
33 crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP  # 配置管理ip為主機地址
34 crudini --set /etc/nova/nova.conf DEFAULT use_neutron True  # 定義nova支持neutron網絡服務組件
35 crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver  # 關閉nova計算服務組件的防火牆功能
36 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0   # 定義metadata監聽所有IP地址
37 crudini --set /etc/nova/nova.conf DEFAULT metadata_listen_port 8775  # 定義metadata監聽8775端口
38 # 配置消息隊列服務
39 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host $HOST_NAME  # 消息隊列的主機名
40 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER # 消息隊列得用戶
41 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit  rabbit_password  $RABBIT_PASS # 消息隊列的密碼
42 # 配置keystone認證
43 crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://$HOST_NAME:5000  # 普通用戶訪問端口
44 crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理員訪問端口
45 crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211  # 緩存服務端口
46 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
47 crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME  # 租戶
48 crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME # 用戶
49 crudini --set /etc/nova/nova.conf keystone_authtoken project_name service  # 服務租戶
50 crudini --set /etc/nova/nova.conf keystone_authtoken username  nova  # 用戶名
51 crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS  # 密碼
52 # 配置VNC(虛擬網絡控制台)
53 crudini --set /etc/nova/nova.conf vnc vncserver_listen $HOST_IP  # 使用主機地址為管理地址
54 crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $HOST_IP  # 使用主機地址為數據網絡IP地址
55 # 配置glance鏡像服務地址
56 crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292
57 # 配置lock(文件鎖)的文件路徑
58 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
59 
60 #### 將nova和nova_api的信息同步到數據庫
61 su -s /bin/sh -c "nova-manage api_db sync" nova
62 su -s /bin/sh -c "nova-manage db sync" nova
63 
64 #### 清空iptables的規則列並保存
65 iptables -F
66 iptables -X
67 iptables -Z
68 /usr/libexec/iptables/iptables.init save
69 
70 #### 開啟nova的相關服務
71 systemctl enable openstack-nova-api.service  openstack-nova-consoleauth.service openstack-nova-scheduler.service  openstack-nova-conductor.service openstack-nova-novncproxy.service
72 systemctl start openstack-nova-api.service  openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
73 
74 :
iaas-install-nova-controller.sh
 1 #!/bin/bash
 2 #### 生效(加載)腳本配置文件
 3 source /etc/xiandian/openrc.sh
 4 
 5 #### ping控制節點最多四次並將標准和錯誤輸出永久丟棄,如果執行失敗后打印錯誤信息並退出
 6 ping $HOST_IP -c 4 >> /dev/null 2>&1
 7         if [ 0  -ne  $? ]; then
 8                 echo -e "\033[31m Warning\nPlease make sure the network configuration is correct!\033[0m"
 9                 exit 1
10         fi
11 
12 #### 同步時鍾服務器(單節點需要注釋或刪除)
13 #sed -i  -e '/server/d' -e "/fudge/d" /etc/ntp.conf
14 #ntpdate $HOST_IP
15 
16 #### 安裝邏輯卷和nova-compute組件
17 yum install lvm2 -y
18 yum install openstack-nova-compute -y
19 
20 #### 配置計算服務
21 # 配置默認服務信息
22 crudini --set /etc/nova/nova.conf DEFAULT rpc_backend  rabbit  # 配置通信機制為rabbit消息隊列服務
23 crudini --set /etc/nova/nova.conf DEFAULT auth_strategy   keystone  # 配置認證方式為keystone
24 crudini --set /etc/nova/nova.conf DEFAULT my_ip $HOST_IP_NODE # 配置管理ip為主機地址
25 crudini --set /etc/nova/nova.conf DEFAULT use_neutron True # 配置使用neutron網絡服務組件
26 crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver # 關閉nova計算服務組件的防火牆功能
27 # 配置消息隊列服務
28 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host $HOST_NAME  # 消息隊列服務主機
29 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER # 消息隊列服務用戶
30 crudini --set /etc/nova/nova.conf oslo_messaging_rabbit  rabbit_password  $RABBIT_PASS # 消息隊列服務密碼
31 # 配置keystone認證服務
32 crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://$HOST_NAME:5000  # 普通用戶訪問端點
33 crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://$HOST_NAME:35357 # 管理員訪問端點
34 crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers $HOST_NAME:11211 # 緩存服務訪問端點
35 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password  
36 crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name $DOMAIN_NAME  # 租戶
37 crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name $DOMAIN_NAME  # 用戶
38 crudini --set /etc/nova/nova.conf keystone_authtoken project_name service # 服務
39 crudini --set /etc/nova/nova.conf keystone_authtoken username  nova  # 用戶
40 crudini --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASS  #密碼
41 # 配置VNC(虛擬網絡控制台)
42 crudini --set /etc/nova/nova.conf vnc enabled True  # 關閉vns
43 crudini --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0 # 不監聽任何端口
44 crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address  $HOST_IP_NODE # 使用主機地址為數據網路IP地址
45 crudini --set /etc/nova/nova.conf vnc novncproxy_base_url  http://$HOST_IP:6080/vnc_auto.html # 代理服務地址
46 # 配置glance鏡像服務地址
47 crudini --set /etc/nova/nova.conf glance api_servers http://$HOST_NAME:9292
48 # 配置lock(文件鎖)的文件路徑
49 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
50 
51 #### 檢查本機是否支持硬件加速
52 virt_num=`egrep -c '(vmx|svm)' /proc/cpuinfo`
53 if [ $virt_num = '0' ];then
54         crudini --set /etc/nova/nova.conf libvirt virt_type  qemu
55 fi
56 crudini --set /etc/nova/nova.conf libvirt inject_key True
57 
58 #### 清空iptables的規則列並保存
59 iptables -F
60 iptables -X
61 iptables -Z
62 /usr/libexec/iptables/iptables.init save
63 
64 #### 開啟nova-compute服務
65 systemctl enable libvirtd.service openstack-nova-compute.service
66 systemctl start libvirtd.service openstack-nova-compute.service
iaas-install-nova-compute.sh

 

       6. 網絡服務腳本

           1. 控制節點(單節點)

  1 #!/bin/bash
  2 #### 生效(加載)腳本配置文件和keystone的admin配置文件
  3 source /etc/xiandian/openrc.sh
  4 source /etc/keystone/admin-openrc.sh
  5 
  6 #### 創建neutron用戶並授予本地和遠程登錄權限
  7 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS neutron ;"
  8 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '$NEUTRON_DBPASS' ;"
  9 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '$NEUTRON_DBPASS' ;"
 10 
 11 #### 創建neutron用戶並授予admin權限,創建網絡服務,創建處理外部、內部和admin訪問端口
 12 openstack user create --domain $DOMAIN_NAME --password $NEUTRON_PASS neutron
 13 openstack role add --project service --user neutron admin
 14 openstack service create --name neutron --description "OpenStack Networking" network
 15 openstack endpoint create --region RegionOne network public http://$HOST_NAME:9696
 16 openstack endpoint create --region RegionOne network internal http://$HOST_NAME:9696
 17 openstack endpoint create --region RegionOne network admin http://$HOST_NAME:9696
 18 
 19 #### 安裝neutron的核心組件
 20 yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables  openstack-neutron-openvswitch  openstack-neutron-lbaas python-neutron-lbaas haproxy  openstack-neutron-fwaas
 21 
 22 #### 配置網絡服務
 23 # 配置數據庫連接
 24 crudini --set /etc/neutron/neutron.conf database connection  mysql://neutron:$NEUTRON_DBPASS@$HOST_NAME/neutron
 25 # 配置消息隊列服務
 26 crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
 27 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
 28 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
 29 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
 30 # 配置插件信息
 31 crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin  ml2  # 核心插件
 32 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins  router # 服務插件路由
 33 crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips  True # 允許包含多個ip
 34 # 配置keystone認證服務
 35 crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
 36 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
 37 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
 38 crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
 39 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type  password
 40 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
 41 crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name $DOMAIN_NAME
 42 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name  service
 43 crudini --set /etc/neutron/neutron.conf keystone_authtoken username  neutron
 44 crudini --set /etc/neutron/neutron.conf keystone_authtoken password  $NEUTRON_PASS
 45 # 配置nova計算服務
 46 crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes  True
 47 crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes  True
 48 crudini --set /etc/neutron/neutron.conf  nova auth_url  http://$HOST_NAME:35357
 49 crudini --set /etc/neutron/neutron.conf  nova auth_type  password
 50 crudini --set /etc/neutron/neutron.conf  nova project_domain_name  $DOMAIN_NAME
 51 crudini --set /etc/neutron/neutron.conf  nova user_domain_name  $DOMAIN_NAME
 52 crudini --set /etc/neutron/neutron.conf  nova region_name  RegionOne
 53 crudini --set /etc/neutron/neutron.conf  nova project_name  service
 54 crudini --set /etc/neutron/neutron.conf  nova username  nova
 55 crudini --set /etc/neutron/neutron.conf  nova password  $NOVA_PASS
 56 crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path  /var/lib/neutron/tmp
 57 # 配置ml2(Ml2插件是一種同意OpenStack網絡同一時候地利用多種二層網絡技術的框架)
 58 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers  flat,vlan,gre,vxlan,local # 配置類型驅動(管理多種網絡類型)
 59 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types   
 60 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers  openvswitch,l2population  # 配置機制驅動
 61 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers  port_security
 62 # 配置安全組
 63 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset  True  # 開啟ip設置
 64 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_security_group true  # 開啟安全組
 65 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup firewall_driver iptables_hybrid  # 開啟防火牆
 66 # 配置接口驅動和外部網絡
 67 crudini --set  /etc/neutron/l3_agent.ini DEFAULT interface_driver  neutron.agent.linux.interface.OVSInterfaceDriver
 68 crudini --set  /etc/neutron/l3_agent.ini DEFAULT external_network_bridge 
 69 # 配置dhcp
 70 crudini --set  /etc/neutron/dhcp_agent.ini DEFAULT interface_driver  neutron.agent.linux.interface.OVSInterfaceDriver
 71 crudini --set  /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver  neutron.agent.linux.dhcp.Dnsmasq
 72 crudini --set  /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata  True
 73 # 配置openvswitch
 74 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent l2_population True
 75 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True
 76 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs integration_bridge br-int
 77 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup  firewall_driver iptables_hybrid
 78 # 配置metadata
 79 crudini --set  /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip  $HOST_IP
 80 crudini --set  /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret  $METADATA_SECRET
 81 crudini --set  /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_port 8775
 82 # 配置nova
 83 crudini --set  /etc/nova/nova.conf DEFAULT auto_assign_floating_ip True
 84 crudini --set  /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0
 85 crudini --set  /etc/nova/nova.conf DEFAULT metadata_listen_port 8775
 86 crudini --set  /etc/nova/nova.conf DEFAULT scheduler_default_filters 'AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter'
 87 crudini --set  /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
 88 crudini --set  /etc/nova/nova.conf neutron  url  http://$HOST_NAME:9696
 89 crudini --set  /etc/nova/nova.conf neutron  auth_url  http://$HOST_NAME:35357
 90 crudini --set  /etc/nova/nova.conf neutron  auth_type  password
 91 crudini --set  /etc/nova/nova.conf neutron  project_domain_name  $DOMAIN_NAME
 92 crudini --set  /etc/nova/nova.conf neutron  user_domain_name  $DOMAIN_NAME
 93 crudini --set  /etc/nova/nova.conf neutron  region_name  RegionOne
 94 crudini --set  /etc/nova/nova.conf neutron  project_name  service
 95 crudini --set  /etc/nova/nova.conf neutron  username  neutron
 96 crudini --set  /etc/nova/nova.conf neutron  password  $NEUTRON_PASS
 97 crudini --set  /etc/nova/nova.conf neutron  service_metadata_proxy  True
 98 crudini --set  /etc/nova/nova.conf neutron  metadata_proxy_shared_secret  $METADATA_SECRET
 99 
100 #### 配置內核轉發
101 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 
102 echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf 
103 echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf
104 sysctl -p
105  
106 #### 創建鏈接並同步數據庫
107 ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
108 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
109 
110 #### 開啟服務
111 systemctl restart openvswitch
112 systemctl enable openvswitch
113 ovs-vsctl add-br br-int  #添加網橋
114 systemctl restart openstack-nova-api.service
115 systemctl enable neutron-server.service    neutron-openvswitch-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
116 systemctl restart neutron-server.service   neutron-openvswitch-agent neutron-dhcp-agent.service neutron-metadata-agent.service
117 systemctl enable neutron-l3-agent.service
118 systemctl restart neutron-l3-agent.service
iaas-install-neutron-controller.sh
 1 #!/bin/bash
 2 #### 生效腳本配置文件和keystone的admin配置文件
 3 source /etc/xiandian/openrc.sh
 4 source /etc/keystone/admin-openrc.sh
 5 
 6 #### 配置neutron的負載均衡
 7 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router,lbaas,firewall
 8 crudini --set /etc/neutron/neutron_lbaas.conf service_providers service_provider LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
 9 crudini --set /etc/neutron/lbaas_agent.ini DEFAULT device_driver neutron_lbaas.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver
10 crudini --set /etc/neutron/lbaas_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
11 crudini --set /etc/neutron/lbaas_agent.ini haproxy user_group haproxy
12 #### 配置neutron的防火牆服務
13 crudini --set /etc/neutron/neutron.conf service_providers FIREWALL:Iptables:neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver:default
14 crudini --set /etc/neutron/fwaas_driver.ini fwaas driver neutron_fwaas.services.firewall.drivers.linux.iptables_fwaas.IptablesFwaasDriver
15 crudini --set /etc/neutron/fwaas_driver.ini fwaas enabled True
16 #### 設置租戶的網絡類型和私有網絡提供的標識范圍
17 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types  gre
18 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre tunnel_id_ranges  1:1000
19 
20 #### 添加一個br-ex網橋並將其添加到第二塊網卡
21 ovs-vsctl add-br br-ex
22 ovs-vsctl add-port br-ex $INTERFACE_NAME 
23 
24 #### 使用標准輸出和輸入覆蓋第二塊網卡的內容
25 cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE_NAME <<EOF
26 DEVICE=$INTERFACE_NAME  # 網卡名稱
27 TYPE=Ethernet  # 網絡類型
28 BOOTPROTO=none  # 禁用dhcp
29 ONBOOT=yes  # 開機自啟設備
30 EOF
31 systemctl restart network
32 
33 #### 將bridge網絡轉為openvswitch
34 crudini --set  /etc/neutron/l3_agent.ini DEFAULT  external_network_bridge  br-ex
35 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings  physnet1:br-ex
36 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types  gre
37 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip $HOST_IP
38 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs  enable_tunneling True
39 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings external:br-ex
40 
41 neutron-db-manage --service lbaas upgrade head
42 neutron-db-manage --subproject neutron-fwaas upgrade head
43 #### 開啟neutron服務
44 systemctl restart neutron-server 
45 systemctl restart neutron-l3-agent neutron-openvswitch-agent 
46 #### 開啟neutron負載均衡服務
47 systemctl restart neutron-lbaas-agent
48 systemctl enabled neutron-lbaas-agent
iaas-install-neutron-controller-gre.sh

 

           2. 計算節點

 1 #!/bin/bash
 2 source /etc/xiandian/openrc.sh
 3 
 4 yum install openstack-neutron-linuxbridge ebtables ipset openstack-neutron openstack-neutron-ml2 opens
 5 tack-neutron-openvswitch -y
 6 
 7 #### 配置neutron的消息認證服務
 8 crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
 9 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
10 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
11 crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
12 
13 crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
14 
15 crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin  ml2
16 crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins  router
17 crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips  True
18 #### 配置keystone認證服務
19 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
20 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
21 crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
22 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type  password
23 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
24 crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name $DOMAIN_NAME
25 crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name  service
26 crudini --set /etc/neutron/neutron.conf keystone_authtoken username  neutron
27 crudini --set /etc/neutron/neutron.conf keystone_authtoken password  $NEUTRON_PASS
28 #### 配置lock的文件路徑
29 crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path  /var/lib/neutron/tmp
30 
31 #### 配置neutron的ml2
32 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers  flat,vlan,gre,vxlan,local  # 配置類型驅動
33 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types  
34 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers  openvswitch,l2population  # 配置機制驅動
35 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers  port_security
36 
37 #### 配置neutron的安全組
38 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset  True
39 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_security_group true
40 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup firewall_driver iptables_hybrid
41 
42 #### 配置neutron的配額
43 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent l2_population True
44 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True
45 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs integration_bridge br-int
46 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup  firewall_driver iptables_hybrid
47 
48 #### 配置nova計算服務
49 crudini --set  /etc/nova/nova.conf neutron  url  http://$HOST_NAME:9696
50 crudini --set  /etc/nova/nova.conf neutron  auth_url  http://$HOST_NAME:35357
51 crudini --set  /etc/nova/nova.conf neutron  auth_type  password
52 crudini --set  /etc/nova/nova.conf neutron  project_domain_name  $DOMAIN_NAME
53 crudini --set  /etc/nova/nova.conf neutron  user_domain_name  $DOMAIN_NAME
54 crudini --set  /etc/nova/nova.conf neutron  region_name  RegionOne
55 crudini --set  /etc/nova/nova.conf neutron  project_name  service
56 crudini --set  /etc/nova/nova.conf neutron  username  neutron
57 crudini --set  /etc/nova/nova.conf neutron  password  $NEUTRON_PASS
58 crudini --set  /etc/nova/nova.conf DEFAULT use_neutron True
59 crudini --set  /etc/nova/nova.conf DEFAULT linuxnet_interface_driver  nova.network.linux_net.LinuxOVSInterfaceDriver
60 crudini --set  /etc/nova/nova.conf DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver
61 crudini --set  /etc/nova/nova.conf DEFAULT vif_plugging_is_fatal  True
62 crudini --set  /etc/nova/nova.conf DEFAULT vif_plugging_timeout  300
63 
64 #### 配置內核轉發
65 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
66 echo 'net.ipv4.conf.default.rp_filter=0' >> /etc/sysctl.conf 
67 echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf
68 sysctl -p 
69 
70 ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
71 
72 ### 開啟neutron服務
73 systemctl restart openvswitch
74 systemctl enable openvswitch
75 ovs-vsctl add-br br-int  #添加網橋br-int
76 systemctl restart openstack-nova-compute.service
77 systemctl restart openstack-nova-compute neutron-metadata-agent
78 systemctl restart neutron-openvswitch-agent 
79 systemctl enable neutron-openvswitch-agent neutron-metadata-agent
iaas-install-neutron-compute.sh
 1 #!/bin/bash
 2 #### 加載配置文件
 3 source /etc/xiandian/openrc.sh
 4 
 5 #### 設置租戶的網絡類型和私有網絡提供的標識范圍
 6 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types  gre
 7 crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre tunnel_id_ranges  1:1000
 8 
 9 #### 添加網橋並且覆蓋第二塊網卡的內容
10 ovs-vsctl add-br br-ex
11 ovs-vsctl add-port br-ex $INTERFACE_NAME
12 cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE_NAME <<EOF
13 DEVICE=$INTERFACE_NAME
14 TYPE=Ethernet
15 BOOTPROTO=none
16 ONBOOT=yes
17 EOF
18 systemctl restart network
19 
20 #### 將bridge轉為openvswitch
21 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings  physnet1:br-ex
22 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types  gre
23 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip $HOST_IP_NODE
24 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs  enable_tunneling True
25 crudini --set  /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings external:br-ex
26 
27 #### 開啟neutron服務
28 systemctl restart neutron-openvswitch-agent 
iaas-install-neutron-compute-gre.sh

 

       7. web界面服務:iaas-install-dashboard.sh

 1 #!/bin/bash
 2 #### 加載配置文件並安裝組件
 3 source /etc/xiandian/openrc.sh
 4 yum install openstack-dashboard -y 
 5 
 6 #### 修改本地設置
 7 sed -i -e "s/^ALLOWED_HOSTS.*/ALLOWED_HOSTS = ['*','localhost']/g" \   # 將所有以ALLOWED_HOSTS開頭和結尾的串替換為ALLOWED_HOSTS並設置為['*','localhost']
 8 -e "s/^OPENSTACK_HOST.*/OPENSTACK_HOST = \"$HOST_NAME\"/g" \
 9 -e "s/^TIME_ZONE.*/TIME_ZONE = \"UTC\"/g" -e '133,138d' \
10 -e '128,133s/^#//' \
11 -e "128 i SESSION_ENGINE = 'django.contrib.sessions.backends.cache'" \
12 -e "s/http:\/\/%s:5000\/v2.0/http:\/\/%s:5000\/v3/g" \
13 -e 's/#OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = False/OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True/g' \
14 -e '55,60s/^#//'  \
15 -e '56d' \
16 -e '72s/^#//' \
17 -e 's/OPENSTACK_KEYSTONE_DEFAULT_ROLE*.*/OPENSTACK_KEYSTONE_DEFAULT_ROLE = \"user\"/g' /etc/openstack-dashboard/local_settings
18 
19 sed -i "s/SITE_BRANDING =.*/SITE_BRANDING = 'XianDian Dashboard'/g"  /usr/share/openstack-dashboard/openstack_dashboard/settings.py
20 sed -i '/WSGIScriptAlias\ \/\ \/usr\/share\/openstack-dashboard\/openstack_dashboard\/wsgi\/django.wsgi/d'  /etc/httpd/conf.d/openstack-dashboard.conf
21 systemctl restart httpd.service memcached.service
iaas-install-dashboard.sh

 

       8. 塊存儲服務腳本:iaas-install-cinder-{controller,compute}.sh

 1 #!/bin/bash
 2 yum install -y openstack-cinder
 3 ####配置頁面顯示
 4 sed -i -e 's/\"consistencygroup:create\" : \"group:nobody\"/"consistencygroup:create" : ""/g' \
 5 -e 's/\"consistencygroup:delete\": \"group:nobody\"/\"consistencygroup:delete\": \"\"/g' \
 6 -e 's/\"consistencygroup:update\": \"group:nobody\"/\"consistencygroup:update\": \"\"/g' \
 7 -e  's/\"consistencygroup:get\": \"group:nobody\"/\"consistencygroup:get\": \"\"/g' \
 8 -e  's/\"consistencygroup:get_all\": \"group:nobody\"/\"consistencygroup:get_all\": \"\"/g' \
 9 -e  's/\"consistencygroup:create_cgsnapshot" \: \"group:nobody\"/\"consistencygroup:create_cgsnapshot"
10  \: \"\"/g' \
11 -e  's/\"consistencygroup:delete_cgsnapshot\": \"group:nobody\"/\"consistencygroup:delete_cgsnapshot\"
12 : \"\"/g'  \
13 -e 's/\"consistencygroup:get_cgsnapshot\": \"group:nobody\"/\"consistencygroup:get_cgsnapshot\": \"\"/
14 g' \
15 -e 's/\"consistencygroup:get_all_cgsnapshots\": \"group:nobody\"/\"consistencygroup:get_all_cgsnapshot
16 s\": \"\"/g' /etc/cinder/policy.json 
17 
18 ####加載腳本配置文件和keystone的admin的環境配置文件
19 source /etc/xiandian/openrc.sh
20 source /etc/keystone/admin-openrc.sh
21 
22 #### 創建cinder用戶並授予本地和遠程登錄權限
23 mysql -uroot -p$DB_PASS -e "create database IF NOT EXISTS cinder ;"
24 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '$C
25 INDER_DBPASS' ;"
26 mysql -uroot -p$DB_PASS -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '$CINDER_DB
27 PASS' ;"
28 
29 #### 創建cinder用戶並授予admin角色,創建虛擬卷服務,開啟處理外部、內部和admin訪問端口
30 openstack user create --domain $DOMAIN_NAME --password $CINDER_PASS cinder
31 openstack role add --project service --user cinder admin
32 openstack service create --name cinder --description "OpenStack Block Storage" volume
33 openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
34 openstack endpoint create --region RegionOne volume public http://$HOST_NAME:8776/v1/%\(tenant_id\)s
35 openstack endpoint create --region RegionOne volume internal http://$HOST_NAME:8776/v1/%\(tenant_id\)s
36 openstack endpoint create --region RegionOne volume admin http://$HOST_NAME:8776/v1/%\(tenant_id\)s
37 openstack endpoint create --region RegionOne volumev2 public http://$HOST_NAME:8776/v2/%\(tenant_id\)s
38 openstack endpoint create --region RegionOne volumev2 internal http://$HOST_NAME:8776/v2/%\(tenant_id\)s
39 openstack endpoint create --region RegionOne volumev2 admin http://$HOST_NAME:8776/v2/%\(tenant_id\)s
40 
41 #### 配置cinder的消息隊列服務
42 crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:$CINDER_DBPASS@$HOST_NAME/cinder
43 crudini --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit
44 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
45 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
46 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
47 
48 #### 配置keystone認證服務
49 crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
50 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
51 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
52 crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
53 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type  password
54 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
55 crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name $DOMAIN_NAME
56 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name  service
57 crudini --set /etc/cinder/cinder.conf keystone_authtoken username  cinder
58 crudini --set /etc/cinder/cinder.conf keystone_authtoken password  $CINDER_PASS
59 #### 配置管理ip為主機地址
60 crudini --set /etc/cinder/cinder.conf DEFAULT my_ip $HOST_IP
61 crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
62 
63 #### 將cinder的信息同步到數據庫
64 su -s /bin/sh -c "cinder-manage db sync" cinder
65 
66 crudini --set /etc/nova/nova.conf cinder os_region_name  RegionOne
67 
68 #### 開啟cinder服務
69 systemctl restart openstack-nova-api.service
70 systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
71 systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
iaas-install-cinder-controller.sh
 1 #!/bin/bash
 2 #### 加載腳本配置文件,安裝lvm等組件,開啟lvm服務
 3 source /etc/xiandian/openrc.sh
 4 yum install lvm2 targetcli python-keystone openstack-cinder  -y
 5 systemctl enable lvm2-lvmetad.service
 6 systemctl restart lvm2-lvmetad.service
 7 
 8 #### 創建pv物理卷和vg卷組
 9 pvcreate -f /dev/$BLOCK_DISK
10 vgcreate cinder-volumes /dev/$BLOCK_DISK
11 
12 #### 
13 # sed -i  "/$BLOCK_DISK/d"  /etc/lvm/lvm.conf
14 # sed -i  '/^devices/a\        filter = [ "a/sdb/", "r/.*/"]' /etc/lvm/lvm.conf
15 # sed -i  "s/sdb/$BLOCK_DISK/g" /etc/lvm/lvm.conf
16 
17 # 配置數據庫連接和消息隊列服務
18 crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:$CINDER_DBPASS@$HOST_NAME/cinder
19 crudini --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit
20 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_host $HOST_NAME
21 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_userid $RABBIT_USER
22 crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_password  $RABBIT_PASS
23 
24 #### 配置keystone認證服務
25 crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
26 crudini --set /etc/cinder/cinder.conf DEFAULT enabled_backends  lvm
27 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_uri  http://$HOST_NAME:5000
28 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url  http://$HOST_NAME:35357
29 crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers  $HOST_NAME:11211
30 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type  password
31 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name  $DOMAIN_NAME
32 crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name $DOMAIN_NAME
33 crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name  service
34 crudini --set /etc/cinder/cinder.conf keystone_authtoken username  cinder
35 crudini --set /etc/cinder/cinder.conf keystone_authtoken password  $CINDER_PASS
36 
37 #### 配置cinder塊存儲服務
38 crudini --set /etc/cinder/cinder.conf DEFAULT my_ip $HOST_IP_NODE
39 crudini --set /etc/cinder/cinder.conf lvm volume_driver cinder.volume.drivers.lvm.LVMVolumeDriver 
40 crudini --set /etc/cinder/cinder.conf lvm volume_group cinder-volumes
41 crudini --set /etc/cinder/cinder.conf lvm iscsi_protocol iscsi
42 crudini --set /etc/cinder/cinder.conf lvm iscsi_helper lioadm
43 
44 #### 配置glance鏡像服務地址
45 crudini --set /etc/cinder/cinder.conf DEFAULT glance_api_servers  http://$HOST_NAME:9292
46 crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
47 
48 #### 開啟cinder-volume服務
49 systemctl enable openstack-cinder-volume.service target.service
50 systemctl restart openstack-cinder-volume.service target.service
iaas-install-cinder-compute.sh

 

       9. 對象存儲服務:iaas-install-swift-{controller,compute}.sh

  1 #!/bin/bash
  2 #### 加載腳本配置文件和keystone的admin環境變量配置文件,安裝swift的核心組件
  3 source /etc/xiandian/openrc.sh
  4 source /etc/keystone/admin-openrc.sh
  5 yum install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached -y
  6 
  7 
  8 #### 創建swift用戶並授予admin權限,創建對象存儲服務,創建處理外部、內部和admin訪問端口
  9 openstack user create --domain $DOMAIN_NAME --password $SWIFT_PASS swift
 10 openstack role add --project service --user swift admin
 11 openstack service create --name swift --description "OpenStack Object Storage" object-store
 12 openstack endpoint create --region RegionOne object-store public http://$HOST_NAME:8080/v1/AUTH_%\(tenant_id\)s
 13 openstack endpoint create --region RegionOne object-store internal http://$HOST_NAME:8080/v1/AUTH_%\(tenant_id\)s
 14 openstack endpoint create --region RegionOne object-store admin http://$HOST_NAME:8080/v1
 15 
 16 #### 使用標准輸入和輸出編寫swift的代理服務配置文件
 17 cat <<EOF > /etc/swift/proxy-server.conf
 18 # 配置默認信息
 19 [DEFAULT]
 20 bind_port = 8080  # 配置對象存儲服務組件使用的端口
 21 swift_dir = /etc/swift  # 配置對象存儲服務組件使用的路徑
 22 user = swift  # 配置對象存儲服務使用的用戶
 23 # 配置安裝管道
 24 [pipeline:main]
 25 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  # 啟用相應的模塊
 26 # 配置代理服務
 27 [app:proxy-server]
 28 use = egg:swift#proxy  # 使用方法
 29 account_autocreate = True  # 開啟自動創建賬戶
 30 # 配置臨時用戶角色
 31 [filter:tempauth]
 32 use = egg:swift#tempauth  # 使用方法
 33 user_admin_admin = admin .admin .reseller_admin  # 管理員角色
 34 user_test_tester = testing .admin  # 普通用戶角色
 35 user_test2_tester2 = testing2 .admin
 36 user_test_tester3 = testing3
 37 user_test5_tester5 = testing5 service
 38 # 配置訪問端口
 39 [filter:authtoken]
 40 paste.filter_factory = keystonemiddleware.auth_token:filter_factory  # Paste過濾器 "authtoken" 添加到Paste管道的適當位置, 完成在OpenStack服務上部署Keystone中間件
 41 auth_uri = http://$HOST_NAME:5000  # 普通用戶訪問端口
 42 auth_url = http://$HOST_NAME:35357  # 管理員訪問端口
 43 memcached_servers = $HOST_NAME:11211  # 緩存服務訪問端口
 44 auth_type = password
 45 project_domain_name = $DOMAIN_NAME  # 域
 46 user_domain_name = $DOMAIN_NAME # 域
 47 project_name = service  # 租戶
 48 username = swift  # 用戶
 49 password = $SWIFT_PASS  # 密碼
 50 delay_auth_decision = True
 51 # 配置keystone中間件
 52 [filter:keystoneauth]
 53 use = egg:swift#keystoneauth  # 使用方法
 54 operator_roles = admin,user  # 用戶角色
 55 # 配置安全驗證
 56 [filter:healthcheck]
 57 use = egg:swift#healthcheck、
 58 # 配置緩存
 59 [filter:cache]
 60 memcache_servers = $HOST_NAME:11211
 61 use = egg:swift#memcache
 62 # 配置速率限制
 63 [filter:ratelimit]
 64 use = egg:swift#ratelimit
 65 # 配置域的重新映射
 66 [filter:domain_remap]
 67 use = egg:swift#domain_remap
 68 [filter:catch_errors]
 69 use = egg:swift#catch_errors
 70 # 配置顯示名
 71 [filter:cname_lookup]
 72 use = egg:swift#cname_lookup
 73 # 配置靜態網頁
 74 [filter:staticweb]
 75 use = egg:swift#staticweb
 76 # 配置臨時URL
 77 [filter:tempurl]
 78 use = egg:swift#tempurl
 79 # 配置表單提交方式
 80 [filter:formpost]
 81 use = egg:swift#formpost
 82 # 配置用戶名校驗
 83 [filter:name_check]
 84 use = egg:swift#name_check
 85 # 配置端口顯示
 86 [filter:list-endpoints]
 87 use = egg:swift#list_endpoints
 88 # 配置代理日志
 89 [filter:proxy-logging]
 90 use = egg:swift#proxy_logging
 91 # 配置塊
 92 [filter:bulk]
 93 use = egg:swift#bulk
 94 [filter:slo]
 95 use = egg:swift#slo
 96 [filter:dlo]
 97 use = egg:swift#dlo
 98 # 容器配額
 99 [filter:container-quotas]
100 use = egg:swift#container_quotas
101 # 用戶配額
102 [filter:account-quotas]
103 use = egg:swift#account_quotas
104 # 配置系統衛士
105 [filter:gatekeeper]
106 use = egg:swift#gatekeeper
107 # 配置容器同步
108 [filter:container_sync]
109 use = egg:swift#container_sync
110 [filter:xprofile]
111 use = egg:swift#xprofile
112 [filter:versioned_writes]
113 use = egg:swift#versioned_writes
114 EOF
115 
116 #### swift操作
117 pushd /etc/swift # 創建目錄棧,將當前目錄壓入棧中(棧頂) 
118 # 用戶環操作
119 swift-ring-builder account.builder create 18 1 1 # 創建18個分區、1個副本和1頻率的用戶環構造器文件
120 swift-ring-builder account.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6002 --device $OBJECT_DISK --weight 100  # 將$OBJECT_DISK設備添加到用戶環 
121 swift-ring-builder account.builder  # 構建用戶環
122 swift-ring-builder account.builder rebalance  # 重新平衡環,通過重新分配分區最近沒有被重新分配的分區
123 # 容器環操作
124 swift-ring-builder container.builder create 10 1 1  # 創建10個分區、副本和頻率是1的容器環構造文件
125 swift-ring-builder container.builder add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6001 --device $OBJECT_DISK --weight 100  # 將$OBJECT_DISK設備添加到容器環
126 swift-ring-builder container.builder  # 構架容器環
127 swift-ring-builder container.builder rebalance  # 重新平衡環
128 # 對象環操作
129 swift-ring-builder object.builder create 10 1 1  # 創建10個分區、副本和頻率是1的對象環構造文件
130 swift-ring-builder object.builder  add --region 1 --zone 1 --ip $STORAGE_LOCAL_NET_IP --port 6000 --device $OBJECT_DISK --weight 100   # 將$OBJECT_DISK設備添加到容器環
131 swift-ring-builder object.builder  # 構建對象環
132 swift-ring-builder object.builder rebalance  # 重新平衡環
133 
134 popd # 將棧頂的目錄彈出,與pushd相反
135 
136 #### 使用標准輸入輸出編寫swift的配置文件
137 #---------------
138 cat << EOF > /etc/swift/swift.conf、
139 # 配置存儲路徑
140 [swift-hash]
141 swift_hash_path_suffix = changeme  # 配置hash路勁的后綴
142 swift_hash_path_prefix = changeme  # 配置hash路徑的前綴
143 # 配置存儲策略
144 [storage-policy:0]
145 name = Policy-0  # 配置默認存儲策略的名字
146 default = yes  # 開啟默認存儲策略
147 aliases = yellow, orange  # 別名的顏色
148 [swift-constraints]
149 EOF
150 
151 #### 修改權限,開啟swift的代理和緩存服務
152 chown -R root:swift /etc/swift
153 systemctl enable openstack-swift-proxy.service memcached.service
154 systemctl restart openstack-swift-proxy.service memcached.service
iaas-install-swift-controller.sh
  1 #!/bin/bash
  2 #### 基本配置
  3 source /etc/xiandian/openrc.sh  # 加載配置文件
  4 yum install xfsprogs rsync openstack-swift-account openstack-swift-container openstack-swift-object -y  # 安裝swift服務組件
  5 mkfs.xfs -i size=1024 -f /dev/$OBJECT_DISK  # 格式化分區
  6 sed -i '/nodiratime/d' /etc/fstab  # 刪除舊掛載
  7 echo "/dev/$OBJECT_DISK /swift/node xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab  # 設置永久掛載
  8 mkdir -p /swift/node  # 創建掛載目錄
  9 mount /dev/$OBJECT_DISK /swift/node  # 掛載
 10 scp $HOST_NAME:/etc/swift/*.ring.gz /etc/swift/  # 同步環到集群到當前節點
 11 
 12 #### 配置同步服務器
 13 cat <<EOF > /etc/rsyncd.conf
 14 pid file = /var/run/rsyncd.pid  # 進程號文件路徑
 15 log file = /var/log/rsyncd.log  # 日志文件路勁
 16 uid = swift  # 用戶號
 17 gid = swift  # 組號
 18 address = 127.0.0.1  # 本機地址
 19 # 用戶配置
 20 [account]
 21 path            = /swift/node  # 路勁
 22 read only       = false # 是否只讀
 23 write only      = no # 是否只寫
 24 list            = yes  # 是否可以查看
 25 incoming chmod  = 0644  # 進入權限
 26 outgoing chmod  = 0644  # 出去權限
 27 max connections = 25  # 最大連接數
 28 lock file =     /var/lock/account.lock  # 鎖文件路勁
 29 # 容器配置
 30 [container]
 31 path            = /swift/node
 32 read only       = false
 33 write only      = no
 34 list            = yes
 35 incoming chmod  = 0644
 36 outgoing chmod  = 0644
 37 max connections = 25
 38 lock file =     /var/lock/container.lock
 39 # 對象配置
 40 [object]
 41 path            = /swift/node
 42 read only       = false
 43 write only      = no
 44 list            = yes
 45 incoming chmod  = 0644
 46 outgoing chmod  = 0644
 47 max connections = 25
 48 lock file =     /var/lock/object.lock
 49 # 服務配置
 50 [swift_server]
 51 path            = /etc/swift
 52 read only       = true
 53 write only      = no
 54 list            = yes
 55 incoming chmod  = 0644
 56 outgoing chmod  = 0644
 57 max connections = 5
 58 lock file =     /var/lock/swift_server.lock
 59 EOF
 60 # 開啟同步服務
 61 systemctl enable rsyncd.service
 62 systemctl restart rsyncd.service
 63 
 64 #### 配置賬戶服務
 65 cat <<EOF > /etc/swift/account-server.conf
 66 [DEFAULT]
 67 bind_port = 6002  # 訪問端口
 68 user = swift  # 用戶
 69 swift_dir = /etc/swift  # 訪問路勁
 70 devices = /swift/node  # 設備路徑
 71 mount_check = false
 72 [pipeline:main]
 73 pipeline = healthcheck recon account-server
 74 [app:account-server]
 75 use = egg:swift#account
 76 [filter:healthcheck]
 77 use = egg:swift#healthcheck
 78 [filter:recon]
 79 use = egg:swift#recon
 80 recon_cache_path = /var/cache/swift
 81 [account-replicator]
 82 [account-auditor]
 83 [account-reaper]
 84 [filter:xprofile]
 85 use = egg:swift#xprofile
 86 EOF
 87 
 88 #### 配置容器服務
 89 cat <<EOF > /etc/swift/container-server.conf
 90 [DEFAULT]
 91 bind_port = 6001
 92 user = swift
 93 swift_dir = /etc/swift
 94 devices = /swift/node
 95 mount_check = false
 96 [pipeline:main]
 97 pipeline = healthcheck recon container-server
 98 [app:container-server]
 99 use = egg:swift#container
100 [filter:healthcheck]
101 use = egg:swift#healthcheck
102 [filter:recon]
103 use = egg:swift#recon
104 recon_cache_path = /var/cache/swift
105 [container-replicator]
106 [container-updater]
107 [container-auditor]
108 [container-sync]
109 [filter:xprofile]
110 use = egg:swift#xprofile
111 EOF
112 
113 #### 配置對象服務
114 cat <<EOF > /etc/swift/object-server.conf
115 [DEFAULT]
116 bind_port = 6000
117 user = swift
118 swift_dir = /etc/swift
119 devices = /swift/node
120 mount_check = false
121 [pipeline:main]
122 pipeline = healthcheck recon object-server
123 [app:object-server]
124 use = egg:swift#object
125 [filter:healthcheck]
126 use = egg:swift#healthcheck
127 [filter:recon]
128 use = egg:swift#recon
129 recon_cache_path = /var/cache/swift
130 recon_lock_path = /var/lock
131 [object-replicator]
132 [object-reconstructor]
133 [object-updater]
134 [object-auditor]
135 [filter:xprofile]
136 use = egg:swift#xprofile
137 EOF
138 
139 #### 配置swift
140 cat <<EOF > /etc/swift/swift.conf
141 # 配置存儲路勁
142 [swift-hash]
143 swift_hash_path_suffix = changeme  # 配置hash路徑的后綴
144 swift_hash_path_prefix = changeme # 配置hash路勁的前綴
145 # 配置存儲策略
146 [storage-policy:0]
147 name = Policy-0
148 default = yes
149 aliases = yellow, orange
150 [swift-constraints]
151 EOF
152 
153 #### 修改目錄訪問權限
154 chown -R swift:swift /swift/node
155 mkdir -p /var/cache/swift
156 chown -R root:swift /var/cache/swift
157 chmod -R 775 /var/cache/swift
158 chown -R root:swift /etc/swift
159 
160 #### 開啟swift的賬戶、容器和對象服務
161 systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
162 systemctl restart openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
163 systemctl enable openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
164 systemctl restart openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
165 systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
166 systemctl restart openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
iaas-install-swift-compute.sh

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM