通常会把自动化运维工具划分为两类:一类是是须要使用代理工具的,也是就基于专用的Agent程序来王朝管理功能,如: Puppet、Func、Zabbix 等:另一类是不须要代理工具的,能够直接基于SSH 服务来完成管理功能,如Ansible、Fabric 等···python
Ansible做为一个python写的自动化部署更有本身的一些优点, 首先就是agentless, 无需在Linux client安装任何服务便可无缝链接Linux default ssh端口进行部署(windows须要安装winrm 开启ssh服务)。mysql
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优势,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工做的,自己没有批量部署的能力。真正具备批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:web(1)、链接插件connection plugins:负责和被监控端实现通讯;sql
(2)、host inventory:指定操做的主机,是一个配置文件里面定义监控的主机;shell
(3)、各类模块核心模块、command模块、自定义模块;windows
(4)、借助于插件完成记录日志邮件等功能;缓存
(5)、playbook:剧本执行多个任务时,非必需可让节点一次性运行多个任务。安全
- Core modules 合兴模块:是Absible 自带的模块,使用这也模块将资源分配发送到被管理主机,是其执行的顶任务。或匹配特定的状态
- Custom modules 自定义模块:用于完成模块功能的补充。可借助相关插件完成记录发送邮件功能
安装部署
角色 | IP | 组名 | 软件 |
---|---|---|---|
控制主机 | 192.168.100.20 | epel-release //安装epel源ansible | |
被控制主机 | 192.168.100.21 | webaervers | |
被控制主机 | 192.168.100.22 | mysql |
1. 安装epel-release //安装epel源 yum install -y epel-release //安装epel源 yum install ansible -y 2. 在全部服务器上关闭防火和加强型安全功能 systemctl stop firewalld.service # 关闭防火墙 setenforce 0 #关闭加强型安全功能 3. 配置主机清单 cd /etc/ansible vi hosts #配置主机清单 可自行定义 [webserver] 192.168.100.21 [mysql] 192.168.100.22 4. 产生公钥个私钥实现免交互代理 ssh-keygen -t rsa #使用 ssh-keygen -t rsa命令,生成密钥文件 ssh-copy-id root@192.168.100.21 #将公钥文件传输的远程机器,并生效 ssh-copy-id root@192.168.100.22 免交互代理-------------- ssh-agent bash #来保存公钥身份验证所使用的私钥的程序 ssh-add #ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。
command模块 #Ansibler 管理工具使用-m 选项来指定使用模块,默认使用command 模块,即-m省略时会运行此模块,用于被管理主机上运行命令 命令格式:ansible [主机] [-m 模块] [-a args] ansible-doc -l //列出全部已安装的模块 注:按q退出 ansible-doc -s yum //-s列出yum模块描述信息和操做动做 (1) 使用IP地址指定运行主机 ansible 192.168.100.21 -m command -a 'date' #查看指定主机当前时间 (2) 使用被管理主机的分类运行 ansible webservers -m command -a 'date' #查询分类中全部的IP地址主机当前时间 (3) 在全部主机清单中的全部主机 ansible all -m command -a 'date' #全部hosts主机执行date命令 (4) 若省略-m 选项,默认运行command模块 ansible all -a 'tail-1 /etc/passwd' #显示全部主机中/etc/passed/最后一行
2. cron 模块 Ansible中的cron模块用于定义任务计划。 其中有两种状态(state):present表示天机(省略状态时默认使用),absent表示移除 (1) 添加任务计划 ansible mysql -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"' #一分钟显示一次heihei (2) 移除计划性任务 ansible webserver -m cron -a 'name="test cron job" state=absent'
ansible mysql -m user -a 'name="wangwu"' #指定别名主机(组)建立'wangwu' ansible mysql -m command -a 'tail /etc/passwd' #显示末尾10行 ansible mysql -m user -a 'name="wangwu" state=absent' #删除用户wangwu
ansible mysql -m group -a 'name=mysql gid=306 system=yes' #添加mysql组而且qid=306 添加到系统组中 ansible mysql -a 'tail /etc/group' #查看mysql服务器中组 ansible mysql -m user -a 'name=ccc uid=306 system=yes group=mysql' #建立一个用户为ccc而且指定uid号 添加到mysql组中 ansible mysql -a 'tail /etc/passwd'
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' #复制自动自动挂在主配置文件 复制到opt/目录小并给与640权限 ansible mysql -a 'ls -l /opt' #查看目录 ansible mysql -a 'cat /opt/fstab.back' #查看etc下有关于系统管理员多用户管理文件 ansible mysql -m copy -a 'content="hello heihei!" dest=/opt/fstab.back' //将hello heihei!写入/opt/fstab.back ansible mysql -a 'cat /opt/fstab.back'
ansible mysql -m user -a 'name=mysql system=yes' #属主 ansible mysql -m group -a 'name=mysql system=yes'#属组 ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back' #修改文件的属主属组权限等 ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link' #设置/opt/fstab.link为/opt/fstab.back的连接文件 ansible mysql -m file -a "path=/opt/fstab.back state=absent" #删除一个文件 ansible mysql -m file -a "path=/opt/test state=touch" #建立一个文件
ansible all -m ping #ping
ansible mysql -m yum -a 'name=httpd' #yum安装httpd ansible mysql -m yum -a 'name=httpd state=absent' #卸载httpd
ansible webservers -m yum -a 'name=httpd' #指定组安装 httpd 服务 ansible webservers -a 'systemctl status httpd' #擦看服务 ansible mysql -m service -a'name=httpd enabled=true state=started' //开机自启动 systemctl list-unit-files | grep httpd 检测httpd是否开机自启动 enabled 为启动 disabled是开机不启动
------shell模块----- ansible ccc -m shell -a 'echo abc123|passwd --stdin ccc' #建立用户使用无交互模式给用户设置密码
ansible-doc -s script vi test.sh #!/bin/bash echo "hello ansible from script"> /opt/script.txt chmod +x test.sh ansible mysql -m script -a 'test.sh' mysql主机上查看 cat /opt/script.txt
ansible mysql -m setup //获取mysql组主机的facts信息