作者:山金孝
出版社:机械工业出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
OpenStack高可用集群(下册):部署与运维试读:
前言
为什么写这本书OpenStack在云计算和IT基础架构领域的影响力已毋庸置疑,从OpenStack社区成立至今,短短几年时间里,其贡献者和用户已遍及全球各个地区和行业,OpenStack已然成为开源领域云计算的事实标准。近年来,国内OpenStack初创企业不断涌现,华人企业和工程师在OpenStack社区中的影响力和贡献占比不断上升,以华为、中兴为主的传统IT企业在OpenStack社区不断提升自己的影响力,并在社区的董事决策中占有一席之地。此外,99Cloud、United Stack、Easy Stack、UMCloud、AWCloud等OpenStack创业公司对Open-Stack的贡献也处于全球领先的位置,可以说在国内云计算大潮的推动下,OpenStack正在不断渗透并重构各个行业的IT架构。纵观2016年,可将其看成是OpenStack在国内企业用户中真正落地的元年,以国网、电信、移动和中海油等为主的大型国有企事业单位,以银联、邮蓄、兴业数金和众多地方商业银行为主的金融企业,以上交、西交、东南大学和人民在线、山西农业云、湖北楚天云等为主的科研政企单位,以及上汽集团、复兴医药等工业制造业都在部署或正式上线OpenStack私有云,当然还有更早便在使用OpenStack的诸多互联网企业。OpenStack作为开放、包容的基础架构云平台,在国外更有像AT&T、CERN、PayPal、BMW、eBay和Walmart等重量级的大型用户,以及IBM、HPE、Dell、Cisco、RedHat、Intel和Oracle等IT巨头的参与。从全球目前的云计算环境发展趋势而言,企业借助OpenStack构建私有云已成为多数用户云化并重构数据中心的首要选择。
自2010年OpenStack的Austin版本发布以来,历经7年的时间,OpenStack社区已发行了第15个版本Ocata,其稳定性和功能在不断增强。同时,在Liberty版本中引入“大帐篷”概念后,OpenStack以极为开放、包容的姿态不断整合已有或新生的IT技术,尤其是对Ceph存储和Docker容器技术的成功整合,真正显示出其在云计算大潮下中流砥柱的地位和集成引擎的强大一面。尽管在这几年的发展过程中也饱受指责、批评和诟病,同时还受到Docker后来居上甚至取而代之的威胁,但是OpenStack依然一路高歌向前,并以拥抱一切竞争对手的姿态不断完善和巩固自己的主导地位。时至今日,可以毫不夸张地说,在云计算领域,没有OpenStack实现不了的功能,也没有OpenStack整合不了的技术,或者说在开源领域,OpenStack已成为了云计算的代名词。
OpenStack虽然如此火爆,但是想要实现面向生产环境的OpenStack高可用云计算环境却并非易事,尤其对于高度依赖传统IT架构的企业而言,服务高可用一直是企业部署和使用OpenStack难以跨越的鸿沟,而这也成为了OpenStack真正落地并走向普通企业用户需要解决的“最后一公里”。OpenStack以开源共享的方式为用户走向云计算提供了便捷之道,但是其内部组件之复杂、涉及技术栈之多、版本更新之快以及部署维护之困难往往也超出很多用户的预期。围绕这些问题,OpenStack社区孵化了很多新项目以期解决被诟病最多的入门困难、部署困难和维护困难等问题。但是为了实现OpenStack的自动化部署,这些项目无一不又重新引入了新的理论技术,并从其他维度增加了用户使用OpenStack的学习和维护成本,而且这些项目并没有很好地解决企业用户最为关心的OpenStack服务高可用问题。以上种种,归其原因,在于社区曾明确OpenStack的高可用应交由用户的基础架构软件而非上层OpenStack项目来实现。因此,对于OpenStack企业用户而言,在OpenStack社区上游功能交付和终端用户部署实施之间一直横亘着一个难题,即如何在使用OpenStack的过程中通过集成高可用基础架构软件,实现保证业务连续性的OpenStack高可用集群。
虽然目前各个OpenStack厂商都有自己的OpenStack高可用解决方案,但是采用厂商定制商业方案似乎有违使用OpenStack的初衷,而且市面上的OpenStack书籍多以Open-Stack理论讲解和功能部署为主,却没有一本专门面向OpenStack高可用实施部署的中文书籍(虽然在OpenStack官方网站和其他互联网站点中也能找到OpenStack高可用建设的相关资料,但是这些资料或者藏头露尾,或者零散不全,且以英文资料居多)。秉承共享精神,为了给国内社区用户,尤其是新入门的OpenStack用户提供一套完整的OpenStack高可用部署参考方案,同时对OpenStack进行由底层基础架构软件至上层OpenStack核心组件的原理分析与高可用部署的一站式讲解,我们决定编写一本关于OpenStack高可用集群原理、部署与运维的书籍,对以OpenStack为核心的技术栈进行全面剖析,即从理论知识准备到高可用实战操作,再到后期的高可用集群运维进行透彻的分析和介绍,同时围绕OpenStack生态圈,对Ceph和Docker与OpenStack的集成应用进行实战讲解。希望本书能够为企业用户在OpenStack的应用部署中提供微薄之力。本书的主要内容和特色
本书分为上下两册,理论与实战结合,全面讲解了OpenStack的技术知识点。上册讲解了OpenStack相关的基础架构软件,如集群管理软件Pacemaker、负载均衡及高可用软件HAProxy和Keepalived、缓存系统Memcached和Redis、数据库MariaDB和MongoDB以及消息队列系统RabbitMQ等基础软件的理论知识,也可以了解到OpenStack三大核心组件——计算(Nova)、存储(Cinder/Ceph)和网络(Neutron)的架构原理及使用方式。
下册从实战角度讲解了如何对OpenStack的基础架构软件和核心组件项目进行高可用集群部署,然后介绍了如何在实际应用中对OpenStack高可用集群进行运维分析与故障解决。
整体而言,本书从项目实施的角度,按照“理论基础—实战部署—后期运维”的方式进行循序渐进的讲解,围绕OpenStack生态圈,不仅介绍了OpenStack的组件项目,还对其依赖的基础架构软件进行了完整介绍,同时对当前较为热门的Ceph和Docker在OpenStack中的集成应用也进行了分析和实战演示。本书面向的读者
书中以Linux系统运维为基础,通过Pacemaker集群软件为各项服务提供高可用性,涉及负载均衡、数据库、缓存系统、消息队列和云计算领域的存储、网络以及计算资源虚拟化等诸多知识点,是一本整合了OpenStack生态圈的技术书籍,非常适合OpenStack入门初学者、运维工程师和Open-Stack高可用架构工程师及Ceph存储管理员等从业人员阅读。
此外,本书也适合高校在读本科生或研究生用作OpenStack研究、部署和实践的参考书。通过对本书的学习,读者将可以从OpenStack入门级别走上高可用OpenStack生产项目实施和运维工程师的台阶。如何阅读本书
阅读本书之前,读者应该具备一定的KVM虚拟化知识、SAN网络或分布式存储知识以及Linux系统运维、集群管理和高可用相关方面的基础知识。由于篇幅较多,本书分为上、下两册,其中上册包括第1~10章,下册包括第11~15章,按照架构篇(第1~2章)、原理篇(第3~10章)、部署篇(第11~12章)、运维篇(第13~14章)以及扩展篇(第15章)的结构进行编排,读者如果仅关注于某个阶段的参考学习,可直接参考目录结构进入相关章节。按章节顺序,本书讲述了如下内容。
第1章描述了云计算建设的必要性,同时对用户在公有云与私有云之间的决策提供建设性的参考,并对企业实施云计算的进阶路线提供指引和参考架构,此外还对传统IT架构和云计算环境下的高可用架构设计进行了介绍。
第2章对OpenStack高可用架构的功能组件和集群核心服务项目进行了介绍,还对Redhat和Mariantis两大OpenStack领导厂商的高可用架构进行了详细介绍,并与其他OpenStack厂商的高可用架构进行了对比分析。
第3章介绍了OpenStack高可用架构中的集群资源管理器Pacemaker的原理、架构和使用方法。
第4章介绍了OpenStack高可用架构中的集群负载均衡与高可用软件HAProxy和Keepalived的原理、架构和使用方法。
第5章介绍了OpenStack高可用集群中的消息队列系统RabbitMQ的原理、架构和高可用配置与使用方法。
第6章介绍了OpenStack高可用集群中的缓存系统Memcached和Redis的原理及使用方法。
第7章介绍了OpenStack高可用集群中的关系型数据库MariaDB和非关系型数据库MongoDB,同时对这两种数据库的高可用配置与使用方法进行了详细介绍。
第8章介绍了OpenStack高可用集群中核心服务之一的计算服务Nova项目,对Nova的架构原理、使用配置以及服务高可用均进行了详细介绍。
第9章介绍了OpenStack高可用集群中核心服务之一的网络服务Neutron项目,对Neutron的插件式架构、高可用配置以及不同的Neutron网络模式及其使用方法进行了详细介绍。
第10章介绍了OpenStack高可用集群中核心服务之一的块存储服务Cinder和Ceph分布式存储集群,对Cinder块存储的架构、配置和多后端存储及其使用进行了详细介绍,同时对Ceph在OpenStack中的集成使用进行了实战演示。
第11章介绍了OpenStack基础架构组件的高可用部署,以实战部署的方式讲解了如何通过Pacemaker集群部署高可用的OpenStack基础服务组件。
第12章介绍了OpenStack核心服务组件的高可用部署,以实战部署的方式讲解了如何通过Pacemaker集群部署高可用的OpenStack核心服务组件。
第13章介绍了如何运维基于Pacemaker的OpenStack高可用集群,并对Neutron网络和Nova计算服务的高可用性进行了详细分析。
第14章介绍了Ceph分布式存储集群的运行维护经验,并提供了如何配置和自定义使用Ceph集群的参考。
第15章介绍了如何通过Docker容器与OpenStack集成项目Kolla进行OpenStack的容器化部署,同时对OpenStack的Kolla项目进行了详细介绍。勘误和资源
在本书的写作过程中,笔者参考了很多OpenStack官方社区的资料和历届OpenStack峰会的讨论文档与视频,同时也参考了很多开源软件的官方资料和技术专家的经验分享,诚恳希望能为OpenStack爱好者与从业者呈现一本涵盖基础理论与高可用实战部署和运维的参考书籍。但是由于OpenStack社区版本变化之快,使得任何OpenStack相关书籍都难以跟上每年两次的OpenStack发行版本,加之笔者水平有限,书中难免存在技术延后和谬误观点,若书中有任何不妥之处,恳请读者批评指正。读者可将意见发送至邮箱ynwssjx@126.com或者通过微信公众号“OpenStackGeek”进行反馈,我们将实时跟进OpenStack社区的发展变化,并吸取读者的宝贵意见。另外,本书涉及的OpenStack高可用集群部署源代码已全部上传至GitHub,读者可以从网站https://github.com/ynwssjx/Open-Stack-HA-Deployment下载查看并参考实现。致谢
开源共享是人类历史上最伟大的精神之一,在此向Linux创始人和开源精神领袖Linus Torvalds致敬,向OpenStack项目发起者NASA和Rackspace致敬,向OpenStack社区所有参与者和无私的代码贡献者致敬。
本书的编写历时半年有余,在工作和生活极为繁忙的阶段,笔者仍然坚持每日查阅资料和整理文章,期间得到了招商银行很多同事和领导的关心,同时也得到了很多IBM前同事和领导的支持,在此一并谢过。正是你们的关心和支持,才使得我在繁忙的工作之余仍然怀着一颗敬畏之心进行写作。
在本书的策划和写作期间,机械工业出版社华章分社的杨福川先生和李艺女士给予了极大的关心和帮助,在此感谢杨福川先生对本书的策划和李艺女士对全文的审阅校对,正是你们的辛勤付出才有了本书的问世。
另外,还要感谢我的妻子杨彩凤女士在写作期间对我生活上的照顾与理解,在多少个深夜与凌晨,正是你的理解与支持让我能全身心地投入写作中。在此也要感谢我的父母,感谢你们的默默养育和辛勤付出。在本书的写作期间,奶奶的仙逝是我最大的悲恸,谨以此书慰藉奶奶的在天之灵,您一世的慈祥我将永远铭记。
最后,感谢所有为本书的编写提供了帮助、支持与鼓励的朋友们,感谢陈沙克、刘世民、吴业亮等无私分享博文的技术爱好者,感谢所有为OpenStack社区无私奉献的企业和志愿者。相信在开源精神的共鸣下,OpenStack一定会变得更好!部署篇第11章OpenStack高可用集群基础服务部署
OpenStack是由众多独立子项目构成的复杂开源云计算平台,这些独立子项目不仅包括OpenStack“大帐篷”覆盖下各自发展的众多开源项目,还包括“大帐篷”外很多基础性的开源项目。纵观OpenStack集群的功能构成和部署过程,可以说OpenStack是集众多开源项目于一体的大成者,而OpenStack云平台的复杂性和高门槛也正源自其“开源集大成者”。本书在介绍OpenStack高可用集群部署时,将OpenStack高可用集群的部署一分为二,即基础服务的高可用部署和核心服务的高可用部署。本章将重点介绍OpenStack基础依赖服务的高可用部署。这些服务包括集群资源管理软件Pacemaker、负载均衡软件HAProxy、关系型数据库MariaDB、缓存系统Memcache/Redis、消息队列系统RabbitMQ和非关系型数据库MongoDB,这些基础服务的工作原理和相关配置使用在前面已进行了详细介绍,本章主要针对这些基础服务在Pacemaker集群中的高可用部署进行介绍。
在OpenStack高可用集群部署到生产环境之前,建议在实验环境或测试环境中对OpenStack集群的高可用功能进行部署验证。本章从实验环境的角度出发,对如何部署搭建OpenStack高可用集群实验环境进行了介绍,并给出了OpenStack离线安装部署中本地离线安装源的制作方法。通过本章实验环境的准备介绍,读者可以参考并搭建出自己的实验环境并对后续OpenStack相关服务的高可用性部署进行验证,在高可用功能验证完成后,便可轻松将实验环境迁移至生产环境中。11.1 OpenStack集群高可用离线部署
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项目依赖包的快速安装。[1]
pip是Python中目前最为流行和强大的安装包管理工具,pip未[2]来将会是传统setuptoolsPython软件包管理工具的替代者,虽然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 helpUsage: pip
如使用pip安装flask:[root@mitaka ~]# pip install flask
查看已经安装的包:[root@mitaka ~]# pip show flaskName: FlaskVersion: 0.11.1Summary: A microframework based on Werkzeug, Jinja2 and good intentionsHome-page: http://github.com/pallets/flask/Author: Armin RonacherAuthor-email: armin.ronacher@active-4.comLicense: BSDLocation: /usr/lib/python2.7/site-packagesRequires: 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.comindex-url = http://pypi.douban.com/simple//阿里云源配置[global]trusted-host=mirrors.aliyun.comindex-url=http://mirrors.aliyun.com/pypi/simple/
pip在安装过程中,安装文件默认缓存在$HOME/.cache/pip目录,在该目录中会生产很多以阿拉伯数字或字母命名的子目录,这些子目录中存放着pip安装时下载的缓存文件。pip缓存目录如下:[root@mitaka http]# pwd/root/.cache/pip/http[root@mitaka http]# lltotal 0drwx------. 9 root root 62 Jul 27 16:22 0drwx------. 6 root root 38 Jul 27 16:23 1drwx------. 13 root root 94 Jul 27 16:23 2drwx------. 11 root root 78 Jul 27 16:22 3drwx------. 13 root root 94 Jul 27 16:22 4drwx------. 10 root root 70 Jul 27 16:23 5drwx------. 12 root root 86 Jul 27 16:22 6drwx------. 11 root root 78 Jul 27 16:22 7drwx------. 9 root root 62 Jul 27 16:22 8drwx------. 13 root root 94 Jul 27 16:23 9drwx------. 12 root root 86 Jul 27 16:21 adrwx------. 13 root root 94 Jul 27 16:23 bdrwx------. 11 root root 78 Jul 27 16:23 cdrwx------. 11 root root 78 Jul 27 16:23 ddrwx------. 9 root root 62 Jul 27 16:23 edrwx------. 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.0SQLAlchemy<1.1.0,>=1.0.10 # MITboto>=2.32.1 # MITdecorator>=3.4.0 # BSDeventlet!=0.18.3,>=0.18.2 # MITJinja2>=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/bashpip_require="pip_requirements_all.txt"while read LINEdo if [[ $LINE =~ ^[a-zA-Z] ]] then echo $LINE pip install $LINE -d /root/pypi //仅下载不安装,建议使用国内源下载 fidone < $ 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 -ltotal 8drwxr-xr-x. 2 root root 62 Jul 28 17:53 aioeventletdrwxr-xr-x. 2 root root 50 Jul 28 17:53 alembicdrwxr-xr-x. 2 root root 57 Jul 28 17:53 amqpdrwxr-xr-x. 2 root root 50 Jul 28 17:53 anyjsondrwxr-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.htmlWebOb-1.4.1.tar.gz
5)配置Apache服务器。确认已经安装httpd软件包,在/etc/httpd/conf.d目录中新创建httpd虚拟机配置文件pip-server.conf。虚拟机配置文件内容如下:
Apache服务器配置完成后,重新启动httpd服务:systemctl restart httpd.servicenetstat -ntl |grep 80
6)验证软件包HTTP下载。在浏览器输入http://host_ip/pypi/simple,页面将以超链接的形式显示全部可供本地下载的软件包名称,如图11-1所示。此时,单击任意软件包名称,浏览器便会自动下载对应的软件包。图11-1 pip本地源HTTP下载页面
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.10index-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.10index-url = http://192.168.142.10:8080/simple/
配置完成后,pip默认将使用本地源进行包安装。此时,用户便可使用常规的pip安装命令进行批量包安装,具体命令如下:pip install -r requirements.txt
此外,如果需要屏蔽pypiserver提供的本地pip源服务,则只需停止pypiserver服务进程即可。由于pypiserver运行在后台,通常可以使用lsof命令查出pypiserver的PID,并通过kill命令将其停止即可。11.1.2 制作OpenStack离线安装yum源
在Linux系统的软件包管理工具中,rpm和yum是两个最常见的工具。rpm是由Redhat公司开发的包管理工具,即Redhat Package
试读结束[说明:试读内容隐藏了图片]