首页 > 系统相关 >keepalived+nginx ansible部署

keepalived+nginx ansible部署

时间:2023-04-17 15:13:04浏览次数:51  
标签:name keepalived nginx ansible playbook 节点

Linux 9 自动化部署 Keepalived + Nginx 高可用负载均衡器

原创 魏文第 魏文第 2023-03-06 19:00 发表于北京 收录于合集 #linux39个 #ansible19个 #自动化18个

 

通常使用负载均衡器 (LB) 为一组 real server (提供服务的服务器)  分配流量,以实现后端服务的高可用及可扩展性。在设计负载均衡器的拓扑时,也需要考虑负载均衡器自身的高可用。Keepalived 是主流的 HA (高可用) 软件,Nginx 是常用的负载均衡器工具。本文将通过这两个工具,介绍如何部署高可用的负载均衡器。

本章包含以下主题:

  • LB 主备及主主架构介绍
  • 部署环境介绍
  • 自动化部署主备架构
  • 自动化部署主主架构
  • 验证
  • 总结

37.1 LB 主备及主主架构介绍

通过 Keepalived,可以实现 Nginx 负载均衡器的主备及双主两种架构。

37.1.1 主备架构

在主备架构环境中,仅有一个 VIP (虚拟 IP),最初配置在主节点上。客户端通过 VIP 请求服务。当主节点发生故障时,VIP 会漂移到备节点,客户端依然能够使用 VIP 请求服务。这种架构的弊端是,总有一台主机处于闲置状态。

37.1.2 主主架构

主主架构需要两个 VIP,分别分配给两个主机。这两个主机互为主备,客户端通过不同的 VIP 请求服务,两台负载均衡器均能响应客户端的请求。

37.2 部署环境介绍

需要两个节点部署 Keepalived + Nginx,以及一个 Ansible 控制台节点,完成自动化部署的工作。

37.2.1 节点信息

在实验环境中,两个 LB 节点分别为 2 核 CPU、2 GB 内存的虚拟机。

节点操作系统版本:

# 系统版本:Rocky Linux release 9.1

Ansible Inventory hosts 文件内容:

[lb]lb1.server.aiops.redlb2.server.aiops.red

LB 节点信息:

# LB node 1hostname: lb1.server.aiops.redIP: 10.211.55.56
# LB node 2hostname: lb2.server.aiops.redIP: 10.211.55.57
# VIP 1vip1: 10.211.55.251/24
# VIP 2vip2: 10.211.55.252/24

37.2.2 节点要求

为使安装过程顺利进行,节点应满足以下要求。

37.2.2.1 时钟同步

应保证 LB 节点间、以及 Ansible 控制节点的时钟一致。

要自动化实现时钟同步,可以参考 “Linux 9 自动化部署 NTP 服务”。

37.2.2.2 主机名解析

Ansible 控制节点可以通过主机名访问 LB 节点。

要实现主机名称解析,可以在 Ansible 控制节点的 /etc/hosts 文件中指定 LB 节点的 IP、主机名条目,或者参考 “Linux 9 自动化部署 DNS 服务” 一文配置 DNS 服务。

37.2.2.3 权限

Ansible 控制节点可以免密登录各节点,并能够免密执行 sudo

37.3 自动化部署主备架构

首先介绍自动化部署 Keepalived + Nginx 的主备架构。

文中代码可在 https://github.com/weiwendi/automate 获取。

37.3.1 安装 Nginx

创建名为 nginx 的 Ansible 角色,用来安装 Nginx 软件:

ansible-galaxy role init --init-path . nginx

该命令将在当前目录下创建名为 nginx 目录 (nginx 角色)。切换到 nginx 目录下,编辑 tasks/main.yml 文件,内容如下:

---# tasks file for nginx#- name: disbled selinux task  ansible.posix.selinux:    state: disabled
- name: enabled http service task ansible.builtin.firewalld: immediate: true permanent: true service: http state: enabled
- name: enabled https service task ansible.builtin.firewalld: immediate: true permanent: true service: https state: enabled
- name: deploy nginx server task ansible.builtin.dnf: name: nginx state: present
- name: started nginx service task ansible.builtin.systemd: enabled: true name: nginx state: started
- name: nginx config file task ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf force: true notify: restart nginx service handler

创建 templates/nginx.conf.j2 文件,内容如下:

http {
...
include /etc/nginx/conf.d/*.conf;
server { listen {{ statusPort }}; listen [::]:{{ statusPort }}; server_name _;
location /nginx_status { stub_status on; access_log off; {% for allowip in statusAllowIPs -%} allow {{ allowip }}; {% endfor -%} deny all; }
}
}

编辑 handlers/main.yml 文件,内容如下:

---# handlers file for nginx- name: restart nginx service handler  ansible.builtin.systemd:    name: nginx    state: reloaded

编辑 defaults/main.yml 文件,设置变量:

statusAllowIPs:  - 127.0.0.1  - 10.211.55.0/24statusPort: 80

statusAllowIPs 定义了允许访问 nginx_status 页面的 IP 或地址段;statusPort 定义了 Nginx 状态页面监听的端口。

至此,nginx Role 配置完成。接下来编辑 playbook/nginx/playbook.yaml 文件,安装 Nginx 服务。

playbook.yaml 文件内容如下:

#!/usr/bin/env playbook---- name: deploy nginx application play  hosts: lb  become: true  gather_facts: false
roles: - role: nginx...

执行 playbook.yaml 文件:

ansible-playbook -i ./hosts playbook.yaml

完成 Nginx 的安装。

37.3.2 安装 Keepalived

在 roles/ 目录下创建 keepalived role:

ansible-galaxy role init --init-path . keepalived

安装 keepalived 的任务如下:

tasks/main.yml

---# tasks file for keepalived#- name: install keepalived task  ansible.builtin.dnf:    name: keepalived    state: present
- name: enabled keepalived service task ansible.builtin.systemd: enabled: true name: keepalived
- name: copy keepalived single active config file task ansible.builtin.template: src: single_active.conf.j2 dest: /etc/keepalived/keepalived.conf force: true notify: restart keepalived service handler when: doubleActivity is false
- name: copy keepalived doubble active config file task ansible.builtin.template: src: doubble_active.conf.j2 dest: /etc/keepalived/keepalived.conf force: true notify: restart keepalived service handler when: doubleActivity is true

task 文件中有两个复制模板配置文件的任务,根据 doubleActivity 变量的值决定执行哪个任务。doubleActivity 的值被设置为 false,因此默认会配置主备架构的负载均衡器。

模板配置文件内容如下:

templates/single_active.conf.j2

! Configuration File for keepalived
global_defs { notification_email { {% for email in emails %} {{ email }} {% endfor -%} } notification_email_from {{ sendEmail }} smtp_server {{ smtpServer }} smtp_connect_timeout 30 router_id {{ ansible_facts['nodename'] }} vrrp_skip_check_adv_addr vrrp_garp_interval 0 vrrp_gna_interval 0}
vrrp_script check_nginx { script "killall -0 nginx" interval 2 weight -5}
vrrp_instance {{ vrrpInstanceName1 }} { {% if lb1 in ansible_facts['nodename'] -%} state MASTER priority 160 {% else -%} state BACKUP priority 158 {% endif -%} interface {{ interface }} virtual_router_id 51 advert_int 1 authentication { auth_type PASS auth_pass {{ authPass }} } virtual_ipaddress { {{ vip1 }} brd {{ broadcast }} dev {{ interface }} label {{ interface }}:1 } track_script { check_nginx }}

Handlers 内容如下:

handlers/main.yml

---# handlers file for keepalived#- name: restart keepalived service handler  ansible.builtin.systemd:    name: keepalived    state: restarted

变量定义如下:

defaults/main.yml

---# defaults file for keepalived#authPass: aiopsbroadcast: 10.211.55.255doubleActivity: falseemails:  - [email protected]  - [email protected]  - [email protected]interface: enp0s5interfaceID1: 1interfaceID2: 2lb1: lb1.server.aiops.redlb2: lb2.server.aiops.redsendEmail: [email protected]smtpServer: 10.211.55.10vip1: 10.211.55.251/24vip2: 10.211.55.252/24vrrpInstanceName1: singleActiveNginxvrrpInstanceName2: dubleActiveNginx

主备架构仅使用一个 VIP,因此在变量中设置 vip1 即可,vrrpInstanceName 也只设置一个即可。

在 playbooks/keeplived 目录下,创建 playbook.yaml 文件,用来执行执行 keepalived role。

playbook.yaml 内容如下:

#!/usr/bin/env playbook---- name: deploy keepalived application play  hosts: lb  become: true  gather_facts: true  vars_files: variables.yaml
roles: - role: keepalived...

执行 playbook.yaml,完成 keepalived 的部署:

ansible-playbook playbook.yaml

37.4 自动化部署主主架构

主主架构需要两个 VIP,并为每个 vrrp 实例设置名称,因此需要在变量中定义两个 vip1vip2 两个 VIP 变量以及两个 vrrpInstanceName。具体信息可以参考 https://github.com/weiwendi/automate。

在 keepalived Playbook 目录中,创建 vars/variables.yaml 变量文件,设置 doubleActivity: true

执行 playbook.yaml Playbook 文件,完成主主架构的部署:

ansible-playbook -i ./hosts playbook.yaml

37.5 验证

使用 IP 在 statusAllowIPs  变量中的客户端,分别通过两个 VIP 地址访问 nginx_status 页面,均能出现类似以下页面:

图片图 37.1, 通过 VIP 访问 nginx_status 页面

登录任意 LB 主机,停止 Nginx 或者 Keepalived 服务,使用 VIP,仍能访问到 nginx_status 页面。

37.6 总结

本文演示了通过 Keepalived、Nginx 实现负载均衡器。通过本教程,你可以轻松地、自动化地在基于 RPM 的 Linux 发行版上,轻松部署高可用的负载均衡。

文中所有代码,均能在 https://github.com/weiwendi/automate 对应目录下获取。

魏文第

喜欢就分享吧

赞赏二维码喜欢作者

收录于合集 #linux  39个 上一篇Linux 9 部署 Ceph 分布式存储下一篇Linux 9自动化部署Kubernetes高可用集群 阅读 1073   魏文第 95篇原创内容  

标签:name,keepalived,nginx,ansible,playbook,节点
From: https://www.cnblogs.com/cherishthepresent/p/17325910.html

相关文章

  • ansible使用教程
    目录一、介绍1.Ansible发展史2.特性3.架构4.ansible的作用以及工作结构5.ansible主要组成部分二、安装1.rpm包安装:EPEL源2.编译安装:3.Git方式:4.pip安装:pip是安装Python包的管理器,类似yum5.确认安装:三、相关文件1.配置文件2.程序3.主机清单详解4.配置文件详......
  • nginx-authenticate.conf Nginx配置 新增长链接支持代理
    nginx-authenticate.confNginx配置新增长链接支持代理新增代码proxy_set_headerConnection"";proxy_http_version1.1;proxy_bufferingoff;proxy_cacheoff;文件代码server{listen8888;server_namelocalhost;l......
  • CentOS7---Nginx安装并配置虚拟主机
    1、源码安装nginx,并提供服务脚本源码包的获取:官网下载实验环境:和企业环境类似,关闭防火墙,禁用selinux,使用静态IP地址安装步骤:步骤一:安装Nginx所需的pcre库[root@node01~]#yuminstallpcre-devel-y步骤二:安装依赖包[root@node01~]#yum-yinstallgcgccgcc-c++zlib......
  • Envoy与Nginx的八大对比
    Envoy与Nginx架构层面的对比Nginx是Envoy出现之前网络通信中间件领域非常有代表性的开源系统,功能强大,性能出色,扩展性很强,已经形成了强大的生态,成为HTTP流量管理领域事实上的标杆。Envoy作为后起之秀,虽然定位和目标上与Nginx有不少差异,但架构设计层面,Envoy和Nginx都有很多的可取之处......
  • k8s ingress-nginx
    apiVersion:v1kind:Namespacemetadata:name:ingress-nginxlabels:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginx---#Source:ingress-nginx/templates/controller-serviceaccount.yamlapiVersion:v1kind:ServiceAccount......
  • 搭建nginx反向代理实现动静态分离
    一、实现高可用动静分离1、部署目的2、部署拓扑3、实现静态页面4、实现lvs负载均衡5、实现动态网页功能 6、 实现nginx反向代理7、静态结果展示 8、动态结果展示   一、实现高可用动静分离1、部署目的①用户访问业务时访问虚拟ip由lvs负责转发请求到业务上,采用......
  • Nginx之数据流代理stream模块简介和使用
    转自 http://t.csdn.cn/RV4Hi一、stream模块简介  stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文。ngx_stream_core_module模块从1.9.0版开始提供。默认情况下,此模块不是构建的,应该使用–withstream配置参数启用它,即我们需要使用.......
  • nginx中的proxy_pass配置
    Nginx是最常用的反向代理工具之一,一个指令proxy_pass搞定反向代理,对于接口代理、负载均衡很是实用,但proxy_pass指令后面的参数很有讲究,通常一个/都可能引发一个血案。通常nginx配置proxy_pass指令时,如果proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的......
  • nginx自定义负载均衡及根据cpu运行自定义负载均衡
    转载请注明出处:1.nginx如何自定义负载均衡在Nginx中,可以通过配置文件自定义负载均衡策略。具体步骤如下:首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后端服务器列表,例如:upstreammyapp{serverbackend1.example.comweight=3;server......
  • Nginx常用配置
    前言Nginx是一款高性能的Web服务器和反向代理服务器,广泛应用于互联网领域。在使用Nginx时,我们需要对其进行配置,以满足不同的需求和场景。本篇博客将介绍Nginx的常用配置。静态文件服务静态文件服务是Nginx最基本的功能之一,它可以通过配置实现对静态资源的访问。例如:server{......