安装Ansible

yum安装Ansible

1
2
3
4
5
yum install -y epel-release
yun clean all
yum repolist
yum install ansible

给主机名修改一下

1
2
hostnamectl set-hostname node1      重命名主机名
bash 重新加载主机名

免密登录配置

老师讲的没带电脑给忘了

1
2
3
vi /etc/ansible/hosts
ssh-keygen
ssh-copy-ip root@nodel 传输公钥文件

配置密钥对验证,实现免密登录

1
2
3
4
5
免密2
ssh-keygen -t rsa #生成密钥。使用回车免密
sshpass -p '123456' ssh-copy-id root@192.168.226.50
#上传密钥,实现免密登录
sshpass -p '123456' ssh-copy-id root@192.168.226.60

ansible模块详解

  1. command
1
2
3
4
5
6
7
8
9
10
11
12
1,在远程主机执行命令,不支持管道,重定向等shell的特性。
ansible-doc -s command #一s列出指定模块的描述信息和操作动作
ansible.192.168.226.50 -m command -a 'date' #指定ip执行date
ansbile dbservers -m command -a 'date' #指定组执行date
asible all -m command -a 'date' #all 代表麦所有hosts 主机
ansible all -a 'ls i ' #如省略-m模块,则默认运行command模块

2,常用的参数:
chdir:在远程主机上运行命令前提前进入目录
creates:在命令运行时创建一个文件,如果文件存在,则不会创建任务
removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务executeble:指明运行命令的shell程序

  1. shell
1
2
3
4
5
6
7
//在远程主机执行命令,相当于调用远程主机的shel1进程,
然后在该shel1下打开一个子shel1运行命令(支持管道符号等功能)
ansible-doc -s shell

#使用ansible来查询dbservers中的ens33的IP地址
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2{print $1}") | cut -d " " -f 2'

  1. cron
1
2
3
4
5
6
7
8
9
10
11
//在远程主机定义任务计划。其中有两种状态
present表示添加(可以省略)
absent表示移除。
ansible-doc -s cron #按q退出

/常用的参数:
ninute / hour/ day / minute / weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称
#移除计划任务,假如该计划任务没有取名字,name=None即可

  1. user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//用户管理的模块
ansible-doc -s user

//常用的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yeslno:是否为系统账号
uid:用户uid
group: 用户基本组
shell: 默认使用的shell
move_home=yse|no: 如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no: 当state=absent时,是否删除用户的家目录

  1. group
1
2
3
4
5
6
//用户组管理的模块
ansible-doc -s group

ansible dbservers -m group -a 'name=mysql gid=306 system=yes' #创建mysql组
ansible dbservers -a 'tail /etc/group'

  1. copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//用于复制指定主机文件到远程主机的
ansible-doc -s copy

//常用的参数:
dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用

ansible dbservers -m copy -a 'src=/opt/123.txt dest=/opt/456 owner=root mode=640'

#将helloworld写入/opt/123.txt文件中
ansible dbservers -m copy -a 'content- "helloworld" dest=/opt/123.txt'

  1. file
1
2
3
4
5
6
7
8
9
10
11
12
#修改文件的属主属组权限等
ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'

#设置/opt/fstab. link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'

#创建一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"

删除一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"

  1. hostname
1
2
3
4
5
/用于管理远程主王机上的主机名

#修改dbservers组中的主机名
ansible dbservers -m hostname -a "name=mysql01"

  1. ping
1
2
3
4
5
/检测远程主机的连通性

#ping所有组中的主机
ansible all -m ping

  1. yum
1
2
3
4
5
6
7
8
9
/在远程主机上安装与卸载软件包
ansible-doc -s yum

#安装服务
ansible webservers -m yum -a ' name=httpd"

#卸载服务
ansible webservers -n yum -a 'name=httpd state=absent"

  1. script
1
2
3
4
5
6
7
8
9
10
11
12
//实现远程批量运行本地的shell 脚本
ansible-doc -s script

vim test.sh
#!/bin/bash
echo "hello linux" >/opt/script.txt
chmod +x test.sh

ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'
实现原理类似将脚本上传到远程主机,再进行实现脚本。环境为远程主机的环境。

  1. setup
1
2
3
4
5
6
7
8
9
//facts 组件是用来收集被管理节点信息的,使用setup模块可以获取这些信息
ansible-doc -s setup

#获取mysql组主机的facts信息
ansible webservers -m setup

#使用filter可以筛选指定的facts信息
ansible dbservers -m setup -a 'filter=*ipv4'