Nginx+KeepAlived高可用负载均衡集群的部署

目录

一.KeepAlived补充知识

1.一个合格的群集应该具备的特点

2.健康检查(探针)常用的工作方式

3.相关面试问题

问题1

问题2

二.Keepealived脑裂现象

1.现象

2.原因

硬件原因

运用配置原因

3.解决

4.预防

方法1

方法2

方法3

方法4

三.实验部署

1.两台nginx做初始化操作并安装nginx

2.四层反向代理配置

2.1.修改主调度器配置

2.2.修改备调度器配置

2.3.浏览器测试两台nginx服务器

3.配置高可用

4.准备检查nginx运行状态脚本

4.1.主服务器

4.2.备服务器

5.开启keepalived服务并测试

5.1.分别开启主备两台服务器keepalived

5.2.浏览器测试


一.KeepAlived补充知识

1.一个合格的群集应该具备的特点

  • 负载均衡          用于提高群集的性能   LVS  Nginx  HAProxy  SLB  F5
  • 健康检查(探针)  针对于调度器和节点服务器    Keepalived   Heartbeat
  • 故障转移          通过VIP漂移实现主备切换     VRRP   脚本

2.健康检查(探针)常用的工作方式

  • 发送心跳消息    vrrp报文    ping/pong
  • TCP端口检查     向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
  • HTTP URL检查    向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法
  • 如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常
  • 如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常

3.相关面试问题

问题1

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP

答案

  1. Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器
  2. 然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务
  3. 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址

问题2

keepalived的抢占与非抢占模式

答案

  1. 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
  2. 非抢占式俩节点state必须为bakcup,且必须配置nopreempt

注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了

二.Keepealived脑裂现象

1.现象

主服务器和备服务器都同时拥有相同的VIP

在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),

本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互

失去了联系,都以为是对方出了故障,此时备用调度器会运转起来争做主调度器的工作,而主调度

器依然保持着调度工作,两个调度的同时运转导致整个系统的紊乱。就会发生严重后果:

  • 共享资源被瓜分、两边"服务"都起不来
  • 或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)

2.原因

因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务

器误认为主服务器已经故障了并通过ip命令生成VIP

硬件原因

  • 高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信
  • 因心跳线坏了(包括断了,老化)
  • 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
  • 因心跳线间连接的设备故障(网卡及交换机)
  • 因仲裁的机器出问题(采用仲裁的方案)

运用配置原因

  • 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输
  • 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
  • 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等
  • Keepalived配置里同一VRRP实例如果virtual_router_id两端参数配置不一致也会导致裂脑问题发生

3.解决

关闭主服务器或备服务器其中一个的keepalived服务

4.预防

方法1

如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输

方法2

如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信

方法3

在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中

断则自行关闭主服务器上的keepalived服务

方法4

利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方

应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务

三.实验部署

此实验基于以上 LVS+KeepAlived高可用负载均衡群集的部署实验为基础,将两台调度器改为

nginx服务器,其余不变

准备虚拟机

192.168.80.104(nginx服务器四层代理)

192.168.80.105(nginx服务器四层代理)

192.168.80.106(web1)

192.168.80.107(web2)

192.168.80.108(nfs共享存储)

1.两台nginx做初始化操作并安装nginx

nginx镜像网址:

2.四层反向代理配置

2.1.修改主调度器配置

stream {upstream backends {server 192.168.80.106:80;server 192.168.80.107:80;}server {listen 8080;proxy_pass backends;}
}

2.2.修改备调度器配置

将主调度器的nginx.conf复制过来

2.3.浏览器测试两台nginx服务器

192.168.80.104/192.168.80.105

3.配置高可用

两台nginx服务器安装keepalived

4.准备检查nginx运行状态脚本

4.1.主服务器

#!/bin/bashif ! killall -0 nginx &> /dev/nullthensystemctl stop keepalived
fi

4.2.备服务器

将主里的复制到备里

5.开启keepalived服务并测试

5.1.分别开启主备两台服务器keepalived

5.2.浏览器测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/351121.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WWDC 2024 回顾:Apple Intelligence 的发布与解析

一年一度的苹果全球开发者大会(WWDC)如期而至,2024 年的 WWDC 再次成为科技界的焦点。本次发布会中,苹果正式推出了他们在 AI 领域的全新战略——Apple Intelligence。这一全新概念旨在为用户打造“强大、易用、全面、个性化、注重…

DC/AC电源模块:为电动车充电基础设施提供高效能源转换

BOSHIDA DC/AC电源模块:为电动车充电基础设施提供高效能源转换 DC/AC电源模块是一种用于电动车充电基础设施的重要组件,它能够实现高效能源转换。在电动车的普及和推广过程中,DC/AC电源模块的重要性日益凸显。本文将从DC/AC电源模块的基本原…

CSS 实现个人资料卡

CSS 实现个人资料卡 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"imgBox"><img src"./bg.jpg" /></div><div class"content"><div class"details&quo…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

38、基于卷积神经网络(CNN)的车牌自动识别系统(matlab)

1、原理及流程 1&#xff09;原理 CNN&#xff08;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;可以用于图像识别和分类任务。车牌自动识别系统的原理基本上就是使用CNN模型对车牌图像进行处理和识别。 首先&#xff1a;系统需要收集大量的含有车牌的图像数据作…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南&#xff1a;如何用java写一个网站 Java 作为一门强大的编程语言&#xff0c;在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行&#xff0c;但 Java 凭借其稳定性、可扩展性和丰富的生态系统&#xff0c;仍然…

【SpringBoot】SpringBoot:构建实时聊天应用

文章目录 引言项目初始化添加依赖 配置WebSocket创建WebSocket配置类创建WebSocket处理器 创建前端页面创建聊天页面 测试与部署示例&#xff1a;编写单元测试 部署扩展功能用户身份验证消息持久化群组聊天 结论 引言 随着实时通信技术的快速发展&#xff0c;聊天应用在现代We…

redis aof写入以及aof重写的源码分析

这里写目录标题 版本aof的面试问题aof正常写入流程aof重写流程 版本 redis&#xff1a;6.2.7 aof的面试问题 最近找工作&#xff0c;面试被问倒了&#xff0c;记录一下 比如redis的aof指令会不会丢失&#xff1f;比如在重写aof的什么新来的操作怎么办&#xff1f; 在重写的…

【云计算】Docker部署Nextcloud网盘并实现随地公网远程访问

配置文件 切换root权限&#xff0c;新建一个nextcloud的文件夹&#xff0c;进入该目录&#xff0c;创建docker-compose.yml [cpslocalhost ~]$ su root Password: 666666 [rootlocalhost cps]# ls Desktop Documents Downloads Music Pictures Public Templates Vide…

【面经总结】Java集合 - Map

Map 概述 Map 架构 HashMap 要点 以 散列(哈希表) 方式存储键值对&#xff0c;访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数&#xff1a;初始容量和负载因子。 初始容量&#xff1a;哈希表创建时的容量负载因子&#xff1a;其容量自动扩容之前被允许的最大…

CPP多线程

什么是多线程&#xff1f; 多线程是一种允许程序同时运行多个线程的技术。每个线程可以执行不同的任务&#xff0c;这在处理需要并发执行的操作时&#xff08;例如&#xff0c;处理多个客户端的网络服务器&#xff0c;或者图形用户界面应用程序&#xff09;非常有用。多线程能够…

Github 2024-06-13开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2Shell项目1TypeScript项目1Swift项目1PHP项目1Blade项目1JavaScript项目1从零开始构建你喜爱的技术 创建周期:2156…

MySQL数据库管理(一)

目录 1.MySQL数据库管理 1.1 常用的数据类型​编辑 1.2 char和varchar区别 2. 增删改查命令操作 2.1 查看数据库结构 2.2 SQL语言 2.3 创建及删除数据库和表 2.4 管理表中的数据记录 2.5 修改表名和表结构 3.MySQL的6大约束属性 1.MySQL数据库管理 1.1 常用的数据类…

ElementPlus非表单组件ElUpload值更新后校验不消失问题

项目场景&#xff1a; el-form表单中有一个上传组件&#xff0c;有必填校验。 问题描述 先触发表单的必填校验(点击提交按钮)&#xff0c;然后再上传文件&#xff0c;必填校验的提示一直存在&#xff0c;如果再次点击提交&#xff0c;手动触发表单校验&#xff0c;必填校验消…

JavaScript常见面试题(一)

文章目录 1. JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f;2.数据类型检测的方式有哪些3. 判断数组的方式有哪些4.null和undefined区别5.typeof null 的结果是什么&#xff0c;为什么&#xff1f;6.intanceof 操作符的实现原理及实现7.为什么0.10.2 ! 0.3&…

计算机网络(8) Finite State Machines(有限状态机)

一.建立连接&#xff08;三次握手&#xff09; 建立连接过程中的状态转换如下&#xff1a; 客户端&#xff1a; 发送SYN CLOSED >>>>>>>>>>>>>>SYN SENT(第一次握手) 接收SYNACK发送ACK …

如何看懂SparkUI?

Jobs页面 Stage页面 显示额外的指标和摘要指标&#xff1a; 摘要指标&#xff08;Summary Metrics&#xff09;统计了所有完成的任务的执行行为&#xff0c;包括执行时间、GC时间、输入输出信息等&#xff0c;并提供了最小值&#xff08;Min&#xff09;、第25百分位数&#xf…

HCIA11 网络安全之本地 AAA 配置实验

AAA 提供 Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;和 Accounting&#xff08;计费&#xff09;三种安全功能。 • 认证&#xff1a;验证用户是否可以获得网络访问权。 • 授权&#xff1a;授权用户可以使用哪些服务。 •…

黑马头条Minio报错non-xml response from server错误的解决方法

今天在写项目的时候&#xff0c;想测试minio上传文件功能是否正常&#xff0c; 但是每次都出现non-xml response from server的错误。 自己也在网上找了很多解决方法&#xff0c;大部分是说用户名和密码的配置问题&#xff0c;但是检查后发现并没有错误。 最后发现是自己的dock…