当前位置: 首页 > news >正文

第9章 负载均衡集群日常维护

一个设计良好的高可用负载均衡集群,交付使用以后并不能一劳永逸。欲使其高效、稳定、持续对外服务,日常维护必不可少。

对于高可用负载均衡集群来说,有两种类型的维护形式:常规性维护与突发性维护。突发性维护一般指故障处理,而常规性的维护包括的内容大致包括但不限于:变更、监控、升级、

备份与恢复等。本章会列举一些日常维护的实际案例给读者作为经验讲解。

9.1 负载均衡集群故障处理

在高可用负载均衡集群中,一些设施或者应用发生故障虽然不影响用户的使用,但作为维护人员,发现故障应立即排查并进行故障恢复,并对处理进行记录。

故障一般有硬件故障、系统故障、软件故障、性能故障。硬件故障比较容易判断,找出问题所在以后进行维修或者更换。系统故障、软件故障等,排查的诀窍就是日志文件,这一点要牢记于心。

1.故障实例:通过VIP访问不到Web页面

一个刚刚部署好Web服务集群,前端Keepalived + LVS(DR直接路由模式),后端多个真实服务器部署Apache。实施人员反馈故障现象如下:
(1)能通过telnet VIP 80正常访问。

(2)单独访问每个真实服务器的页面,正常。

(3)通过域名访问Web页面(绑定了集群VIP),不正常。

作者认为,排查最有效的策略是先实后虚--先查后端真实服务器,再查前端负载均衡。反之,假使故障在后端真实服务器,却在负载均衡器上找病因,能有效么?

得到授权以后,开始登录后端真实服务器宿主系统,检查Apache服务的配置,一下子就发现问题所在:居然把集群的VIP显式的写在配置文件中(<VirtualHost  VIP:80>)。

修改Apache配置文件,将“<VirtualHost  VIP:80>”更正为“<VirtualHost  *:80>”,保存配置,重启Apache服务,再以VIP地址访问Web页面,一切正常。

2.故障实例:集群性能故障

一个长期运行的负载均衡集群,前端Keepalived + HAProxy,后端真实服务器部署Nginx,提供数十个域名Web访问。在没有做任何市场推广、也没有突然大幅度增加注册用户的情况下,某一个域名的访问异常缓慢,同一个页面用浏览器反复刷新甚至出现“503”错误,而在此负载均衡集群中的其他域名的访问却是正常的。

登录到主负载均衡器宿主系统,粗略查看HAProxy日志,发现大量的日志记录来自于网络爬虫,再以主机名与“spider”做关键字对访问日志做处理,果然是爬虫在耗费网络资源,如图9-1所示。

图9- 1

知道了问题所在,接下来的处理从两个方面入手:负载均衡器上限制单个IP地址的最大并发数,同时在Nginx上屏蔽某些恶意的爬虫。

(1)负载均衡器限制同一个网段所有地址的连接总数量。使用系统防火墙工具“iptables”,在从负载均衡器(BACKUP)宿主系统手动执行防火墙策略,确定该指令不会产生异常并能正确发挥作用以后,再应用到主负载均衡器(Master)。限制访问并发数的“iptables”指令如下:

/usr/sbin/iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 80 --connlimit-mask 24 -j  DROP

/usr/sbin/iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 80 --connlimit-mask 24 -j  DROP

请读者注意:上述语句中有大写与小写、有单横杠与有双横杠,不能混淆。

(2)Nginx限制爬虫。用禁止源地址的方法无法有效的屏蔽爬虫,因此可选的方法之一就是对用户代理(User-Agent)进行处理。在Nginx配置文件中,对爬虫的定义可以是全局,也可以单独针对某个主机名,单独的主机名配置,以“include”的形式包含到主配置文件即可。根据从主负载均衡器(MASTER)访问日志统计出来的恶意爬虫名字,在Nginx的配置文件中加入如下文本块:

    if ($http_user_agent ~* "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpCli

ent|MJ12bot|heritrix|EasouSpider|Ezooms|Sogou spider|Sogou web spider|360Spider|YisouSpider" ) {

        return 403;

    }

请读者注意:小括号“()”里的字符串是一个整行,不要回车断行!保存修改,执行指令“nginx -t”进行语法检查,无误后重启“nginx”服务。以同样的方法,将集群中的其他Nginx做好处理。

通过上述两种方式进行处理后,发生性能故障的Web站点又恢复了正常。

9.2 负载均衡集群变更操作

集群容量扩充或缩减、现有集群中新增项目、变更策略、置换设施等,均在此范围。

对有前后端架构的负载均衡集群,变更操作时,先后端再前端,先从(BACKUP)后主(MASTER)。这样做的目的,是保证集群的服务不因变更操作而受影响。例如,在负载均衡集群中增加后端节点,正确有效的做法通常如下:

  1. 确认新增的后端,直接访问它承载的服务,状态正常。
  2. 将新增的后端加入到从负载均衡器(BACKUP)转发队列,客户端访问从负载均衡器(BACKUP)的地址及端口,可正确得到结果,并能跟踪确认用户的最终访问到达新增的节点(可通过负载均衡器日志与节点服务日志相互参照确认)。
  3. 用户访问量小的夜间,将从负载均衡器(BACKUP)的配置同步到主负载均衡器(MASTER),然后重启主负载均衡器系统或者服务。重启主负载均衡器(MASTER)期间,从负载均衡器(BACKUP)将主动接管主负载均衡的所有任务,不会导致服务不可用的风险。

后端真实服务器节点的撤离,可直接关闭其上的服务甚至是系统,负载均衡器的健康检查将自动将其从转发队列里踢出,不会对用户的访问造成影响,然后再在主从负载均衡器删掉相关条目,即可平稳将节点下线。

9.4 负载均衡集群升级

不论哪一种类型的高可用负载均衡集群,都可以分为系统升级和应用升级两个大项。在进行升级前,做好是否必须升级的评估。升级是否解决已经存在的缺陷?升级是否能大幅度提高整体性能?升级失败是否可以快速、有效回退?

在做好升级测试以后,正式进行升级,一定要按对可用性影响最小的方式进行,这个可参考软件工程“灰度发布”。

9.5 负载均衡集群备份与恢复

运行在Proxmox VE超融合集群上的高可用负载均衡集群,备份轻而易举,它将整个主机进行完整备份。如果不是这样的运行环境,则需要对数据进行选择性备份,并启动定时任务,进行关键数据的自动备份。

Proxmox VE超融合集群从备份进行恢复相当简单和容易,选中需要恢复的主机,单击按钮“还原”, 余下的事情交给时间,如图9-1所示。

图9- 5

传统方式的恢复,就要复杂和耗时一些。这些过程可能包括:安装系统、安装软件、初始化、复制数据、调试、上线

相关文章:

第9章 负载均衡集群日常维护

一个设计良好的高可用负载均衡集群&#xff0c;交付使用以后并不能一劳永逸。欲使其高效、稳定、持续对外服务&#xff0c;日常维护必不可少。 对于高可用负载均衡集群来说&#xff0c;有两种类型的维护形式&#xff1a;常规性维护与突发性维护。突发性维护一般指故障处理&…...

鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容

基本概念 LiteIPC是OpenHarmony LiteOS-A内核提供的一种新型IPC&#xff08;Inter-Process Communication&#xff0c;即进程间通信&#xff09;机制&#xff0c;为轻量级进程间通信组件&#xff0c;为面向服务的系统服务框架提供进程间通信能力&#xff0c;分为内核实现和用户…...

Charger之三动态电源路径管理(DPPM)

-----本文简介----- 主要内容包括&#xff1a; 领资料&#xff1a;点下方↓名片关注回复&#xff1a;粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理&#xff08;DPPM&#xff09; 前篇内容&#xff1a;①电池管理IC&#xff08;Charger&#xff09;了解一下&…...

大数据模型的选择与安装

大数据模型的选择和安装是一个复杂的过程&#xff0c;涉及多个因素&#xff0c;包括模型的通用能力、特定任务的性能、数据效率、评估完整性、成本以及部署的硬件和软件环境。以下是一些关于大数据模型选择与安装的考虑因素和步骤&#xff1a; 选择大数据模型的考虑因素&#…...

React 之 lazy(延迟加载)(十七)

lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。 在组件外部调用 lazy&#xff0c;以声明一个懒加载的 React 组件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPreview.js)); 配合 Suspense 实现懒加载组件 //App.js imp…...

Node.js -- 会话控制

文章目录 1. 会话介绍2. cookie 相关操作2.1 cookie 设置2.2 删除 cookie2.3 获取cookie 3. session 相关操作4. cookie 和session 的区别5. 补充知识 -- CSRF跨站请求伪造6. token 1. 会话介绍 所谓会话控制就是对会话进行控制 HTTP是一种无状态的协议&#xff0c;它没有办法…...

做抖店不能踩的几个坑,新手要照做,老玩家要听劝~

我是王路飞。 很多人都说抖店的运营很简单&#xff0c;选选品、对接一下达人&#xff0c;就可以坐等店铺出单了。 这话骗骗还没开店的小白也就得了&#xff0c;但凡做抖店超过一个月的&#xff0c;都不会相信这句话。 细心耐心是做抖店最基本的态度。 拿到一个好结果的前提…...

【Kibana】快速上手Kibana平台(KQL)

文章目录 快速使用Kibana平台常用查询语句KQL基本查询覆合查询模糊查询 目前市面上大部分的公司的日志系统都是使用ELK系统&#xff0c;因此我们进行工作必须得掌握Kibana平台的基本使用&#xff0c;这里主要说明怎么“快速使用Kibana平台”以及记录一些常用的“KQL语言”。 快…...

全方位入门git-慕课网 笔记

目录 【上传github忽略某些文件】【配置用户名和邮箱】【想要删除不需要的文件时如何进行操作】【想要给文件重命名如何操作】【想要移动文件到其他位置时如何操作】【文件有变化时&#xff0c;如何查看前后变化】【操作失误的情况下如何实现一键还原】【不再追踪时如何实现撤销…...

使用 Docker 部署 TaleBook 私人书籍管理系统

1&#xff09;项目介绍 GitHub&#xff1a;https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建&#xff0c;具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…...

分布式系统的一致性与共识算法(一)

前言 etcd是线性一致性读&#xff0c;而zk却是顺序一致性读&#xff0c;再加上各种共识、强弱一致的名词&#xff0c;看到欸度时候总会混淆&#xff0c;这里会给出一些例子来帮助理解。 什么是一致性&#xff1f; 在谈到一致性这个词时&#xff0c;你会想到CAP理论的consist…...

创建一个Spring Boot项目

文章目录 一、如何创建一个Spring Boot项目1.1 项目创建&#xff1a;专业版 or 社区版 or 网站创建1.2 数据配置1.3 项目启动1.4 代码编写 二、Spring Boot 项目文件介绍三、Web服务器四、根据HTTP状态码解决bug4.1 4044.2 500 五、Spring VS Spring Boot VS Spring Web MVC5.1…...

ansible -playbook运维工具、语法、数据结构、命令用法、触发器、角色

目录 配置文件 基本语法规则&#xff1a; YAML支持的数据结构 playbook核心元素 ansible-playbook用法&#xff1a; 触发器 特点&#xff1a; 角色&#xff1a; 习题&#xff1a; 配置文件 playbook配置文件使用yaml语法&#xff0c;YAML 是一门标记性语言,专门用来写配…...

web前端之sass中的颜色函数、active按钮激活、hover鼠标悬浮、disabled禁用、scss循环、css

MENU 效果图htmlsassscss编译后的css页面css 效果图 注意查看蓝色按钮。 html <div class"box"><button class"btn type_1">按钮</button><button class"btn type_2">按钮</button><button class"btn ty…...

交通地理信息系统实习教程(二)

这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置&#xff1a;【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置&#xff1a;【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…...

Shell脚本——批量清理Kubernetes集群中Evicted状态的pod

测试环境有一台宿主机出现了异常&#xff0c;大量的异常日志导致宿主机的磁盘使用率超过了85%&#xff0c;触发了上面的pod驱离策略&#xff0c;该宿主机上的的pod处于Evicted状态。在清理了磁盘之后&#xff0c;得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…...

(深度估计学习)Win11复现DepthFM

目录 1. 系统配置2. 拉取代码&#xff0c;配置环境3.开始深度预测4.运行结果 论文链接&#xff1a;https://depthfm.github.io/ 讲解链接&#xff1a;https://www.php.cn/faq/734404.html 1. 系统配置 本人系统&#xff1a;Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…...

cocos creator 帧率60 不生效meta50 能刷新到90

环境&#xff1a; cocos creator 2.4.3 华为meta 50 背景&#xff1a; 小游戏 需要在update 里取帧率 发现跟时间对不上 游戏设置60帧 手机上显示 90帧 cc.game.setFrameRate(30) 显示 30帧 cc.game.setFrameRate(60) 显示 90帧 结论&#xff1a; 对于老版本的cocos creator …...

探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction

&#xff08;1&#xff09;在 STL 库源码中这俩模板经常出现&#xff0c;用来给源码编译中的条件选择&#xff0c;模板的版本选择等提供依据。先给出其定义&#xff1a; 以及&#xff1a; 可以得出结论&#xff1a; conj 是为了查找逻辑布尔型模板参数中的第一个 false &#x…...

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做&#xff1a;SuperHotSwap&#xff08;超级热更新&#xff09; 开发初心&#xff1a;旨在做出一款最便捷的IDEA热更新插件&#xff0c;减少用户操作步骤&#xff0c;提供零配置的可视化操作更新。 为什么要写这个插件&#xff1a; 每次改一下Mappe…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...