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的快速部署,很有帮助
出于安全原因,下载的代码需要仔细研读每一行代码
注意:接下来创建的所有角色都是基于上一篇文章的
之前所有的都写在playbook当中,现在实现角色分离,这样更有利于自动化运维
4.创建第一个roles(apache)
目的:server1给server2和server3安装httpd服务
(1)role存放的路径在配置文件/etc/ansible/ansible.cfg中定义:roles_path = /etc/ansible/roles
这里我们使用的是普通用户devops来做ansible,因此应该是roles_path = /home/devops/ansible/roles
先在ansible目录下创建roles目录
然后编辑ansible.cfg配置文件,在配置文件中声明
(2)列出已安装的角色,注意路径问题
此时还没有创建角色,因此是空的
(3)进入角色目录,创建apache角色,再次查看角色就有了
(4)进入apache角色目录,发现有任务目录、触发器目录、模板目录、变量目录等等
删除测试目录和说明文档,这两个暂时没有用
(5)编写任务的yml文件
修改一下路径
(6)编写触发器的yml文件
(7)编写模板文件,拷贝一个过来即可,不需要修改
(8)编写变量的yml文件
(9)查看主机文件,确保主机信息正确
(10)编写最终要执行的文件
(11)开始执行,没有报错,说明角色分离成功
这就实现了apache的角色分离
其实昨天把所有的都做出来了,也验证了效果,今天就是实现一下角色分离
也就是把昨天的playbook.yml文件拆分
5.创建第二个roles(haproxy)
目的:在server1上安装haproxy服务,实现server2和server3的负载均衡
(1)创建haproxy角色,以及删除没有用的文件和目录
(2)编写任务文件
(3)编写触发器文件
(4)编写模板文件,其实也就是把昨天的拷贝一份
(5)不需要编写变量文件
(6)编写最终要执行的apache文件,因为haproxy和httpd是结合在一起的,要实现负载均衡
(7)编写主机文件
(8)执行
没有报错,说明成功实现了访问server1负载均衡server2和server3
5.创建第三个roles(keepalived)
目的:在server2和server3上安装httpd,在server1和server4上安装haproxy,在server1上安装keepalived,实现高可用
也就是server1和server4两个调度器之间的高可用
(1)创建角色,删除文件
(2)编写任务文件
(3)编写触发器文件
(4)编写模板文件
注意变量的书写
(5)编写主机文件
(6)编写最终要执行的文件
(7)执行
(8)测试:看是否实现了高可用
可以看到server1上具有VIP
在浏览器里面访问VIP,实现了负载均衡,此时是server1上的haproxy做负载均衡
在server1上停止keepalived服务,发现VIP自动漂移到了server4上面
此时浏览仍然可以正常访问,因为server4在做haproxy负载均衡
重新开启keepalived服务,发现VIP又漂回server1上,因为server1的优先级别高
浏览器仍然可以正常访问