1. Ansible的安装与配置
centos/rehl下:
添加EPEL源,yum方式安装ansible
在自行配置yum源后:
sudo yum install -y ansible
Ubuntu下:
sudo apt-get install ansible
测试:
vim /etc/ansible/hosts #指定远程主机
ansible管理主机需要与这些主机提前做好ssh免密
#以root用户执行ping存活检测
ansible prod -m ping -u root
结果为绿色则为成功
2. Ansible Playbook编写
剧本(playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
运行原理:把命令翻译成shell命令,拷贝到目标主机(/root/.ansible/tmp/下),再执行,执行完毕后删除tmp文件。
playbook是由一个或多个play组成的列表。play的主要功能在于将事先归并为一组的主机装扮成通过ansible中的task定义好的角色。从根本上讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可让他们联合起来按事先编排的机制完成某一任务。
PS:有一个形象的比如,Ansible中的模块类似于Linux下的命令,而Ansible的Playbook则类似于Linux下的shell脚本。Shell脚本将各个Linux命令组合起来,以此实现复杂的功能。
在Ansible中,一个play必须包含两部分内容,hosts,tasks,play配置文件
playbook编写如下:
--- #yaml的默认开头格式
- hosts: prod
tasks:
- name: install httpd # task名称
yum: #使用yum包管理软件包
name: httpd #软件包的名称,可以为一个url路径,或者本地一个rpm包的路径
state: present #状态:安装
- name: configure httpd
copy: #复制文件
src: httpd.conf #源文件
dest: /etc/httpd/conf/httpd.conf #目标文件路径
notify: restart httpd #notify:当任务执行完毕后,通知handler section 中的任务模块
- name: start httpd
service: #用于管理服务
name: httpd #服务名称
state: started #启动服务
handlers: #Handlers 是由通知者进行 notify, 如果没有被 notify,handlers 不会执行。
#不管有多少个通知者进行了 notify,等到 play 中的所有 task 执行完成之后,handlers 也只会被执行一次。
- name: restart httpd # handlers名称
service:
name: httpd
state: restarted
3. 服务器准备
测试中的三个服务器采用了rehl7.6的系统,并配置好相应的yum源
这里显示server1的配置:
客户端与服务器的免密见
ssh免密配置
4. ansible自动化部署
首先检测playbook语法:
ansible-playbook --syntax-check http_playbook.yml
语法没有错误,执行playbook:
ansible-playbook http_playbook.yml
验证结果:
在服务器端设置防火墙策略,对外开启80端口,即可在客户端访问服务器的80端口:
结果正确,自动化部署完成