Ansible(四)ansible roles实现(apache+haproxy+keepalived)负载均衡+高可用
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)负载均衡+高可用相关推荐
- saltstack实现haproxy+keepalived负载均衡+高可用(二)
一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!! 特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...
- Nginx+keepalived负载均衡高可用篇第③版
Nginx+keepalived负载均衡高可用篇第③版 对付中.小型企业,假如没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并且可以通过Nginx + Keepa ...
- MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验
http://blog.csdn.net/wzy0623/article/details/38757561 MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验 分类: MyS ...
- LVS原理详解及部署之五:LVS+keepalived实现负载均衡高可用
本文我们主要讲解的是LVS通过keepalived来实现负载均衡和高可用,而不是我们第三篇文章介绍的通过手动的方式来进行配置.通过脚本的方式来显示RS节点的健康检查和LVS的故障切换.此文会通过一个实 ...
- LVS+Keepalived实现负载均衡高可用
使用脚本实现LVS负载均衡 环境: 3台主机 DS:192.168.100.1 RS1:192.168.100.11 RS2:192.168.100.12 VIP:192.168.100.100 安装 ...
- Lvs+keepAlived实现负载均衡高可用集群(DR实现)
第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...
- Nginx+KeepAlived实现负载均衡高可用原理
作者:田超凡 原创博文,严禁复制转载,仿冒必究 nginx负载均衡高可用 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务 ...
- RabbitMQ+haproxy+keeplived 高可用负载均衡高可用镜像集群队列_01
文章目录 一.RabbitMQ 集群节点说明 二.服务器hosts文件统一修改 三.RabbitMQ 镜像集群队列搭建部署 一.RabbitMQ 集群节点说明 服务器IP hostname 节点说明 ...
- keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...
概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...
最新文章
- Setting Up Tomcat For Remote Debugging
- 数据表示字面量整型字面量
- java byte 判断相等_转发收藏 | 史上最全Java面试题+面试网站推荐!(含答案)
- 国王的游戏(华东师范大学-信息学竞赛学教案)
- 【Leetcode】【Longest Palindromic Substring】【最长回文子串】【C++】
- python调用rocketmq的api_rocketmq-python
- Apple Watch再立功!67岁男子意外摔倒后得救
- Java基础学习总结(41)——JPA常用注解
- python autoitlibrary_记录RF安装AutoItLibrary库的辛酸过程
- Linux下vi命令小结
- OpenCasCade由一个基础形状拉伸形成其它形状的问题
- 【golang】golang获取客户端ip
- NotImplementedError: Invalid CAN Bus Type - None
- 嵌入式单片机知识点汇总(持续更)
- 求ax2+bx+c=0方程的解,要求(1) a=0,不是二次方程。(2) b2-4ac=0,有两个相同的实根。(3)b2-4ac>0,有两个不等的实根。(4)b2-4ac<有两个共轭的复根
- 深度解读“人类首次实现室温超导”:思路并无突破,中国并不落后-1
- C#,字体多重阴影的绘制
- 观后感 --《当幸福来敲门》和《赢在中国》
- 公众号认证?小程序认证?小程序复用公众号资质进行认证?
- 神级总结:报价英文函电的常用金句
热门文章
- 正则表达式学习笔记003--问号和加号的认识与应用
- 微信公众开放平台开发05---jetty部署异常:rg.apache.jasper.JasperException: PWC6345: There is an error in invoking ja
- ubuntu上装texlive
- 0x00007FFEBAD050D8 处(位于 first.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000000DD73CE
- 杭电1754I Hate It 线段树与非线段树
- wireshark 过滤法则
- linux命令echo的实现,Linux echo命令的使用及三种实现方式
- Json字符串转对象和转List集合操作(alibabab版本)
- ios kvo 要引入_iOS KVO 实现原理 和 自己实现KVO
- JAVA实现1到100的平方根之和_手算平方根和基于 Java BigInteger 的大整数平方根的实现...