自动化运维工具

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

自动化运维管理工具:

puppet:
有产品线已经在用,优点是历史悠久,比较成熟,在可远程可本地,功能强劲,不过这厮批量执行功能没得,为了批量执行个命令写个配置文件,好像有点大刀砍蚊子腿的感觉了,而且有客户端在,和授权系统结合比较麻烦。Puppet agent来master请求同步

saltstack:
ansible都是python流的,而且就功能上来讲,两者也极为相似,不同之处是salt stack是有客户端的,并且execution模块还用0MQ实现了pub-sub,命令和执行结果因此可以高效并行传输,不过成也萧何败也萧何,第一个sub阶段(将querystring下发到所有机器,然后收集机器响应的阶段)太依赖与客户端返回了,如果客户端未能及时返回或未响应的话,playbook执行阶段可能会直接漏掉这部分机器而没有任何提示,这对于运维来说是不可接受的,要改造这个就得推掉saltstack的现有架构…算了吧。Master手推同步信息到agent

ansible:
与前两者比起来,在特性上似乎并不抢眼,配置管理方面(playbook)绝对比不过老大哥puppet,批量执行方面也只是多线程,不像saltstack那么高大上,不过ansible搜索热度高出saltstack三倍多,显然靠的不是吹牛,至少,ansible至少不会悄悄的丢机器,这给了我们一个定心丸,而且仅依赖ssh,与登录授权管理系统天然集成,简单即有效,没有比这更美妙的事情了。Master手推同步信息到agent

Puppet

Ruby语言

运维工具

OS poriovisioning(pxe,)系统自动安装

OS configuration(puppet,ansible,chef,saltstack)

Command and control任务执行(func,ansible)

 

Ansible能实现puppet的所有功能  puppet比ansible能管理的节点多

 

 

Puppet:IT基础设施自动化管理工具(较ansible安全)

整个生命周期:

Provisioning系统安装

Configuration配置

Orchestration编排

Reporting报告

 

模式:

Master/agent模式

Master:puppet server

Agent(1,ansible远程安装puppet agent

2,把agent制作在操作系统中):要有管理功能,真正执行所谓管理操作的核心部件,周期性的去master请求与自己相关的的配置

 

工作模式:

声明性,基于模型:

定义:使用puppet配置语言定义基础配置信息

模拟:测试

强制(执行):比对客户端主机与定义的目标保持一致

报告:puppet  api 返回执行结果

 

三个层次:

spacer.gif配置语言:

事务层:资源之间的先后依赖关系;配置文件改变出发重启

资源抽象层:把主机上每个可以被管理对象都抽象定义为资源

资源类型:用户,组,文件,服务,cron任务等

属性及状态与其实现方式是分离的:

每一个资源都应该定义其期望状态

 

核心组件:资源

资源清单:manifests,定义了一个或多个资源(需要进行的操作)server端

资源清单及清单中的资源定义的所有依赖文件,模板等数据按特定结构组织起即为模块

站点清单:用来记录一个主机包含的所有清单

模块:清单的组合

 

 逻辑顺序:spacer.gif

 

 

可在本地模式运行或者在master和agent模式运行:

1,agent向master发送与自己相关的catalog,并发送自己的主机名和facts(主机自己的属性:IP地址,主机名,CPU等信息);

2,服务端收到请求,查找请求者的站点清单(请求者调用了的清单);

3,查询完之后找出这个站点的所有清单;

4,将清单在master端进行编译(catalog);

5,将编译结果(伪代码(catalog))发送到agent端[不可能将源代码发送到agent端];

6,伪代码在agent端的应用:

1,状态查询:已经完成的任务和需要再进行的任务。

2,执行目标状态:执行查询到的状态

7,任务执行完返回报告。

 

 

通过http协议进行通讯,证书认证,master自带CA,agent自动生成带签署的证书发给master的CA

 

安装:

Agent:puppet,facter

Master:puppet-server

命令用法格式:

Puppet  <subcommand> [options] <action> [options]

 

获取所支持的所有的资源类型:

Puppetdescribe -i

Puppet 资源类型名称(file,package等) -i  ##资源的具体使用方法

 

puppet实现lnmp架构):

nginx:

file文件夹

install-nginx.sh:##将安装好安装包的所有过程命令都写到这里

#!/bin/bash

cd /mnt

tar -zxf nginx-1.8.0.tar.gz

cd nginx-1.8.0

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module

make && make install

nginx.conf:###所安装的nginx配置文件

nginx安装包

 

mainfests

config.pp:

class nginx::config {

 

file {

"/usr/local/lnmp/nginx/conf/nginx.conf":

source => "puppet:///modules/nginx/nginx.conf",

require => Class["nginx::install"],

notify => Class["nginx::service"]

}

 

}

install.pp:

class nginx::install{

 

package {

["pcre-devel","gcc","openssl-devel"]:

ensure => present

}

 

file {

"/mnt/nginx-1.8.0.tar.gz":

source => "puppet:///modules/nginx/nginx-1.8.0.tar.gz";

"/mnt/install-nginx.sh":

source => "puppet:///modules/nginx/install-nginx.sh"

}

 

exec {

"install nginx":

command => "sh /mnt/install-nginx.sh",

creates => "/usr/local/lnmp/nginx",

provider => shell,

require => File["/mnt/install-nginx.sh"]

}

 

}

init.pp:

class nginx {

 

include nginx::install,nginx::config,nginx::service

 

}

service.pp:

class nginx::service {

 

exec {

"start nginx":

command => "/usr/local/lnmp/nginx/sbin/nginx",

provider => shell,

require => Class["nginx::config"]

}

 

}

MySQL:

files

install-myslq.sh:

my.cnf

安装包

mainfests

config.pp

class mysql::config {

 

file {

"/etc/my.cnf":

source => "puppet:///modules/mysql/my.cnf",

require => Class[mysql::install],

notify => Class[mysql::service]

}

 

}

 

init.pp:

class mysql {

include mysql::install,mysql::config,mysql::service

}

 

install.pp:

class mysql::install {

 

package {

["gcc-c++","make","ncurses-devel","bison","zlib-devel","cmake"]:

ensure => present

}

 

file {

"/mnt/mysql-5.5.12.tar.gz":

source => "puppet:///modules/mysql/mysql-5.5.12.tar.gz";

"/mnt/install-mysql.sh":

source => "puppet:///modules/mysql/install-mysql.sh"

}

 

exec {

"install mysql":

command => "cd /mnt;sh install-mysql.sh",

provider => shell,

creates => "/usr/local/lnmp/mysql",

timeout => 9999,

require => File["/mnt/install-mysql.sh"],

tries => 3

}

 

}

 

service.pp:

class mysql::service {

 

exec {

"start mysql":

command => "/etc/init.d/mysqld start",

provider => shell,

require => Class["mysql::install"]

}

 

}

 

php:...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ansible:

OS Provisioning:PXE,Cobbler(repositorydistritution,profile

PXE:Dhcp(服务端udp 67  客户端udp 68)

Tftp(udp 69)

Dnsmasq:dhcp

 

OS config:

Puppet,saltstack

 

 

运维工具分类:

Agent:puppet,saltstack

agent:ansible,依赖于每个被管理主机运ssh服务

Aansible特点:

使用简单,灵活

模块可使用任意语言

多任务批量执行-->>playbook

YAML标签来定义文本文档格式

 

当管理多个不同服务的服务器时,每个服务器都需要安装

NTP   时间同步

 

spacer.gif 

 

基本结构组件(5个):

Ansible core:核心组件

Host Inventory主机列表:用来定义由ansible能够管理的服务器的IP地址,掩码,ssh用户密码等信息

支持分类,分组

Core核心模块:调用管理模块来针对某个用户完成相对任务

大部分任务   而不是全部任务

Custom自定义模块:可以用各种语言来自定义模块,完成ansible不具有的模块

Connection 连接插件:用来与主机连接,连接插件paramiko

Playbook:用于将一个或多个主机需要进行的任务记录下来用于执行,可以多次调用执行,yaml,jinjia2定义模板

特性:1,基于Python实现,paramiko,pyyaml,jinjia2三个关键模块

2,部署简单,无agent

3,默认使用ssh协议,1,密钥认证;2,在inventor中指明密码

4,主从模式:master:asible,ssh 客户端

Slave:ssh  server

5,支持自定义模块,支持各种编程语言

6,支持playbook

7,基于模块完成各种任务

 

配置文件:/etc/ansible/ansible.cfg定义批量执行的个数等信息

/etc/ansible/hostsinventory记录表

分组

[web]

Ip

[mysql]

ip

 

支持通配符[001:006]

命令:ansible-playbook

Ansble-doc -l:显示ansible支持的模块

Ansible-doc -s:查看模块的具体信息

 

Ansible [主机] -m  模块  -a  ‘参数’

 

Ansible   webserver  -m  cron  -a ‘minute=*/10 job=/bin/echo hello name=test cron job ’

 

Ping:测试指定主机能否连接

Service:指定运行状态

Enable=:取值true 开机启动,flase开机不启动

Name=:服务名称

State=:状态,取值有  started,stopped,restarted

 

Shell:在远程主机上执行命令,尤其是管道等功能复杂的命令

Script:将本地脚本复制到远程主机并运行,要使用相对路径指定脚本

Yum 安装程序包

Name:指明要安装的程序包,可以带上版本号

State:present,lastest表示安装,absent表示卸载

 

YAML 标记语言:

键值对加缩进

可读性好

和脚本语言交互好

使用实现语言的数据类型

有一个一致的信息模型

易于实现

基于流来处理

表达能力强,扩展性好

 

 

语法:

YAML的语法和其他告诫语言类似,并且可以简单的表达清单,散列表,标量的数据结构,其结构通过空格来展示,序列(同一类对象有多个时叫序列)里的项用‘  -  ’ 表示,Map里的键值对用‘ :’分隔

List序列/列表:

 - 表示,表示同一类型的对象

Dictionary 字典:

一个键对应一组值,也可以放置于{key:value}中

 

基础元素:

变量

Inventory

条件测试

迭代

 

   Playbook的组成结构:

Inventory

Modules

Ad Hoc Commands

Playbooks

Tasks:任务,调用模块完成的某操作

Varliables:变量

Templates:模板

Handlers:处理器,有某件事情触发执行的操作

Roles:角色

 

基本结构:

- host: webservers

remote_user:

tasks:

- task1

 module_name:module_args

- task2

 

 

 本文转自   Taxing祥   51CTO博客,原文链接:http://blog.51cto.com/12118369/1957608



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
弹性计算 运维 监控
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
1月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
191 17
Selenium:强大的 Web 自动化测试工具
|
18天前
|
弹性计算 运维 监控
云资源运维难?阿里云免费工具来帮忙
阿里云推出免费运维工具——云服务诊断,帮助用户提升对云资源的运维效率、降低门槛、减轻负担。其核心功能包括「健康状态」和「诊断」。通过「健康状态」可实时查看云资源是否正常;「诊断」功能则能快速排查网络、配置、安全等问题,并提供修复建议,助您迅速恢复业务。体验评测活动火热进行中,参与即有机会赢取索尼头戴耳机、小米背包等好礼。活动链接:https://developer.aliyun.com/topic/cloud-health。
317 13
|
1月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
2月前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
2月前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
117 1
|
2月前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
2月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
252 4
|
2月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。