当前位置: 代码迷 >> 综合 >> ansible自动化运维(5)——使用ansible roles实现(apache+haproxy+keepalived)负载均衡+高可用
  详细解决方案

ansible自动化运维(5)——使用ansible roles实现(apache+haproxy+keepalived)负载均衡+高可用

热度:52   发布时间:2023-12-23 02:14:02.0

以下所有的实验来都是在rhel7.3上


1.ansible roles简介

Ansible roles是为了层次化、结构化地组织Playbook
roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们
roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等
相当于函数的调用把各个功能切割成片段来执行

2.roles目录结构

在这里插入图片描述

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当中,现在实现角色分离,这样更有利于自动化运维
在这里插入图片描述

环境部署

主机信息 作用
sevrer5(172.25.8.5) role角色分离的设置
sevrer6(172.25.8.6) 测试对象
sevrer7(172.25.8.7) 测试对象
sevrer8(172.25.8.8)测试对象

4.创建第一个roles(apache)

目的:server5给server6和server7安装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角色,再次查看角色就有了
在这里插入图片描述

##初始化apache

在这里插入图片描述
在这里插入图片描述

[root@server5 ~]# yum install -y tree
[wxh@server5 roles]$ tree .
[wxh@server5 ansible]$ ansible-galaxy list
- apache, (unknown version)

在这里插入图片描述

在这里插入图片描述

(4)进入apache角色目录,发现有任务目录、触发器目录、模板目录、变量目录等等

删除测试目录和说明文档,这两个暂时没有用

 [wxh@server5 ansible]$ cd roles/
[wxh@server5 roles]$ cd apache/
[wxh@server5 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[wxh@server5 apache]$ rm -fr README.md   #删除暂时不需要的
[wxh@server5 apache]$ rm -fr tests

在这里插入图片描述
(5)编写任务的yml文件

[wxh@server5 apache]$ cd templates/
[wxh@server5 apache]$ pwd
/home/wxh/ansible/apache
[wxh@server5 apache]$ cp httpd.conf.j2 ../roles/apache/templates/
[wxh@server5 templates]$ ls
httpd.conf.j2
[wxh@server5 templates]$ cd ..
[wxh@server5 apache]$ cd tasks/
[wxh@server5 tasks]$ cp /home/wxh/ansible/apache/playbook.yml main.yml  #复制之前的进行修改 
[wxh@server5 tasks]$ vim main.yml 
[wxh@server5 tasks]$ cat main.yml---
- name: install apacheyum:name:- httpd- phpstate: present- name: config apachetemplate:src: httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify: restart apache- name: start apacheservice:name: "{
   { item }}"state: startedenabled: trueloop:   #轮询的过程- httpd- firewalld- name: config firewalldfirewalld:service: httppermanent: yesstate: enabled

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)编写触发器的yml文件

[wxh@server5 tasks]$ cd ..
[wxh@server5 apache]$ cd handlers/
[wxh@server5 handlers]$ vim main.yml   #触发器的设定
---
- name: restart apacheservice:name: httpdstate: restarted

在这里插入图片描述
在这里插入图片描述

(7)编写模板文件,拷贝一个过来即可,不需要修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(8)编写变量的yml文件

[wxh@server5 apache]$ cd vars/
[wxh@server5 vars]$ vim main.yml 
[wxh@server5 vars]$ cat main.yml  #变量的设定 
---
http_port: 80

在这里插入图片描述
在这里插入图片描述
(9)#添加httpd页面

[wxh@server5 apache]$ cd files/
[wxh@server5 files]$ vim index.html
[wxh@server5 files]$ cat index.html 
<h1>{
   { ansible_facts['hostname'] }}</h1>
[wxh@server5 apache]$ cd tasks/
[wxh@server5 apache]$ pwd
/home/wxh/ansible/roles/apache
[wxh@server5 apache]$ cd tasks/
[wxh@server5 tasks]$ vim main.yml 
#添加httpd页面
- name: create index.htmlcopy:src: index.htmldest: /var/www/html/index.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(10)查看主机文件,确保主机信息正确

在这里插入图片描述
在这里插入图片描述
(11)编写最终要执行的文件

[wxh@server5 ansible]$ pwd
/home/wxh/ansible
[wxh@server5 ansible]$ vim httpd.yml---
- hosts: webserverroles:   #角色- apache- hosts: localhost     #验证本地become: falsetasks:- name: verify web server    ##验证Web服务器 uri:url: "http://{
   { item }}"return_content: yesstatus_code: 200loop: "{
   { groups['webserver'] }}"

在这里插入图片描述
在这里插入图片描述
(11)验证并开始执行,没有报错,说明角色分离成功

[wxh@server5 ansible]$ ansible-playbook --syntax-check httpd.yml   # 语法检查 
[wxh@server5 ansible]$ ansible-playbook --list-tasks  httpd.yml    #检测任务列表
[wxh@server5 ansible]$ ansible-playbook --list-hosts httpd.yml  #检测主机
[wxh@server5 ansible]$ ansible-playbook httpd.yml     #执行脚本

在这里插入图片描述
在这里插入图片描述

!在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
这就实现了apache的角色分离
其实昨天把所有的都做出来了,也验证了效果,今天就是实现一下角色分离
也就是把昨天的playbook.yml文件拆分

#小知识点

查看ansible所支持的模块ansible-doc -l   #列出所有ansible支持的模块,重要,请自行记住
[wxh@server5 tasks]$ ansible-doc service   #查看service的服务支持的模块
[wxh@server5 ansible]$ ansible-doc uri   #查看uri的服务支持的模块
[wxh@server5 tasks]$ ansible-doc firewalld

5.创建第二个roles(haproxy)

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

#1 创建haproxy角色,以及删除没有用的文件和目录
在这里插入图片描述
在这里插入图片描述
#查看server6上是否有haproxy
在这里插入图片描述
#查看yum支持的模块
在这里插入图片描述
在这里插入图片描述
##修改wxh的权限
在这里插入图片描述在这里插入图片描述
#小知识点
Linux用户配置sudo权限(visudo)

sudo的工作过程如下:
1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
3,若密码输入成功,则开始执行sudo后续的命令
4,root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
5,若欲切换的身份与执行者的身份相同,也不需要输入密码

#2 进行ssh 免密服务
在这里插入图片描述
在这里插入图片描述
#3 编写任务文件
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
#4安装haproxy
在这里插入图片描述
#5编写触发器文件
在这里插入图片描述
在这里插入图片描述
#6 编写模板文件,复制一下haproxy的配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
#7 不需要编写变量文件
在这里插入图片描述
#8 编写最终要执行的haproxy文件,因为haproxy和httpd是结合在一起的,要实现负载均衡,这里还有涉及到when判断
在这里插入图片描述
在这里插入图片描述
#9 编写主机文件
在这里插入图片描述
在这里插入图片描述
#10 执行
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
没有报错,说明成功实现了访问server1负载均衡server2和server3
#也可以在浏览器上进行访问,验证负载均衡是否实现

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
验证成功,说明成功实现了访问server1负载均衡server2和server3

5.创建第三个roles(keepalived)

目的:在server6和server7上安装httpd,在server5和server8上安装haproxy,在server5上安装keepalived,实现高可用
也就是server5和server8两个调度器之间的高可用

##再快照一个虚拟机server8
在这里插入图片描述
#添加用户,以及设置用户权限,这里设置的wxh,切换不需要密码
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#server5的普通用户向server8发送ssh免密登陆的公钥(锁)
在这里插入图片描述
#验证普通用户,是否可以免密远程登陆server8
在这里插入图片描述
#1 给server8安装haproxy
#编写主机文件
在这里插入图片描述
在这里插入图片描述
#编写执行yml文件
在这里插入图片描述
在这里插入图片描述
#执行haproxy.yml
在这里插入图片描述
无报错;

#在浏览器验证haproxy是否实现成功
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
#关闭server8的httpd和firewalld的服务,安装keepalived的服务,为了server5安装keepalived使用;
在这里插入图片描述

#2创建角色,删除文件
在这里插入图片描述

#3编写任务文件
在这里插入图片描述
在这里插入图片描述
#修改haproxy的文件
在这里插入图片描述
在这里插入图片描述
#无法ping通,关闭防火墙
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#4编写触发器文件
在这里插入图片描述
在这里插入图片描述
#5编写模块,直接复制server8的,只需要修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#6编写主机文件信息
在这里插入图片描述
在这里插入图片描述
#7编写最终要执行的文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#8执行
在这里插入图片描述在这里插入图片描述
#将server8的keepalived卸载,查看haproxy是否启动
在这里插入图片描述
在这里插入图片描述
#9测试:看是否实现高可用
可以看到server1上具有VIP
在这里插入图片描述
在这里插入图片描述
在浏览器里面访问VIP,实现了负载均衡,此时是server5上的haproxy做负载均衡
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#验证关闭server5的keepalived的服务,发现VIP自动漂移到了server8上面
在这里插入图片描述
#server5上已经无vip
在这里插入图片描述
#server8上显示vip,高可用服务实现成功
在这里插入图片描述
此时浏览仍然可以正常访问,因为server8在做haproxy负载均衡
在这里插入图片描述

在这里插入图片描述
重新开启keepalived服务,发现VIP又漂回server5上,因为server1的优先级别高
在这里插入图片描述

浏览器仍然可以正常访问
在这里插入图片描述
在这里插入图片描述

  相关解决方案