标题 | OpenStack平台部署改进方法研究 |
范文 | 冯向科++邓莹 摘 要:OpenStack是目前构建云计算环境的首选开源平台,具有模块化部署的优势,但部署过程复杂。采用Python这种OpenStack原生开发语言改进部署命令,可以降低部署命令参数的复杂度,简化OpenStack部署,有利于OpenStack云平台推广。 关键词:OpenStack;Python;Keystone;数据库操作 DOIDOI:10.11907/rjdk.151923 中图分类号:TP303 文献标识码:A 文章编号文章编号:16727800(2015)012003602 0 引言 云计算利用非本地或远程服务器(集群)的分布式计算机为互联网用户提供服务(计算、存储、软硬件等),使得用户可以将资源切换到需要的应用上,根据需求访问计算机和存储系统,实现按需计算,有效提高了软硬件资源的利用效率[1]。典型的云计算架构分为3个层次的服务:基础设施即服务、平台即服务和软件即服务[2],在基础设施即服务层,消费者通过Internet,从完善的计算机基础设施上获得服务;平台即服务是将软件研发的平台作为一种服务,以软件即服务的模式提供给用户[3];软件即服务是通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件来管理企业经营活动。 1 Openstack架构设计 OpenStack是一个开源的云计算管理平台项目,支持几乎所有类型的云环境,提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack由Keystone、Nova、Glance、Cinder、Swift、Neutron、Heat、VM、Ceilometer、Horizon这10个核心组件组合,完成具体工作,通过各种互补服务提供基础设施即服务的解决方案,每个服务提供API以进行集成[4]。 Keystone是OpenStack的基础组件,为OpenStack其它服务提供身份验证、服务规则和服务令牌功能,管理Domains、Projects、Users、Groups、Roles。Keystone[5]作为一个为其它OpenStack组件提供身份验证服务的组件,依赖于数据库服务,即有关身份验证的信息均存储在数据库中,这个数据库为用户在OpenStack环境提供可扩展和可靠的关系和非关系数据库引擎服务,支持MySQL、PostgreSQL等数据库引擎。目前,安装部署基于OpenStack的云平台过程繁琐、操作复杂,不利于云服务的应用和推广。OpenStack以Python程序设计语言编写,采用Python改写部署脚本,可以大幅降低部署Keystone组件的难度和复杂度。 2 Python程序设计 Python作为一种面向对象、解释型计算机程序设计语言,遵循 GPL(GNU General Public License)协议,语法简洁而清晰,具有丰富和强大的类库。Python能够把用其它语言制作的各种模块(如C/C++)很轻松地联结在一起。常见的情况是使用Python快速生成程序原型甚至是最终界面),对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,用C/C++重写,而后封装为Python可以调用的扩展类库。 Python是完全面向对象的语言,函数、模块、数字、字符串都是对象,并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python也支持重载运算符和动态类型。Python本身被设计为可扩充的,并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C/C++等编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。 3 Keystone模块部署改进 OpenStack各个组件与Keystone都有交互,其中登录认证体现在用户访问各个组件的API时,调用了WSGI框架的authtoken filter,该filter调用keystoneclient,最终通过keystone验证token,完成对用户的登录认证。如果认证失败,用户将不能访问该组件的API,对应组件将不能被用户使用。 部署Keystone组件包括安装Keystone和配置Keystone两大操作,配置Keystone是最耗费时间和精力的一个环节,包括修改配置文件、同步数据、添加环境变量、创建用户信息、绑定用户和创建服务等系列步骤,其中同步数据、创建用户信息、绑定用户和创建服务都需要与数据库交互,可以归类为数据库操作;修改配置文件归类为文件I/O操作,添加环境变量归类为系统环境操作。使用Python的面向对象特性,按“模块→类→函数”的层次封装数据库、文件I/O和系统环境操作服务,提供操作接口,使用Python重新编写OpenStack部署命令,将原有的部署命令参数简单化、过程批处理化,设计的部署包图如图1所示。 图1 改进后的OpenStack部署 在部署包图中,Utilities Level表示实用工具层,提供操作系统基础操作方法,Environment Level表示系统环境操作服务层,I/O Level表示文件I/O操作服务层,Data Service Level表示数据库操作服务层,Command Level层提供改写后的OpenStack部署命令。 4 部署方法实现 在部署改进方案中,Data Service Level层是关键,其中的数据库操作接口则是该层的重点,由SqlHelper类以函数的形式提供数据库操作服务: class SqlHelper: #获取连接 def getConnection(self): return MySQLdb.connect(os.getEnv("MYSQL_URL"),os.getEnv ("MYSQL_USERNAME"),os.getEnv ("MYSQL_PASSWORD"),os.getEnv ("MYSQL_DATABASE"))[6] #返回查询结果集 def getValues(self,sql): db = self.getConnection() cursor = db.cursor() try: cursor.execute(sql) result = cursor.fetchall() return result except: print "Error:unable to fecth data" db.close() return Null #提交更新 def executeUpdate(self,sql): db = self.getConnection() cursor = db.cursor() try: cursor.execute(sql) db.commit() except: db.rollback() db.close() 按照这种设计思路改进部署命令后,原来绑定用户角色到租户的命令大大简化。原有“添加admin用户admin角色到admin租户”命令样例为: #keystone user-role-add--user 49629c089d5f4fba 80542ba34b15cd9f--tenant_id ca2f5fd3014342788eebfe8ca 08b74f2--role d6231adf78334a6f8f89cb5cf99e891c 修改后的新命令为: # binder admin admin admin 新命令无需用户从数据库中根据用户名查询用户编号、根据角色名查询角色编号、根据租户名查询租户编号。将3个编号填写到keystone命令中,用户只需将用户、角色和租户的名称作为参数填入命令行即可,显著降低了使用keystone命令的难度,降低了部署OpenStack的复杂度。 参考文献参考文献: [1] 陈康,郑纬民.云计算:系统实例与研究现状 [J].软件学报,2009(5):13371348. [2] 罗军舟,金嘉晖,宋爱波,等.云计算:体系架构与关键技术 [J].通信学报,2011(7):321. [3] 王佳隽,吕智慧,吴杰,等.云计算技术发展分析及其应用探讨 [J].计算机工程与设计,2010(3):44044409. [4] 邵珠兴,陈彩.基于OpenStack的云存储系统的大文件存储方案 [J].计算机工程与设计,2010(2):396405. [5] 张新潮,孙峰.基于OpenStack云平台虚拟集群环境的部署 [J].闽南师范大学学报:自然科学版, 2015(1):4853. [6] 陈慧,李陶深,岑霄.OpenStack核心存储件Swift与Keystone的集群整合方法 [J].广西科技学院学报,2015(31):7376. (责任编辑:杜能钢) |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。