ansbile

  • 前言
  • 一、主流自动化运维工具简介
    • 1.1 Puppet
    • 1.2 Saltstack
    • 1.3 Ansible
  • 二、Ansible 运维工具原理
  • 三、Ansible安装
    • 3.1 下载软件包
    • 3.2 配置主机清单
    • 3.3 配置密钥对验证
    • 3.4 免交互代理
  • 四、Ansible命令行模块
    • 4.1 command模块
    • 4.2 cron模块
    • 4.3 user模块
    • 4.4 group模块
    • 4.5 copy模块
    • 4.6 file模块
    • 4.7 ping模块
    • 4.8 yum模块
    • 4.9 service模块
    • 4.10 shell模块
    • 4.11 script模块
    • 4.12 setup模块

前言

设想一下,一个运维人员需要管理数千甚至上万台服务器,如果依靠人工一台台去维护是非常困难的,但如果基于自动化运维工具就可以轻松的实现上万甚至更多台服务器的管理。
目前市场上涌现了大量的自动化配置维护工具,例如 PSSH、Puppet、Chef、SaltStack、Ansible 等。自动化运维工具存在的初衷就是为了更方便、快捷的进行配置管理,它易于安装和使用、语法也非常简单易学。


一、主流自动化运维工具简介

1.1 Puppet

Puppet 是早期的 Linux 自动化运维工具,是一种 Linux、Unix、Windows 平台的集中配置管理系统,发展至今目前已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于 Ruby 语言编写。最典型的 C/S 模式,需要安装服务端与客户端。puppet 采用 C/S 星状的结构,所有的客户端和一个或几个服务器交互,每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。
每个 puppet 客户端每半小时(可以设置)连接一次服务器端,下载最新的配置文件,并且严格按照配置文件来配置客户端,配置完成以后,puppet 客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一个消息。
Puppet 适用于服务器管理的整个过程,比如初始安装、配置、更新以及系统下线。

1.2 Saltstack

Saltstack 与 Puppet 均是 C/S 模式,需安装服务端与客户端,基于 Python 编写,加入 MQ 消息同步,可以使执行命令和执行结果高效返回,但其执行过程需等待客户端全部返回,如果客户端未及时返回或未响应的话,可能会导致部分机器没有执行结果。

1.3 Ansible

Ansible 与 Saltstack 均是基于 Python 语言开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为 Ansible 是基于 SSH 远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。==
Ansible 安装使用非常简单,而且基于上千个插件和模块实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。很多读者在使用 Ansible 工具时,认为 Ansible比 Saltstatck 执行效率慢,其实不是软件本身慢,是由于 SSH 服务慢,可以优化 SSH 连接速度及使用 Ansible 加速模块,满足企业上万台服务器的维护和管理。

二、Ansible 运维工具原理

Ansible分为控制端和被控制端,主要是基于SSH协议去管理客户端,被控制端是无需安装Agent插件的,Ansible会读取控制端hosts文件,根据文件中定义IP列表信息,调取本地的各个模块对被控端机器实现批量、并发的配置管理和维护,如果任务比较复杂可以写成PlayBook剧本进行分发管理。
Ansible 自动运维管理工具优点

  • 轻量级,更新时,只需要在操作机上进行一次更新即可;
  • 采用 SSH 协议;
  • 不需要去客户端安装 agent;
  • 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
  • 使用 python 编写的,维护更简单;
  • 支持 sudo 普通用户命令;
  • 去中心化管理。

三、Ansible安装

主机名 IP
控制端 192.168.153.40
被控制端 192.168.153.50
被控制端 192.168.153.60

3.1 下载软件包

yum install -y epel-release         #安装epel扩展源
yum install -y ansible
  • 1
  • 2

ansible配置文件都在/etc/ansible目录下

ansible.cfg         #ansible的配置文件
hosts               #ansible的主仓库,用于存储需要管理的远程主机的相关信息
roles               #角色
  • 1
  • 2
  • 3

3.2 配置主机清单

vim /etc/ansible/hosts
[webserver]              #组名
192.168.153.50           #组成员IP
... ...
[mysql]
192.168.153.60
... ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7


为了便于区别,可以修改下主机名

hostnamectl set-hostname ansible
su -
hostnamectl set-hostname webserver
su -
hostnamectl set-hostname mysql
su -
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6



3.3 配置密钥对验证

ssh-keygen -t rsa
ssh-copy-id root@192.168.153.50
ssh-copy-id root@192.168.153.60
  • 1
  • 2
  • 3

3.4 免交互代理

ssh-agent bash
ssh-add
  • 1
  • 2

四、Ansible命令行模块

命令格式:`命令格式: ansible [主机] [-m 模块] [-a 操作]`
ansible-doc -l        #列出所有已安装的模块,q退出
ansible-doc -s 模块    #查看相应模块信息,q退出
ansible-doc -s yum    #-s列出yum模块描述信息和操作动作,q退出
  • 1
  • 2
  • 3
  • 4

4.1 command模块

ansible 192.168.153.50 -m command- a 'ls'    #指定ip执行ls
ansible mysql -m command -a 'ls'          #指定组执行ls
ansible all -m command -a 'ls'        #所有主机执行ls命令
ansible all -a 'ls'              `#如果不加-m模块,则默认运行command模块`
  • 1
  • 2
  • 3
  • 4


4.2 cron模块

两种状态(state):present表示添加(可以省略),absent表示移除。

ansible webserver -m cron -a 'day="*/1" job="/usr/bin/echo hello >> /opt/1test.txt" name="this is test"'
#指定webserver组中所有主机使用cron模块,时间是每天,工作是输出hello,计划性任务命名为this is test
ansible webserver -a 'crontab -l'
#没有-m指定模块默认使用command模块,操作是查看计划性任务
  • 1
  • 2
  • 3
  • 4


可以在192.168.153.50(webserver)再次确认一下

ansible webserver -m cron -a 'name="this is test" state=absent'
#移除计划任务
  • 1
  • 2


4.3 user模块

user模块是请求的是useradd, userdel, usermod三个指令

ansible mysql -m user -a 'name=lisi'
#创建用户lisi
ansible mysql -m command -a 'tail -1 /etc/passwd'
#查看/etc/passwd文件最后一行,看用户是否创建成功
ansible mysql -m user -a 'name=lisi state=absent'
#删除用户lisi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6




4.4 group模块

group模块请求的是groupadd, groupdel, groupmod三个指令。


```bash
ansible webserver -m group -a 'name=webserver1 gid=567 system=yes'
#创建组
ansible webserver -a 'tail -1 /etc/group'              #查看组信息
ansible webserver -m user -a 'name=wangwu uid=567 system=yes group=webserver1'
#创建用户并加入webserver组
ansible webserver -a 'tail -1 /etc/passwd'       #查看用户wangwu的用户id和组id信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.5 copy模块

ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640'
#指定mysql组中的主机使用copy模块将控制端文件/etc/fstab复制到被控制端并更名
ansible mysql -a 'ls /opt'ansible mysql -m copy -a 'content="hello world!" dest=/opt/fstab.back'
#将hello world!写入/opt/fstab.back
ansible mysql -a 'cat /opt/fstab.back'


4.6 file模块

ansible mysql -m user -a 'name=mysql system=yes'
#创建mysql系统用户
ansible mysql -m group -a 'name=mysql system=yes'
#创建mysql组
ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back'
#修改文件的属主属组
ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'
#mysql组中主机使用file模块,为源文件/opt/fstab.link创建一个软连接/opt/fstab.back.link
ansible mysql -a 'ls -l /opt'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9



ansible mysql -m file -a "path=/opt/fstab.link state=absent"
#删除-个文件
ansible mysql -m file -a "path=/opt/test state=touch"
#创建一个文件
ansible mysql -a 'ls /opt'
#查看
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.7 ping模块

ansible all -m ping
  • 1

4.8 yum模块

yum模块主要用于安装和卸载软件包

ansible webserver -m yum -a 'name=httpd'
#yum安装httpd
ansible webserver -a 'rpm -q httpd'ansible webserver -m yum -a 'name=httpd state=absent'
#卸载httpd
ansible webserver -a 'rpm -q httpd'

4.9 service模块

ansible webserver -a 'systemctl status httpd'
#查看web服务器httpd运行状态
ansible webserver -m service -a 'enabled=true name=httpd state=started'
#启动httpd服务
  • 1
  • 2
  • 3
  • 4

4.10 shell模块

ansible mysql -m user -a 'name=zhangsan'
ansible mysql -m shell -a 'echo 123123 | passwd --stdin zhangsan'
  • 1
  • 2

4.11 script模块

vim test.sh
#!/bin/bash
echo 'hello ansible from script' > /opt/script.txtchmod +x test.sh
ansible all -m script -a 'test.sh'

4.12 setup模块

Ansible facts 是远程系统的信息,主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等信息。

ansible mysql -m setup
#获取mysql组主机的facts信息
  • 1
  • 2

自动化运维工具——ansible安装及模块介绍相关推荐

  1. 自动化运维工具Ansible实战---常用模块

    Ansible默认提供了很多模块来供我们使用.在Linux中,我们可以通过 ansible-doc -l 命令查看到当前Ansible支持哪些模块,通过 ansible-doc -s [模块名] 又可 ...

  2. 轻量级自动化运维工具ansible之一:初步介绍及简单运用

    一.常见的自动化运维工具: OS Provisioning:PXE, Cobbler OS Config:puppet, saltstack, chef, func Task Exec:fabric, ...

  3. 自动化运维工具ansible(安装与模块介绍)

    自动化运维工具ansible(安装与模块介绍) 一.ansible运维工具概述 (一).ansible的特点 (二).ansible的原理 (三)ansible的优点 二.安装ansible 三.an ...

  4. 自动化运维工具ansible的安装管理以及模块介绍

    自动化运维工具ansible的安装管理以及模块介绍 目录 自动化运维工具ansible的安装管理以及模块介绍 一.ansible概述 1.几种常用运维工具比较 2.Ansible简介 3.Ansibl ...

  5. 自动化运维工具----ansible

    自动化运维工具----ansible ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能. 主要模块以及功能 ...

  6. 自动化运维工具-Ansible的Playbook的使用

    Playbook的使用 前言 一.Playbook是什么? 二.playbook使用场景 三.Playbook格式说明 四.Play book变量的使用 1 在主机列表定义变量 2 在playbook ...

  7. 自动化运维工具-Ansible实战指南

    Ansible实战 前言 一.Ansible简介 1.ansible是什么? 2.ansible特点 3.ansible架构 主要模块 工作流程 命令执行过程 二.Ansible 配置 1 安装ans ...

  8. 自动化运维工具——Ansible(三)——分组管理

    自动化运维工具--Ansible(三)--分组管理 1. 通过ip地址分组 1.1 写法一 1.2 写法二 2. 通过主机名分组 2.1 写法一 2.2 写法二 3. 子组 1. 通过ip地址分组 1 ...

  9. 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客

    自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansib ...

最新文章

  1. 2021年春季学期-信号与系统-第七次作业参考答案-第三小题
  2. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
  3. 傅里叶变换的Matlab代码
  4. 白话Elasticsearch06- 深度探秘搜索技术之手动控制全文检索结果的精准度
  5. c++循环执行一个函数_javascript的五种循环,作为程序员,要根据场景和性能作出选择
  6. 河北2021高考成绩查询具体时间,2021河北高考时间具体安排表
  7. php怎么转换bt,php格式的文件转成bt种子文件的方法
  8. 阿里ACP云计算认证快速通关分享
  9. Netty 的零拷贝
  10. 活前缀及构造活前缀的DFA
  11. 全网最全AD16——PCB布线
  12. 六旋翼无人机动力学建模与仿真搭建
  13. Kali的安装、替换源及汉化
  14. Java 并发编程的艺术 pdf 下载
  15. 创建EKS Cluster的笔记
  16. msysgit+apache安装说明
  17. NS3-LENA源码阅读报告(2)
  18. 信息流驱动百度App高位增长:日活和时长双双跑赢大盘
  19. 【图形设计】手把手教你如何画好时序图
  20. 健身将肩膀练大大概多久可以?

热门文章

  1. packetdrill 简介
  2. 【直播预告 | 今天10:30】多媒体技术PI第三期:网络传输
  3. 一个即将写入MySQL源码的官方bug解决之路
  4. 胡珀:从危到机,AI 时代下的安全挑战
  5. ElasticSearch查询 第四篇:匹配查询(Match)
  6. Neutron 分布式虚拟路由(Neutron Distributed Virtual Routing)
  7. devStack安装OpenStack Ocata版本 (Linux Bridge+VLAN)
  8. 各大券商进军人工智能 业内人士:应多措并举促发展
  9. HQL语句使用row_number() over(partition by),分组排序取topN
  10. mapreduce,map后面跟map是什么操作???