1.ansible roles简介
Ansible roles是为了层次化、结构化地组织Playbook
roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们
roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等
相当于函数的调用把各个功能切割成片段来执行
2.roles目录结构
role_name 定义的role名字
files 存放copy或script等模块调用的函数
tasks 定义各种task,要有main.yml,其他文件include包含调用
handlers 定义各种handlers,要有main.yml,其他文件include包含调用
vars 定义variables,要有main.yml,其他文件include包含调用
templates 存储由template模块调用的模板文本
meta 定义当前角色的特殊设定及其依赖关系,要有main.yml的文件
defaults 要有main.yml的文件,用于设定默认变量
3.ansible-galaxy命令工具
Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles
ansible-galaxy命令默认与https://galaxy.ansible.com网站API通信,可以查找、下载各种社区开发的 Ansible 角色
ansible-galaxy在 Ansible 1.4.2 就已经被包含了
在ansible galaxy网站查询roles
安装的roles默认是存放在家目录中:/root/.ansible/roles
对于的roles的快速部署,很有帮助
4.创建第一个roles(apache)
目的:server1给server2和server3安装httpd服务
(1)role存放的路径在配置文件/etc/ansible/ansible.cfg中定义:roles_path = /etc/ansible/roles
这里我们使用的是普通用户devops来做ansible,因此应该是roles_path = /home/yty/ansible/roles
先在ansible目录下创建roles目录
然后编辑ansible.cfg配置文件,在配置文件中声明
(2)列出已安装的角色,注意路径问题
此时还没有创建角色,因此是空的
(3)进入角色目录,创建apache角色,再次查看角色就有了
(4)进入apache角色目录,发现有任务目录、触发器目录、模板目录、变量目录等等
删除测试目录和说明文档,这两个暂时没有用
(5)编写任务的yml文件
编写模板文件,拷贝一个过来即可,不需要修改
编写触发器的yml文件
编写变量的yml文件
编辑默认发布页面
编写最终要执行的文件
开始执行,没有报错,说明角色分离成功
这就实现了apache的角色分离
也就是playbook.yml文件拆分
5.创建第二个roles(haproxy)
目的:在server1上安装haproxy服务,实现server2和server3的负载均衡
(1)创建haproxy角色,以及删除没有用的文件和目录
(2)编写任务文件
(3)编写触发器文件
(4)编写模板文件,其实也就是把palybook的拷贝一份
(5)不需要编写变量文件
(6)编写最终要执行的apache文件,因为haproxy和httpd是结合在一起的,要实现负载均衡
没有报错,说明成功实现了访问server1负载均衡server2和server3
创建第三个roles(keepalived)
目的:在server2和server3上安装httpd,在server1和server4上安装haproxy,在server1上安装keepalived,实现高可用
也就是server1和server4两个调度器之间的高可用
(1)创建角色,删除文件
(2)编写任务文件
(3)编写触发器文件
(4)编写模板文件
(5)编写主机文件
(6)编写最终要执行的文件
(7)执行
(8)测试:看是否实现了高可用
可以看到server1上具有VIP
在server1上停止keepalived服务,发现VIP自动漂移到了server4上面
仍可以访问