基于python的自动化运维系统设计与实现_第1页
基于python的自动化运维系统设计与实现_第2页
基于python的自动化运维系统设计与实现_第3页
基于python的自动化运维系统设计与实现_第4页
基于python的自动化运维系统设计与实现_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容摘要自动化运维系统能够为运维人员提供对大规模服务器群集进行可视化运维操作的平台,通过自动化运维系统运维人员可以更直观清晰的了解和记录主机信息,并进行管理。本文设计并实现了一个自动化运维系统。系统设计开发使用VIM开发工具,Python开发语言,MySQL数据库,使用了集中化运维管理工具SaltStack,基于web.py的架构完成,该系统设计实现的功能包括:账户管理,主机管理,已加入SaltStack的主机信息采集,Master监控,本系统同时提供对于远程主机的命令管理。关键词: Python; SaltStack; 自动化运维AbstractThe automated operation

2、 and maintenance system can provide a platform for the operation and maintenance personnel to visualize the operation and maintenance of large-scale server clusters. Through the automatic operation and maintenance system, the operation and maintenance personnel can understand and record the host inf

3、ormation more intuitively and clearly, and manage it.This paper designs and implements an automated operation and maintenance system. The system design and development uses VIM development tools, Python development language, MySQL database, and uses the centralized operation and maintenance manageme

4、nt tool SaltStack, which is completed based on the web.py architecture. The functions designed and implemented by the system include: account management, host management, and has joined SaltStack The host information collection, Master monitoring, the system also provides command management for the

5、remote host.Key words: Python; Saltstack; Automated operations 目 录 TOC o h z u TOC o 1-3 h z u HYPERLINK l _Toc39181352 第一章 绪论 PAGEREF _Toc39181352 h 1 HYPERLINK l _Toc39181353 1.1 研究意义与目的 PAGEREF _Toc39181353 h 1 HYPERLINK l _Toc39181354 1.2 研究背景和现状 PAGEREF _Toc39181354 h 1 HYPERLINK l _Toc39181355

6、 1.3系统内容综述与论文结构 PAGEREF _Toc39181355 h 2 HYPERLINK l _Toc39181356 1.3.1本文主要内容 PAGEREF _Toc39181356 h 2 HYPERLINK l _Toc39181357 1.3.2本文主要结构 PAGEREF _Toc39181357 h 2 HYPERLINK l _Toc39181358 第二章 系统分析与设计 PAGEREF _Toc39181358 h 4 HYPERLINK l _Toc39181359 2.1 需求分析 PAGEREF _Toc39181359 h 4 HYPERLINK l _T

7、oc39181360 2.2系统总体设计 PAGEREF _Toc39181360 h 4 HYPERLINK l _Toc39181361 2.2.1开发结构设计 PAGEREF _Toc39181361 h 4 HYPERLINK l _Toc39181362 2.2.2系统架构设计 PAGEREF _Toc39181362 h 4 HYPERLINK l _Toc39181363 2.2.3总体功能架构 PAGEREF _Toc39181363 h 5 HYPERLINK l _Toc39181364 2.3 SaltStack综述 PAGEREF _Toc39181364 h 6 HY

8、PERLINK l _Toc39181365 2.3.1简介 PAGEREF _Toc39181365 h 6 HYPERLINK l _Toc39181366 2.3.2 SaltStack基本原理 PAGEREF _Toc39181366 h 6 HYPERLINK l _Toc39181367 2.3.3 SaltStack的部署架构 PAGEREF _Toc39181367 h 7 HYPERLINK l _Toc39181368 2.3.4为何选择 SaltStack PAGEREF _Toc39181368 h 9 HYPERLINK l _Toc39181369 2.4开发技术综

9、述 PAGEREF _Toc39181369 h 9 HYPERLINK l _Toc39181370 2.4.1 Python编程语言 PAGEREF _Toc39181370 h 9 HYPERLINK l _Toc39181371 2.4.2 web.py框架 PAGEREF _Toc39181371 h 10 HYPERLINK l _Toc39181372 2.4.3 Mako模板 PAGEREF _Toc39181372 h 10 HYPERLINK l _Toc39181373 2.4.4 psutil库 PAGEREF _Toc39181373 h 10 HYPERLINK l

10、 _Toc39181374 2.4.5 Dmidecode工具 PAGEREF _Toc39181374 h 10 HYPERLINK l _Toc39181375 2.4.6 MySQL数据库 PAGEREF _Toc39181375 h 10 HYPERLINK l _Toc39181376 2.5系统所需环境及数据库设计 PAGEREF _Toc39181376 h 10 HYPERLINK l _Toc39181377 2.5.1 系统运行时所需环境 PAGEREF _Toc39181377 h 11 HYPERLINK l _Toc39181378 2.5.2环境配置 PAGEREF

11、 _Toc39181378 h 11 HYPERLINK l _Toc39181379 2.5.3数据库表分析 PAGEREF _Toc39181379 h 11 HYPERLINK l _Toc39181380 2.5.4概念模型设计 PAGEREF _Toc39181380 h 12 HYPERLINK l _Toc39181381 2.5.5数据库表结构设计 PAGEREF _Toc39181381 h 12 HYPERLINK l _Toc39181382 第三章 自动化运维系统的详细设计与实现 PAGEREF _Toc39181382 h 15 HYPERLINK l _Toc391

12、81383 3.1用户模块的设计与实现 PAGEREF _Toc39181383 h 15 HYPERLINK l _Toc39181384 3.1.1登陆注册流程 PAGEREF _Toc39181384 h 15 HYPERLINK l _Toc39181385 3.1.2用户模块的介绍与实现 PAGEREF _Toc39181385 h 16 HYPERLINK l _Toc39181386 3.2模块的设计与实现 PAGEREF _Toc39181386 h 17 HYPERLINK l _Toc39181387 3.2.1主页功能流程 PAGEREF _Toc39181387 h 1

13、7 HYPERLINK l _Toc39181388 3.2.2主页模块的介绍与实现 PAGEREF _Toc39181388 h 18 HYPERLINK l _Toc39181389 3.3主机登记模块的设计与实现 PAGEREF _Toc39181389 h 18 HYPERLINK l _Toc39181390 3.3.1主机登记功能流程 PAGEREF _Toc39181390 h 18 HYPERLINK l _Toc39181391 3.3.2主机登记模块的设计与实现 PAGEREF _Toc39181391 h 19 HYPERLINK l _Toc39181392 3.4 S

14、altStack模块的设计与实现 PAGEREF _Toc39181392 h 19 HYPERLINK l _Toc39181393 3.4.1 SaltStack模块功能流程 PAGEREF _Toc39181393 h 19 HYPERLINK l _Toc39181394 3.4.2 SaltStack模块的设计与实现 PAGEREF _Toc39181394 h 21 HYPERLINK l _Toc39181395 第四章 系统测试 PAGEREF _Toc39181395 h 22 HYPERLINK l _Toc39181396 4.1 运行环境 PAGEREF _Toc391

15、81396 h 22 HYPERLINK l _Toc39181397 4.2 测试过程 PAGEREF _Toc39181397 h 22 HYPERLINK l _Toc39181398 第五章 总结与展望 PAGEREF _Toc39181398 h 28 HYPERLINK l _Toc39181399 5.1 总结 PAGEREF _Toc39181399 h 28 HYPERLINK l _Toc39181400 5.2 未来展望 PAGEREF _Toc39181400 h 28 HYPERLINK l _Toc16845 参 考 文 献 PAGEREF _Toc16845 29

16、 HYPERLINK l _Toc6081 附 录30 HYPERLINK l _Toc6081 致 谢33第一章 绪论1.1 研究意义与目的随着互联网时代的飞速发展,特别是在发展中飞速融入了人们的生活中。在这其中产生的信息也是越来越大,越来越多,云计算与大数据也就这么随着发展,而在发展中跟上来的挑战就是所需要管理的主机集群也愈发庞大,而作为在这后面提供支持的运维人员所需面临的就是如此多的主机,而这有许多工作都是繁琐,重复的,而所需要处理的如此多且重复,那么就很容易出现错误。该自动化运维系统基于WEB开发,用户可以通过在该系统中看到主节点的资源信息,以及将所有的机器进行一个登记,以及对各个主机

17、的信息可以进行查看,并且在WEB中通过SaltStack管理工具可以通过批量的命令发送来进行对旗下主机的一些重复性操作进行批量处理。因此该选题还是有必要的,因为这样就可以通过一个可视化的WEB界面来直观的让使用人员了解所有的主机情况,并且让一些重复繁琐的操作一次就能实现,减少出错的概率,因此这对于运维人员来说是具有实用性的【1】。通过使用WEB来开发该自动化运维平台,该课题主要是有以下的几点目的:1、在大学的时候所学的一些相关专业课程的基础上,将所学的知识与实践结合使用,来进一步巩固相关专业的知识以及实操的能力,从而达到对学习过的知识了解的更清晰,运用更熟练,这是对于已学习过的知识进行更深的挖

18、掘;2、随着互联网时代的飞速发展,为此提供支持的主机数量也越来越庞大,完成该选题是为了给使用人员提供一个自动化运维平台,能够减低运维人员的一些重复繁琐的工作量,以及更好的对主机集群进行更好的管理;3、自动化运维领域目前较为热门,这能够帮助我们掌握Python的一部分知识,以及对于MySQL,SaltStack运维管理工具等进行学习,在之后的职业选择中有更多的选择,在进行相关的运维工作能有更好的帮助。通过该选题的设计与实现,可以有效的增强我们对于新知识的学习与使用、对相关资料的查询以及使用,以及找出问题分析并解决、综合实践使用相关知识等能力,这有利于我们的学习能力、专业技能能力以及逻辑能力的进一

19、步加强。1.2 研究背景和现状在互联网用户及内容的规模还不如现在的过去,为这些行为提供服务的主机数量并不多,因此运维人员通过逐台的登陆主机进行维护或者进行部署服务等都是游刃有余。而随着互联网的逐渐发展,伴随着的就是信息数据量的逐渐增多以及需要上线的项目也变得越来越多,这时候就需要逐渐的扩大主机群的规模,在面对逐渐扩大的主机集群时,运维人员则通过shell脚本以及Python来对这些主机进行维护等处理。而到了现在,又伴随这云计算大数据等的到来,以及人工智能等行业的火热,运维人员所需要面临的挑战就大了,因此就有了Ansible、Chef、Puppet、Fabric、SaltStack等的自动化运维

20、工具来为人们提高效率。为了完成该自动化运维平台,通过学习、研究、分析,本自动化运维系统主要功能有用户可以通过在该系统中看到主节点的资源信息,将所有的机器进行一个登记,以及对各个主机的信息可以进行查看,并且我们可以使用SaltStack管理工具通过批量的命令发送来对旗下主机的一些重复性操作进行批量处理,这有助于提高人们的工作效率,让一些重复、繁琐的工作减少出现错误。该自动化运维平台使用Python语言进行编码与实现,后台则采用web.py的框架,存储方面则使用MySQL数据库来为数据提供存储以及通过SaltStack运维工具来实现功能,通过这些相关工具和技术的结果使用来完成该系统。1.3系统内容

21、综述与论文结构1.3.1本文主要内容本系统是一个基于Python开发的WEB项目,是一个自动化运维的WEB应用。前端使用Mako进行开发,后台使用web.py进行开发,数据库使用MySQL,并结合了SaltStack自动化运维工具。可以通过本系统来进行对主节点的资源信息展示的,以及远程命令、查询子节点的信息、批量部署等等功能。1.3.2本文主要结构本论文的主要结构介绍如下:第 1 章:绪论,主要是论述自动化运维平台研究的意义与目的、课题的背景与现状以及对本论文的主要内容进行简单的概述第 2 章:系统分析与设计,主要是对该系统的功能模块来进行需求的分析,然后设计出一套符合本系统的架构模式和结构模

22、式,介绍集中化运维工具SaltStack介绍以及开发本系统时使用到的一些技术还有系统所需要的环境以及数据库设计。第 3 章:自动化运维系统的详细设计与实现,首要是详细介绍本系统的各个功能模块 的设计思路以及核心代码的实现,主要有功能实现、关键技术和关键的业务逻辑等第 4 章:系统测试,主要写了对于整个系统进行测试第 5章: 总结与展望,对于本论文进行归纳总结以及提出展望。第二章 系统分析与设计2.1 需求分析用户模块:用户登陆、注册、修改信息、退出。主页模块:展示主节点当前各类信息。显示当前时间。主机登记模块:登记所需记录的主机详细信息。修改所需记录的主机详细信息。删除所需记录的主机详细信息。

23、SaltStack模块:显示当前加入SaltStack的子节点信息。通过SaltStack命令执行功能实现远程命令、批量部署等功能。2.2系统总体设计2.2.1开发结构设计设计、创建该WEB的模式使用了MVC模式,该模式的是指Model View Controller即模型-视图-控制器。关于该模式作用如下:Model即模型,它表示的即是核心的对于数据的操作或者对于数据库的操作;Controller即控制器,它负责的根据收到的请求而调用所需要的Model来完成请求;View即视图,它则与用户进行交互并根据所接受到的数据来呈现到用户面前。2.2.2系统架构设计本自动化运维系统的架构由客户端和服务

24、端组成,客户端面对的是使用该自动化运维平台并进行交互的用户,所有功能的实现则由客户端、服务端、数据库以及SaltStack之间的交互完成。如下图2-1所示,为该自动化运维系统的总体架构:图2-1 系统架构图2.2.3总体功能架构根据 2.1 的功能需求分析,如图2-2所示,此为该自动化运维系统的功能模块:图2-2 系统功能模图2.3 SaltStack综述2.3.1简介SaltStack是一个在2011年建立的开源项目,这是一个功能强大,能适应与大规模的进行批量管理服务器的C/S自动化集中管理工具,该工具是基于Python语言实现,实现它的底层网络架构,进行通信的则是轻量级消息队列ZeroMQ

25、。通过对于SaltStack的部署以及使用,我们能够对大量服务器做到任务执行以及配置管理以及基于这两大功能延伸的另外的一些功能如采集服务器数据等等。2.3.2 SaltStack基本原理SaltStack所使用的模式是C/S模式,即客户端/服务端的模式,其中客户端是指SaltStack中的minion子节点,服务端指Saltstack中的Master主节点,主节点Master与子节点minion之间的通信是利用的轻量级消息队列ZeroMQ。当主节点和子节点的SaltStack对应组件下载安装完后,配置完对应配置和hosts启动服务后,子节点minion会连接主节点Master将自己的pub k

26、ey发送过去,请求它为其签发证书,而这时的主节点Master则通过salt-key 命令可以查看并且接受子节点minion的key,为它签发证书,而等到证书签发完毕后,就代表这主节点Master和子节点minion之间已经互相信任了。这时候我们就可以通过主节点Master端发送任何指令让匹配的子节点minion执行,子节点minion执行完命令后则返回结果。在这之间完成任务是通过4505以及4506两个端口实现的,其中4505端口对于的是轻量级消息队列ZeroMQ的PUB system,它的功能是用来发送消息的,而4506端口则是REP system,它的功能则是用来接受消息的。SaltSta

27、ck的主节点与子节点之间的的消息是通过轻量级消息队列ZeroMQ的发布-订阅模式来进行传递的,它们之间的连接方式有tcp以及icp两种。SaltStack的命令通过salt.client.LocalClient.cmd_cli发布到主节点Master,并以此来获取一个jobid,而命令执行得到的结果则是根据此jobid来获取的。主节点Master 接收到该命令后,则通过ZeroMQ在发送到子节点minion上,并通过接受到的消息得到需要执行的命令在通过minion._handle_aes处理,其会发起一个本地线程来执行命令。在处理完命令后,调用minion._return_pub方法,将执行结

28、果返回给主节点Master。主节点Master接受到了子节点minion返回的结果后,在通过使用Master._handle_aes方法,将结果写的文件中。在最后获取到结果并最终输出到终端的则是salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果【2】。在SaltStack中的还包含了State、Grain、Pillar、Highstate、Modules等模块。其中,State模块是通过在服务器Master中的/srv/salt路径下编写.sls函数关于配置管理等的一些指令,在通过命令调用该函数实现对与目标服务器的配置管理等。Grain是在SaltStac

29、k中的以key value形式存储的一种静态的数据库,它存储的是由客户端minion要返回给服务端的数据,这部分数据是静态的,包含一些如操作系统类型、版本或者一些硬件属性的不经常改变的数据。Pillar是在SaltStack中的以key value形式存储的一种动态的数据库这里面存储的数据是比较私密的,它存储的是客户端minion需要向服务器索要的数据,这些数据是只有指定的某个minion客户端才能看到的关于自身的Pillar数据,而别的是无法看见的。Highstate的功能与State模块功能类似,但是却是能通过top.sls来对多个服务器来进行更为仔细的管理。Modules模块则是包含的S

30、altStack的指令,包括命令行cmd模块指令、cp模块指令、service模块指令等等,通过这些指令来完成SaltStack的功能【3】。2.3.3 SaltStack的部署架构在SsltStack中,它包含的角色有三种,其中最重要的两个角色分别是处于中心控制系统的Master角色,以及被管理的客户端minion,还有一个角色是syndic,它的作用类似与代理,即只负责分发任务下去给客户端minion执行。而基于这三种角色,SaltStack则有四种部署的架构【4】:第一种:Master服务器与所有客户端minion直连,minion通过消息队列直接接受来自于Master服务器分发下来的命

31、令,并执行命令或者完成配置管理,具体结构图如图2-3所示:图2-3单Master直连第二种:Master服务器通过syndic节点来将命令发布给旗下的客户端minion,在该架构中,Master服务器通过syndic来对客户端进行管理,通过这种结构,则可以进行更加多级的扩展以此来满足更大规模的使用,具体结构图如图2-4所示:图2-4 使用代理连接第三种:多台Master服务器与所有客户端minion直连,minion通过消息队列直接接受来自于Master服务器分发下来的命令,并执行命令或者完成配置管理,而使用这种结构的时候,客户端minion需要在hosts以及salt的配置文件中配置多个服务

32、端的节点以及多个服务器Master之间的配置、状态、密钥文件等需要相同,以此来提高系统的高可用,解决单点问题,具体结构图如图2-5所示:图2-5 多Master连接第四种:单minion客户端的无Master服务器模式,即单机版,在该种架构当中,客户端不受任何的服务器Master控制使用,只要在本地运行,一些相关的功能就能自己完成,具体结构图如图2-6所示:图2-6 单机版在本次系统中,我们采用的是第一种Master服务器对所有客户端minion进行管理的架构,在进行这小型的架构时即可满足需求。2.3.4为何选择 SaltStack 目前来说可以选择的自动化运维工具有很多,但是目前而言较为热门

33、的还是Puppet、Chef、Ansible和SaltStack、Fabric这几个工具。其中Ansible、SaltStack和Fabric这三者都是基于Python来进行开发的,而Puppet、Chef则是基于Ruby来进行开发的。和Saltstack相比,Ansible和其之间功能是非常相似的,不过SaltStack是基于轻量级消息队列ZeroMQ来进行通信的,而Ansible则不一样,它的底层主要还是通过SSH来进行通信,而ZMQ相比,那Ansible它的通信速度则就慢了许多了,而当如果遇到更大规模的集群时,是不如SaltStack的,除此之外,它在对于支持的环境这方面而言,也是比Sa

34、ltStack支持的操作系统的数量要更少一些,不过它相对与SaltStack,它在进行安装部署的时候,子节点是不需要在下载安装agent的,相对与SaltStack而言则是则是更简单。而Fabric相对与SaltStack而言,它要更适合与小型的环境中,而且相比较与SaltStack而言,由于它的定位以及本身,会更加的容易出现单点故障,因此如果是在稍微大型些的环境中使用的话则显的不妥。Puppet则是相对于这些而言要更成熟,但是它的库也因此显的更为笨重,除此之外,由于它是基于Ruby开发的,而如果要使用它则需要对此语言有更深入的了解才能很好的掌握该工具,相比较而言,它的使用门槛还是有点高的。而

35、Chef与Puppet有点类似,但也是一样由于是基于Ruby开发的,想要使用该工具的话还需要通过次语言进行更多的开发以及了解才能对其进行使用,这相对与Pupper而言,更不是一个能简单使用的工具【5】。因此基于多方面的考虑,我们在这里选择了使用SaltStack这一款工具,相比较而言,它具有较为全面的功能,以及拥有快速的速度,对于各类操作系统环境的支持也要更加全面,在大型的集群环境也不会显得不堪重用,而且使用门槛不高,对于使用人员而言更为友好,而且由于是使用Python开发的,因此对于该语言是相当兼容的,而Python中的数量庞大的库对其的使用更是提供了更为有力的支持【6】。2.4开发技术综述

36、2.4.1 Python编程语言Python是当前较为热门的,能在时下火热的领域中频频出现的如人工智能等的一种面向对象的解释型高级计算机脚本语言。它在创立之初就是为了要编写shell脚本而出现的。目前来说,在现在的许多公司对于使用Python的工程师还是很有需求的,而别是在与人工智能以及运维方面等。Python这一门语言具有许多的有点,比如简洁、拥有大量的扩展库,而正是凭借这些扩展库让Python拥有了许多的功能以及对于新手而言更为友好,它的使用门槛并不会特别的高,正是这等等的众多优点也让它的在现在的众多的编程语言当中能有属于它自己的地位,当然了,Python也并不是毫无缺点的,比如相对与C、

37、Java等语言来说它的速度就相对而言慢了不少了,而这也是它解释型语言的特性导致的,它在工作的时候是需要将代码解释给硬件能理解的语言,所以就会导致在速度方面会比较慢,以及还有另外的一些小的缺点,当然了,这些缺点对于Python而言并不会盖过它的优点【7】。2.4.2 web.py框架web.py框架是一个小巧轻量但是这不影响它功能强大的一个基于Python的WEB开发框架。它是一个很精简的框架,只是提供了基础的骨架以及url路由,对于用户而言通过使用这个框架对于业务的逻辑方面来说是更容易上手使用进行开发的,不过也是因为它精简的特性所导致它所拥有的功能并没有其他框架那样强悍,如果有所需要的另外一些

38、功能则需要使用者自己在去进行开发。2.4.3 Mako模板Mako模板是一个基于Python的一个WEB模板,它是一个借鉴了Jinjia2等多个优秀模板而编写出来的一个简单易上手、渲染速度快,并且对于Python语言的引用有着优秀的支持的一个模板,虽然它的使用难度并不算很高,但是这并不影响它的对于Python中的WEB开发的优秀的支持。2.4.4 psutil库psutil库你一个可以在Python使用的且且跨平台的一个第三方库。它在对于对系统资源监控之一方面起到重要的作用,通过使用该库,我们使用Python来进行对系统管理的时候效率会的到非常大的提高,而且使用调用该库并实现功能的时候非常简单

39、,只需要些许代码即可实现所要实现的对系统资源监控的功能,除此之外,该库所支持的操作系统数量也是不少,主流的大部分操作系统都能支持进行资源监控,psutil绝对是一个在运维人员手中的一个重要第三方库。2.4.5 Dmidecode工具Dmidecode是一个可以获取系统硬件信息的一个工具,我们可以通过下载Python使用的版本来对该工具进行使用,通过该工具,我们能够对于系统的的硬件信息进行获取,这是一个对于psutil的补充使用。2.4.6 MySQL数据库MySQL是一个在现在也有非常多个人或企业使用的一个开源的、体量小、轻型的关系型数据库,别看它开源且体量不大,但是这写都不影响它的功能,功能

40、强大,对于使用人员来说相对于其他数据库而言更容易上手,对于许多操作系统都是提供使用支持的,而且具有非常不错的稳定性的同时维护方面也并不困难,这些结合起来对于个人或者是一些中小企业来说,满足他们的数据存储需求也是完全足够的了,而即便是是在面对大型的数据存储的场景时,它也并不是不能使用的,这足以看出它的功能强大【8】。2.5系统所需环境及数据库设计2.5.1 系统运行时所需环境桌面虚拟软件:VMware Workstation PRO操作系统:Centos6.5数据库:MySQL5.1.73SaltStack:SaltStack 2015.5.102.5.2环境配置1、Python的相关配置:在使

41、用操作系统自带的Python的时候,还需要下载pip这一Python的包管理工具,以此来下载使用一些所需要使用的Python的库,在下载后,可一通过pip -V命令来查看pip的版本,并以此来查看是否安装正确。而在正确下载该管理工具后,在下载其他包后,可以是哦那个pip -show命令来查看所下载的包是否正确。2、MySQL的相关配置:MySQL是我在该系统中采用的用来存放一些数据的关系型数据库,在本次中所使用的是5.1.73版本的数据库。在下载安装后,我们在为其创建了root用户以及密码为123456789,除此之外,为了能够不仅仅是在本机连接上数据库,通过MySQL的命令,为用户root赋

42、予了远程登陆的权限,除此之外,为了防止数据库出现问题,将这里面的空账号删除。3、SaltStack的相关配置:SaltStack是我在该系统中所使用的一款自动化集中管理工具。在下载该工具前,我们需要修改yum源,因为如果使用默认的仓库的话,这里面是不含有该工具的,因此需要安装新的yum源,并更改相应的配置。在完成前面的步骤后,由于在本系统中所采用的架构是服务端Master直接管理客户端minion,所以需要分别对应下载相应的salt-master和salt-minion版本。下载完相对于的版本,则分别在所有服务器中的hosts文件中增加相对应的ip到主机名的映射,然后在minion服务器中修改

43、SaltStack的相应配置后,将所有服务器启动,在启动后,客户端minion会根据之前的hosts文件中的映射以及相应salt文件中的配置寻找带Master并发送证书请求其为自己进行签名,已达到互信,Master可以通过salt-key -a的命令来接受某客户端的请求,不过如果需要接受很多minion的时候,则可以修改相应的auto_accept的配置,让Master自动为minion签发证书。如此一来,SaltStack也就完成了相应的配置可以进行使用了。2.5.3数据库表分析为了能够满足该自动化运维系统的功能需求,在此于数据库中建立了与用户信息模块、主机信息模块、配置信息模块、登陆信息模

44、块等相关的表来实现。用户信息模块:该表存放了用户的id、账号、密码、昵称、手机号码、邮箱账号、用户等级、用户状态、最后登陆记录、注册时间、备注等这类信息。主机信息模块:该表存放了关于该主机的id、主机名称、如果存在域名记录域名信息、内网ip、公网ip、管理ip、服务器型号对应id、CPU信息对应id、硬盘大小对应id、内存大小对应id、操作系统版本、自定义编码信息、登记时间信息、上架时间信息、更改的时间、登记者id、更改者id、任务信息、类型、机房归属信息对应id、所属机柜信息对应id、标签、编号、当前状态、备注等信息。配置信息模块:该表存放了关于该配置的id、类型、该类型的值、组标记、当前状

45、态、备注等信息。登陆信息模块:该表存放了关于登陆顺序信息id、用户id登陆时间、登陆ip、登陆地方、使用浏览器类型、登录令牌、过期时间、会话状态等信息。2.5.4概念模型设计根据上述的需求分许,我们可以凭此得到设计思路,并按照此思路设计出各实体关系,并用E-R图表现出来。各E-R图如图2-7所示:图2-7 实体关系图2.5.5数据库表结构设计当前的表结构设计如表2-1至2-4所示:表2-1用户信息users表字段名类型长度允许空值主键注释idint3用户的idusernamevarchar20账号passwordvarchar60密码nicknamevarchar20是昵称mobilevarc

46、har15是手机号码emailvarchar50是邮箱账号levelint1用户等级statusvarchar3用户状态loginfoint5最后登陆记录regdatetimestamp0注册时间commentvarchar50是备注表2-2 主机信息hosts表字段名类型长度允许空值主键注释idint3用户的idhostnamevarchar30主机名称domainvarchar30是如果存在域名记录域名信息priip1varchar15内网ippriip2varchar15是内网ippubip1varchar15是公网ippubip2varchar15是公网ipadminipvarchar

47、15是管理ipmodelvarchar30服务器型号对应idcpuvarchar30CPU信息对应idhddvarchar20是硬盘大小对应idmemvarchar20内存大小对应idosvarchar30操作系统版本rnumvarchar20自定义编码信息storagedatedate0登记时间信息startdatedate0上架时间信息mdatetimestamp0更改的时间creatorint3登记者ideditorint3更改者idrolevarchar20任务信息typevarchar20类型idcvarchar20机房归属信息对应ididctagvarchar20所属机柜信息对应i

48、dstagvarchar20标签snumvarchar20编号statusvarchar10当前状态commentvarchar20是备注表2-3 配置信息options表字段名类型长度允许空值主键注释idint3该配置的idtypevarchar15类型valuevarchar50该类型的值defaultvarchar3组标记statusvarchar3当前状态commentvarchar20是备注表2-4 登陆信息login_logs表字段名类型长度允许空值主键注释idint6登陆顺序信息iduidint3用户iddatatimestamp0登陆时间ipvarchar15登陆iplocat

49、ionvarchar30是登陆地方agentvarchar150使用浏览器类型tokenvarchar64是登录令牌expirydatetime0是过期时间statusvarchar3会话状态第三章 自动化运维系统的详细设计与实现3.1用户模块的设计与实现3.1.1登陆注册流程如果用户的登陆进网站后则进入登陆界面,在输入相关用户信息进行登陆后,会去数据库进行判断是否正确并将结果返回到前面,如果成功则登陆,失败则无法进入。在进入网站后可以通过用户管理的功能增加用户,并将该数据与数据库中数据进行比较,如果用户信息不存在则注册成功,存在则注册失败。其中登陆注册的流程图如图3-1至3-2所示。图3-1

50、 登陆流程设计图3-2 注册流程设计3.1.2用户模块的介绍与实现用户模块中包括了登陆、注册、修改信息、删除用户、查看信息、退出组成。用户添加、删除、修改查看页面如图3-3至3-4所示。图3-3 登陆页面图3-4 用户管理页面在登陆的时候,点击登陆,则通过一个监控事件将用户信息拿去数据库进行查询,然后通过该信息获取该用户的所有信息并保存开启一个session会话中在将此次会话状态设置为运行中的时候并根据此进行一个cookie的设置然后在进行用户的登陆,最终通过验证跳转进入主页。而在登陆后,则可以对用户进行注册,通过新增用户,对用户的数据进行输入后,则将该数据拿去数据库中根据用户名来进行判断是否

51、拥有重复的用户,经过判断没有后,则将新用户的数据存入数据库中完成用户注册。进行用户注册后,还可以对用户信息进行修改、查看以及删除以及对使用状态的更改。这一系列操作则是通过修改数据库中的数据属性来进行实现。在完成了一系列操作后需要退出,则在选择登出后,通过该用户的id找到数据库中的数据将数据库中关于该用户的使用状态进行更改,并将该session会话关闭,这时候即完成了退出。该部分的主要代码逻辑如附录1中所示。3.2模块的设计与实现3.2.1主页功能流程在进行登陆后,会将信息传递到主页后,在主页中将这些传递过来的信息在页面中展现出来,其中流程图如图3-5所示。图3-5 主页功能流程设计3.2.2主

52、页模块的介绍与实现在该模块中主要是包含了相关的资源展示展示主页以及当前时间显示和导航栏。如图3-6所示。图3-6 主页在登陆后,通过urls的功能调用对象使用以此获取需要在主页中展示的相关系统资源信息,并将通过引用的包的功能来实现这一需求,在将获取到的相关系统资源信息以及登陆的用户信息传递到主页中,主页在通过Mako来将得到的各类信息进行展示。而关于时间显示的实现则是通过导入时间的包来获取当前时间,并在主页中显示。该部分的主要代码逻辑如附录2中所示。3.3主机登记模块的设计与实现3.3.1主机登记功能流程在通过登陆进入网站后,可以在选项中选择主机管理进入管理界面,进入主机管理界面后,可以通过添

53、加主机信息,进入添加界面,在将对某主机的配置以及描述等信息录入后就添加完成。添加完成后可以进行编辑查看以及删除操作。其中流程图如图3-7所示。图3-7 登记、查看、删除主机流程设计3.3.2主机登记模块的设计与实现在该模块中主要是包含了主机信息的录入、编辑查看以及删除操作,如图3-8所示。图3-8 主机页面录入操作是在选择添加主机后,先通过数据库获取到配置信息表传递到前端提供给用户选择,在用户选择完毕后,则将最后的信息传递到后台,先通过数据库查询有无冲突的信息,在检测不冲突后,则进行插入数据的操作,开始将主机信息写入数据库中,这样就完成了添加操作。编辑查看主要是通过id在数据库中查找相关对于的

54、主机信息,并将对应的信息传递到前端,然后就将获取的信息读取出来并进行展示。而删除则是通过id在库中查找到对于的信息,并进行数据的删除。该部分的主要代码逻辑如附录3中所示。3.4 SaltStack模块的设计与实现3.4.1 SaltStack模块功能流程在进入网站后通过选项进入SaltStack功能列表,在选择实时状态时,可以查看已经加入SaltStack集群中的客户端minion节点的信息。在功能列表中选择命令下发时,可以进入远程命令的功能列表,在进入后,可以通过选择要发布的目标主机的匹配信息、匹配模式、执行模块、以及执行命令进行对SaltStack的操作。其中流程图如图3-9至3-10所示

55、。图3-9 SaltStack实时状态流程设计图3-10 SaltStack命令执行流程设计3.4.2 SaltStack模块的设计与实现 在该模块中主要是包含了对SaltStack集群的查看实时状态、以及命令执行的功能,如图3-10至3-11所示。图3-10 命令执行功能图3-11 子节点实时状态查看实时状态主要是通过salt命令调出相关的资源信息以及状态信息等,通过分段保存等然后将信息传递到前端,并在前端调用信息进行展示。而远程命令则是通过写入目标主机对象、匹配规则如使用通配符匹配还是正则表达式还是列表选择等、选择的执行模块以及具体的执行命令来发布命令,可以通过此来实现批量部署、远程运行系

56、统命令、查询某些主机的信息等等SaltStack的强大的功能,而在将命令传到后端执行后,后端通过建立一个client来处理命令,并将命令的结果返回,在通过根据不同的返回结果来进行存放这些数据后,在将对应的执行结果返回前端,并在前端展示执行的最终结果。该部分的主要代码逻辑如附录4中所示。第四章 系统测试4.1 运行环境当前系统运行在虚拟机中,使用的是Centos6.5的版本,而其他的配置如下图4-1所示:图4-1 配置版本4.2 测试过程执行项目后,通过WEB输入访问地址并通过8080端口访问该系统,进入到登陆页面,如果不输入用户名,则通过弹出提示如图4-2所示,如果没有输出密码,则如4-3所示

57、,如果用户名或密码不正确则如4-4所示,图4-2至4-4如下所示:图4-2 用户名空图4-3 密码空图4-4 用户名或密码错误在用户名和密码验证无误后则跳转进入主页,在主页中展示Master信息和Saltstack接入信息,如图4-5所示:图4-5 主页在进入主页后,选择主机进入主机管理页面,可以看到录入的主机信息并进行管理进行增删改查,如图4-6所示:图4-6 主机管理选择添加主机页面可以登记主机信息,如图4-7所示:图4-7 登记主机信息登记完主机信息后,可以在管理页面看到此主机并可继续进行管理操作,如图4-8所示:图4-8 添加完成在添加完主机后可以进行修改或者删除操作,而点击编辑后则如

58、图4-9所示:图4-10 编辑在操作完主机管理的功能后,可以选择用户,进入用户管理页面,如图4-11所示:图4-11 用户管理点击添加用户,则可以进行注册操作,如图4-12所示:图4-12 添加用户成功添加后可以在用户管理出看到新的用户,如图4-13所示:图4-13 添加成功切换用户登陆,使用新用户test登陆如图4-14所示:图4-15 登陆成功在用户信息处可以修改密码,修改密码如图4-16所示图4-16 修改密码在完成用户管理后可以选择SaltStack进入SaltStack模块,选择进入实时状态,在此可以看到minion节点的信息,如图4-17所示:图4-17 实时状态在选择命令下方,进

59、入命令执行模块,如图4-18所示,为选择下发安装Apache的命令:4-18 命令下发在完成后,可以点击右上角的退出来完成退出系统。第五章 总结与展望5.1 总结经过在这么几个月时间中的努力,通过结合了本专业相关的计算机基础理论、通过额外学习并进行实际使用的SaltStack集中管理工具以及对于开发的知识与实践之后,完成了本自动化运维系统的设计与实现以及对于论文的撰写,在这整个的过程中,通过理论与实践的相结合也是让我感到受益匪浅。在开发本自动化运维系统的过程中也是出现了不少的状况,比如对于一些平时没有用上的知识的使用出现了问题以及在对于新技术的使用过程中的不熟悉导致进度颇为艰难。而通过不断的翻

60、阅书籍以及通过网络查找资料以及与他人讨论才克服这些问题。而在这么一整个过程中的最大的收益就是对于SaltStack这款工具的有了实际的了解和使用,通过它,我们能更快的完成一些繁琐复杂的任务,在实际中也是非常有帮助的。而在开发的过程中的对于最后的总结则是认为对于各类功能的设计以及对于对应的数据库的规划要清晰以及对于系统的框架的规划需要有条理且在之前就定好在由小及大串联起来,这会让我们在实际的开发过程中会有更好的体验。5.2 未来展望随着使用者所部署的地方需要管理的服务器越来越多,单单现在的功能是不足以继续满足需求的,还需要对于系统进行更深入的开发。因此本人认为还有几点需要继续更近一步的改进。一、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论