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.mzph.cn/bicheng/26651.shtml

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

相关文章

【菜狗学前端】 初探TS(结合在vue3中的使用)

TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。我们可以将TypeScript理解成加强版的JavaScript。 简单来说:Ts是带类型语法的Js; Ts是Js的超集 TS官方网站:https://www.typescriptlang.org/ TS中文官网&#xf…

CXL协议中 Register Locator DVSEC详解

✨ 前言: Register Locator DVSEC(Designated Vendor-Specific Extended Capability)是一种PCI Express(PCIe)配置空间的能力,专为CXL(Compute Express Link)技术中的设备设计。这包…

软考初级网络管理员_09_网络单选题

1.下列Internet应用中对实时性要求最高的是()。 电子邮件 Web浏览 FTP文件传输 IP电话 2.在Internet中的大多数服务(如WWW、FTP等)都采用()模型。 星型 主机/终端 客户机/服务器 网状 3.子网掩码的作用是()。 可以用来寻找网关 可以区分IP和MAC 可以识别子网 可以…

[DDR5 Jedec] 读操作 Read Command 精讲

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解DDR》 Read 读取命令也可以视为列读取命令。当与正确的bank地址和列地址结合使用时,通过激活命令(行访问)移动到检测放大器中的数据, 现在被推送到数…

python 基础--数据类型、基本数据类型之间的相互转换

文章目录 一、python 数据类型介绍二、基本数据类型2.1 Numbers(数字类型)2.2 String(字符串类型)2.2.1 不同引号字符串之间的区别2.2.2 转义字符和 python 输出函数2.2.3 字符串的相关操作(字符串拼接、占位符、字符串…

python爬虫:实现动态网页的爬取,以爬取视频为例

引言: 爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。 爬虫技术广泛应用于搜索引擎、 数据挖掘 、信息提取等领域,是互联网技术的重要组成部分。 摘要: 作为爬虫的初学者,网页越简单越好,因为网页的结构…

用Python代码锁定Excel单元格以及行和列

Excel能够帮助用户高效地组织数据,还支持复杂的公式计算和数据分析。而随着团队协作的日益频繁,保护数据的准确性和完整性变得尤为重要。在Excel表格中,我们可以通过锁定特定的单元格或区域,防止对单元格内容进行随意修改&#xf…

pycharm上传文件到服务器python代码部署到服务器

文章目录 step1:【Tools】—-【Deployment】—-【Configuration】step2:【 】—-【SFTP】—-【输入服务器名称】step3:【 Deployment path】—-【输入相对地址】step4:【 选中项目右击】—-【Deployment】—-【upload to xxxxx】…

css实现优惠券样式

实现优惠券效果: 实现思路: 需要三个盒子元素,使用 css 剪裁,利用 ellipse 属性,将两个盒子分别裁剪成两个半圆,位置固定在另一个盒子元素左右两边适当位置上。为另一个盒子设置想要的样式,圆角…

MFC socket编程-服务端和客户端流程

MFC 提供了一套丰富的类库来简化 Windows 应用程序的网络编程。以下是使用 MFC 进行 socket 编程时服务端和客户端的基本流程: 服务端流程: 初始化 Winsock: 调用 AfxSocketInit 初始化 Winsock 库。 创建 CSocket 或 CAsyncSocket 对象&am…

汇编:保护模式下的寻址方式

寻址(Addressing)是计算机在访问内存时定位数据的过程;它涉及如何指定内存位置,以便处理器能够正确地读取和写入数据,不同的计算机架构和操作模式支持多种不同的寻址方式。以下是常见的寻址方式: ①立即数…

强烈推荐的JetBrains家族的插件

Rainbow Brackets 该插件提供了不同颜色的对应的括号格式,便于在开发中检查缺少括号的情况,效果如下 CodeGlance Pro 该插件是代码缩略图插件,方便在开发中快速定位代码位置,也可作为滚动条使用,CodeGlance Pro搜不到…

webpack插件

plugin 插件向第三方开发者提供了 webpack 引擎中完整的能力。使用阶段式的构建回调,开发者可以引入它们自己的行为到 webpack 构建流程中。创建插件比创建 loader 更加高级,因为你将需要理解一些 webpack 底层的内部特性来做相应的钩子 为什么需要一个…

(Git)多人协作1

文章目录 前言总结 前言 目标:master分支下file.txt文件新增“aaa”,“bbb” 实现:开发者1新增“aaa”,开发者2新增“bbb” 条件:在同一个分支下协作完成 实际开发过程中,每个用户都与属于自己的码云账户,如果想要进…

windows安装SQLyog

windows安装SQLyog 1. 下载 SQLyog 安装包 访问 SQLyog 的官方网站。在网站上找到下载链接,通常会有一个“Download”或“Try Now”按钮。如果需要注册或填写信息以获取下载链接,请按提示操作。 2. 运行安装程序 下载完成后,双击运行下载…

css设置滚动条样式;滚动条设置透明

滚动条透明代码 .resizable-div {resize: both;/* 允许水平和垂直调整大小 */overflow: auto;/* 确保内容超出边界时出现滚动条 */ } /* 滚动条整体样式 */ .resizable-div::-webkit-scrollbar {width: 4px; /* 竖直滚动条宽度 */height: 4px; /* 水平滚动条高度 */ }/* 滚动条…

湖州等保测评公司有几家?在那里?电话多少?

湖州等保测评公司有几家?在那里?电话多少? 【回答】:目前湖州暂未有正规等保测评机构。因此湖州企业可以就近选择浙江省内正规等保测评机构,有可以网上寻找合适的等保测评机构。 知识拓展1:浙江正规等保测…

Python学习笔记6:pychram相关知识及安装教程,后续需要学习的入门知识

上篇文章说了,今天去公司重新装一下IDE,最后也是把过程这边再记录一下,有需要的可以参考一下。 关于pychram pychram是什么? PyCharm是由JetBrains公司开发的一款流行的Python集成开发环境(IDE)。它专为…

Linux C/C++ socket

一、第一个网络通讯程序 网络通讯是指两台计算机中的程序进行传输数据的过程客户程序(端):指主动发起通讯的程序。服务程序(端/器):指被动的等待,然后为向它发起通讯的客户端提供服务。 /** 程序名:demo1.cpp,此程序用于演示socket的客户端…

洛谷P1305 新二叉树(树的基本遍历)

题目描述 输入一串二叉树,输出其前序遍历。 输入格式 第一行为二叉树的节点数 𝑛。(1≤𝑛≤26) 后面 𝑛 行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点…