(1).Ansible具有如下特点:

  部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  默认使用SSH协议对设备进行管理;
  主从集中化管理;
  配置简单、功能强大、扩展性强;
  支持API及自定义模块,可通过Python轻松扩展;
  通过Playbooks来定制强大的配置、状态管理
  对云计算平台、大数据都有很好的支持;

(2).实验环境

youxi1  192.168.1.6  Ansible主控端

youxi2  192.168.1.7  被控端

youxi3  192.168.1.8  被控端

(3).在youxi1上部署Ansible,并配置环境变量

  yum安装Ansible需要epel源,安装完成后查看下版本

[root@youxi1 ~]# yum -y install ansible
[root@youxi1 ~]# ansible --version
ansible 2.8.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

  配置Ansible主机清单

[root@youxi1 ~]# vim /etc/ansible/hosts  //默认全是注释
[webservers]  //定义模块
192.168.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
192.168.1.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
[root@youxi1 ~]# ssh root@192.168.1.7 //配置完成后使用ssh先测试一下,要确保不能有yes操作,否则报错。
The authenticity of host '192.168.1.7 (192.168.1.7)' can't be established.
ECDSA key fingerprint is SHA256:j3ee8eoTo2XEv0QxCYmxphMipcNRxC+IONPmt1HwRLg.
ECDSA key fingerprint is MD5:25:e2:b4:08:f2:79:7d:6e:42:84:b5:78:3d:6a:81:20.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.7' (ECDSA) to the list of known hosts.
root@192.168.1.7's password:
Last login: Sun Jul 7 23:06:22 2019 from xuefei-pc
[root@youxi2 ~]# exit
登出
Connection to 192.168.1.7 closed.
[root@youxi1 ~]# ssh root@192.168.1.8  //测试ssh,理由同上
Connection to 192.168.1.8 closed.
[root@youxi1 ~]# ansible -i /etc/ansible/hosts webservers -m ping  //最后使用一个简单的ping命令测试一下ansible是否配置正常
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

  由于Ansible是基于ssh对设备进行管理,所以可以使用秘钥进行访问,以此来优化配置文件。先来做免密登录

[root@youxi1 ~]# ssh-keygen  //生成秘钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:aOpFP3BWmgXReDuxqgGZk27LnphjgjLZfJUmcITe/Rw root@youxi1
The key's randomart image is:
+---[RSA 2048]----+
| . o+ |
| . . ..+ |
| . o = .o+ |
| o O ..E=+ |
| + o=+So . |
| ++==+ |
|.+ o.=.oo |
|* =++o. . |
|.+o++ |
+----[SHA256]-----+
[root@youxi1 ~]# ssh-copy-id root@192.168.1.7  //将秘钥拷贝到192.168.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.7's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.7'"
and check to make sure that only the key(s) you wanted were added. [root@youxi1 ~]# ssh-copy-id root@192.168.1.8  //将秘钥拷贝到192.168.1.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.8's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.8'"
and check to make sure that only the key(s) you wanted were added.
[root@youxi1 ~]# ssh root@192.168.1.7  //测试是否可以免密登录
Last login: Sun Jul 7 23:16:05 2019 from youxi1.cn
[root@youxi2 ~]# exit
登出
Connection to 192.168.1.7 closed.
[root@youxi1 ~]# ssh root@192.168.1.8
Last login: Sun Jul 7 23:16:05 2019 from youxi1.cn
[root@youxi3 ~]# exit
登出
Connection to 192.168.1.8 closed.

  免密登录做完后,来优化配置文件

[root@youxi1 ~]# vim /etc/ansible/hosts
[webservers]  //将原本的配置之留下IP地址(也可以是域名)
192.168.1.7
192.168.1.8
[root@youxi1 ~]# !ansible  //测试,调用最近的ansible开头的命令
ansible -i /etc/ansible/hosts webservers -m ping  //完整的命令
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

(4).Ansible的使用方法以及常用的选项

  使用方法:ansible <主机模式> [选项]。一般不会定义主机模式。

  常用选项:

-v,--verbose    详细模式
-i PATH, --inventory=PATH 指定host文件的路径,默认是在/etc/ansible/hosts
-f NUM,--forks=NUM 指定fork开启同步进程数的个数,默认为5个。
-m NAME,-module-name=NAME 指定使用的module,默认使用command
-a MODULE_ARGS,--args=MODULE_ARGS 指定module的参数
-k,--ask-pass 提示输入ssh密码,而不是使用秘钥认证
-b,--become 请求权限升级的用户名,需要和-K选项联合使用
-K, --ask-become-pass 请求权限升级的用户密码,需要和-b选项联合使用
-u REMOTE_USER, --user=REMOTE_USER 指定移动端的执行用户
-C, --check 测试命令执行会改变什么,而不会真正的执行

  其中-m选项非常复杂,可以使用ansible-doc命令查看,主要使用的几个选项可以看(6).常见的高级模块

ansible-doc -l    查看所有module
ansible-doc -s [MODULE_NAME] 查看指定模块的参数

(5).实例

  使用ping检查连通性

[root@youxi1 ~]# ansible -i /etc/ansible/hosts 'webservers' -m ping
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@youxi1 ~]# ansible 'webservers' -m ping  //如果不指定host文件,默认指向/etc/ansible/hosts文件
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

  检查节点运行时间

[root@youxi1 ~]# ansible 'webservers' -m command -a "uptime"
192.168.1.7 | CHANGED | rc=0 >>
21:32:19 up 13 min, 2 users, load average: 0.00, 0.04, 0.06 192.168.1.8 | CHANGED | rc=0 >>
21:32:19 up 13 min, 2 users, load average: 0.00, 0.05, 0.09

  检查节点内核版本

[root@youxi1 ~]# ansible 'webservers' -m command -a "uname -r"
192.168.1.8 | CHANGED | rc=0 >>
3.10.0-957.el7.x86_64 192.168.1.7 | CHANGED | rc=0 >>
3.10.0-957.el7.x86_64

  查看节点文件系统使用情况并重定向到指定文件

[root@youxi1 ~]# ansible 'webservers' -m command -a "df -Th" > command-output
[root@youxi1 ~]# cat command-output
192.168.1.7 | CHANGED | rc=0 >>
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 17G 1.3G 16G 8% /
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.6M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
192.168.1.8 | CHANGED | rc=0 >>
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 17G 1.5G 16G 9% /
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.6M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0

(6).常用模块

  command模块,也是ansible的默认模块。不指定-m选项时,使用的就是command模块,常见的命令都可以使用,但由于不是通过shell执行的,所以<、>、|、&都是不可以的。当然也不支持管道,没法批量执行命令。

  shell模块,远程命令通过/bin/sh来执行,所以在终端输入的各种命令方式都可以使用。如果自定义在~/.bashrc或~/.bash_profile中的环境变量shell模块由于没有加载,而导致的无法识别,可以在最开始执行加载自定义脚本的语句。例如ansible webservers -m shell -a "source ~/.bash_profile && free -m"。如果待执行语句过多,可以编写脚本通过copy模块传到远端,再执行,但会用到两次ansible,这士就可以使用script模块。

  script模块,在本地编写脚本后,直接使用该模块,可以自动将脚本传到远端并执行,执行完成后删除远端脚本。

  copy模块,将本地文件复制到远端,例如ansible webserver -m copy -a "src=[本地文件地址] dest=[远端目录] owner=[远端所属主] group=[远端所属组] mode=[4位数字权限,例0755]"

  file模块,设置文件属性,例如ansible webservers -m file -a "path=[远端文件地址] mode=[4位数字权限,例0755]"

  stat模块,获取远程文件信息,例如ansible webservers -m stat -a "path=[远端文件地址]"

  get_url模块,实现远程主机下载指定url,例如ansible webservers -m get_url -a "url=[url地址] dest=[远端存放目录] mode=[4位数字权限,例0755] force=yes"。其中force=yes表示当下载文件存在时,如果所下的内容和原目录下的文件内容不一样则替换,如果一样则不下载。另外force=no表示仅目标不存在时才下载。

  yum模块,软件包管理,例如ansible webservers -m yum -a "name=[软件包名] state=[软件包状态]"。其中state有五个可选值,latest、present、installed代表安装;removed, absent代表卸载。

  cron模块,远程主机计划任务(crontab)配置,例如ansible webservers -m cron -a "name='list dir' minute=*/30 job='ls /root'",这是每30分钟查看root目录下文件。

  service模块,远程主机系统服务管理,常用的就是name、state和enabled三个参数,name指定服务名称,state指定服务状态(started、stopped、restarted、reloaded)、enabled设置为yes则开机自启,设置为no则开机不启动。例如ansible webservers -m service -a "name=httpd state=restarted"

  sysctl模块,远程主机sysctl配置。例如ansible webservers -m sysctl -a "name=net.ipv4.ipforward value=1 reload=yes”,此时查看远程主机的/proc/sys/net/ipv4/ip_forward文件内容就是1。

  user模块,远程主机用户管理,例如ansible webservers -m user -a "name=test1 state=present",state表示账户是否应该存在,如果与申明状态不同,则采取措施。

(7).使用Playbook(剧本)

  没用过,记录一个参考文档吧:https://www.cnblogs.com/bananaaa/archive/2017/12/29/8143345.html

CentOS7下搭建Ansible自动化运维工具,集中管理服务器的更多相关文章

  1. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  2. Ansible 自动化运维工具

    Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...

  3. Ansible自动化运维工具的使用

                                 Ansible自动化运维工具的使用       host lnventory 管理主机 ip  root账号密码 ssh端口 core mod ...

  4. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  5. 在CentOS7.6上安装自动化运维工具Ansible以及playbook案例实操

    前言 Ansible是一款优秀的自动化IT运维工具,具有远程安装.远程部署应用.远程管理能力,支持Windows.Linux.Unix.macOS和大型机等多种操作系统. 下面就以CentOS 7.6 ...

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

    概述本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装主机配置Ad-Hoc command(命令行执行)Playbook (任务剧本)Ansible 和 Sa ...

  7. ansible自动化运维工具使用详解

    一. ansible 简介 1. ansible ansible是新出现的 自动化 运维工具 , 基于Python研发 . 糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行 ...

  8. Ansible自动化运维工具

    ansible软件介绍 python语言是运维人员必会的语言!  ansible是一个基于Python开发的自动化运维工具!(saltstack)  其功能实现基于SSH远程连接服务!  ans ...

  9. [Linux]Ansible自动化运维② - 工具与模块

    目录 一.Ansible的工具 1.1 Ansible的工作前提 1.2 Ansible的安装文件 1.3 Ansible的配置文件 1.4 Ansible的相关工具 1.4.1 [帮助工具]Ansi ...

随机推荐

  1. python中部分数据类型及其使用方法

    1.数据类型: int:整数 str:字符串,一般不存放大量的数据 bool:布尔值,用来判断 只有两个值 True False  list:列表,用来存放大量数据[]来表示,里面可以放任何数据类型 ...

  2. seo与python大数据结合给文本分词并提取高频词

    最近研究seo和python如何结合,参考网上的一些资料,写的这个程序. 目的:分析某个行业(例如:圆柱模板)用户最关心的一些词,根据需求去自动调整TDK,以及栏目,内容页的规划 使用方法: 1.下载 ...

  3. numpy 参考:https://mp.weixin.qq.com/s?__biz=MzU1MjYzNjQwOQ==&mid=2247486010&idx=1&sn=e42e6706e0e285ecbfdbbd76fb4ff352&chksm=fbfe50accc89d9ba56a3167c519638f1327a5c5bf12ed59dd8c6de9b2c25baeec1f1f8ad5fb7&

    a=np.array([,,,]) b=np.arange() print(a,b) [ ] [ ] 对应相乘 c2=a*b      [ 0  2  6 12] 对应相乘再求和  c3=a.dot( ...

  4. js for/in循环及其它

    for in 循环不仅可以遍历对象的属性,还可以遍历数组. Js 中为数组提供了多种遍历方式 const ary = ['a', 'b', 'c']; // 最基本的方式, 只能遍历下标有序递增的数组 ...

  5. ubuntu下新立得(synaptic)软件包管理器安装

    1.从ubuntu下的软件中心(面板主页中输入soft即可找到)搜索安装synaptic后,打开新立得一闪就自动关了.解决办法为: 1.1命令行下卸载,命令行下重新安装: 卸载: #purge表示卸载 ...

  6. 模拟I2C协议学习点滴之复习三极管、场效应管

    晶体三极管分为NPN和PNP型两种结构形式,除了电源极性的不同工作原理是大致相同的.对于NPN管,它是由2块N型半导体夹着一块P型半导体所组成的,发射区与基区之间形成的PN结称为发射结,而集电区与基区 ...

  7. 洛谷P1021邮票面值设计

    题目 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案.而且还可以通过在递归中增加数组的方式来辅助搜索. #include <bits/stdc++.h& ...

  8. java循环获取多天时间

    通过开始时间和结束时间循环获取时间: SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date star ...

  9. Java基础系列 - 子类继承父类,调用父类的构造函数

    package com.test7; public class test7 { public static void main(String[] args) { Son son = new Son(1 ...

  10. lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。

    4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...