如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用

如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用,第1张

以下是一个简单的安装方法。
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ java -version
java version "180_60"
Java(TM) SE Runtime Environment (build 180_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 2560-b23, mixed mode)

对于一个开发人员来讲,可能运维并不是自己的职责所在。但是作为一名开发人员,却不能不了解自动化运维的整个流程。因为对于一个信息系统而言,开发和运维本质是一体的,尤其对于一些小公司来讲,可能运维人员本身就是开发人员抽空兼任的。


而自动化运维,本质上是介于开发和运维之间的,是运维和开发的交集,甚至很多时候都要写不少代码。因此,任何一个开发人员,都需要有自动化运维的相关知识。


一个了解好的开发人员,即使自己不做运维相关的工作,也能够知道自己在将项目交付给运维人员的时候,哪些东西是重要的,那些是必须配置的等等。然而在实际工作中,往往开发人员会给运维人员留下一些坑,一些只有他自己知道,而运维人员不知道的东西。导致运维人员自己试了很多次发现不行的时候,找到开发人员,开发人员研究了一下才会告诉他,在某某环境中必须用哪个端口之类的。这样不仅白白浪费了运维人员的时间,也增加了很多沟通的工作量。


反过来也是如此,一些现场的问题如果运维人员不能现场给出问题的定位。对于开发人员来讲是非常难以复现的。比如之前有某家企业,运维人员在客户现场发现问题。费了很大力气从客气的内网里面把日志导出来,发给开发人员,结果开发人员仔细研究了日志之后,发现是网不通的问题。开发人员显然是不可能知道为啥网不通的,搞不好是压根没连网线。


所以今天我们来聊一聊,对于一个程序员来讲,需要了解的自动化运维的那些事。


一、自动化运维的概念

随着信息时代的持续发展,初期的几台服务器已经发展成为了庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求。一个运维人员手工配置几台服务器还可能。配置几百上千台服务器那就累死了,还容易出错。那么就需要对运维工作进行标准化、自动化、架构优化、过程优化等。从面降低运维服务成本。其中,自动化最开始作为代替人工 *** 作为出发点的诉求被广泛研究和应用。

所谓自 动化运维,即在最少的人工干预下,结合运用脚本与第三方工具,保证业务系统724小时高效稳定运行 。这是所有业务系统运维的终极目标。


按照运维的发展成熟度来看, 运维大致可分为三个阶段

(1)依靠纯手工,重复地进行软件的部署与运维;

(2)通过编写脚本,方便地进行软件的部署与运维;

(3)借助第三方工具,高效地进行软件的部署与运维;


二、自动化运维需要解决的问题

自动化运维通常来讲,需要解决以下几个问题: 自动部署配置、风险事前预警、故障事中解决、和故障事后管理


三、自动化运维的常用工具

自动化运维常用的工具包括以下几种:


1、Ansible

ansible是基于Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible具有如下一些特性:

(1)模块化:调用特定的模块,完成特殊的任务。

(2)Paramiko(python对ssh的实现),PyYaml,jinja2(模块语言)三个关键模块。

(3)支持自定义模块,可使用任何编程语言写模块。

(4)基于python语言实现。

(5)部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖KPI(无需SSL)。

(6)安全,基于OpenSSH

(7)幂等性:一个任务执行一次和执行n遍效果一样,不因重复执行带来意外情况。

(8)支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构。

(9)较强大的多层解决方案role。




2、Chef

Chef是一个功能强大的自动化工具,可以部署,修复和更新以及管理服务器和应用程序到任何环境。

Chef 主要分为三个部分 Chef Server、Workstation 以及 Chef Client。用户在 Workstation 上编写 Cookbook。然后,通过 knife 命令上传到 Chef Server。最后,在 Chef Client 上面实施安装和部署工作。所以,对于 Cookbook 地编写在整个自动化部署中起到了重要的作用。


Chef Server 包含所有配置数据,并存储描述Chef-Client中每个Nodes的Recipe,Cookbook和元数据。配置详细信息通过Chef-Client提供给Nodes。所做的任何更改都必须通过Chef Server进行部署。在推送更改之前,它通过使用授权密钥来验证Nodes和Workstations是否与服务器配对,然后允许Workstations和Nodes之间进行通信。


Workstations 用于与Chef-server进行交互,还用于与Chef-nodes进行交互。它还用于创建Cookbook。Workstations是所有交互发生的地方,在这里创建,测试和部署Cookbook,并在Workstations中测试代码。


Chef命令行工具 是创建,测试和部署Cookbook的地方,并通过此策略将其上载到Chef Server。


Knife 用于与ChefNodes进行交互。


Test Kitchen 用于验证Chef代码


Chef-Repo 是一个通过Chef命令行工具在其中创建,测试和维护Cookbook的存储库。


Nodes 由Chef管理,每个Nodes通过在其上安装Chef-Client进行配置。 ChefNodes 是一台机器,例如物理云,云主机等。

Chef-Client 负责注册和认证Nodes,构建Nodes对象以及配置Nodes。Chef-Client在每个Nodes上本地运行以配置该Nodes。


Cookbook 是Chef 框架的重要基础功能之一。在 Chef Server 对目标机器做安装部署的时候,是通过 Runlist。而 Runlist 里面又包含了一个一个具体的 Cookbook,所以,最终对一个目标机器的部署任务就落到了 Cookbook 上。而对于 Cookbook 来说,其中包含了多个组件,我们可以将 Cookbook 简单地理解成一个容器或者可以理解为一个包,里面包含了 recipes、files、templates、libraries、metadata 等信息。这些信息用于配置我们的目标机器。




3、Puppet

puppet是一种Linux、Unix平台的集中配置管理系统,所谓配置管理系统,就是管理其里面诸如文件、用户、进程、软件包等资源。它可以运行在一台服务器端,每个客户端通过SSL证书连接到服务端,得到本机器的配置列表,然后根据列表来完成配置工作,所以如果硬件性能比较高,维护管理上千上万台机器是非常轻松的,前提是客户端的配置、服务器路径、软件需要保持一致。


客户端Puppet会调用本地facter,facter探测出该主机的常用变量,例如主机名、内存大小、IP地址等。然后Puppetd把这些信息发送到Puppet服务端;

Puppet服务端检测到客户端的主机名,然后会检测manifest中对应的node配置,并对这段内容进行解析,facter发送过来的信息可以作为变量进行处理;

Puppet服务器匹配Puppet客户端相关联的代码才能进行解析,其他的代码不解析,解析分为几个过程,首先是语法检查,然后会生成一个中间的伪代码,之后再把伪代码发给Puppet客户端;

Puppet客户端接收到伪代码之后就会执行,执行完后会将执行的结果发送给Puppet服务器;

Puppet服务端再把客户端的执行结果写入日志。


4、Saltstack

SaltStack是基于python开发的一套C/S自动化运维工具。部署轻松,扩展性好,很容易管理上万台服务器,速度够快。与服务器之间的交流,以毫秒为单位。SaltStack提供了一个动态基础设施通信总线用于编排,远程执行、配置管理等等。它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理,传输采用AES加密。

在saltstack架构中服务器端叫Master,客户端叫Minion。


在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。


saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式。


saltstack提供如下一些功能:

(1)远程执行:(批量执行命令)在master上执行命令时,会在所有的minion上执行。

(2)配置管理/状态管理 :(描述想到达到的状态,saltstack就会去执行)

(3)云管理(cloud):用于管理云主机

(4)事件驱动:被动执行,当达到某个值会自动触发


这四种自动化运维工具的比较如下,现在主流的基本上ansible和saltstack用的多一些:




1、在副机的设备管理器中添加SPLChaseRef,服务器IP地址为主服务器,这样副机就能通过局域网识别主机了。
2、在副机中创建一条关键的自动化指令ChaseOn,用于启动副机跟随自动。

第一步 - 安装 Java OpenJDK 7
Jenkins 基于 Java,因此我们需要在服务器上安装 Java OpenJDK 7。在这里,我们会从一个 PPA 仓库安装 Java 7,首先我们需要添加这个仓库。
默认情况下,Ubuntu 1604 没有安装用于管理 PPA 仓库的 python-software-properties 软件包,因此我们首先需要安装这个软件。使用 apt 命令安装 python-software-properties。
apt-get install python-software-properties
下一步,添加 Java PPA 仓库到服务器中。
add-apt-repository ppa:openjdk-r/ppa
用 apt 命令更新 Ubuntu 仓库并安装 Java OpenJDK。
apt-get update
apt-get install openjdk-7-jdk
输入下面的命令验证安装:
java -version
你会看到安装到服务器上的 Java 版本。
第二步 - 安装 Jenkins
Jenkins 给软件安装包提供了一个 Ubuntu 仓库,我们会从这个仓库中安装 Jenkins。
用下面的命令添加 Jenkins 密钥和仓库到系统中。
wget -q -O - | sudo apt-key add -
echo 'deb binary/' | tee -a /etc/apt/sourceslist
更新仓库并安装 Jenkins。
apt-get update
apt-get install jenkins
安装完成后,用下面的命令启动 Jenkins。
systemctl start jenkins
通过检查 Jenkins 默认使用的端口(端口 8080)验证 Jenkins 正在运行。我会像下面这样用 netstat 命令检测:
netstat -plntu
Jenkins 已经安装好了并运行在 8080 端口。
第三步 - 为 Jenkins 安装和配置 Apache 作为反向代理
在这篇指南中,我们会在一个 Apache web 服务器中运行 Jenkins,我们会为 Jenkins 配置 apache 作为反向代理。首先我会安装 apache 并启用一些需要的模块,然后我会为 Jenkins 用域名 myjenkinsid 创建虚拟主机文件。请在这里使用你自己的域名并在所有配置文件中出现的地方替换。
从 Ubuntu 仓库安装 apache2 web 服务器。
apt-get install apache2
安装完成后,启用 proxy 和 proxy_>

互联网时代的网络自动化运维

互联网上有两大主要元素"内容和眼球","内容"是互联网公司(或称ICP)提供的网络服务,如网页、游戏、即时通信等,"眼球"则是借指海量的互联网用户。互联网公司的内容往往分布在多个或大或小的IDC中,越来越多的"眼球"在盯着ICP所提供的内容,互联网公司进行内容存储的基础设施也呈现出了爆发式的增长。为了保障对内容的访问体验,互联网公司需要在不同的运营商、不同的省份/城市批量部署业务服务器用以对外提供服务,并为业务模块间的通信建立IDC内部网络、城域网和广域网,同时通过自建CDN或CDN专业服务公司对服务盲点进行覆盖。因此随着业务的增长,运维部门也显得愈发重要。他们经过这些年的积累,逐步形成了高效的运维体系。本文将结合国内互联网公司的经验,重点针对IT基础设施的新一代自动化运维体系展开讨论。

一、运维的三个阶段

● 第一个阶段:人人皆运维

在早期,一个公司的IT基础设施尚未达到一定的规模(通常在几台到几十台机器的规模),不一定有专门的运维人员或部门,运维的工作分担在各类岗位中。研发人员拥有服务器权限,自己维护和管理线上代码及业务。

● 第二个阶段:纵向自动化

随着业务量的增长,IT基础设施发展到了另外一个量级(通常在上百台至几千台机器的规模),开始有专门的运维人员,从事日常的安装维护工作,扮演"救火队员",收告警,有运维规范,但运维主要还是为研发提供后置服务。

这个阶段已经开始逐步向流程化处理进行过渡,运维部门开始输出常见问题处理的清单,有了自己业务范围适用的自动化脚本,开始利用开源软件的拼装完成大部分的工作。

具体表现为:各产品线有自己编写的脚本,利用如SVN+puppet或chef来完成服务器的上线和配置管理等工作。

● 第三阶段:一切皆自动

在互联网化的大潮中,越来越多的黑马团队应运而生,都曾有过短时间内用户访问量翻N倍的经历。在流量爆发的过程中,ICP的互联网基础服务设施是否能够很好的跟进,直接决定了业务内容能否满足海量用户的并发访问。

与此同时,运维系统需要足够地完善、高效、流程化。谷歌、腾讯、百度和阿里等规模的公司内一般都有统一的运维团队,有一套或多套自动化运维系统可供参照,运维部门与开发部门会是相互平行的视角。并且也开始更加关注IT基础设施在架构层面的优化以及超大规模集群下的自动化管理和切换(如图1所示)。

图1大型互联网公司IT基础设施情况概览

二、BAT(百度、阿里、腾讯)运维系统的分析

国内的互联网公司百度、阿里、腾讯(以下简称:BAT)所提供的主要业务内容不同,IT架构不同,运维系统在发展过程中有不同的关注点。

1腾讯运维:基于ITIL的运维服务管理

预计到2015年腾讯在全国将拥有60万台服务器。随着2012年自动化部署实践的成功,目前正在进行自动化验收的工作。在网络设备方面,后续将实现从需求端开始的全自动化工作:设备清单自动生成->采购清单自动下发->端口连接关系、拓扑关系自动生成->配置自动下发->自动验收。整个运维流程也已由初期的传统IT管理演进到基于ITIL的服务管理流程(如图2所示)。

图2腾讯基于ITIL的运维服务管理

2阿里运维系统:基于CMDB的基础设施管理+逻辑分层建模

CMDB(Configuration Management Database) 配置管理数据库(以下简称:CMDB),将IT基础架构的所有组件存储为配置项,维护每个配置项的详细数据,维护各配置项之间的关系数据以及事件、变更历史等管理数据。通过将这些数据整合到中央存储库,CMDB可以为企业了解和管理数据类型之间的因果关系提供保障。同时,CMDB与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。可实现IT服务支持、IT运维以及IT资产管理内部及三者之间的流程整合与自动化。在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。

3百度自动化运维:部署+监控+业务系统+关联关系

百度主要面临的运维挑战包括:突发的流量变化、复杂环境的关联影响、快速迭代的开发模式以及运维效率、运维质量、成本之间的平衡等等。百度的运维团队认为,当服务器规模达到上万台时,运维视角需要转为以服务为粒度。万台并不等于"百台100";机器的运行状态,也不再代表业务的工作状态;运维部门为研发提供前置服务,服务与服务之间关系也随着集群的扩大逐渐复杂起来。

图3百度自动化运维技术框架

百度的自动化运维技术框架,划分为部署、监控、业务系统、关联关系四大部分,整个框架更多突出了业务与IT基础设施的融合,注重"关联关系"的联动。所谓关联关系,主要是指任务与任务之间的时序依赖关系、任务与任务之间的数据依赖关系、任务与资源之间的引用依赖关系,分别对应到任务调度、数据传输、资源定位的服务流程中,形成了多条服务链。

关联关系的运维与业务较强相关,需要有一套系统能够理清楚关系的全貌,从而在复杂的服务链上,定位运行所在的环节,并在发生故障时预估影响范围,及时定位并通知相应的部门。在这样的一套系统中,自动化监控系统非常重要。百度的技术监控框架,主要通过数据采集、服务探测、第三方进行信息收集,进行监控评估后交给数据处理和报警联动模块处理,通过API接口进行功能扩充(如图4所示)。

图4百度自动化技术监控框架

其实无论是BAT等互联网企业还是其他行业的企业,在IT建设中都会遵循IT基础架构库(ITIL)或ISO20000服务管理的最佳实践,采用自动化IT管理解决方案以实现重要的业务目标,如减少服务中断、降低运营成本、提高IT效率等等。随着ISO20000、ITIL v30的发布和推广,两者已经成为事实上的某种标准。在当今企业IT管理领域,对两个标准有着很迫切的需求。特别是ISO20000的认证要求,已经成为企业越来越普遍的需求 。ITIL v30包含了对IT运维从战略、设计到转换、运营、改进的服务全生命周期的管理,相关方案往往覆盖了多个领域和多个产品,规划实施和工具的选择会比较纠结。如果选择开源的工具,从CMDB开始就会遇到很多的开发工作,对于很多注重成本收益比的企业,可以参考,但由于无法保证性能与效果并不一定适用。因此,成熟的商业方案会是更好的选择。

最新的iMC V7版本,围绕资源、用户、业务三个维度进行创新,发布了SOM服务运维管理(基于ISO20000、ITIL标准)等组件,增加了对服务器的管理,能很好的满足更多互联网化的场景需求。

通常认为,一个高效、好用的配置管理数据库一般需要满足6条重要标准,即联合、灵活的信息模型定义、标准合规、支持内置策略、自动发现和严格的访问控制。企业IT基础架构的元素类型、管理数据的类型往往有较多种,如网络设备、服务器、虚拟机等,因此对于多种信息的存储需要有合适的联合的方法。虽然 iMC智能管理平台在网络设备、服务器设备等方面已经能够较好的的满足,但是随着服务器虚拟化技术的发展,虚拟机正越来越多的成为IT基础架构的一大元素。因此,针对这一需求华三通信基于CAS CVM虚拟化管理系统,对服务器CPU、内存、磁盘I/O、网络I/O等更细节的重要资源以及虚拟机资源进行全面的管理。与BAT不同,华三通信的网管软件面向全行业,目前虽然没有对域名管理等特殊资源的'管理,但是能够通过API接口等方式与特有系统进行联动,进而满足定制化运维的需求,尤其是在互联网化的场景中,针对不同的业务需求,可以实现很多定制化的对接需求,例如,iMC+WSM组件与国内某大互联网公司自有Portal系统进行了对接,打通了iMC工具与用户自有运维平台,很好的实现了架构融和。另外,与阿里的逻辑分层建模相似,H3C "iMC+CAS"软件体系在上层也做了很多的逻辑抽象、分层,形成了诸多的模块,也即是大家看到的各种组件。

三、网络自动化运维体系

"哪怕是一个只有基础技术能力的陌生人,也能做专业的IT运维;哪怕是一个只有初中学历的运维人员,也能够带队完成中小型机房节点的建设,并负责数百至上千台服务器的维护管理工作"--这是一些公司对自己IT运行维护水平的一个整体评价。看似有些夸大的嫌疑,但实际上依托于强大的IT运维系统,国内已经有不少互联网公司能够达到或者接近这一标准。

这些企业都经历了运维发展过程中的各个阶段,运维部门曾经也是被动的、孤立的、分散的"救火队"式的团队,在后来的发展过程中,IT系统架构逐渐走向标准化、模型化,运维部门建立了完整的设备、系统资源管理数据库和知识库,包括所有硬件的配置情况、所有软件的参数配置,购买日期、维修记录,运维风险看板等等,通过网管软件,进行系统远程自动化监控。运维过程中系统会收集所有的问题、事件、变更、服务级别等信息并录入管理系统,不断完善进而形成一套趋向自动化的运作支撑机制。按照云计算的体系架构,在这样一套系统中,主要的IT资源包括计算、存储、网络资源,近些年随着网络设备厂商的推动,网络设备管理方面的自动化技术也得到十足的发展。

总结来看,一个企业在进行互联网化的建设初期,就需要考虑到随着用户访问量的增加,资源如何进行扩展。具体可以细化为规划、建设、管理、监控、运维五个方面。

1规划模型化

为了确保后续业务能够平滑扩容,网管系统能够顺利跟进,互联网企业一般在早期整体系统架构设计时便充分考虑到标准化、模型化,新增业务资源就好比点快餐,随需随取。

标准化:一是采用标准协议和技术搭建,扩展性好,使用的产品较统一,便于管理;二是采用数据中心级设备,保证可靠性、灵活性,充分考虑业务系统对低时延的要求。

模型化:基于业务需求设计网络架构模型,验证后形成基线,可批量复制,统一管理,也适宜通过自动化提高部署效率、网管效率。

图5常见互联网IDC架构

2建设自动化

互联网IT基础设施具备批量复制能力之后,可以通过自动化技术,提高上线效率。在新节点建设过程中,3~5人的小型团队即可完成机房上线工作。例如某互联网公司某次针对海外紧急业务需求,一共派遣了2名工程师到现场进行设备安装部署和基本配置,而后通过互联网链路,设备从总部管理系统中自动获取配置和设备版本,下载业务系统,完成设备安装到机房上线不超过1周时间。

要达到自动化运维的目标,建设过程中需要重点考虑批量复制和自动化上线两个方面(如图6所示)。

批量复制:根据业务需要,梳理技术关注点,设计网络模型,进行充分测试和试点,输出软、硬件配置模板,进而可进行批量部署。

自动化上线:充分利用TR069、Autoconfig等技术,采用零配置功能批量自动化上线设备,效率能够得到成倍提升。

图6批量配置与自动化上线

○ Autoconfig与TR069的主要有三个区别:

○ Autoconfig适用于零配置部署,后续一般需要专门的网管系统;TR069是一套完整的管理方案,不仅在初始零配置时有用,后续还可以一直对设备进行监控和配置管理、软件升级等。

○ Autoconfig使用DHCP与TFTP--简单,TR069零配置使用DHCP与>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13392891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存