1、环境准备
centos7 192.168.30.110作主控端
192.168.30.100 、192.168.30.107 192.168.30.114 作被控端
2、搭建配置ansible
[root@centos7 ~]# yum -y install ansible
查看版本信息
这里面的ping是ansible的ping模块;
清单列表不包括本机;
把要管理的主机加入到主机清单中 etc/ansible/hosts
[root@centos7 ~]# ansible 192.168.30.100 -m ping
测试存活性是基于ssh服务的,基于密码和key验证,一般是基于key验证;部署是把ssh的能够验证作好
建议:在控制主机登陆主机的同时,若是不要每次都经过验证登陆,则修改配置文件,默认提供YES启动日志的功能,手动注释取消就好了
[root@centos7 ~]# vim /etc/ansible/ansible.cfg
在控制端主机生成公钥,把公钥传到三台被控制端主机上去,实现key验证
能够对主机清单作分组
ansible的Host-pattern(主机列表)
匹配主机的列表
All :表示全部Inventory(主机清单)中的全部主机
ansible all –m ping
* :通配符
ansible “*” -m ping
ansible 192.168.1.* -m ping
ansible “*srvs” -m ping
或关系
ansible “websrvs:appsrvs” -m ping
ansible “192.168.1.10:192.168.1.20” -m ping
逻辑与
ansible “websrvs:&dbsrvs” –m ping
在websrvs组而且在dbsrvs组中的主机
逻辑非
ansible ‘websrvs:!dbsrvs’ –m ping
在websrvs组,但不在dbsrvs组中的主机
注意:此处为单引号
综合逻辑
ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ –m ping
正则表达式
ansible “websrvs:&dbsrvs” –m ping
ansible “~(web|db).*\.magedu\.com” –m ping
逻辑与
ansible命令执行过程
ansible命令执行过程
1. 加载本身的配置文件 默认/etc/ansible/ansible.cfg
2. 加载本身对应的模块文件,如command
3. 经过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,sleep 0退出
执行状态:
绿色:执行成功而且不须要作改变的操做
黄色:执行成功而且对目标主机作变动
红色:执行失败
ansible使用示例
示例
sudo 切换身份默认就是root,
以wang用户执行ping存活检测
ansible all -m ping -u wang -k
以wang sudo至root执行ping存活检测
(用wang用户链接对方后,sudo到root身份执行操做)
ansible all -m ping -u wang –b -k
以wang sudo至mage用户执行ping存活检测
ansible all -m ping -u wang –b -k --become-user mage
以wang sudo至root用户执行ls
ansible all -m command -u wang --become-user=root -a 'ls /root' -b –k -K
ansible经常使用模块
Command:在远程主机执行命令,默认模块,可忽略-m选项
ansible srvs -m command -a ‘service vsftpd start’
ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’ 不成功此命令
不支持 $VARNAME < > | ; & 等,用shell模块实现
Shell:和command类似,用shell执行命令
vim /etc/ansible/ansible.cfg
1:ansible srv -m shell -a ‘echo magedu |passwd –stdin wang’
:2:调用bash执行命令 相似 cat /tmp/stanley.md | awk -F‘|’ ‘{print $1,$2}’ &>/tmp/example.txt 这些复杂命令,即便使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把须要的结果拉回执行命令的机器
Script:运行脚本
脚本模式、用于批量执行脚本
-a "/PATH/TO/SCRIPT_FILE“
snsible websrvs -m script -a f1.sh
在控制端的主机上编写一个脚本,可是运行是在被控制端的主机上
Copy:从服务器复制文件到客户端,
ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600,backup=yes”
如目标存在,默认覆盖,此处指定先备份
ansible srv -m copy -a “content=‘test content\n’ dest=/tmp/f1.txt” 利用内容,直接生成目标文件
复制模块、批量复制,拷贝文件到远程主机
ansible [主机ip、主机组] -m copy -a "src=源文件 dest=目标路径 owner=全部者 mode=权限 backup=yes/no是否备份"
备份文件名称比较长的
Fetch(抓取):把远程的主机文件抓取到控住端的主机上,copy相反,目录可先tar
ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts’
File:设置文件属性 (删除文件的效果,建立软硬链接)
ansible srv -m file -a "path(管理的文件)=/root/a.sh
owner=wang mode=755“
ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link
(软链接)
ansible all -m file -a 'path(管理的文件)=/data state=absent(递归的删除,缺席)'
已经删除data文件夹
还能够[root@centos7 ~]# ansible all -m file -a 'path=/data/test.txt state=touch'
在被控制端的主机上建立test.txt 文件
建立软链接
Hostname:管理主机名
ansible node1 -m hostname -a “name=websrv”
永久生效,但hosts文件没有被改
Cron:计划任务
[root@centos7 ~]# ansible-doc -s
cron 调用模块
支持时间:minute,hour,day,month,weekday
ansible srv -m cron -a “minute=*/5
(每5分钟) job(后跟执行的命令)=‘/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’
name=Synctime” 建立任务
ansible srv -m cron -a ‘state=absent name=Synctime’ 删除任务
结果
Yum:管理包
ansible srv(
all) -m yum -a ‘name=httpd state=latest(最新版)’ 安装
[root@centos7 ~]# scp /etc/yum.repos.d/media.repo 192.168.30.107:/etc/yum.
repos.d/media.repo 100% 140 64.3KB/s 00:00
[root@centos7 ~]# ansible all -m yum -a 'name=httpd state=present'
ansible srv -m yum -a ‘name=httpd state=absent’ 删除
ansible经常使用模块
Service:管理服务 ansible-doc -s service
ansible all -m service -a 'name=httpd state=stopped'
ansible all -m service -a 'name=httpd state=started'
ansible all –m service –a ‘name=httpd state=reloaded’
ansible all -m service -a 'name=httpd state=restarted'
User:管理用户
ansible all-m user -a 'name=user1 comment=“test user” uid=2048 home=/app/user1 group=root‘
ansible all -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 ’
ansible all -m user -a ‘name=user1 state=absent remove=yes‘ 删除用户及家目录等数据
[root@centos7 ~]# ansible all -m user -a 'name=testuser(用户名) system=yes(系统帐号) groups(组)=wang,bin shell=/bin/csh' (shell类型)
Group:管理组
ansible srv -m group -a "name=testgroup(组名) system=yes“
ansible srv -m group -a "name=testgroup state=
absen(删除组)
ansible系列命令
ansible-galaxy (人们写的剧本,下载ansible剧本框架工具,根据本身的需求下载相关的角色)
链接 https://galaxy.ansible.com 下载相应的roles
列出全部已安装的galaxy
ansible-galaxy
list(列出有哪些装好的角色)
安装galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis
ansible-pull
推送命令至远程,效率无限提高,对运维要求较高
Ansible-playbook(剧本)
ansible-playbook hello.yml
(剧本文件)
cat hello.yml
#hello world yml file
- hosts(
主机清单): websrvs (主机清单的分组名)
remote_user: root
(远程链接以root身份)
tasks:
(任务)
- name: hello world
(以后要作的事)
ommand:
/usr/bin/wall hello world (是-a后的全部的操做)
[root@centos7 ~]# vim hello.yml
[root@centos7 ~]# ansible-playbook hello.yml 用次命令执行
Ansible-vault
功能:管理加密解密yml文件
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 编辑加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create new.yml 建立新文件
Ansible-console:2.0+新增,可交互执行命令,支持tab
root@test (2)[f:10] $
执行用户@当前操做的主机组 (当前组的主机数量)[f:并发数]$
设置并发数: forks n 例如: forks 10
切换组: cd 主机组 例如: cd web
列出当前组主机列表: list
列出全部的内置命令: ?或help
示例:
root@all (2)[f:5]$ list
root@all (2)[f:5]$ cd appsrvs
root@appsrvs (2)[f:5]$ list
root@appsrvs (2)[f:5]$ yum name=httpd state=present
root@appsrvs (2)[f:5]$ service name=httpd state=started