1、ansible roles简介

<1> roles 用于层次性、结构化地组织playbook。

<2> roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等。

<3> 要使用roles只需要在playbook中使用include指令即可。

<4> 简单来讲,roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。

<5> 角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

2、 创建 roles 的步骤

  • (1) 创建以roles命名的目录;

  • (2) 在roles目录中分别创建以各角色名称命名的目录,如webservers等。注意:在 roles 必须包括 site.yml文件,可以为空;

  • (3) 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建;

  • (4) 在playbook文件中,调用各角色;

3、roles 内各目录中可用的文件

  • tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其它的位于此目录中的task文件;

  • files目录:存放由copy或script等模块调用的文件;

  • templates目录:template模块会自动在此目录中寻找Jinja2模板文件;

  • handlers目录:此目录中应当包含一个main.yml文件,用于定义此角色用到的各- handler;在handler中使用include包含的其它的handler文件也应该位于此目录中;

  • vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;

  • meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持;

  • default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件。

4、创建第一个roles(apache)

注意:此实验是在前面实验的基础上进行的

1、 创建角色目录roles,进入角色目录创建apache角色,再次查看角色就有了

[devopes@server4 ansible]$ mkdir roles
[devopes@server4 ansible]$ pwd
/home/devopes/ansible
[devopes@server4 ansible]$ cd roles/
[devopes@server4 roles]$ ls
[devopes@server4 roles]$ ansible-galaxy init apache
- apache was created successfully
[devopes@server4 roles]$ ls
apache
[devopes@server4 roles]$ cd apache/
[devopes@server4 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars

2、在配置文件/etc/ansible/ansible.cfg中设定role存放的路径:roles_path = /etc/ansible/roles

[devopes@server4 ansible]$ vim ansible.cfg
[devopes@server4 ansible]$ cat ansible.cfg
[defaults]
roles_path = ./roles
inventory = ./inventory[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

3、进入apache角色目录(删除测试目录和说明文档,这两个暂时没有用),编写任务的yml文件

[devopes@server4 apache]$ rm -rf tests/
[devopes@server4 apache]$ rm -rf README.md
[devopes@server4 apache]$ ls
defaults  files  handlers  meta    tasks  templates  vars
[devopes@server4 apache]$ cd tasks
[devopes@server4 tasks]$ ls
main.yml
[devopes@server4 tasks]$ vim main.yml
[devopes@server4 tasks]$ cat main.yml
---
- name: install httpdyum:name: httpdstate: present- name: copy index.htmlcopy:content: "{{ ansible_facts['default_ipv4']['address'] }}"dest: /var/www/html/index.html- name: configure httpdtemplate:src: httpd.conf.j2dest: /etc/httpd/conf/httpd.confowner: rootgroup: rootmode: 644notify: restart httpd- name: start httpd and firewalldservice:name: "{{ item }}"state: startedloop:- httpd- firewalld- name: configure firewalldfirewalld:service: httppermanent: yesimmediate: yesstate: enabled

4、查看主机文件,确保主机信息正确

[devopes@server4 ansible]$ vim inventory
[devopes@server4 ansible]$ cat inventory
[test]
server5[prod]
server6
server7[webserver:children]
test
prod

5、编写触发器的yml文件

[devopes@server4 apache]$ cd handlers/
[devopes@server4 handlers]$ ls
main.yml
[devopes@server4 handlers]$ vim main.yml
[devopes@server4 handlers]$ cat main.yml
---
- name: restart httpdservice:name: httpdstate: restarted

6、编写模板文件(此处只需要拷贝一个过来,不需要任何修改)

[devopes@server4 handlers]$ cd ..
[devopes@server4 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  vars
[devopes@server4 apache]$ cd templates/
[devopes@server4 templates]$ ls
[devopes@server4 templates]$ cp ../../../templates/httpd.conf.j2 .
[devopes@server4 templates]$ ls
httpd.conf.j2

7、编写变量的yml文件

[devopes@server4 apache]$ cd vars
[devopes@server4 vars]$ ls
main.yml
[devopes@server4 vars]$ vim main.yml
[devopes@server4 vars]$ cat main.yml
---
http_host: “{{ ansible_facts['default_ipv4']['address'] }}”
http_port: 80

8、编写最终要执行的文件

[devopes@server1 ansible]$ rm -rf playbook.retry [devopes@server1 ansible]$ vim apache.yml
[devopes@server1 ansible]$ cat apache.yml
---
- hosts: webserverroles:
- apache

9、执行,没有报错,说明角色分离成功

[devopes@server4 ansible]$ ansible-playbook apache.yml  ###正确执行

这就实现了角色分离,即将前面实验的playbook.yml文件拆分

5、创建第二个roles(haproxy)

目的:在server1上安装haproxy服务,实现server2和server3的负载均衡

1、创建haproxy角色

[devopes@server4 ansible]$ cd roles/
[devopes@server4 roles]$ ls
[devopes@server4 roles]$ ansible-galaxy init haproxy
- apache was created successfully
[devopes@server4 roles]$ ls
apache haproxy
[devopes@server4 roles]$ cd haproxy/
[devopes@server4 haproxy]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars

2、删除测试目录和说明文档(这两个暂时没有用)

[devopes@server4 haproxy]$ rm -rf tests/
[devopes@server4 haproxy]$ rm -rf README.md
[devopes@server4 haproxy]$ ls
defaults  files  handlers  meta    tasks  templates  vars

3、编写任务文件main.yml

[devopes@server4 haproxy]$ ls
defaults  files  handlers  meta    tasks  templates  vars
[devopes@server4 haproxy]$ cd tasks/
[devopes@server4 tasks]$ ls
main.yml
[devopes@server4 tasks]$ vim main.yml
[devopes@server4 tasks]$ cat main.yml
---
- name: install haproxyyum:name: haproxystate: present- name: configure haproxytemplate:src:haproxy.cfg.j2dest: /etc/haproxy/haproxy.cfgnotify: restart haproxy- name: start haproxyservice:name: haproxystate: started

4、编写触发器文件

[devopes@server4 apache]$ cd handlers/
[devopes@server4 handlers]$ ls
main.yml
[devopes@server4 handlers]$ vim main.yml
[devopes@server4 handlers]$ cat main.yml
---
- name: restart httpdservice:name: httpdstate: restarted

5、编写模板(由于前面做过此实验,所以在这里我们就将前面的模板直接拷贝一份)

[devopes@server4 handlers]$ cd ..
[devopes@server4 haproxy]$ ls
defaults  files  handlers  meta    tasks  templates  vars
[devopes@server4 haproxy]$ cd templates/
[devopes@server4 templates]$ ls
[devopes@server4 templates]$ cp ../../../templates/httpd.conf.j2 .
[devopes@server4 templates]$ ls
haproxy.conf.j2

6、不需要编写变量文件,所以不需要进行下面的步骤

[devopes@server4 haproxy]$ cd vars
[devopes@server4 vars]$ ls
main.yml
[devopes@server4 vars]$ vim main.yml

7、由于后面要和haproxy结合实现负载均衡,编写最终要执行的apache文件

[devopes@server4 ansible]$ vim apache.yml
[devopes@server4 ansible]$ cat apache.yml
---
- hosts: alltasks:- import_role:name: apachewhen: ansible_hostname ingroups['webserver']- import_role:name: haproxywhen: ansible_hostname in group['lb']

8、编写主机文件

[devopes@server4 ansible]$ vim inventory
[devopes@server4 ansible]$ cat inventory
[lb]
server4[test]
server5  [prod]
server6
server7[webserver:children]
test
prod

9、执行apache.yml文件

[devopes@server4 ansible]$ ansible-playbook apache.yml    ###正确

执行发现没有报错,说明成功实现了访问server4出现server2、server3、server4的轮询

6、创建第三个roles(keepalived)

目的:在server5和server6上安装httpd,在server4和server7上安装haproxy,在server4上安装keepalived,实现高可用,也就是server4和server7两个调度器之间的高可用(server4作为主,server7作为备)

1、创建keepalived角色

[devopes@server4 ansible]$ cd roles/
[devopes@server4 roles]$ ls
apache haproxy
[devopes@server4 roles]$ ansible-galaxy init keepalived
- keepalived was created successfully
[devopes@server4 roles]$ ls
apache haproxy  keepalived
[devopes@server4 roles]$ cd keepalived/
[devopes@server4 keepalived]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests

2、删除测试目录和说明文档(这两个暂时没有用)

[devopes@server1 keepalived]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devopes@server4 keepalived]$ rm -rf README.md  tests/
[devopes@server4 keepalived]$ ls
defaults  files  handlers  meta  tasks  templates  vars

3、编写任务文件main.yml

[devopes@server4 keepalived]$ ls
defaults  files  handlers  meta  tasks  templates  vars
[devopes@server4 keepalived]$ cd tasks/
[devopes@server4 tasks]$ ls
main.yml
[devopes@server4 tasks]$ vim main.yml
[devopes@server4 tasks]$ cat main.yml
---
- name: install keepalivedyum:name: keepalivedstate: present- name: configure keepalivedtemplate:src: keepalived.conf.j2dest: /etc/keepalived/keepalived.confnotify: restart - name: start keepalivedservice:name: keepalivedstate: started

4、编写触发器文件

[devopes@server4 tasks]$ cd ..
[devopes@server4 keepalived]$ cd templates/
[devopes@server4 templates]$ ls
[devopes@server4 templates]$ pwd
/home/devopes/ansible/roles/keepalived/templates
[devopes@server4 templates]$ cd ..
[devopes@server4 keepalived]$ cd handlers/
[devopes@server4 handlers]$ ls
main.yml
[devopes@server4 handlers]$ vim main.yml
[devopes@server4 handlers]$ cat main.yml
---
- name: restart keepalivedservice:name: keepalivedstate: restarted

5、编写模板文件(为了方便,我们可以安装keepalived,从而复制模板,再进行修改)

[root@server4 ansible]# yum install -y keepalived
[devopes@server4 ~]$ cd ansible/roles/keepalived/templates/
[devopes@server4 templates]$ ls
[devopes@server4 templates]$ pwd
/home/devopes/ansible/roles/keepalived/templates
[devopes@server4 templates]$ cp /etc/keepalived/keepalived.conf  .
[devopes@server4 templates]$ ls
keepalived.conf
[devopes@server4 templates]$ mv keepalived.conf keepalived.conf.j2
[devopes@server4 templates]$ ls
keepalived.conf.j2

修改模板,模板中文件如下所示:

[devopes@server1 templates]$ vim keepalived.conf.j2
[devopes@server1 templates]$ cat keepalived.conf.j2
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_instance VI_1 {state {{ STATE }}interface eth0virtual_router_id {{ VRID }}priority {{ PRIORITY }}advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.35.100}
}

6、编写主机文件

[devopes@server4 roles]$ cd ..
[devopes@server4 ansible]$ vim inventory
[devopes@server4 ansible]$ cat inventory
[lb]
server4 STATE=MASTER VRID=100 PRIORITY=100
server7 STATE=BACKUP VRID=100 PRIORITY=50[test]
server5[prod]
server6[webserver:children]
test
prod

7、编写最终要执行的文件

[devopes@server4 ansible]$ vim apache.yml
[devopes@server4ansible]$ cat apache.yml
---
- hosts: alltasks:- import_role:name: apachewhen: ansible_hostname in groups['webserver']- import_role:name: haproxywhen: ansible_hostname in groups['lb']- import_role:name: keepalivedwhen: ansible_hostname in groups['lb']

8、执行apache.yml文件

[devopes@server4 ansible]$ ansible-playbook apache.yml    ###正确

执行发现没有报错,说明实现了高可用,下面我们再次去浏览器验证。

9、浏览器测试(输入:172.25.35.100)

  • 在server4上查看ip,发现又VIP(172.25.35.100)
[devopes@server4 ansible]$ ip addr     ###发现了vip
  • 关闭httpd服务
[root@server4 ~]$ systemctl stop httpd
  • 在浏览器访问VIP实现了负载均衡,如下所示,此时是server4上的haproxy作负载均衡

  • 在server4上停止keepalived服务,发现VIP漂移到了server7上
[devopes@server4 ansible]$ ip addr     ###vip不见了
[root@server7 ~]# ip addr    ###发现了VIP100
  • 此时仍然可以做负载均衡,如下所示:

  • 重新开启server4上的keepalived,发现VIP又飘回来了
[devopes@server4 ansible]$ ip addr     ###vip回来了
[root@server7 ~]# ip addr    ###发现了VIP不见了
  • 浏览器仍然可以访问

Ansible(四)ansible roles实现(apache+haproxy+keepalived)负载均衡+高可用相关推荐

  1. saltstack实现haproxy+keepalived负载均衡+高可用(二)

    一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!!    特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...

  2. Nginx+keepalived负载均衡高可用篇第③版

    Nginx+keepalived负载均衡高可用篇第③版 对付中.小型企业,假如没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并且可以通过Nginx + Keepa ...

  3. MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验

    http://blog.csdn.net/wzy0623/article/details/38757561 MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验 分类: MyS ...

  4. LVS原理详解及部署之五:LVS+keepalived实现负载均衡高可用

    本文我们主要讲解的是LVS通过keepalived来实现负载均衡和高可用,而不是我们第三篇文章介绍的通过手动的方式来进行配置.通过脚本的方式来显示RS节点的健康检查和LVS的故障切换.此文会通过一个实 ...

  5. LVS+Keepalived实现负载均衡高可用

    使用脚本实现LVS负载均衡 环境: 3台主机 DS:192.168.100.1 RS1:192.168.100.11 RS2:192.168.100.12 VIP:192.168.100.100 安装 ...

  6. Lvs+keepAlived实现负载均衡高可用集群(DR实现)

    第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...

  7. Nginx+KeepAlived实现负载均衡高可用原理

    作者:田超凡 原创博文,严禁复制转载,仿冒必究 nginx负载均衡高可用 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务 ...

  8. RabbitMQ+haproxy+keeplived 高可用负载均衡高可用镜像集群队列_01

    文章目录 一.RabbitMQ 集群节点说明 二.服务器hosts文件统一修改 三.RabbitMQ 镜像集群队列搭建部署 一.RabbitMQ 集群节点说明 服务器IP hostname 节点说明 ...

  9. keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...

    概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...

最新文章

  1. Setting Up Tomcat For Remote Debugging
  2. 数据表示字面量整型字面量
  3. java byte 判断相等_转发收藏 | 史上最全Java面试题+面试网站推荐!(含答案)
  4. 国王的游戏(华东师范大学-信息学竞赛学教案)
  5. 【Leetcode】【Longest Palindromic Substring】【最长回文子串】【C++】
  6. python调用rocketmq的api_rocketmq-python
  7. Apple Watch再立功!67岁男子意外摔倒后得救
  8. Java基础学习总结(41)——JPA常用注解
  9. python autoitlibrary_记录RF安装AutoItLibrary库的辛酸过程
  10. Linux下vi命令小结
  11. OpenCasCade由一个基础形状拉伸形成其它形状的问题
  12. 【golang】golang获取客户端ip
  13. NotImplementedError: Invalid CAN Bus Type - None
  14. 嵌入式单片机知识点汇总(持续更)
  15. 求ax2+bx+c=0方程的解,要求(1) a=0,不是二次方程。(2) b2-4ac=0,有两个相同的实根。(3)b2-4ac>0,有两个不等的实根。(4)b2-4ac<有两个共轭的复根
  16. 深度解读“人类首次实现室温超导”:思路并无突破,中国并不落后-1
  17. C#,字体多重阴影的绘制
  18. 观后感 --《当幸福来敲门》和《赢在中国》
  19. 公众号认证?小程序认证?小程序复用公众号资质进行认证?
  20. 神级总结:报价英文函电的常用金句

热门文章

  1. 正则表达式学习笔记003--问号和加号的认识与应用
  2. 微信公众开放平台开发05---jetty部署异常:rg.apache.jasper.JasperException: PWC6345: There is an error in invoking ja
  3. ubuntu上装texlive
  4. 0x00007FFEBAD050D8 处(位于 first.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000000DD73CE
  5. 杭电1754I Hate It 线段树与非线段树
  6. wireshark 过滤法则
  7. linux命令echo的实现,Linux echo命令的使用及三种实现方式
  8. Json字符串转对象和转List集合操作(alibabab版本)
  9. ios kvo 要引入_iOS KVO 实现原理 和 自己实现KVO
  10. JAVA实现1到100的平方根之和_手算平方根和基于 Java BigInteger 的大整数平方根的实现...