自动化运维工具

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

自动化运维管理工具:

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



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
Web App开发 人工智能 自然语言处理
【人工智能时代】AI赋能编程 | 自动化工具助力高效办公
【人工智能时代】AI赋能编程 | 自动化工具助力高效办公
【人工智能时代】AI赋能编程 | 自动化工具助力高效办公
|
2月前
|
敏捷开发 API
【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
|
4月前
|
运维 Shell Linux
Ansible自动化运维工具之常用模块使用实战(5)
Ansible自动化运维工具之常用模块使用实战(5)
|
1月前
|
设计模式 Java 测试技术
软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
41 0
|
2月前
|
XML 测试技术 开发工具
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
44 4
|
24天前
|
Web App开发 前端开发 测试技术
如何对自动化工具选型?
如何对自动化工具选型?
|
2天前
|
Web App开发 测试技术 数据安全/隐私保护
Web自动化测试工具Selenium
Web自动化测试工具Selenium
|
5天前
|
监控 测试技术 API
自动化测试工具与电脑桌面监控软件的集成:Selenium与Python的无缝整合
在当今数字化时代,软件质量保证是每个软件开发团队都必须面对的重要挑战之一。自动化测试工具和电脑桌面监控软件的结合,为开发团队提供了一种有效的方式来确保软件的稳定性和性能。本文将介绍如何利用Python编程语言中的Selenium库,与桌面监控软件进行无缝整合,以实现对应用程序的自动化测试和桌面监控。
25 5
|
4月前
|
运维 Linux
Ansible自动化运维工具之常用模块使用实战(6)
Ansible自动化运维工具之常用模块使用实战(6)
|
24天前
|
Java jenkins 测试技术
常见自动化测试框架和工具
常见自动化测试框架和工具

热门文章

最新文章

相关产品

  • 云迁移中心