ansible - 自动化运维工具(ansible安装以及常用的模块的了解)

一、ansible 概述

1、Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile。

mark

2、ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

3、ansible的架构:连接其他主机默认使用ssh协议。

mark

二、 安装ansible

环境部署

主机名IP地址软件服务
ansible192.168.28.10ansible
webserver192.168.28.20——
msyql192.168.28.40——
----关闭防火墙及安全机制----
[root@ansible ~]# systemctl stop firewalld && systemctl disable firewalld
[root@ansible ~]# setenforce 0 

----配置在线YUM源----
[root@ansible ~]# mkdir -p /etc/yum.repos.d
[root@ansible ~]# mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repos-0.bak
[root@ansible ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@ansible ~]# yum clean all && yum makecache fast

----安装epel源及ansible----
[root@ansible ~]# yum install -y epel-release
//epel:能为linux提供高质量软件包,相当于一个第三方源

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


----查看ansible版本及结构----
[root@ansible ~]# ansible --version

mark

三、ansible 配置主机清单及密钥对验证

[root@ansible ~]# yum install -y tree
//安装树形查看工具

[root@ansible ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg		//配置文件
├── hosts			//主机清单(管理)
└── roles


----配置主机清单----
[root@ansible ~]# vim /etc/ansible/hosts 
//插入下面的内容,上面有模板,指向另外两台主机
[webserver]		
192.168.28.20
[mysql]
192.168.28.40

----配置密钥对验证----
[root@ansible ~]# ssh-keygen -t rsa


[root@ansible ~]# ls -a		//查看隐藏文件
.                .bash_profile  .esd_auth             .tcshrc      图片
..               .bashrc        .ICEauthority         .viminfo     文档
anaconda-ks.cfg  .cache         initial-setup-ks.cfg  .Xauthority  下载
.ansible         .config        .local                公共         音乐
.bash_history    .cshrc         .pki                  模板         桌面
.bash_logout     .dbus          .ssh                  视频

[root@ansible ~]# cd .ssh/

[root@ansible .ssh]# ls
id_rsa  id_rsa.pub		//生成的公钥和私钥文件
[root@ansible .ssh]# ssh-copy-id root@192.168.28.40
//将公钥推给被管理端

[root@ansible .ssh]# ssh-copy-id root@192.168.28.20
//切换至webserver端(192.168.28.20)

[root@webserver ~]# cd .ssh/

[root@webserver .ssh]# ls
authorized_keys

mark

四、ansible 命令格式及基本用法

----命令格式----
ansible [主机] [-m 模块] [-a args]

ansible-doc -l		//列出所有已安装的模块(按q退出)
ansible-doc -s yum	//-s列出yum模块描述信息和操作动作

----基本用法----
[root@ansible .ssh]# ansible webserver -m command -a 'date'		//指定主机执行date命令

[root@ansible .ssh]# ansible mysql -m command -a 'date'


//每次执行该命令都要输入密钥密码,比较麻烦,我们可以通过免交互代理来避免
[root@ansible .ssh]# ssh-agent bash

//再次尝试执行命令试试,这里除了别名也可以填IP地址,现在可以免交互执行命令了
[root@ansible .ssh]# ansible 192.168.28.20 -m command -a 'date'

五、ansible 常用模块管理

1、command默认模块

适合使用简单的命令,无法支持"<",">","|",";","&"等符号

命令格式:
ansible [主机] [-m 模块] [-a args]
ansible-doc -l		//列出所有已安装的模块(按q退出)
ansible-doc -s yum	//-s列出yum模块描述信息和操作动作(按q退出)

[root@ansible ~]# ansible 192.168.28.20 -m command -a 'date'		//指定ip执行date命令

[root@ansible ~]# ansible webserver -m command -a 'date'		//主机名与ip地址同理
[root@ansible ~]# ansible mysql -m command -a 'date'

[root@ansible ~]# ansible all -m command -a 'date'		//所有hosts主机执行date命令

[root@ansible ~]# ansible all -a 'ls /'		//若不加-m模块,则默认运行command模

2、cron定时任务模块

有两种状态(state):present表示添加(默认状态),absent表示移除

ansible-doc -s cron		//-s查看cron模块信息

[root@mysqlr .ssh]# which echo		//在PATH变量指定的路径中搜索echo命令的位置
/usr/bin/echo
[root@ansible ~]# ansible mysql -m cron -a 'minute="*/1" job="/usr/bin/echo hello" name="mxx cron job"'		#每分钟执行一次
//指定webserver主机,-m不可省略,否则默认执行command模块
//-a指定参数,每分钟执行(间隔频率);执行操作;指定计划性任务名称
//这里注意格式,单引号与双引号的使用

[root@ansible ~]# ansible mysql -a 'crontab -l'		'//执行命令查看以下有无该计划性任务'
192.168.28.20 | CHANGED | rc=0 >>
#Ansible: mxx cron job
*/1 * * * * /usr/bin/echo hello

[root@mysql .ssh]# crontab -l		//切换至192.168.28.20主机查看
#Ansible: mxx cron job
*/1 * * * * /usr/bin/echo hello
您在 /var/spool/mail/root 中有新邮件

[root@mysql .ssh]# cat /var/spool/mail/root 		//信息写在该邮件内,可以去查看以下,一分钟执行一次该命令

[root@ansible ~]# ansible mysql -m cron -a 'name="mxx cron job" state=absent'
//移除计划性任务


//再切换至mysql查看,原先的计划性任务没了
[root@mysql .ssh]# crontab -l

3、user用户模块

'该模块请求的是useradd,userdel,usermod三个指令'
'即创建/删除用户,设定用户所属组'


ansible-doc -s user		
//-s查看user模块信息

[root@ansible ~]# ansible mysql -m user -a 'name="test01"'		
//在mysql主机中创建用户test01

[root@ansible ~]# ansible mysql -m command -a 'tail /etc/passwd'
//查看用户信息

[root@ansible ~]# ansible mysql -m user -a 'name="test01" state=absent'
//删除该用户;absent使用频率较高

[root@ansible ~]# ansible mysql -m command -a 'tail /etc/passwd'
//检查,是否还在

4、group用户(组)模块

'该模块请求的是groupadd,groupdel,groupmod这三个指令(组)'


ansible-doc -s group

[root@ansible ~]# ansible mysql -m group -a 'name=mysql gid=306 system=yes'
//在mysql主机上创建组,组名为mysql;gid号为306(不指定也行,会自动生成);指定system

[root@ansible ~]# ansible mysql -a 'tail /etc/group'

[root@ansible ~]# ansible mysql -m user -a 'name=test02 uid=306 system=yes group=mysql'
//创建用户,添加至mysql组,指定系统用户

[root@ansible ~]# ansible mysql -a 'id test02'
//注意一点,检查基本都是用-a,即command命令来检查的

5、copy模块

主要用于将管理主机上的数据信息传送给多台主机

ansible-doc -s copy

[root@ansible ~]# ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=644'
//src表示原文件; dest表示目标;即从哪复制到哪
//owner表示属主(所有者),mode表示权限

[root@ansible ~]# ansible mysql -a 'ls -l /opt'

[root@ansible ~]# ansible mysql -a 'cat /opt/fstab.bak'
//查看复制文件的内容

[root@ansible ~]# ansible mysql -m copy -a 'content="hello world~" dest=/opt/fstab.bak'
//指定内容为hello world,重定向至该目录下(生成一个全新的文件)

[root@ansible ~]# ansible mysql -a 'cat /opt/fstab.bak'
//再次查看

//以上用法能够使用copy指定内容生成一个新文件

6、file模块

实现创建/删除文件信息 对数据权限进行修改

例:
ansible-doc -s file

//可切至mysql主机查看下
[root@mysql opt]# ls -l		//这是执行file模块之前的参数
总用量 4
-rw-r--r--  1 root root 12 4月   2 12:15 fstab.bak
drwxr-xr-x. 2 root root  6 3月  26 2015 rh

//在ansible主机上操作
[root@ansible ~]# ansible mysql -m file -a 'path=/opt/fstab.bak owner=test02 group=mysql mode=666'
//path指定路径;指定属主test02(需已存在);group指定mysql组;权限修改为666

//前后对比
[root@mysql opt]# ls -l		//执行file模块成功,提权,且修改了属组为test02
总用量 4
-rw-rw-rw-  1 test02 mysql 12 4月   2 12:15 fstab.bak
drwxr-xr-x. 2 root   root   6 3月  26 2015 rh

[root@ansible ~]# ansible mysql -m file -a 'src=/opt/fstab.bak path=/opt/fstab.bak.link state=link'
//创建软链接

[root@ansible ~]# ansible mysql -a 'ls -l /opt'

[root@ansible ~]# ansible mysql -m file -a "path=/opt/fstab.bak.link state=absent"
//删除

[root@ansible ~]# ansible mysql -a 'ls -l /opt'

[root@ansible ~]# ansible mysql -m file -a "path=/opt/test state=touch"
//建立空文件

[root@ansible ~]# ansible mysql -a 'ls -l /opt'
192.168.28.40 | CHANGED | rc=0 >>
总用量 4
-rw-rw-rw-  1 test02 mysql 12 4月   2 12:15 fstab.bak
drwxr-xr-x. 2 root   root   6 3月  26 2015 rh
-rw-r--r--  1 root   root   0 4月   2 14:33 test
[root@ansible ~]# ansible mysql -a 'cat /opt/test'
192.168.28.40 | CHANGED | rc=0 >>
//确认为空文件

7、ping模块

[root@ansible ~]# ansible all -m ping
//测试被管理主机是否在线

8、service/yum模块

(1)yum

yum:使用yum软件包管理器安装,升级,降级,删除和列出软件包和组

ansible-doc -s yum

[root@ansible ~]# ansible mysql -m yum -a 'name=httpd'
//yum下载httpd服务;也可以使用all,让所有主机一起运行

[root@ansible ~]# ansible mysql -a 'rpm -q httpd'		//查看是否安装

[root@ansible ~]# ansible mysql -m yum -a 'name=httpd state=absent'
//卸载该软件包

(2)service模块

service:用于管理服务运行状态

//在yum安装完成后可以使用service模块启动该服务
[root@ansible ~]# ansible mysql -m yum -a 'name=httpd'
[root@ansible ~]# ansible mysql -m service -a 'name=httpd enabled=true state=started'
//启动该服务并设置开机自启
[root@ansible ~]# ansible mysql -a 'systemctl status httpd'
//检查该服务是否正常开启

9、shell/script - 模块

shell 模块可以使用"<",">","|",";","&"等符号特殊符号,使用方法与 command 模块一致

ansible-doc -s shell
ansible-doc -s script

[root@ansible ~]# ansible webserver -m user -a 'name=zz'
//在webserver端建立一个用户,以作后续测试

[root@ansible ~]# ansible webserver -m shell -a 'echo 123456|passwd --stdin zz'
//给该用户修改密码,这是一个免交互的过程


[root@ansible ~]# vim /opt/test.sh			//这是一个测试脚本,生成一个测试文件到对方指定目录中去
#!/bin/bash
echo "this is test script" > /opt/script.txt
chmod +x /opt/script.txt		//赋权(一定要赋予执行权限)

[root@ansible ~]# ansible all -m script -a '/opt/test.sh'
//使用script执行该脚本

[root@ansible ~]# ansible all -a 'ls -l /opt/'
'//查看是否生成新文件,该测试脚本书否成功,这种方法可用于大批量创建用户等循环重复场景'
192.168.28.20 | CHANGED | rc=0 >>
总用量 4
drwxr-xr-x. 2 root root  6 3月  26 2015 rh
-rw-rw-rw-  1 root root 20 4月   2 14:55 script.txt
192.168.28.40 | CHANGED | rc=0 >>
总用量 8
-rw-rw-rw-  1 test02 mysql 12 4月   2 12:15 fstab.bak
drwxr-xr-x. 2 root   root   6 3月  26 2015 rh
-rw-rw-rw-  1 root   root  20 4月   2 14:55 script.txt
-rw-r--r--  1 root   root   0 4月   2 14:33 test

10、setup - 模块

ansible-doc -s setup

[root@ansible ~]# ansible mysql -m setup
//查看该主机详细信息,信息量巨大,建议配合grep使用
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值