Ansible是2013年推出的一种通用自动化工具,可用于配置管理或工作流程自动化。配置管理是一种“基础架构代码”实践,它将事物编码,例如应该在系统上安装什么包和版本,或者应该运行什么守护进程。工作流自动化可能是从配置基础架构到部署软件的任何事情。Ansible在2015年时被Redhat公司收购。
  Ansible是用Python编写的,它使用SSH在不同的机器上执行命令。Ansible是无代理的,这使得入手更容易。您只需要在相关机器上安装SSH访问和Python。Ansible使用声明式YML"playbook"
将一组主机(从“hosts”)映射到定义明确的角色。声明性用于指示Ansible如何设置或更改事物,Ansible才进行必要的更改。

  200-500台服务器,用ansible。更多的则使用saltstack

  ansible 无需安装客户端,依赖ssh服务。 -->ssh 认证

ansible 部署

安装ansible

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

#ansible 管理端
yum install ansible -y
yum install libselinux-python -y

#backup nfs01 被管理端
yum install libselinux-python -y
[root@m01 ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg   # ansible的配置文件
├── hosts       # ansible管理了 哪些服务器 服务器列表
└── roles      # 角色 [root@m01 ~]# cat /etc/ansible/hosts
[lewen]
172.16.1.31
172.16.1.41

ansible lewen -m command -a "hostname"
ansible lewen -m command -a "yum install cowsay -y"

-m 后边是模块的名字
-m MODULE_NAME,--module-name=MODULE_NAME module name to execute(default=command).

-a 后面是要执行的命令  -a MODULE_ARGS,-args=MODULE_ARGS. module arguments.

复制文件

利用ansible远程批量拷贝文件或目录。
语法:
ansible lewen -m copy -a "sre=/etc/passwd dest=/tap/oldgirl.txt owner=lewen group=lewen sode=0755"
注意:
1)如果指定的目标目录不存在,系统会自动创建,否则源目录会放到目标目录下面去:
2)如果copy的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于copy过去后再重命名:
3)若果dest是目标机器上已经存在的目录,则会直接把文件copy 到该目录下面。
4)设定的用户和组lewen在所有客户端必须存在。

[root@m01 ~]# ansible lewen -m copy -a "src=/etc/hosts dest=/tmp owner=lewen mode=0755"  # backup=yes 已存在的文件就复制备份
172.16.1.41 | SUCCESS => {
"changed": true,
"checksum": "bc07bb4d3a780f4fd8cae94ec7bff04edb1a5a4e",
"dest": "/tmp/hosts",
"gid": ,
"group": "root",
"md5sum": "55ee21bf1168f9be70abd35bf29d8e4a",
"mode": "",
"owner": "lewen",
"size": ,
"src": "/root/.ansible/tmp/ansible-tmp-1517744820.18-259504826638509/source",
"state": "file",
"uid":
}
172.16.1.31 | SUCCESS => {
"changed": true,
"checksum": "bc07bb4d3a780f4fd8cae94ec7bff04edb1a5a4e",
"dest": "/tmp/hosts",
"gid": ,
"group": "root",
"md5sum": "55ee21bf1168f9be70abd35bf29d8e4a",
"mode": "",
"owner": "lewen",
"size": ,
"src": "/root/.ansible/tmp/ansible-tmp-1517744820.17-14642605512978/source",
"state": "file",
"uid":
}


[root@m01 ~]# ansible lewen -m command -a "ls -l /tmp/hosts"
172.16.1.31 | SUCCESS | rc= >>
-rwxr-xr-x lewen root Feb : /tmp/hosts
172.16.1.41 | SUCCESS | rc= >>
-rwxr-xr-x lewen root Feb : /tmp/hosts
ansible lewen -m copy -a "src=/etc/hosts dest=/tmp backup=yes"

ansible-doc -l|wc -l
ansible-doc -s copy # 查看文档 其他常用模块命令
ansible lewen -m copy -a "src=/server/scripts/yum-htop.sh dest=/server/scripts/ "
ansible lewen -m shell -a "/bin/sh /server/scripts/yum-htop.sh"
ansible lewen -m script -a "/server/scripts/yum.sh"

定时任务

linux 定时任务。
分,时,日,月,周   执行的命令。

# 创建定时任务
[root@m01 scripts]# ansible lewen -m cron -a "name='restart network' minute=00 hour=00 job=' /etc/init.d/network restart >/dev/null 2>&1'"
172.16.1.31 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"restart network"
]
}
172.16.1.41 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"restart network"
]
}
​# 查看定时任务
[root@m01 scripts]# ansible lewen -a "crontab -l"
172.16.1.41 | SUCCESS | rc= >>
#time sync by lidao at --
*/ * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null >&
#check & send result lee at --
* * * /bin/sh /server/scripts/check.sh >/dev/null >&
#Ansible: restart network
* * * /etc/init.d/network restart >/dev/null >&
172.16.1.31 | SUCCESS | rc= >>
#time sync by lidao at --
*/ * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null >&
#Ansible: restart network
* * * /etc/init.d/network restart >/dev/null >&​
​# 取消定时任务
[root@m01 ~]# ansible oldboy -m cron -a "name='restart network' state=absent "
172.16.1.31 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": []
}
172.16.1.41 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": []

常用模块

每个模块就是一个功能
command(默认的模块)  #执行命令模块****
shell          #执行shell 脚本模块****。 # 支持shell 管道更多的功能
script         #把脚本发到客户端,然后执行。****。
copy          #把本地文件发送到远端
file          # 设定文件属性模块。
service        #系统服务管理模块。
cron          #计划任务管理模块
yum          #yum软件包安装管理模块
synchronize     #使用rsync同步文件模块。

eg:
  ansible lewen -m service -a "name=crond state=started enabled=yes"

ssh 认证模块
authorized_key   #-Adds or removes an SSH authorized key

playbook

ansible 剧本

核心功能
1.PyYAML-剧本的语言。

2.paramiko-远程连接与数据传输。
3.Jinjia2

mkdir -p /server/playbook

[root@m01 playbook]# cat ifconfig.yml
- hosts: lewen
tasks:
- command: ifconfig
- shell: ifconfig >/tmp/ip.log


ansible-playbook -C ifconfig.yml # 检查剧本
ansible-playbook ifconfig.yml [root@m01 playbook]# cat print-ip.yml
- hosts: all
tasks:
- name: get ip address
shell: ifconfig eth0 |awk -F "[ :]+" 'NR==2{print $4}' >>/tmp/ip.log ansible-playbook -C print-ip.yml
ansible-playbook print-ip.yml
ansible all -a "tail -1 /tmp/ip.log"
​ ansible oldboy -m cron -a 'name="restart network" minute=00 hour=00 job="/etc/init.d/network restart >/dev/null 2>&1" state=present'

​# playbook添加定时任务
[root@m01 playbook]# cat add-cron.yml
- hosts: oldboy
tasks:
- name: add restart network cron
cron: name="restart network" minute= hour= job="/etc/init.d/network restart >/dev/null 2>&1" state=present

​ 查看
[root@m01 playbook]# ansible oldboy -a "crontab -l"
172.16.1.41 | SUCCESS | rc= >>
#time sync by lidao at --
*/ * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null >&
#check & send result lee at --
* * * /bin/sh /server/scripts/check.sh >/dev/null >&
172.16.1.31 | SUCCESS | rc= >>
#time sync by lidao at --
*/ * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null >&

playbook添加定时任务

两种书写格式
(1)
- hosts: oldboy
tasks:
- name: add restart network cron
cron: name="restart network" minute= hour= job="/etc/init.d/network restart >/dev/null 2>&1" state=present
(2)
- hosts: oldboy
tasks:
- name: add restart network cron
cron:
name: restart network
minute:
hour:
job: /etc/init.d/network restart >/dev/null >&
state: present

例3:对同一台机器配置多个任务

重启网络 service

安装软件 yum

显示时间信息到文件 date

[root@m01 playbook]# cat manage.yml
- hosts: all
tasks:
- name: restart network
service: #服务
name: network #服务器名
state: restarted #状态
- name: install tree nmap lrzsz iftop htop iotop nc
shell: yum install -y tree nmap lrzsz iftop htop iotop nc
- name: print date to file
shell: date +%F >>/tmp/date.log
yml 转化后的格式:
[ { hosts: 'all',
tasks:
[ { name: 'restart network',
service: { name: 'network', state: 'restarted' } },
{ name: 'install tree nmap lrzsz iftop htop iotop nc',
shell: 'yum install -y tree nmap lrzsz iftop htop iotop nc' },
{ name: 'print date to file',
shell: 'date +%F >>/tmp/date.log' } ] } ]

-

[root@m01 playbook]# cat hosts.yml
- hosts: 172.16.1.41
tasks:
- name: mkdir
shell: mkdir -p /oldboy/backup
- hosts: 172.16.1.31
tasks:
- name: find
shell: find /etc -type f -name "*.conf" >>/tmp/name.log ansible安装rsync服务器 nfs服务器 配置sersync数据同步 如何使用pssh (pssh pscp prsync)

view

w9 Ansible批量管理与维护的更多相关文章

  1. ansible批量管理服务 上

    1 ansible简介 1.1 ansible批量管理服务概述 (1)是基于python语言开发的自动化软件工具(2)是基于SSH远程管理服务实现远程主机批量管理(3)并行管理,部署简单,应用也简单方 ...

  2. 使用ansible批量管理远程服务器

    使用ansible批量管理远程服务器 背景 本地需要管理远程的一批服务器,主要执行以下任务: 1) 将本地的文件复制到远端所有服务器: 2) 需要在远程服务器中执行一个个命令: 远端服务器路径并非完全 ...

  3. 六.ansible批量管理服务

    期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. ...

  4. Ansible 批量管理Windows Server服务器

    Ansible批量管理Windows Server         Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppe ...

  5. Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务

    SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Worki ...

  6. ansible批量管理常见的配置方法

    第7章 ansible的管理 7.1 ansible概念的介绍 ansible-playbook –syntax            检查语法 ansible-playbook -C         ...

  7. ansible批量管理软件部署及剧本

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_6 ...

  8. Linux中ansible批量管理软件部署及剧本编写

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...

  9. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

随机推荐

  1. ffmpeg 编译

    下载FFmpeg git clone https://git.ffmpeg.org/ffmpeg.git 配置编译FFmpeg ./configure --prefix=host --enable-s ...

  2. java 性能测试框架工具-junitperf

    性能测试工具 对于 Java 开发者来说,要去学习性能测试工具未免很麻烦. 但有时候会有性能测试的需求. junitperf junitperf 就是一款为 Java 开发者设计的性能测试框架,如果你 ...

  3. 【Python】启动迅雷下载

    import subprocess import base64 thunder_path = 'E:\Thunder\Program\Thunder.exe' def Url2Thunder(url) ...

  4. centos6.5部署redmine3.2

    ruby 2.1 + rails 4.2+ mysql 5.6 +centos6.5 + rvm 1.29 1.基本的软件环境 yum -y install libyaml-devel zlib-de ...

  5. [PAClient Error] Error: E4356 File does not exist armv7

    [PAClient Error] Error: E4356 File does not exist: /Users/tt/PAServer/scratch-dir/Administrator-snIO ...

  6. JavaScript学习-2循环

    文章目录 ----------①console函数 ----------②for循环 ----------③跳出循环 ----------④练习题:口诀表 ----------⑤练习题:幼兔 ---- ...

  7. CSS 图像大小

    CSS 图像大小 虽然在HTML中,img标签有属性height.width设置高和宽,在工作中却使用得非常少,通常使用CSS来控制大小. 给盒子设置属性height.width限制大小.单位通常是像 ...

  8. 云笔记项目-Java反射知识学习

    在云笔记项目中,补充了部分反射的知识,反射这一部分基础知识非常重要,前面学习的框架Spring和MyBatis读取xml配置文件创建对象,以及JDBC加载驱动等都用了反射,但只知道有这个东西,具体不知 ...

  9. step_by_step_webapi执行时间

    做开发没多久,这次单位让我做对TB 的机票运价直连接口,其实主要是去sabre gds带上相应的参数去做查询,验仓,下单操作,这次用到asp.net boilerplate 项目模板搭建,用它的动态w ...

  10. 时间戳转中国人能看得懂的日期格式 yy-mm-dd

    很多项目都会用到时间戳的转换 说实话  我现在的这家公司超级好 因为后太要求传数据的时候竟然可以是时间戳的格式 我觉得我好幸福 哈哈哈 不过 等后台转给你数据的时候很多时候都是时间戳 这时候就得前端转 ...