介绍
更加简洁的自动化运维工具,不需要再客户端上安装,
基于python开发,
安装简单,centos上直接yum,
可以实现批量操作系统配置、批量程序的部署、批量运行命令。
Ansible常用命令参数
-a:制定模块所需的参数
-i:文件路径
-m:要使用的模块的名称
-h:帮助信息
-v:详细信息
all:针对hosts定义的所有主机执行
1、Ansible安装部署
(1)安装ansible
直接yum安装
yum install ansible -y
版本信息
(2)ssh免密钥登录设置(只在主控制端使用)
在ansible服务器上生成公钥和私钥
[root@mycat ansible]# ssh-keygen -t rsa(-t rsa:表示使用rsa算法进行加密)
//会让你设置密钥生成路径和密钥(可以不设置默认路径和自动生成密钥)
(3)将公钥发送给客户端
[root@mycat ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.200.41
//将公钥发送到客户端41上(提示输入是否连接yes,和客户端登陆密码)
(4)测试登录客户端
使用scp命令也可以
[root@mycat ansible]# scp /root/.ssh/id_rsa.pub root@192.168.200.42:/root/.ssh
//将公钥复制到客户端42上
如果出现报错可能是
1)检查selinux是否关闭
2)公钥文件的权限是否为600
3)Python的版本是否一致
(5)测试登陆到客户端42上
2、编辑hosts文件(/etc/anside/hosts)
添加组名(服务)组内可以有多个ip
[webservers]
192.168.200.41
[dbservers]
192.168.200.42
(1)测试主机连通性
只测试web
全部测试
常用模块
1. 查看所有模块:ansible-doc -l
2. 查看具体某个模块:ansible-doc -s (模块的名)
格式
1、远程命令模块
commond:默认模块(可省略)用于远程执行命令(不能使用变量)
示例:查看远程主机名
[root@mycat ansible]# ansible all -m command -a "hostname"
1)chdir:执行命令前,进入到指定目录
//进入到41的home目录下查看
2)creates:判断文件是否存在,如果存在不执行(先在41的home下创建1.txt)
//判断1.txt存在,就不执行后面的内容,skip跳过
//判断3.txt不存在就执行后面的,在41上创建2.txt
3)removes:判断文件是否存在,如果存在就执行
//判断到2.txt就创建4.txt
//判断没有6.txt就不创建
shell:执行远程主机上的脚本(在远程主机上调用shell解释器运行命令,支持shell的各种功能)
示例:执行41主机上的3.sh
[root@mycat ansible]# ansible 192.168.200.41 -m shell -a "/home/3.sh"
scripts:远程主机执行主控服务器ansible上的脚本(把本地脚本复制到远程主机,并执行)
示例:执行ansible上的test1,输出41的主机名
2、ping:测试连接可通性
[root@mycat ansible]# ansible webservers -m ping
3、文件模块
copy:复制文件(主要用于将管理主机上的数据信息传送给多台主机)
常用参数
1)Src:指定将本地管理主机的什么数据信息进行远程复制
//把test1复制到41的data下
2)backup:默认数据复制到远程主机,会覆盖原有文件(选项yes/no是否将原文件进行备份)
//修改一下test1的内容,然后执行backup=yes覆盖原文件,并且备份原文件
查看41上data生成了test1的备份
3)content:(可以代替src)在文件中添加信息,直接设定文件的值
//向test1中加入123内容
//content添加的内容不会添加回车符
//在41上查看test1
4)group:文件数据复制到远程主机,设置文件/目录的属组
owner:文件数据复制到远程主机,设置文件/目录的属主
mode:文件数据复制到远程主机,设置文件/目录的权限
//创建test2,复制test2到41上它的组为www,用户为qqq,权限为755
查看
5)dest(required):为必须使用的参数,必选项。将数据复制到远程节点的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
4、管理任务计划
cron:定时任务模块
常用参数
1)Weekday/mouth/day/hour/minute(周/月/日/小时/分钟)
//*代表一周都执行,*/2一周执行两次
2)Job:设置定时执行任务
3)Name:设定定时任务注释描述
//每五分钟同步一次(ntpdate 同步更新时间)
查看41的crontab -l查看定时任务的列表
4)state:删除/创建指定的定时任务absent/present
再查看41上的定时任务就没有了
5)disabled:将指定定时任务进行注释
//注释和取消注释时必须填写job和时间参数
查看41(内容被注释)
取消注释disabled=no
再次查看
5、用户模块
group:批量创建组
常用参数
1)gid:创建的组ID
2)Name:创建组的名称
3)State:删除/创建组
创建组abc,gid为1055
[root@mycat ~]# ansible 192.168.200.41 -m group -a "name=abc gid=1055"
删除指定组abc,gid为1055
[root@mycat ~]# ansible 192.168.200.41 -m group -a "name=abc gid=1055 state=absent"
user:批量创建用户
常用参数
1)Groups:指定用户的属组
2)Uid:指定用户的uid
3)Passwd:指定用户的密码(不能使用明文,只能使用密文方式)
4)Name:指定用户名
5)Home:指定用户的家目录()
6)Createhome:是否创建家目录yes/no
7)System:是否为系统用户
8)Remove:是否连同家目录一起删掉yes/no
9)State:创建/删除absent/present
示例:创建www1
[root@mycat ~]# ansible 192.168.200.41 -m user -a "name=www1 comment=lqb uid=1001 group=root"
删除www1用户(及其家目录)
[root@mycat ~]# ansible 192.168.200.41 -m user -a "name=www1 state=absent remove=yes"
6、Rsynchronize:使用rsync同步文件
常用参数
1)archive:归档,相当于同时开启recursive(递归)、links、perms、times、owner、
2)group、-D选项都为yes ,默认该项为开启
3)checksum: 跳过检测sum值,默认关闭
4)compress:是否开启压缩
5)copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
6)delete: 删除不存在的文件,默认no
7)dest:目录路径
8)dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
9)dirs:传速目录不进行递归,默认为no,即进行目录递归
10)rsync_opts:rsync参数部分
11)set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
12)mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件,pull 模式用于从远程主机上取文件
//首先需要在远程客户端下载rsync
将ansible的hosts同步到41的tmp目录下
查看41的tmp/hosts
Get_url:该模块主要用于从http,ftp ,https等服务器上下载文件类似于wget。
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
use_proxy:是事使用代理,代理需事先在环境变更中定义
//从网站下载页面到data/1下
查看是否下载成功
Yum:软件包管理
Stat:获取远程文件信息
Service:远程主机系统服务管理
Sysctl:远程主机sysctl配置