Day 45 Ansible批量管理

1.1 Ansible是一个配置管理系统configuration management system

你只需要可以使用ssh访问你的服务器或设备就行。

1.1.1 安装软件

1.1.2 配置服务

1.2 Ansible能做什么

ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

比如:同时在100台服务器上安装nfs服务,并在安装后启动服务。

比如:将某个文件一次性拷贝到100台服务器上。

比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。

这些场景中我们都可以使用到ansible

Cobbler

Ansible

1.购买机器->2.配置环境->3.部署代码->4测试->5.加入集群

Ansible/Saltstack(master->minion)

1.3 Ansible软件特点

    1.ansible不需要单独安装客户端,SSH相当于ansible客户端。

    2.ansible不需要启动任何服务,仅需安装对应工具即可。

    3.ansible依赖大量的python模块来实现批量管理。

    4.ansible配置文件/etc/ansible/ansible.cfg

   

1.4    实现从管理机m01到其他机器的密钥认证

1.4.1 ansible借助公钥批量管理

#利用非交换式工具实现批量分发公钥与批量管理服务器

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

 

1.4.2 安装ansible

[root@m01 ~]# yum install ansible -y

 

1.4.3 配置ansible

[root@m01 ~]# vim /etc/ansible/hosts

[oldboy]

172.16.1.31

172.16.1.41

1.4.4 验证ansible

# ansible是通过ssh端口探测通信

[root@m01 ~]# ansible oldboy -m ping

172.16.1.7 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

172.16.1.31 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

172.16.1.41 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

 

#批量执行命令

[root@m01 ~]# ansible oldboy -m command -a "df -h"

 

#2.如果没有给对应的主机下发公钥,可以使用密码的方式进行添加

172.16.1.41 ansible_ssh_user='root' ansible_ssh_pass='1' ansible_ssh_port='22'

 

1.4.5 定义主机清单

[web]

172.16.1.7

 

[nfs]

172.16.1.31

 

[backup]

172.16.1.41

 

[oldboy:children]

web

nfs

backup

 

 

[root@m01 ~]# ansible web --list-hosts          #web

  hosts (1):

    172.16.1.7

[root@m01 ~]# ansible nfs --list-hosts          #nfs

  hosts (1):

    172.16.1.31

[root@m01 ~]# ansible backup --list-hosts       #rsync

  hosts (1):

    172.16.1.41

[root@m01 ~]# ansible oldboy --list-hosts       #集中所有的小组,用于执行一些基础的配置

  hosts (3):

    172.16.1.31

    172.16.1.41

    172.16.1.7

   

1、命令   ->  文件  = 脚本

2、模块   ->  文件  = 剧本

安装  配置   启动 

1.5 模块

1.command  执行命令

2.shell    执行命令

3.yum      安装软件模块

4.copy     配置模块

5.service  启动服务模块

6.user     用户管理

7.file     创建目录,创建文件,往文件写内容

8.cron      定时任务

9.mount    挂载

 

1.5.1 command命令模块

# 默认模块, 执行命令

[root@m01 ~]# ansible oldboy  -a "hostname"

# 如果需要一些管道操作,则使用shell

[root@m01 ~]# ansible oldboy -m shell -a "ifconfig|grep eth0" -f 50

# -f =forks   /etc/ansible/ansible.cfg #结果返回的数量

 

1.5.2 2.yum安装模块

#推送脚本文件至远程,远程执行脚本文件

[root@m01 ~]# ansible oldboy -m yum -a "name=httpd state=installed"

name    ---指定要安装的软件包名称

state   ---指定使用yum的方法

    installed,present   ---安装软件包

    removed,absent      ---移除软件包

    latest               ---安装最新软件包

   

1.5.3 3.copy模块

# 推送文件模块

[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt owner=www group=www mode=0600"

# 在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份

[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"

# 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息

[root@m01 ~]# ansible oldboy -m copy -a "content='bgx' dest=/tmp/oldboy"

src           --- 推送数据的源文件信息

dest          --- 推送数据的目标路径

backup        --- 对推送传输过去的文件,进行备份

content       --- 直接批量在被管理端文件中添加内容

group         --- 将本地文件推送到远端,指定文件属组信息

owner         --- 将本地文件推送到远端,指定文件属主信息

mode          --- 将本地文件推送到远端,指定文件权限信息

 

1.5.4 service服务模块

[root@m01 ~]# ansible oldboy -m service -a "name=crond state=stopped enabled=yes"

name        --- 定义要启动服务的名称

state       --- 指定服务状态是停止或是运行

    started     --- 启动

    stopped     --- 停止

    restarted   --- 重启

    reloaded    --- 重载

enabled     --- 是否让服务开启自启动

 

1.5.5 指定主机下测试

1.安装

[root@m01 ~]# ansible web -m yum -a "name=httpd state=installed"

2.配置

[root@m01 ~]# ansible web -m copy -a "content='This is Ansible' dest=/var/www/html/index.html"

3.启动

[root@m01 ~]# ansible web -m service -a "name=httpd state=started"