OpenStack高可用集群(上冊):原理與架構》—3 集群資源管理系統">《OpenStack高可用集群(上冊):原理與架構》—3 集群資源管理系統
791
2025-04-07
第11章
OpenStack高可用集群基礎服務部署
OpenStack是由眾多獨立子項目構成的復雜開源云計算平臺,這些獨立子項目不僅包括OpenStack“大帳篷”覆蓋下各自發展的眾多開源項目,還包括“大帳篷”外很多基礎性的開源項目。縱觀OpenStack集群的功能構成和部署過程,可以說OpenStack是集眾多開源項目于一體的大成者,而OpenStack云平臺的復雜性和高門檻也正源自其“開源集大成者”。本書在介紹OpenStack高可用集群部署時,將OpenStack高可用集群的部署一分為二,即基礎服務的高可用部署和核心服務的高可用部署。本章將重點介紹OpenStack基礎依賴服務的高可用部署。這些服務包括集群資源管理軟件Pacemaker、負載均衡軟件HAProxy、關系型數據庫MariaDB、緩存系統Memcache/Redis、消息隊列系統RabbitMQ和非關系型數據庫MongoDB,這些基礎服務的工作原理和相關配置使用在前面已進行了詳細介紹,本章主要針對這些基礎服務在Pacemaker集群中的高可用部署進行介紹。
在OpenStack高可用集群部署到生產環境之前,建議在實驗環境或測試環境中對OpenStack集群的高可用功能進行部署驗證。本章從實驗環境的角度出發,對如何部署搭建OpenStack高可用集群實驗環境進行了介紹,并給出了OpenStack離線安裝部署中本地離線安裝源的制作方法。通過本章實驗環境的準備介紹,讀者可以參考并搭建出自己的實驗環境并對后續OpenStack相關服務的高可用性部署進行驗證,在高可用功能驗證完成后,便可輕松將實驗環境遷移至生產環境中。
11.1OpenStack集群高可用離線部署
OpenStack是開源項目,用戶可以通過Internet利用網絡安裝源進行實時部署,也可以下載源代碼或者開源廠商發行的RPM安裝包進行離線部署。由于網絡安裝源常位于國外,且國內網絡環境限制,通常致使安裝過程中斷或者耗時較長的情況,尤其是在大規模安裝環境中,這種方式顯然是不明智的。此外,對于像金融、政府等行業,由于安全限制等原因,數據中心與互聯網通常是隔離的,類似的企業想要部署基于OpenStack的私有云,則必須通過離線安裝方式來實現。離線安裝方式可以是源代碼下載安裝方式,也可以是類似RDO的廠商開源發行版本離線安裝方式。如果采用離線源代碼安裝,則通常需要配置本地pip源;如果采用離線軟件安裝包的形式安裝,則通常需要配置本地yum源。
對于多數終端用戶而言,離線源代碼安裝方式似乎難度太大,而且要解決很多軟件依賴性問題,通常僅有對OpenStack具有深入理解的用戶才會使用離線源代碼安裝部署OpenStack。對于大多數用戶,較為理想的離線安裝方式便是通過互聯網同步遠程軟件包安裝源到本地,然后搭建本地共享yum源倉庫,這樣集群節點在部署安裝時便可利用內網進行安裝包的快速下載和安裝。為了便于不同級別的用戶參考,本節將介紹本地pip源和本地yum源的制作方式,用戶可以根據自身情況選擇和制作不同的本地源進行OpenStack的安裝部署。
11.1.1 制作OpenStack離線安裝pip源
OpenStack目前支持主流的Linux操作系統,而OpenStack主要用Python語言開發,對于Linux操作系統而言,yum是使用最為廣泛的軟件包安裝工具。而在Python的世界里,pip在軟件包的安裝和依賴解決方面有著類似yum的功能,因此也是使用極為廣泛的軟件包安裝工具。在OpenStack源代碼離線安裝中,通常使用pip來安裝OpenStack各個項目所需的Python依賴包。OpenStack各個項目在源代碼發行時,通常會將該項目所需的依賴包整理為一個文本文件,用戶在安裝部署該項目源代碼之前,必須事先安裝符合該文本文件中所需的全部依賴包,否則源代碼安裝將無法繼續。而pip在安裝依賴包時,默認使用的pip源由位于國外的www.pypi.org網站提供,由于國內特殊的網絡環境,在批量安裝依賴包時將會出現耗時較長或者安裝中斷等現象,因此,制作pip本地源變得尤為重要。本節將介紹幾種制作pip本地源的方式,通過pip本地源,用戶可以快速實現OpenStack項目依賴包的快速安裝。
pip是Python中目前最為流行和強大的安裝包管理工具,pip未來將會是傳統setuptools Python軟件包管理工具的替代者,雖然setuptools也提供了簡單易用的包安裝工具,如最為常見的easy_install命令行工具,便是由setuptools python包管理軟件所提供的命令行,但是,setuptools后期將不再被維護(Python 3將不再支持setuptools),因此對于Python包管理而言,pip將是最佳選擇。通常在安裝pip之前,需要安裝setuptools,如果是Python 3環境,則需要先安裝Distribute。對于CentOS 6或RHEL 6以上的Linux操作系統,可以通過如下命令來安裝適合用戶當前環境的setuptools:
wget https://bootstrap.pypa.io/ez_setup.py -O - | python
或者通過yum來安裝setuptools:
yum install setuptool
setuptools安裝完成后,即可使用easy_install包安裝管理工具。使用easy_install安裝pip的命令如下:
easy_install pip
除了提供Python軟件包安裝功能之外,pip還提供了類似yum的安裝包查詢、卸載和搜索等功能,默認情況下pip使用www.pypi.org提供的資源。pip的使用方法可以通過help命令來查看:
root@mitaka ~]# pip help
Usage:
pip
Commands:
install? ? ? ? ? ? ? ? Install packages.
uninstall? ? ? ? ? ? ? Uninstall packages.
freeze? ? ? ? ? ? ? ? ?Output installed packages in requirements format.
list? ? ? ? ? ? ? ? ? ? List installed packages.
show? ? ? ? ? ? ? ? ? ? Show information about installed packages.
search? ? ? ? ? ? ? ? ? Search PyPI for packages.
wheel? ? ? ? ? ? ? ? ? ?Build wheels from your requirements.
help? ? ? ? ? ? ? ? ? ? ?Show help for commands.
...
如使用pip安裝flask:
[root@mitaka ~]# pip install flask
查看已經安裝的包:
[root@mitaka ~]# pip show flask
Name: Flask
Version: 0.11.1
Summary: A microframework based on Werkzeug, Jinja2 and good intentions
Home-page: http://github.com/pallets/flask/
Author: Armin Ronacher
Author-email: armin.ronacher@active-4.com
License: BSD
Location: /usr/lib/python2.7/site-packages
Requires: click, Jinja2, Werkzeug, itsdangerous
pip在配置文件~.pip/pip.conf中通過index-pypi參數配置了默認安裝源,默認安裝源為http://pypi.python.org/simple,因此pip install和pip serach命令默認都會到pypi.python.org上下載或搜索pypi(python package index)軟件包。相對國外pip源,國內網絡環境要快很多,因此如果采用網絡安裝源進行pip安裝,則建議采用國內的pip源,這里推薦采用豆瓣源或者阿里云源進行安裝。安裝源的配置只需更改pip.conf中的[global]配置段即可,具體如下:
//豆瓣源配置
[global]
trusted-host = pypi.douban.com
index-url = http://pypi.douban.com/simple
//阿里云源配置
[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/
pip在安裝過程中,安裝文件默認緩存在$HOME/.cache/pip目錄,在該目錄中會生產很多以阿拉伯數字或字母命名的子目錄,這些子目錄中存放著pip安裝時下載的緩存文件。pip緩存目錄如下:
[root@mitaka http]# pwd
/root/.cache/pip/http
[root@mitaka http]# ll
total 0
drwx------.? 9 root root 62 Jul 27 16:22 0
drwx------.? 6 root root 38 Jul 27 16:23 1
drwx------. 13 root root 94 Jul 27 16:23 2
drwx------. 11 root root 78 Jul 27 16:22 3
drwx------. 13 root root 94 Jul 27 16:22 4
drwx------. 10 root root 70 Jul 27 16:23 5
drwx------. 12 root root 86 Jul 27 16:22 6
drwx------. 11 root root 78 Jul 27 16:22 7
drwx------.? 9 root root 62 Jul 27 16:22 8
drwx------. 13 root root 94 Jul 27 16:23 9
drwx------. 12 root root 86 Jul 27 16:21 a
drwx------. 13 root root 94 Jul 27 16:23 b
drwx------. 11 root root 78 Jul 27 16:23 c
drwx------. 11 root root 78 Jul 27 16:23 d
drwx------.? 9 root root 62 Jul 27 16:23 e
drwx------. 11 root root 78 Jul 27 16:17 f
由于pip緩存了安裝文件,因此用戶在uninstall后,如果想要重新安裝,則可以直接使用緩存中的軟件包進行安裝,而不必要再接入互聯網重新下載安裝包。使用本地緩存進行安裝的命令如下:
pip install package_nmae --src $HOME/.cache
或者如下:
pip install -r requirements.txt --src $HOME/.cache
這里的requirements.txt文件是多個需要安裝的軟件包的集合,pip會根據requirements.txt文件中的軟件包名稱和版本號自動進行下載安裝,這為pip進行批量安裝提供了一種實現方式。實際上,在進行OpenStack的源代碼安裝時,OpenStack每個項目都會提供一個requirements.txt文件,這個文件里記錄了該服務項目所需要的Python依賴包。在對OpenStack項目進行源碼安裝(python setup.py install)之前,必須先安裝requirements.txt文件中所要求的包。如下便是OpenStack Mitaka版本Nova項目(Nova-13.1.1)提供的requirements.txt文件的內容:
# The order of packages is significant, because pip processes them in the
#order of appearance. Changing the order has an impact on the overall #integration? process, which may cause wedges in the gate later.
//下述即是Nova所需的全部依賴包,安裝Nova前必須先安裝下述依賴包
pbr>=1.6 # Apache-2.0
SQLAlchemy<1.1.0,>=1.0.10 # MIT
boto>=2.32.1 # MIT
decorator>=3.4.0 # BSD
eventlet!=0.18.3,>=0.18.2 # MIT
Jinja2>=2.8 # BSD License (3 clause)
keystonemiddleware!=4.1.0,>=4.0.0 # Apache-2.0
……
直接對requirements.txt包含的依賴包進行安裝的命令如下:
pip install -r requirements.txt
如果requirements.txt文件指定的軟件包已經全部下載到本地文件系統中,則可以通過離線方式進行依賴包的安裝,安裝方式如下:
//指定包文件路徑進行離線安裝
pip install -r requirements.txt -d /path/to/packages
//取消索引,以本地文件為pip源進行離線安裝
pip install -r requirements.txt --no-index -f file:///path/to/packages
對于網絡環境較差或者大規模部署的場景,離線部署是最佳選擇,用戶僅需下載一次軟件包,即可進行多次快速安裝部署。此外,如果將已下載的軟件包通過NFS等網絡共享文件系統共享到集群節點,則集群節點可以同時進行離線批量安裝。在進行pip離線安裝之前,通常需要準備pip本地源。pip本地源可以通過兩種方式來實現,首先利用pip2pi工具下載軟件依賴包,然后利用Apache配置HTTP服務以提供軟件包的本地HTTP下載,或者通過配置pypiserver服務來監聽pip安裝請求并提供本地軟件包下載服務。下面對這兩種pip本地源的制作方式進行介紹。
1. pip2pi結合Apache
此方法的主要思想是利用pip2pi工具下載Python包,之后配置Apache服務器以提供本地軟件包的HTTP下載。基于pip2pi和Apache的pip本地源配置步驟如下:
1)創建軟件包存放目錄:
mkdir -p /root/pipy
2)安裝pip2pi,下載所需軟件包。pip2pi安裝命令如下:
pip install pip2pi
3)下載軟件包。軟件包批量下載有多種方式,可以直接使用pip工具編寫shell腳本下載,也可以通過上一步安裝的pip2pi直接批量下載。如果通過pip進行批量下載,則可以將集群部署所需的全部requirements.txt合并到相同文件中,具體如下:
find / -name requirements.txt -exec cat {} \;> pip_requirements_all.txt
將全部依賴軟件包整合進一個依賴文件后,利用循環語句進行批量下載,腳本語句可參考如下代碼:
#!/bin/bash
pip_require="pip_requirements_all.txt"
while read LINE
do
if [[ $LINE =~ ^[a-zA-Z] ]]
then
echo $LINE
pip install $LINE -d /root/pypi? //僅下載不安裝,建議使用國內源下載
fi
done < $ pip_require
當然,如果使用pip2pi工具下載,則無須編寫腳本,僅使用命令行即可進行批量下載。使用pip2pi工具下載單個依賴包,命令如下:
pip2tgz /root/pypi pypi_name
使用pip2pi工具批量下載軟件包,命令如下:
pip2tgz /root/pypi -r pip_requirements_all.txt
采用pip2pi工具提供的pip2tgz命令行會自動將pip_requirements_all.txt依賴文件中指定的軟件包全部下載到指定的目錄(/root/pypi)中。為了便于后續配置Apache服務器,軟件包下載存放目錄建議設置為/var/www/html/pypi,例如要下載keystone項目所需的全部依賴包,可以通過如下命令實現:
pip2tgz /var/www/html/pypi -r /openstack/keystone/requirements.txt
由于pip2pi默認使用pypi.python.org提供的源進行下載,為了提高下載速度,建議配置前文所述的國內豆瓣源或阿里源進行下載。
4)生成軟件包索引。軟件包下載到本地文件系統后,需要為全部軟件包生成索引(Index),這樣pip在安裝查詢時可以快速判斷指定的依賴軟件包是否存在于本地pip源中。索引可以使用dir2pi命令快速生成,命令如下:
dir2pi --normalize-package-names /var/www/html/pypi
dir2pi命令將會在/var/www/html/pypi目錄生成simple子目錄,simple文件中是下載到本地的全部軟件包標準化后的簡稱。simple目錄中的內容如下:
[root@ mitaka pypi]# cd /var/www/html/pypi/simple
[root@ mitaka simple]# ls -l
total 8
drwxr-xr-x. 2 root root? ?62 Jul 28 17:53 aioeventlet
drwxr-xr-x. 2 root root? ?50 Jul 28 17:53 alembic
drwxr-xr-x. 2 root root? ?57 Jul 28 17:53 amqp
drwxr-xr-x. 2 root root? ?50 Jul 28 17:53 anyjson
drwxr-xr-x. 2 root root? ?64 Jul 28 17:53 appdirs
......
每個軟件包在simple目錄中都會生成對應子目錄,目錄名稱為標準化后的軟件包名。simple中每個以軟件包名稱命名的子目錄下都會生成一個index.html文件,如WebOb軟件包對應在simple目錄中的子目錄為WebOb,而WebOb子目錄中index.html文件的內容如下:
[root@ mitaka simple]# cd? WebOb
[root@ mitaka WebOb]# more index.html
5)配置Apache服務器。確認已經安裝httpd軟件包,在/etc/httpd/conf.d目錄中新創建httpd虛擬機配置文件pip-server.conf。虛擬機配置文件內容如下:
ServerAdmin ynwssjx@126.com
ServerName pip.warrior.com
DocumentRoot /var/www/html/pypi
Options Indexes FollowSymLinks MultiViews
Allow Override None
Require all granted
ErrorLog logs/mirrors-error_log
CustomLog logs/mirrors-access_log common
Apache服務器配置完成后,重新啟動httpd服務:
systemctl restart httpd.service
netstat -ntl |grep 80
6)驗證軟件包HTTP下載。在瀏覽器輸入http://host_ip/pypi/simple,頁面將以超鏈接的形式顯示全部可供本地下載的軟件包名稱,如圖11-1所示。
此時,單擊任意軟件包名稱,瀏覽器便會自動下載對應的軟件包。
7)使用本地pip源安裝軟件。截至步驟6,pip本地源已經配置完成,現在即可使用pip本地源進行依賴包安裝。用戶可以通過pip安裝命令行指定本地源路徑,命令如下:
pip install --index-url http://host_ip/pypi/simple -r requirements.txt
也可以通過修改pip.conf配置文件一勞永逸地修改pip安裝的默認源,使其默認使用本地pip源安裝軟件,修改方式如下:
[global]
///////////douban mirrors///////////////////
#trusted-host=pypi.douban.com
#index-url = http://pypi.douban.com/simple
///////////pip2pi&apache local repos////////////
trusted-host=192.168.142.10
index-url = http://192.168.142.10/pypi/simple
這樣,用戶便可使用如下命令進行批量依賴包的離線安裝:
pip install -r requirements.txt
通過這種方式,用戶可以在集群中的多個節點上指定同一個本地pip源,并通過HTTP協議從本地Apache服務器上下載安裝軟件包。比起從www.pypi.org或者其他pip源下載進行安裝,pip本地源的安裝方式要快得多。
2. pip2pi結合pypiserver
利用pip2pi和Apache服務器結合的方式可以很好地提供pip本地源服務,但是配置Apache服務器相對復雜且不易理解,為了簡單起見,用戶也可以通過pip2pip與pypiserver的組合方式來提供本地pip源服務。這種方式通常只需兩個步驟即可實現pip本地源:第一步是利用pip2pi將依賴包的批量下載到特定目錄;第二步是啟動pypiserver服務(需要預先通過pip install pypiserver命令安裝pypiserver),并在啟動過程中指定服務監聽端口和軟件包的存放路徑。現在假設軟件包已經下載到本地/root/pypi目錄中,則可以通過如下命令啟動pypiserver服務進程:
pypi-server -i host_ip -p port packges_dir1 packges_dir12 ... &
其中,host_ip為啟動pypiserver服務的主機,port為pypiserver服務監聽端口,用戶可以同時指定多個本地軟件包路徑。pypi-server命令行工具不需要使用dir2pi生成軟件包Index,只需將需要的python包下載到本地,然后啟動pypiserver監聽服務即可。pypi-server可以使用--fall-back參數設置在指定監聽的包目錄中找不到需要的軟件包時,pip的候選pip源名稱。如下命令將前面配置的HTTP源作為pip的候選源:
pypi-server -i 192.168.142.10 -p 8080 --fallback-url \
http://192.168.142.10/pypi/simple /root/pypi &
上述啟動命令中,pip首先在/root/pypi目錄進行軟件包搜索,如果沒有找到,則轉入http://192.168.142.10/pypi/simple 這個HTTP服務器中搜索。此外,pypiserver服務進程必須以后臺進程形式啟動,在使用pip進行本地安裝之前,建議先檢查pypiserver進程是否正在運行,如果沒有運行則需要以后臺進程形式重新啟動。pypiserver進程啟動完成后,可以通過配置~.pip/pip.conf使pip默認使用本地pip源進行軟件包安裝,配置方式如下:
[global]
……
///////////pypiserver local repos//////////////
trusted-host=192.168.142.10
index-url = http://192.168.142.10:8080/simple/
配置完成后,pip默認將使用本地源進行包安裝。此時,用戶便可使用常規的pip安裝命令進行批量包安裝,具體命令如下:
pip install -r requirements.txt
此外,如果需要屏蔽pypiserver提供的本地pip源服務,則只需停止pypiserver服務進程即可。由于pypiserver運行在后臺,通常可以使用lsof命令查出pypiserver的PID,并通過kill命令將其停止即可。
運維 OpenStack 華為開源鏡像站 Mirrors
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。