《OpenStack高可用集群(下册):部署与运维》—11 OpenStack高可用集群基础服务部署

举报
华章计算机 发表于 2019/05/29 14:57:36 2019/05/29
【摘要】 本书摘自《OpenStack高可用集群(下册):部署与运维》一书中的第11章,第11.1.1节,作者是山金孝。


第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 <command> [options]


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

<a href='WebOb-1.4.1.tar.gz'>WebOb-1.4.1.tar.gz</a><br />

5)配置Apache服务器。确认已经安装httpd软件包,在/etc/httpd/conf.d目录中新创建httpd虚拟机配置文件pip-server.conf。虚拟机配置文件内容如下:

<VirtualHost *:80>

ServerAdmin ynwssjx@126.com 

ServerName pip.warrior.com

DocumentRoot /var/www/html/pypi

<Directory /var/www/html/pypi>

Options Indexes FollowSymLinks MultiViews

Allow Override None

Require all granted

</Directory>

ErrorLog logs/mirrors-error_log

CustomLog logs/mirrors-access_log common

</VirtualHost>

Apache服务器配置完成后,重新启动httpd服务:

systemctl restart httpd.service

netstat -ntl |grep 80

6)验证软件包HTTP下载。在浏览器输入http://host_ip/pypi/simple,页面将以超链接的形式显示全部可供本地下载的软件包名称,如图11-1所示。

image.png

此时,单击任意软件包名称,浏览器便会自动下载对应的软件包。

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命令将其停止即可。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。