环境准备:
3台主机 1个控制节点 两个被控制节点
解析:本地互相解析(三台机器都配置)
vim /etc/hosts
192.168.11.191 server 控制节点
192.168.11.192 slave-1 被控制节点
192.168.11.193 slave-2 被控制节点
配置完解析后在配置ssh公钥认证:控制节点需要发送ssh公钥给所有被控制节点
ssh-keygen
ssh-copy-id -i 192.168.11.192
ssh-copy-id -i 192.168.11.193
所有机器:
systemctl stop firewalld && setenforce 0 关闭防火墙和selinux
安装:控制节点
1. 配置EPEL网络yum源
yum install -y epel-release
2.安装ansible
yum install -y ansible
3.查看帮助
ansible --help
4.查看版本
ansible --version
ansible---inventory主机清单
官方文档: http://docs.ansible.com/ansible/intro_inventory.html#>
inventory文件通常用于定义要管理主机的认证信息,例如ssh登录用户名、密码以及key相关信息
查看配置文件:
rpm -qc ansible
-q:---query查询
1.主配置文件:
/etc/ansible/ansible.cfg #主要设置一些ansible初始化的信息,比如日志存放路径、模块、等配置信息
2.主机清单文件:
默认位置/etc/ansible/hosts
1.添加主机或者主机组:
vim /etc/ansible/hosts #在最后追加被管理端的机器
slave-1 #单独指定主机,可以使用主机名称或IP地址
2.添加主机组:
[slave] #使用[]标签指定主机组 ----标签自定义
192.168.11.192 #如果未解析添加ip
slave-2 #解析添加主机名
3.为一个组指定变量,组内每个主机都可以使用该变量:
[slave:vars] #设置变量,vars--
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_private_key_file=/root/.ssh/id_rsa
ansible_ssh_pass=test #也可以定义密码,如果没有互传秘钥可以使用密码。
Ansible Inventory 常见的内置参数:
查看组内主机列表:
语法:ansible 组名 --list-hosts
ansible slave --list-hosts
使用ping模块检查ansible节点的连通性:
指定单台机器
ansible slave-1 -m ping -o
同时指定多台机器:
ansible slave-1,slave-2 -m ping -o
执行shell命令:
ansible slave-1 -m shell -a 'uptime'
不加 -m 默认是 command 模块
ansible slave-1 -a 'uptime'
重定向输出到本地文件中:
ansible slave-1 -m shell -a 'df -Th' > /opt/a.txt
常用模块
1.远程复制备份模块:copy
模块参数详解:
src=:指定源文件路径
dest=:目标地址(拷贝到哪里)
owner:指定属主
group:指定属组
mode:指定权限,可以以数字指定比如0644
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
vim a.txt #创建一个测试文件
123123
ansible slave -m copy -a 'src=/root/a.txt dest=/opt owner=root group=root mode=644' -o
vim a.txt #追加如下内容
123123
321321
ansible slave -m copy -a 'src=/root/a.txt dest=/opt/ owner=root group=root mode=644 backup=true' -o
注释:如果文件没有变化,不会备份。只有文件内容不同,才会做备份。
登录被控制机器其中一台查看
2.软件包管理 yum模块
安装apache
ansible slave-1 -m yum -a "name=httpd state=latest" -o
state= #状态是什么,干什么
state=absent 用于remove安装包
state=latest 表示最新的
state=removed 表示卸载
到被控制节点看一下
卸载软件:
ansible slave-1 -m yum -a "name=httpd state=removed" -o
3.服务管理service模块
ansible slave-1 -m service -a "name=httpd state=started" #启动
ansible slave-1 -m service -a "name=httpd state=stopped" #停止
ansible slave-1 -m service -a "name=httpd state=restarted" #重启
ansible slave-1 -m service -a "name=httpd state=started enabled=yes" #开机启动
ansible slave-1 -m service -a "name=httpd state=started enabled=no" #开机关闭
4.文件模块file
模块参数详解:
owner:修改属主
group:修改属组
mode:修改权限
path=:要修改文件的路径
recurse:递归的设置文件的属性,只对目录有效
yes:表示使用递归设置
state: 创建新的文件或者目录
touch:创建一个新的空文件
directory:创建一个新的目录,当目录存在时不会进行修改
#创建一个文件
ansible slave-1 -m file -a 'path=/opt/aaa.txt mode=777 state=touch'
到被控制节点看一下
#创建一个目录
ansible slave-1 -m file -a 'path=/opt/aaa mode=777 state=directory'
到被控制节点看一下
5.收集信息模块setup
ansible slave-1 -m setup #收集所有信息
ansible slave-1 -m setup -a 'filter=ansible_python_version' 只查询ansible版本信息filter过滤